本段程式的流程:
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);
}