[精讚] [會員登入]
594

利用expect script 查詢ap數量,再送到google sheet及line群組通知

利用expect script 查詢ap數量

分享此文連結 //n.sfs.tw/16008

分享連結 利用expect script 查詢ap數量,再送到google sheet及line群組通知@igogo
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-12-23 13:11:34 最後編修
2022-12-09 13:57:32 By igogo
 

 

本段程式的流程:

1. 登入不同的CONTROLLER 取得三項資訊, AP數量, LICENSE USEAGE, 及EDUROAM數量,並將資料個別存成ip.item.log.txt

2.利用一段python程式,解析每一項資料再送到google sheet

3.google sheet 綁apps script, 等待送來的資料寫到google sheet及傳到line 群組中

 

1. 利用expect script 登入aruba ap controller 下指令查詢

AP數量,

#!/usr/bin/expect
match_max 100000

set machine [lindex $argv 0];
set path  [lindex $argv 1];

spawn ssh "USER@$machine"
        expect "*password:"
        send "PASSWORD\r"
        expect "*#"
        send "show ap database long | include Total\r"
        set timeout 30
        expect -re "Total APs:(.*)"
        set log "TotalAPs, $expect_out(1,string)"

set fid [open $path/logs/$machine.totalaps.log.txt w]
puts $fid $log
        send "exit\r"
expect eof

 

LICENSE USAGE

#!/usr/bin/expect
match_max 100000

set machine [lindex $argv 0];
set path [lindex $argv 1];

spawn ssh "USER@$machine"
        expect "*password:"
        send "PASSWORD\r"
        expect "*#"
        send "show license-usage client user\r"
        set timeout 1
        expect -re "User License Usage.*License Usage\\s+(\\d{1,6})"
        set usage "Usage, $expect_out(1,string)"

set fid [open $path/logs/$machine.usage.log.txt w]
puts $fid $usage
        send "exit\r"
expect eof

 

EDUROAM

#!/usr/bin/expect
match_max 100000

set machine [lindex $argv 0];
set path [lindex $argv 1];

spawn ssh "USER@$machine"
        expect "*password:"
        send "PASSWORD\r"
        expect "*#"
        send "show user-table essid eduroam unique | include \"User Entries\"\r"
        set timeout 15
        expect -re "User Entries:\\s+(\\d+)/"
        set usage "eduroam, $expect_out(1,string)"

set fid [open $path/logs/$machine.eduroam.log.txt w]
puts $fid $usage
        send "exit\r"
expect eof

 

 

getDataAndSend.py

#!/usr/bin/python3

import requests
import json
import os.path
import time
import sys


class Item:

    def __init__(self, ip, totalaps, usage, eduroam):
        self.ip = ip
        self.totalaps = totalaps
        self.usage = usage
        self.eduroam = eduroam


machines = []
items = []


def getTarget(target): 
    filename = "/root/apscript/logs/" + machine + "." + target + ".log.txt"

    if (os.path.isfile(filename)):
        file = open(filename)
        rows = file.readlines()
        return (rows[0].split(",")[1].strip())
    else:
        return 0

machine = sys.argv[1]
machines.append(machine)



for machine in machines:
    totalaps = getTarget("totalaps")
    usage = getTarget("usage")
    eduroam = getTarget("eduroam")
    item = Item(machine, totalaps, usage, eduroam)
    items.append(item)

url = 'google apps script 部署的網址'

for item in items:
    params = {
        "ip": item.ip,
        "totalaps": item.totalaps,
        "usage": item.usage,
        "eduroam": item.eduroam
    }
    response = requests.get(url, params=params)
    print(response.text)
    time.sleep(2)

 

main.sh

#!/bin/bash

path="/root/apscript";

machines=("IP");
machines+=("IP");


/bin/rm  $path/logs/*.txt

for machine in "${machines[@]}"
do
        "$path/scripts/totalaps-expect.sh" $machine $path
        "$path/scripts/usage-expect.sh" $machine $path
        "$path/scripts/eduroam-expect.sh" $machine $path
         $path/getDataAndSend.py $machine
         sleep 1

done


 

 

google apps script

function doGet(e) {

  Logger.log("get method is called");
  Logger.log(JSON.stringify(e));

  machine = e.parameter;
  update(machine);
  send(machine);
  return ContentService.createTextOutput(JSON.stringify(machine));

}

let spreadSheet = SpreadsheetApp.openByUrl("google sheet url");

date = Utilities.formatDate(new Date(), "GMT+8", "yyyy/MM/dd EEEE")

function update(machine) {

  let sheetName = "排程" + machine.ip.split(".")[3];
  let sheet = spreadSheet.getSheetByName(sheetName);
  let lastRow = sheet.getLastRow() + 1;


  sheet.getRange(lastRow, 1, 1, 1).setValue(date);
  sheet.getRange(lastRow, 2, 1, 1).setValue(machine.totalaps);
  sheet.getRange(lastRow, 3, 1, 1).setValue(machine.usage);
  sheet.getRange(lastRow, 4, 1, 1).setValue(machine.eduroam);

}

function send(machine) {
  let token = "TOKEN";

  let message = "\n機器資訊\n";
  message = message +
    "IP: " + machine.ip + "\n" +
    "AP數量:" + machine.totalaps + "\n" +
    "裝置數: " + machine.usage + "\n" +
    "eduroam人數: " + machine.eduroam + "\n";

  var option = {
    method: 'post',
    headers: { Authorization: 'Bearer ' + token },
    payload: {
      message: message
    }
  };
  UrlFetchApp.fetch('https://notify-api.line.me/api/notify', option);
}

 

END

你可能感興趣的文章

proxmox lxc 救援 今天突然接到一名強者我朋友的臨時求援 他說他把pve 從5.1升到5.2後, kvm的虛擬机器都沒問題 , 但是lxc的

臺中市雲端校務系統與Windows AD帳號整合(2) 安裝Active Directory網域服務

臺中市雲端校務系統與Windows AD帳號整合(9) 3-2 Linux上隨系統開機啟動服務 以Centos 7 發行版為例 請注意, 此時提供服務的主机為Linux, 所以

臺中市雲端校務系統與Windows AD帳號整合(8) 三 開機啟動服務 3-1 Windows Server上隨系統開機啟動服務 寫一個bat檔 cd C:UsersAdmi

shell scirpt 批次建立samba使用者 建立一csv檔, 兩個欄位如下 5101,532 5102,592 5103,321 第一欄為帳號使用班級加座號, 第二

雲端校務系統與OPENLDAP帳號整合(1) 本文件目標是為做單一帳號整合, 使用校端更改密碼服務, 將雲端校務系統的帳密同步至校內LDAP server, 並讓SA

隨機好文

vue.js modal 作兩個選項按鈕並導向不同頁面 vue.js modal 作兩個選項按鈕

python 的RE python re

hoc2018灑水機器人 灑水機器人的工作是替行道樹灑水,機器人的灑水範圍有限(左前方、左方、左後方),請寫程式控制機器 人判斷須灑水的狀況。每顆

ArrayList 想移除特定值 想移出water, 使用lambda 的方式如下 List<String> fruits = new Arr

臺中市雲端校務系統與Windows AD帳號整合(8) 三 開機啟動服務 3-1 Windows Server上隨系統開機啟動服務 寫一個bat檔 cd C:UsersAdmi