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