---slug: /guides/how-to-find-which-users-spend-the-most-time-on-each-roomsidebar_position: 13x-custom: ported_from_readme: true needs_review: true---# Listing Room Usage per User## What are we going to do?This code snippet shows how you can use the [List Room Sessions](pathname:///rest/list-room-sessions) endpoint of [SignalWires Video API](pathname:///rest/) to pull all of the activity sessions within each room, and then use the [List a Room Sessions Members](pathname:///rest/list-a-room-sessions-members) endpoint to get user data.Full code example: List Video Room Usage per User
pythonimport pandas as pdimport matplotlib.pyplot as pltimport requestsfrom requests.auth import HTTPBasicAuthfrom dateutil import parser# TODO: Update these variables with your ownSpaceURL = YOURSPACENAME.signalwire.comprojectID = XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXauthToken = PTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXhost = fhttps://{SpaceURL}# TODO: Pick start and end date to filter with startDate = 2022/04/04endDate = 2022/04/07# Function to make requests to a given url endpointdef 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 SessionsroomSessions = getData(fhttps://{SpaceURL}/api/video/room_sessions?page_size=1000)# Set up empty array to store session dataroomSessionMemberData = []# Create variables to keep track of ongoing sessionsongoingSessions = 0ongoingSessionsDuration = 0# Statistics formatting optionspd.set_option(display.colheader_justify, center)pd.set_option(display.max_rows, 1000)# Convert chosen start and end dates to datetime formatstartDateFilter = parser.parse(startDate + T00:00:00Z)endDateFilter = parser.parse(endDate + T23:59:59Z)# Loop through sessionsfor 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
pythonimport pandas as pdimport matplotlib.pyplot as pltimport requestsfrom requests.auth import HTTPBasicAuthfrom dateutil import parser# TODO: Update these variables with your ownSpaceURL = YOURSPACENAME.signalwire.comprojectID = XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXauthToken = PTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXhost = fhttps://{SpaceURL}# TODO: Pick start and end date to filter with startDate = 2022/04/04endDate = 2022/04/07# Function to make requests to a given url endpointdef 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 SessionsroomSessions = getData(fhttps://{SpaceURL}/api/video/room_sessions?page_size=1000)# Set up empty array to store session dataroomSessionMemberData = []# Create variables to keep track of ongoing sessionsongoingSessions = 0ongoingSessionsDuration = 0# Statistics formatting optionspd.set_option(display.colheader_justify, center)pd.set_option(display.max_rows, 1000)# Convert chosen start and end dates to datetime formatstartDateFilter = parser.parse(startDate + T00:00:00Z)endDateFilter = parser.parse(endDate + T23:59:59Z)# Loop through sessionsfor 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()