Add WebRTC stats
This commit is contained in:
		
					parent
					
						
							
								fb5727ddbb
							
						
					
				
			
			
				commit
				
					
						dd3b4cc6be
					
				
			
		
					 2 changed files with 43 additions and 2 deletions
				
			
		| 
						 | 
					@ -106,7 +106,44 @@ export function GroupCallInspector({ client, groupCall, show }) {
 | 
				
			||||||
    client.on("hangup", onCallHangup);
 | 
					    client.on("hangup", onCallHangup);
 | 
				
			||||||
    client.on("toDeviceEvent", onToDeviceEvent);
 | 
					    client.on("toDeviceEvent", onToDeviceEvent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let timeout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async function updateCallStats() {
 | 
				
			||||||
 | 
					      const callIds = groupCall.calls.map((call) => call.callId);
 | 
				
			||||||
 | 
					      const stats = await Promise.all(
 | 
				
			||||||
 | 
					        groupCall.calls.map((call) =>
 | 
				
			||||||
 | 
					          call.peerConn
 | 
				
			||||||
 | 
					            ? call.peerConn
 | 
				
			||||||
 | 
					                .getStats(null)
 | 
				
			||||||
 | 
					                .then((stats) =>
 | 
				
			||||||
 | 
					                  Object.fromEntries(
 | 
				
			||||||
 | 
					                    Array.from(stats).map(([_id, report], i) => [
 | 
				
			||||||
 | 
					                      report.type + i,
 | 
				
			||||||
 | 
					                      report,
 | 
				
			||||||
 | 
					                    ])
 | 
				
			||||||
 | 
					                  )
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            : Promise.resolve(null)
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const callStats = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      for (let i = 0; i < groupCall.calls.length; i++) {
 | 
				
			||||||
 | 
					        callStats[callIds[i]] = stats[i];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      updateState({ callStats });
 | 
				
			||||||
 | 
					      timeout = setTimeout(updateCallStats, 1000);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    updateCallStats();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    onUpdateRoomState();
 | 
					    onUpdateRoomState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return () => {
 | 
				
			||||||
 | 
					      clearTimeout(timeout);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
  }, [client, groupCall]);
 | 
					  }, [client, groupCall]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const toDeviceEventsByCall = useMemo(() => {
 | 
					  const toDeviceEventsByCall = useMemo(() => {
 | 
				
			||||||
| 
						 | 
					@ -122,12 +159,12 @@ export function GroupCallInspector({ client, groupCall, show }) {
 | 
				
			||||||
  }, [toDeviceEvents]);
 | 
					  }, [toDeviceEvents]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <Resizable enable={{ top: true }}>
 | 
					    <Resizable enable={{ top: true }} defaultSize={{ height: 200 }}>
 | 
				
			||||||
      {show && (
 | 
					      {show && (
 | 
				
			||||||
        <ReactJson
 | 
					        <ReactJson
 | 
				
			||||||
          theme="monokai"
 | 
					          theme="monokai"
 | 
				
			||||||
          src={{
 | 
					          src={{
 | 
				
			||||||
            state,
 | 
					            ...state,
 | 
				
			||||||
            roomStateEvents,
 | 
					            roomStateEvents,
 | 
				
			||||||
            toDeviceEvents,
 | 
					            toDeviceEvents,
 | 
				
			||||||
            toDeviceEventsByCall,
 | 
					            toDeviceEventsByCall,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,6 +69,10 @@ export function Room({ client }) {
 | 
				
			||||||
  const roomId = maybeRoomId || hash;
 | 
					  const roomId = maybeRoomId || hash;
 | 
				
			||||||
  const { loading, error, groupCall } = useLoadGroupCall(client, roomId);
 | 
					  const { loading, error, groupCall } = useLoadGroupCall(client, roomId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  useEffect(() => {
 | 
				
			||||||
 | 
					    window.groupCall = groupCall;
 | 
				
			||||||
 | 
					  }, [groupCall]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (loading) {
 | 
					  if (loading) {
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
      <div className={styles.room}>
 | 
					      <div className={styles.room}>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue