[精讚] [會員登入]
719

利用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-compose 管理多個container 前篇使用docker run 一次建一個container

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

使用expect 讀取外部資料存成陣列 使用expect 讀取外部資料存成陣列

臺中市校務雲端系統與Windows AD帳號整合(1) active directory,ldaps,雲端校務系統

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

tc web 問與答 Q. 填報網址 A. https://tiny.cc/tc-web Q. 出現了以下畫面, 怎麼辦 A. 建議瀏覽器開無

隨機好文

java-身份証字號驗証 FormatCheck.java public class FormatCheck { private volatile

[vue.js] input event Form-Input-Components-using-Custom-Events

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

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

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