Данный notebook показывает пример использования адаптера Jitsi для разных целей пользователя
Начнем с простого. Выбираем дату и посмотрим сколько раз заходили в какую комнату
Record имеет поля:
user: связь с пользователем в нашей базе footprint_users (присутствует не всегда) - ReferenceField
email: содержит email с которого заходили в jitsi - str
room: содержит комнату в которой подключался пользователь - str
begin: дата и время подключения - datetime
end: дата и время отключения - datetime
date: дата записи - datetime
Для нашей нынешней задачи, нам нужна только дата
import mongoengine
from footprint_mongoengine import connect, disconnect
from footprint_mongoengine.models.jitsi import Record, StatsClasses, Stats
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
database.connect(
username=MONGO_USER,
password=MONGO_PASSWORD,
ip=MONGO_HOST,
port=MONGO_PORT,
db=MONGO_DB
)
data_begin = datetime.strptime("2023-4-4","%Y-%m-%d")
rec = Record.objects(date=data_begin)
rooms = {}
for i in rec:
if i.room not in rooms:
rooms[i.room] = 1
else:
rooms[i.room] += 1
rooms
{'project589': 5,
'203': 43,
'project246': 1,
'track_master': 8,
'webdevelopment': 17,
'321': 19,
'201': 41,
'101': 16,
'325': 18,
'security_of_networks': 23,
'909': 16,
'1111': 1,
'compilers_lab': 1,
'security_of_networks_lab': 8,
'bitrix': 6,
'223': 1,
'project798': 10,
'220': 3,
'521': 12,
'501': 1,
'compilers': 1,
'598': 1,
'589': 1,
'project797': 1,
'7': 2,
'311': 1,
'19112': 5,
'1416': 5}
Давайте посмотрим на граффик активности в данный день в комнате. Выберем комнату security_of_networks.
rec = Record.objects(date=data_begin, room="security_of_networks")
events = []
for r in rec:
events.append((r.begin, 1))
events.append((r.end, -1))
events.sort(key=lambda tup: tup[0])
members = 0
diag_x = []
diag_y = []
for el in events:
members += el[1]
diag_x.append(el[0])
diag_y.append(members)
plt.figure(figsize=(10,4))
plt.plot(diag_x, diag_y)
plt.xlabel('date')
plt.ylabel('Members')
plt.title('Security of networks activity')
plt.grid(True)
plt.show()

Давайте посмотрим на активность в самых заполненных комнатах. 203 и 201
rec = Record.objects(date=data_begin, room="201")
events = []
for r in rec:
events.append((r.begin, 1))
events.append((r.end, -1))
events.sort(key=lambda tup: tup[0])
members = 0
diag_x_201 = []
diag_y_201 = []
for el in events:
members += el[1]
diag_x_201.append(el[0])
diag_y_201.append(members)
rec = Record.objects(date=data_begin, room="203")
events = []
for r in rec:
events.append((r.begin, 1))
events.append((r.end, -1))
events.sort(key=lambda tup: tup[0])
members = 0
diag_x_203 = []
diag_y_203 = []
for el in events:
members += el[1]
diag_x_203.append(el[0])
diag_y_203.append(members)
plt.figure(figsize=(10,4))
plt.plot(diag_x_201, diag_y_201)
plt.plot(diag_x_203, diag_y_203)
plt.xlabel('date')
plt.ylabel('Members')
plt.title('201 and 203 activity')
plt.grid(True)
plt.show()

Можно смотреть активность за несколько дней или в промежутке. Вот пример для комнаты 228 с 4 апреля по 9 апреля
data_begin = datetime.strptime("2023-4-3","%Y-%m-%d")
data_end = datetime.strptime("2023-4-10","%Y-%m-%d")
rec = Record.objects(date__gt=data_begin, date__lt=data_end, room="228")
events = []
for r in rec:
events.append((r.begin, 1))
events.append((r.end, -1))
events.sort(key=lambda tup: tup[0])
members = 0
diag_x_228 = []
diag_y_228 = []
for el in events:
members += el[1]
diag_x_228.append(el[0])
diag_y_228.append(members)
plt.figure(figsize=(10,4))
plt.plot(diag_x_228, diag_y_228)
plt.xlabel('date')
plt.ylabel('Members')
plt.title('228 activity')
plt.grid(True)
plt.show()
