Add more events:
* VoIP events received * Call errors * Group call errors * Undecryptable to-device events
This commit is contained in:
parent
21458c8840
commit
c2b78d59c6
2 changed files with 76 additions and 1 deletions
|
@ -23,12 +23,14 @@ import {
|
||||||
} from "matrix-js-sdk";
|
} from "matrix-js-sdk";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import {
|
import {
|
||||||
|
CallError,
|
||||||
CallState,
|
CallState,
|
||||||
MatrixCall,
|
MatrixCall,
|
||||||
VoipEvent,
|
VoipEvent,
|
||||||
} from "matrix-js-sdk/src/webrtc/call";
|
} from "matrix-js-sdk/src/webrtc/call";
|
||||||
import {
|
import {
|
||||||
CallsByUserAndDevice,
|
CallsByUserAndDevice,
|
||||||
|
GroupCallError,
|
||||||
GroupCallEvent,
|
GroupCallEvent,
|
||||||
} from "matrix-js-sdk/src/webrtc/groupCall";
|
} from "matrix-js-sdk/src/webrtc/groupCall";
|
||||||
|
|
||||||
|
@ -216,6 +218,37 @@ export class OTelGroupCallMembership {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public onReceivedVoipEvent(event: MatrixEvent) {
|
||||||
|
// These come straight from CallEventHandler so don't have
|
||||||
|
// a call already associated (in principle we could receive
|
||||||
|
// events for calls we don't know about).
|
||||||
|
const callId = event.getContent().call_id;
|
||||||
|
if (!callId) {
|
||||||
|
this.callMembershipSpan?.addEvent("matrix.receive_voip_event_no_callid", {
|
||||||
|
"sender.userId": event.getSender(),
|
||||||
|
});
|
||||||
|
logger.error("Received call event with no call ID!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const call = this.callsByCallId.get(callId);
|
||||||
|
if (!call) {
|
||||||
|
this.callMembershipSpan?.addEvent(
|
||||||
|
"matrix.receive_voip_event_unknown_callid",
|
||||||
|
{
|
||||||
|
"sender.userId": event.getSender(),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
logger.error("Received call event for unknown call ID " + callId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
call.span.addEvent("matrix.receive_voip_event", {
|
||||||
|
"sender.userId": event.getSender(),
|
||||||
|
...flattenVoipEvent(event.getContent()),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public onToggleMicrophoneMuted(newValue: boolean) {
|
public onToggleMicrophoneMuted(newValue: boolean) {
|
||||||
this.callMembershipSpan?.addEvent("matrix.toggleMicMuted", {
|
this.callMembershipSpan?.addEvent("matrix.toggleMicMuted", {
|
||||||
"matrix.microphone.muted": newValue,
|
"matrix.microphone.muted": newValue,
|
||||||
|
@ -245,4 +278,24 @@ export class OTelGroupCallMembership {
|
||||||
"matrix.screensharing.enabled": newValue,
|
"matrix.screensharing.enabled": newValue,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public onCallError(error: CallError, call: MatrixCall) {
|
||||||
|
const callTrackingInfo = this.callsByCallId.get(call.callId);
|
||||||
|
if (!callTrackingInfo) {
|
||||||
|
logger.error(`Got error for unknown call ID ${call.callId}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
callTrackingInfo.span.recordException(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
public onGroupCallError(error: GroupCallError) {
|
||||||
|
this.callMembershipSpan?.recordException(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
public onUndecryptableToDevice(event: MatrixEvent) {
|
||||||
|
this.callMembershipSpan?.addEvent("matrix.toDevice.undecryptable", {
|
||||||
|
"sender.userId": event.getSender(),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,12 +28,17 @@ import ReactJson, { CollapsedFieldProps } from "react-json-view";
|
||||||
import mermaid from "mermaid";
|
import mermaid from "mermaid";
|
||||||
import { Item } from "@react-stately/collections";
|
import { Item } from "@react-stately/collections";
|
||||||
import { MatrixEvent, IContent } from "matrix-js-sdk/src/models/event";
|
import { MatrixEvent, IContent } from "matrix-js-sdk/src/models/event";
|
||||||
import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall";
|
import {
|
||||||
|
GroupCall,
|
||||||
|
GroupCallError,
|
||||||
|
GroupCallEvent,
|
||||||
|
} from "matrix-js-sdk/src/webrtc/groupCall";
|
||||||
import { ClientEvent, MatrixClient } from "matrix-js-sdk/src/client";
|
import { ClientEvent, MatrixClient } from "matrix-js-sdk/src/client";
|
||||||
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
|
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
|
||||||
import {
|
import {
|
||||||
CallEvent,
|
CallEvent,
|
||||||
CallState,
|
CallState,
|
||||||
|
CallError,
|
||||||
MatrixCall,
|
MatrixCall,
|
||||||
VoipEvent,
|
VoipEvent,
|
||||||
} from "matrix-js-sdk/src/webrtc/call";
|
} from "matrix-js-sdk/src/webrtc/call";
|
||||||
|
@ -393,6 +398,8 @@ function useGroupCallState(
|
||||||
|
|
||||||
function onReceivedVoipEvent(event: MatrixEvent) {
|
function onReceivedVoipEvent(event: MatrixEvent) {
|
||||||
dispatch({ type: ClientEvent.ReceivedVoipEvent, event });
|
dispatch({ type: ClientEvent.ReceivedVoipEvent, event });
|
||||||
|
|
||||||
|
otelGroupCallMembership?.onReceivedVoipEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSendVoipEvent(event: VoipEvent, call: MatrixCall) {
|
function onSendVoipEvent(event: VoipEvent, call: MatrixCall) {
|
||||||
|
@ -409,18 +416,31 @@ function useGroupCallState(
|
||||||
otelGroupCallMembership?.onCallStateChange(call, newState);
|
otelGroupCallMembership?.onCallStateChange(call, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onCallError(error: CallError, call: MatrixCall) {
|
||||||
|
otelGroupCallMembership.onCallError(error, call);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onGroupCallError(error: GroupCallError) {
|
||||||
|
otelGroupCallMembership.onGroupCallError(error);
|
||||||
|
}
|
||||||
|
|
||||||
function onUndecryptableToDevice(event: MatrixEvent) {
|
function onUndecryptableToDevice(event: MatrixEvent) {
|
||||||
dispatch({ type: ClientEvent.ReceivedVoipEvent, event });
|
dispatch({ type: ClientEvent.ReceivedVoipEvent, event });
|
||||||
|
|
||||||
Sentry.captureMessage("Undecryptable to-device Event");
|
Sentry.captureMessage("Undecryptable to-device Event");
|
||||||
|
// probably unnecessary if it's now captured via otel?
|
||||||
PosthogAnalytics.instance.eventUndecryptableToDevice.track(
|
PosthogAnalytics.instance.eventUndecryptableToDevice.track(
|
||||||
groupCall.groupCallId
|
groupCall.groupCallId
|
||||||
);
|
);
|
||||||
|
|
||||||
|
otelGroupCallMembership.onUndecryptableToDevice(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
client.on(RoomStateEvent.Events, onUpdateRoomState);
|
client.on(RoomStateEvent.Events, onUpdateRoomState);
|
||||||
groupCall.on(CallEvent.SendVoipEvent, onSendVoipEvent);
|
groupCall.on(CallEvent.SendVoipEvent, onSendVoipEvent);
|
||||||
groupCall.on(CallEvent.State, onCallStateChange);
|
groupCall.on(CallEvent.State, onCallStateChange);
|
||||||
|
groupCall.on(CallEvent.Error, onCallError);
|
||||||
|
groupCall.on(GroupCallEvent.Error, onGroupCallError);
|
||||||
//client.on("state", onCallsChanged);
|
//client.on("state", onCallsChanged);
|
||||||
//client.on("hangup", onCallHangup);
|
//client.on("hangup", onCallHangup);
|
||||||
client.on(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent);
|
client.on(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent);
|
||||||
|
@ -432,6 +452,8 @@ function useGroupCallState(
|
||||||
client.removeListener(RoomStateEvent.Events, onUpdateRoomState);
|
client.removeListener(RoomStateEvent.Events, onUpdateRoomState);
|
||||||
groupCall.removeListener(CallEvent.SendVoipEvent, onSendVoipEvent);
|
groupCall.removeListener(CallEvent.SendVoipEvent, onSendVoipEvent);
|
||||||
groupCall.removeListener(CallEvent.State, onCallStateChange);
|
groupCall.removeListener(CallEvent.State, onCallStateChange);
|
||||||
|
groupCall.removeListener(CallEvent.Error, onCallError);
|
||||||
|
groupCall.removeListener(GroupCallEvent.Error, onGroupCallError);
|
||||||
//client.removeListener("state", onCallsChanged);
|
//client.removeListener("state", onCallsChanged);
|
||||||
//client.removeListener("hangup", onCallHangup);
|
//client.removeListener("hangup", onCallHangup);
|
||||||
client.removeListener(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent);
|
client.removeListener(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent);
|
||||||
|
|
Loading…
Add table
Reference in a new issue