- product:video - language:python # Listing Room Usage per User ## What are we going to do? This code snippet shows how you can use the [List Room Sessions](/rest/signalwire-rest/endpoints/video/list-room-sessions) endpoint of [SignalWires Video API](/rest/signalwire-rest/endpoints/video/video-api) to pull all of the activity sessions within each room, and then use the [List a Room Sessions Members](/rest/signalwire-rest/endpoints/video/list-room-session-members-by-session) endpoint to get user data. Full code example: List Video Room Usage per User
python import pandas as pd import matplotlib.pyplot as plt import requests from requests.auth import HTTPBasicAuth from dateutil import parser # TODO: Update these variables with your own SpaceURL = YOURSPACENAME.signalwire.com projectID = XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX authToken = PTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX host = fhttps://{SpaceURL} # TODO: Pick start and end date to filter with startDate = 2022/04/04 endDate = 2022/04/07 # Function to make requests to a given url endpoint def getData(url): payload = {} headers = {} response = requests.request( GET, url, headers = headers, data = payload, auth = HTTPBasicAuth( projectID, authToken)).json() allData = response[data] while next in response[links].keys(): response = requests.get( host + response[links][next], auth = HTTPBasicAuth(projectID, authToken) ).json() allData.extend(response[data]) return allData # Get all Room Sessions roomSessions = getData(fhttps://{SpaceURL}/api/video/room_sessions?page_size=1000) # Set up empty array to store session data roomSessionMemberData = [] # Create variables to keep track of ongoing sessions ongoingSessions = 0 ongoingSessionsDuration = 0 # Statistics formatting options pd.set_option(display.colheader_justify, center) pd.set_option(display.max_rows, 1000) # Convert chosen start and end dates to datetime format startDateFilter = parser.parse(startDate + T00:00:00Z) endDateFilter = parser.parse(endDate + T23:59:59Z) # Loop through sessions for session in roomSessions: # If the session is ongoing if session[end_time] == None: ongoingSessions += 1 ongoingSessionsDuration += session[duration] continue else: sessionStart = parser.parse(session[start_time]) sessionEnd = parser.parse(session[end_time]) if (startDateFilter <= sessionStart and sessionStart <= endDateFilter) or (startDateFilter <= sessionEnd and sessionEnd <= endDateFilter): roomSessionMembers = getData(fhttps://{SpaceURL}/api/video/room_sessions/{session[id]}/members?page_size=1000) for member in roomSessionMembers: roomSessionMemberData.append(( session[name], member[name], member[duration], session[cost_in_dollars])) membersDataFrame = pd.DataFrame( roomSessionMemberData, columns = ( Room, User Name, Duration (sec), Cost in Dollars) ).groupby( [Room, User Name] ).sum( ).sort_values( [Room, Duration (sec), User Name], ascending = False) print(membersDataFrame.to_string()) print(\n) print(fAdditionally, there are {ongoingSessions} ongoing sessions, with a total duration of {round((ongoingSessionsDuration)/60, 2)} minutes.) pd.pivot_table( membersDataFrame.reset_index(), index = User Name, columns = Room, values = Duration (sec) ).plot( kind = bar, rot = 45) plt.tight_layout() plt.show() Full code
python import pandas as pd import matplotlib.pyplot as plt import requests from requests.auth import HTTPBasicAuth from dateutil import parser # TODO: Update these variables with your own SpaceURL = YOURSPACENAME.signalwire.com projectID = XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX authToken = PTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX host = fhttps://{SpaceURL} # TODO: Pick start and end date to filter with startDate = 2022/04/04 endDate = 2022/04/07 # Function to make requests to a given url endpoint def getData(url): payload = {} headers = {} response = requests.request( GET, url, headers = headers, data = payload, auth = HTTPBasicAuth( projectID, authToken)).json() allData = response[data] while next in response[links].keys(): response = requests.get( host + response[links][next], auth = HTTPBasicAuth(projectID, authToken) ).json() allData.extend(response[data]) return allData # Get all Room Sessions roomSessions = getData(fhttps://{SpaceURL}/api/video/room_sessions?page_size=1000) # Set up empty array to store session data roomSessionMemberData = [] # Create variables to keep track of ongoing sessions ongoingSessions = 0 ongoingSessionsDuration = 0 # Statistics formatting options pd.set_option(display.colheader_justify, center) pd.set_option(display.max_rows, 1000) # Convert chosen start and end dates to datetime format startDateFilter = parser.parse(startDate + T00:00:00Z) endDateFilter = parser.parse(endDate + T23:59:59Z) # Loop through sessions for session in roomSessions: # If the session is ongoing if session[end_time] == None: ongoingSessions += 1 ongoingSessionsDuration += session[duration] continue else: sessionStart = parser.parse(session[start_time]) sessionEnd = parser.parse(session[end_time]) if (startDateFilter <= sessionStart and sessionStart <= endDateFilter) or (startDateFilter <= sessionEnd and sessionEnd <= endDateFilter): roomSessionMembers = getData(fhttps://{SpaceURL}/api/video/room_sessions/{session[id]}/members?page_size=1000) for member in roomSessionMembers: roomSessionMemberData.append(( session[name], member[name], member[duration], session[cost_in_dollars])) membersDataFrame = pd.DataFrame( roomSessionMemberData, columns = ( Room, User Name, Duration (sec), Cost in Dollars) ).groupby( [Room, User Name] ).sum( ).sort_values( [Room, Duration (sec), User Name], ascending = False) print(membersDataFrame.to_string()) print(\n) print(fAdditionally, there are {ongoingSessions} ongoing sessions, with a total duration of {round((ongoingSessionsDuration)/60, 2)} minutes.) pd.pivot_table( membersDataFrame.reset_index(), index = User Name, columns = Room, values = Duration (sec) ).plot( kind = bar, rot = 45) plt.tight_layout() plt.show()