#!/usr/bin/python3 # This plugin is based on: # checkbbb.py # Frank Schiebel frank@linuxmuster.net # GPL v3 # # Adapted by the folks at Hochschule Hannover :-) import os import sys import socket import re import hashlib import requests from collections import defaultdict from xml.dom.minidom import parse, parseString def getStatus(): stream = os.popen('/usr/bin/docker exec scalelite-api ./bin/rake status') stream = stream.read() allservers = [] for line in stream.splitlines(): fields = re.split(r'\s',line) fields = list(filter(None, fields)) numfields = len(fields) if numfields == 8: hrfields = {} fields[0] = re.split(r'\.',fields[0])[0] hrfields["hostname"] = fields[0] hrfields["state"] = fields[1] hrfields["status"] = fields[2] hrfields["meetings"] = fields[3] hrfields["users"] = fields[4] hrfields["largestmeeting"] = fields[5] hrfields["videos"] = fields[6] hrfields["load"] = fields[7] allservers.append(hrfields) return allservers def generateCheckLine(bbb): global totalMeetings global totalAttendees global totalVideousers global totalLoad global avgVideoPerMeeting checkstate = 0 statusline = "" if bbb["state"] == "enabled" and bbb["status"] == "online": statusline = str(checkstate) + " " + "BBB_" + bbb["hostname"] + " " statusline += "numMeetings=" + bbb["meetings"] + "|" statusline += "numAttendees=" + bbb["users"] + "|" statusline += "numWithVideo=" + bbb["videos"] + "|" statusline += "numLoad=" + bbb["load"] + " " statusline += "[" + bbb["hostname"] + " M:" + bbb["meetings"] + " " statusline += "Att:" + bbb["users"] + " " statusline += "Vid:" + bbb["videos"] + " " statusline += "Load:" + bbb["load"] + "]" if bbb["state"] == "cordoned" and bbb["status"] == "online": statusline = str(checkstate) + " " + "BBB_" + bbb["hostname"] + " " statusline += "numMeetings=" + bbb["meetings"] + "|" statusline += "numAttendees=" + bbb["users"] + "|" statusline += "numWithVideo=" + bbb["videos"] + "|" statusline += "numLoad=" + bbb["load"] + " " statusline += "****CORDONED IN SCALELITE**** [" + bbb["hostname"] + " M:" + bbb["meetings"] + " " statusline += "Att:" + bbb["users"] + " " statusline += "Vid:" + bbb["videos"] + " " statusline += "Load:" + bbb["load"] + "]" if bbb["state"] == "disabled" and bbb["status"] == "online": checkstate = 1 statusline = str(checkstate) + " " + "BBB_" + bbb["hostname"] + " " statusline += "numMeetings=" + bbb["meetings"] + "|" statusline += "numAttendees=" + bbb["users"] + "|" statusline += "numWithVideo=" + bbb["videos"] + "|" statusline += "numLoad=" + bbb["load"] + " " statusline += "****DISABLED IN SCALELITE**** [" + bbb["hostname"] + " M:" + bbb["meetings"] + " " statusline += "Att:" + bbb["users"] + " " statusline += "Vid:" + bbb["videos"] + " " statusline += "Load:" + bbb["load"] + "]" if bbb["state"] == "enabled" and bbb["status"] == "offline": checkstate = 2 statusline = str(checkstate) + " " + "BBB_" + bbb["hostname"] + " " statusline += "numMeetings=0|" statusline += "numAttendees=0|" statusline += "numWithVideo=0|" statusline += "numLoad=0 " statusline += "****ENABLED BUT OFFLINE****" if bbb["state"] == "cordoned" and bbb["status"] == "offline": checkstate = 2 statusline = str(checkstate) + " " + "BBB_" + bbb["hostname"] + " " statusline += "numMeetings=0|" statusline += "numAttendees=0|" statusline += "numWithVideo=0|" statusline += "numLoad=0 " statusline += "****CORDONED IN SCALELITE AND OFFLINE****" if bbb["state"] == "disabled" and bbb["status"] == "offline": checkstate = 1 statusline = str(checkstate) + " " + "BBB_" + bbb["hostname"] + " " statusline += "numMeetings=0|" statusline += "numAttendees=0|" statusline += "numWithVideo=0|" statusline += "numLoad=0 " statusline += "****DISABLED IN SCALELITE AND OFFLINE****" totalMeetings += int(bbb["meetings"]) totalAttendees += int(bbb["users"]) totalVideousers += int(bbb["videos"]) totalLoad += float(bbb["load"]) return statusline # Global metrics totalMeetings = 0 totalAttendees = 0 totalVideousers = 0 totalLoad = 0.0 allservers = getStatus() for bbb in allservers: print(generateCheckLine(bbb)) statusline = "0 BBBSCL_" + socket.gethostname() + " " statusline += "numMeetings=" + str(totalMeetings) + "|" statusline += "numAttendees=" + str(totalAttendees) + "|" statusline += "numWithVideo=" + str(totalVideousers) + "|" statusline += "numTotalLoad=" + str(totalLoad) + " " statusline += "[scalelite totals " statusline += "M:" + str(totalMeetings) + " " statusline += "Att:" + str(totalAttendees) + " " statusline += "Vid:" + str(totalVideousers) + " " statusline += "Load:" + str(totalLoad) + "]" print(statusline) overalltext = "0 BBB_Overall_Attendees count="+str(totalAttendees) + ";200;500 " overalltext += str(totalAttendees) print(overalltext)