bbb-status/src/langfingaz/plotMeetings.py
2020-12-03 17:23:00 +01:00

69 lines
2.3 KiB
Python

from pathlib import Path
from typing import List
import matplotlib.pyplot as pyplot
from langfingaz import loadData
from langfingaz import parseMeetings
from langfingaz.parseMeetings import BbbStatus, Meeting
from langfingaz.util import fileUtil
def getDefaultPlotFolder() -> Path:
return fileUtil.getProjectBaseDir().joinpath("plot")
def plotMeetings(dataDir: Path = fileUtil.getProjectBaseDir().joinpath("data")):
bbbStati: List[BbbStatus] = []
for file in dataDir.iterdir():
if file.name.endswith(".xml"):
dataStr, t = loadData.loadData(file)
meetings: List[Meeting] = parseMeetings.parseMeetingsData(dataStr)
bbbStati.append(parseMeetings.BbbStatus(meetings, t))
# sort by date (x-axis)
bbbStati = sorted(bbbStati, key=BbbStatus.getKey)
image: Path = doPlotMeetings(bbbStati)
print("saved image at " + str(image))
def doPlotMeetings(bbbStati: List[BbbStatus]) -> Path:
time = [] # x-axis: time
participants = [] # yAxis (1)
videos = [] # yAxis (2)
voices = [] # yAxis (3)
for bbbStatus in bbbStati:
time.append(bbbStatus.pointOfTime)
participants.append(bbbStatus.participantCount)
videos.append(bbbStatus.videoCount)
voices.append(bbbStatus.voiceParticipantCount)
# Note that even in the OO-style, we use `.pyplot.figure` to create the figure.
_a, _b = pyplot.subplots() # Create a figure and an axes.
fig: pyplot.Figure = _a
ax = _b # of type plt.axes.Axes ??
if not (issubclass(type(fig), pyplot.Figure)):
raise ValueError("expected Figure")
ax.plot(time, participants, label='participants') # Plot some data on the axes.
ax.plot(time, videos, label='video') # Plot more data on the axes...
ax.plot(time, voices, label='voice') # ... and some more.
ax.set_xlabel('time') # Add an x-label to the axes.
ax.set_ylabel('numbers') # Add a y-label to the axes.
ax.set_title("BigBlueButton Statistics") # Add a title to the axes.
ax.legend() # Add a legend.
image: Path = getDefaultPlotFolder().joinpath(
"{}_until_{}".format(fileUtil.asString(time[0]), fileUtil.asString(time[-1]))
)
fig.savefig(image)
# plt.show()
return image
if __name__ == '__main__':
plotMeetings()