Hallo zusammen,
um die Serverlast besser einordnen zu können, habe ich ein Python-Skript geschrieben, das in einer Übersicht die aktuellen Räume, Anzahl der Videos, Anzahl der Audios pro Raum und gesamt anzeigt.
Vielleicht hilft es euch ja auch
Viele Grüße
Dominik
Python 2 (vorher muss evtl. noch requests mit pip install requests
installiert werden)
#!/usr/bin/env python
#coding:utf-8
# Mit bbb-conf --secret den Endpoint und das Secret anzeigen lassen
URL = "<URL aus bbb-conf --secret>"
SECRET = "<Secret aus bbb-conf --secret>"
import imp, hashlib
from xml.etree import ElementTree
try:
imp.find_module('requests')
import requests
except ImportError:
print "Package requests fehlt. Bitte mit pip install requests installieren."
exit()
meeting_api_url = "getMeetings"
def main():
request_url = URL + "api/" + meeting_api_url + "?checksum=" + get_checksum(meeting_api_url)
response = get_server_response(request_url)
tree = get_tree_from_response(response)
meetings = tree.find("meetings")
sum_audio = 0
sum_video = 0
sum_listening = 0
sum_participants = 0
output_table = [["ID", "Name", "Moderator", "Teilnehmer", "Nur zuhoeren", "Im VoiceChat", "Mit Video"]]
for index, meeting in enumerate(meetings):
table_row = generate_table_row(meeting)
table_row.insert(0, str(index+1))
sum_participants += int(table_row[3])
sum_listening += int(table_row[4])
sum_audio += int(table_row[5])
sum_video += int(table_row[6])
output_table.append(table_row)
output_table.append(["", "", "", "", "", "", ""])
output_table.append(["", "Gesamt", "", str(sum_participants), str(sum_listening), str(sum_audio), str(sum_video)])
max_width = calculate_max_width(output_table)
for row in output_table:
for index, data in enumerate(row):
print (data.ljust(max_width[index])),
print ("\n"),
def get_server_response(url):
try:
response = requests.get(url=url)
except requests.exceptions.ConnectionError:
print ("Rufe URL " + url + " auf.")
print ("Es trat ein Fehler bei der Verbindung auf. Ist die URL korrekt?")
except requests.exceptions.MissingSchema:
print ("Die URL ist nicht korrekt. Bitte auf Fehler prüfen.")
if response.status_code != 200:
print "Die URL gibt den Statuscode " + str(response.status_code) + " zurück."
exit()
return response.content
def get_checksum(api_url):
m = hashlib.sha1()
m.update(api_url + SECRET)
return m.hexdigest()
def get_tree_from_response(response):
tree = ElementTree.fromstring(response)
if tree.find("returncode").text != "SUCCESS":
print "API-Fehler:",
print tree.find("message").text
exit()
return tree
def generate_table_row(meeting):
meetingName = meeting.find("meetingName").text.encode('utf-8')
meetingAudio = int(meeting.find("voiceParticipantCount").text)
meetingVideo = int(meeting.find("videoCount").text)
meetingParticipants = int(meeting.find("participantCount").text)
meetingListening = int(meeting.find("listenerCount").text)
creator = "-"
attendees = meeting.find("attendees")
for attendee in attendees:
if attendee.find("role").text == "MODERATOR":
creator = attendee.find("fullName").text.encode('utf-8')
break
return [meetingName, creator, str(meetingParticipants), str(meetingListening), str(meetingAudio), str(meetingVideo)]
def calculate_max_width(table):
max_width = [0, 0, 0, 0, 0, 0, 0]
for row in table:
for index, data in enumerate(row):
max_width[index] = max(len(data), max_width[index])
return max_width
if __name__ == '__main__':
main()