[精讚] [會員登入]
194

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

你可能感興趣的文章

雲端校務系統與OPENLDAP帳號整合(3) 二 建置更改密碼服務 下載校端更改密碼程式: 連結 檢查是否安裝java 8 #java -version 安裝open

如何檢查網站憑證是否過期 檢查網站憑證

對照mac address 批次更改電腦名稱 讀取mac address 對照表, 還原電腦後,自動更改密碼 'show logged on user Dim

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

[shell script] 批次判斷domain name 正解設定 判斷dns 正解設定

臺中市雲端校務系統與Windows AD帳號整合(3) LDAP的基本概念

我有話要說

>>

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

訪客留言

[無留言]

隨機好文

download a file from spring boot controllers ownload a file from spring boot controllers

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

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

[javascript] 將角色物件放到清單中,並依序讀出每個角色的X值 參考在scratch中建立三個角色並且給定值 http://n.sfs.tw/content/index/14716 一

spring boot 使用jdbc連接mariadb spring boot, mariadb, jdbc, rowmapper