[精讚] [會員登入]
316

利用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

你可能感興趣的文章

在docker裡跑spring boot+mongo(一) 系統安裝docker ce centos7 + docker ce https://docs.docker.com/in

利用openssl 一行文產生私鑰及憑證請求檔 openssl 一行產生私鑰及憑證請求檔

centos 7 移机出現 dracut-initqueue timeout centos 7 移机出現 dracut-initqueue timeout 處理

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

如何在docker 的nginx 做另一個container的反向代理 環境 docker 中一container 跑 nginx 對外服務80 port, http://server 另一c

網站無障礙規範 https://accessibility.ncc.gov.tw/News/Detail/3238?Category=4

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

ubuntu ufw ufw 簡易筆記 原則禁止,例外開放 ufw default deny 啟動ufw sudo ufw enable 關掉

使用poi 解析 docx 原先是想解析出在docx 中的文字跟圖片, 但是, 有些我們認為是圖片, 其實是用方程式表示, 實在是太麻煩了 就記錄一

利用google apps script 將Google sheet 中兩個工作表中的資料對應 如何整理google測驗收回來的學生資料

管理Google共用雲端硬碟 管理Google共用雲端硬碟

批次檢查tls憑證是否過期 tls憑證一年一簽, 台中市有三百多所學校, 寫成一檔案 skaps.tc.edu.tw www.skaps.tc.ed