Skip to content

Commit f98d6b9

Browse files
committed
Publish signalingDropped event
1 parent 6f00fd4 commit f98d6b9

23 files changed

+263
-35
lines changed

AmazonChimeSDK/AmazonChimeSDK.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@
290290
D8B836622E39A10F00179ABF /* IngestionEventConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8B836612E39A10D00179ABF /* IngestionEventConverterTests.swift */; };
291291
D8D8D9102B91579C00ECE0EE /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D8D90F2B91579C00ECE0EE /* StringExtension.swift */; };
292292
D8D8D9122B915B0D00ECE0EE /* StringExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8D8D9112B915B0D00ECE0EE /* StringExtensionTests.swift */; };
293+
D8F829842E552C71009E9186 /* SignalingDroppedError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F829832E552C6B009E9186 /* SignalingDroppedError.swift */; };
294+
D8F829862E553EBD009E9186 /* SignalingDroppedErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F829852E553EB3009E9186 /* SignalingDroppedErrorTests.swift */; };
293295
D8FE1FE629B9232400A62E72 /* AnyCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8FE1FE529B9232400A62E72 /* AnyCodable.swift */; };
294296
ED300F2A284877AC00497568 /* LocalVideoConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED300F29284877AC00497568 /* LocalVideoConfiguration.swift */; };
295297
F81104AC276190AA003D17AD /* VideoPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81104A8276190A9003D17AD /* VideoPriority.swift */; };
@@ -602,6 +604,8 @@
602604
D8B836612E39A10D00179ABF /* IngestionEventConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IngestionEventConverterTests.swift; sourceTree = "<group>"; };
603605
D8D8D90F2B91579C00ECE0EE /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
604606
D8D8D9112B915B0D00ECE0EE /* StringExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtensionTests.swift; sourceTree = "<group>"; };
607+
D8F829832E552C6B009E9186 /* SignalingDroppedError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalingDroppedError.swift; sourceTree = "<group>"; };
608+
D8F829852E553EB3009E9186 /* SignalingDroppedErrorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalingDroppedErrorTests.swift; sourceTree = "<group>"; };
605609
D8FE1FE529B9232400A62E72 /* AnyCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyCodable.swift; sourceTree = "<group>"; };
606610
ED300F29284877AC00497568 /* LocalVideoConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVideoConfiguration.swift; sourceTree = "<group>"; };
607611
F81104A8276190A9003D17AD /* VideoPriority.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPriority.swift; sourceTree = "<group>"; };
@@ -774,6 +778,7 @@
774778
00825F4923D90A2D00388D08 /* utils */ = {
775779
isa = PBXGroup;
776780
children = (
781+
D8F829832E552C6B009E9186 /* SignalingDroppedError.swift */,
777782
D81D7BB62E45237600932348 /* PermissionError.swift */,
778783
CFA2A14F28074FE7008FDFF5 /* ResourceError.swift */,
779784
00825F4A23D90A5F00388D08 /* logger */,
@@ -1238,6 +1243,7 @@
12381243
5AE132CB23EB47B100BF5997 /* utils */ = {
12391244
isa = PBXGroup;
12401245
children = (
1246+
D8F829852E553EB3009E9186 /* SignalingDroppedErrorTests.swift */,
12411247
5AE1323023EA2FBC00BF5997 /* logger */,
12421248
5A6F8187246379D80031AE97 /* MediaErrorTests.swift */,
12431249
5AE76F31242044A6009C41FD /* PermissionErrorTests.swift */,
@@ -1673,6 +1679,7 @@
16731679
6AA9F94A2522439F00EB0644 /* VideoFramePixelBuffer.swift in Sources */,
16741680
C4C540662538C08D00427A84 /* VideoCaptureFormat.swift in Sources */,
16751681
C42A8A18253E35F1008419A6 /* CaptureSourceObserver.swift in Sources */,
1682+
D8F829842E552C71009E9186 /* SignalingDroppedError.swift in Sources */,
16761683
5A16B9A623FCD96000ADAE26 /* DefaultAudioClientObserver.swift in Sources */,
16771684
C42A8A1A253E3618008419A6 /* CaptureSourceError.swift in Sources */,
16781685
6AE9B5AF258ACBAE00DF7FF7 /* ReplayKitSource.swift in Sources */,
@@ -1916,6 +1923,7 @@
19161923
5AE76F2024203A6E009C41FD /* VolumeUpdateTests.swift in Sources */,
19171924
AACCC5162B9C34C3007A9639 /* AudioDeviceCapabilitiesTests.swift in Sources */,
19181925
D863BE3729BAF68B00D9DE9E /* EventAttributeUtilsTests.swift in Sources */,
1926+
D8F829862E553EBD009E9186 /* SignalingDroppedErrorTests.swift in Sources */,
19191927
00E19905259E575C00AD4DAA /* DefautCameraCaptureSourceTests.swift in Sources */,
19201928
00E19905259E575C00AD4DAA /* DefautCameraCaptureSourceTests.swift in Sources */,
19211929
C28478D8C67EA749830566CC /* AmazonChimeSDKTests-AmazonChimeSDKMocks.generated.swift in Sources */,

AmazonChimeSDK/AmazonChimeSDK/analytics/DefaultEventAnalyticsController.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ import Foundation
5050
.meetingEnded,
5151
.meetingStartFailed,
5252
.meetingStartSucceeded,
53-
.meetingReconnected:
53+
.meetingReconnected,
54+
.signalingDropped:
5455
var meetingStats = meetingStatsCollector.getMeetingStats()
5556
if name != .meetingReconnected {
5657
meetingStats.removeValue(forKey: EventAttributeName.meetingReconnectDurationMs)

AmazonChimeSDK/AmazonChimeSDK/analytics/EventAttributeName.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ import Foundation
6262
case videoInputError
6363
/// The error message that explains why the microphone failed.
6464
case audioInputError
65+
/// The error message that explains why the signaling dropped.
66+
case signalingDroppedError
6567

6668
public var description: String {
6769
switch self {
@@ -113,6 +115,8 @@ import Foundation
113115
return "audioInputError"
114116
case .videoInputError:
115117
return "videoInputError"
118+
case .signalingDroppedError:
119+
return "signalingDroppedError"
116120
}
117121
}
118122
}

AmazonChimeSDK/AmazonChimeSDK/analytics/EventName.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import Foundation
2626
case meetingFailed
2727
/// The meeting ended.
2828
case meetingEnded
29+
/// The WebSocket failed or closed with an error.
30+
case signalingDropped
2931
// unknown
3032
case unknown
3133

@@ -47,6 +49,8 @@ import Foundation
4749
return "meetingFailed"
4850
case .meetingEnded:
4951
return "meetingEnded"
52+
case .signalingDropped:
53+
return "signalingDropped"
5054
case .unknown:
5155
return "unknown"
5256
}
@@ -70,6 +74,8 @@ import Foundation
7074
return .meetingFailed
7175
case "meetingEnded":
7276
return .meetingEnded
77+
case "signalingDropped":
78+
return .signalingDropped
7379
default:
7480
return .unknown
7581
}

AmazonChimeSDK/AmazonChimeSDK/analytics/MeetingHistoryEventName.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import Foundation
3131
case meetingFailed
3232
/// The meeting reconnected.
3333
case meetingReconnected
34+
/// The WebSocket failed or closed with an error.
35+
case signalingDropped
3436
/// unknown
3537
case unknown
3638

@@ -56,6 +58,8 @@ import Foundation
5658
return "meetingFailed"
5759
case .meetingReconnected:
5860
return "meetingReconnected"
61+
case .signalingDropped:
62+
return "signalingDropped"
5963
case .unknown:
6064
return "unknown"
6165
}

AmazonChimeSDK/AmazonChimeSDK/ingestion/IngestionEventConverter.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ private typealias EAName = EventAttributeName
3636
if let audioError = eventAttributes[EventAttributeName.audioInputError] as? Error {
3737
audioErrorStr = String(describing: audioError)
3838
}
39+
40+
var signalingDroppedErrorStr: String?
41+
if let signalingDroppedError = eventAttributes[EventAttributeName.signalingDroppedError] as? Error {
42+
signalingDroppedErrorStr = String(describing: signalingDroppedError)
43+
}
3944

4045
var attributes = [String:AnyCodable]()
4146
attributes[EAName.timestampMs.description] = AnyCodable(eventAttributes[EAName.timestampMs])
@@ -53,6 +58,7 @@ private typealias EAName = EventAttributeName
5358
attributes[EAName.retryCount.description] = AnyCodable(eventAttributes[EAName.retryCount])
5459
attributes[EAName.videoInputError.description] = AnyCodable(videoErrorStr)
5560
attributes[EAName.audioInputError.description] = AnyCodable(audioErrorStr)
61+
attributes[EAName.signalingDroppedError.description] = AnyCodable(signalingDroppedErrorStr)
5662

5763
clientConfig.metadataAttributes.forEach({ (key: String, value: Any) in
5864
attributes[key] = AnyCodable(value)
@@ -162,6 +168,7 @@ private typealias EAName = EventAttributeName
162168
retryCount: meetingEvent.getRetryCount(),
163169
videoInputErrorMessage: meetingEvent.getVideoInputErrorMessage(),
164170
audioInputErrorMessage: meetingEvent.getAudioInputErrorMessage(),
171+
signalingDroppedErrorMessage: meetingEvent.getSignalingDroppedErrorMessage(),
165172
ttl: dirtyMeetingEventTtl)
166173
}
167174

AmazonChimeSDK/AmazonChimeSDK/ingestion/IngestionPayload.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import Foundation
2222
public let retryCount: Int?
2323
public let videoInputErrorMessage: String?
2424
public let audioInputErrorMessage: String?
25+
public let signalingDroppedErrorMessage: String?
2526
public let ttl: Int64?
2627

2728
public init(name: String,
@@ -37,6 +38,7 @@ import Foundation
3738
retryCount: Int? = nil,
3839
videoInputErrorMessage: String? = nil,
3940
audioInputErrorMessage: String? = nil,
41+
signalingDroppedErrorMessage: String? = nil,
4042
ttl: Int64? = nil) {
4143
self.name = name
4244
self.ts = ts
@@ -51,6 +53,7 @@ import Foundation
5153
self.retryCount = retryCount
5254
self.videoInputErrorMessage = videoInputErrorMessage
5355
self.audioInputErrorMessage = audioInputErrorMessage
56+
self.signalingDroppedErrorMessage = signalingDroppedErrorMessage
5457
self.ttl = ttl
5558
}
5659
}

AmazonChimeSDK/AmazonChimeSDK/internal/ingestion/database/IngestionMeetingEvent.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,9 @@ extension IngestionMeetingEvent {
7878
let item = eventAttributes[EventAttributeName.audioInputError.description]
7979
return item??.value as? String
8080
}
81+
82+
func getSignalingDroppedErrorMessage() -> String? {
83+
let item = eventAttributes[EventAttributeName.signalingDroppedError.description]
84+
return item??.value as? String
85+
}
8186
}

AmazonChimeSDK/AmazonChimeSDK/internal/utils/Converters.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import Foundation
3838
return .meetingFailed
3939
case .meetingEnded:
4040
return .meetingEnded
41+
case .signalingDropped:
42+
return .signalingDropped
4143
case .unknown:
4244
return .unknown
4345
}

AmazonChimeSDK/AmazonChimeSDK/internal/video/DefaultVideoClientController.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ extension DefaultVideoClientController: VideoClientDelegate {
178178
}
179179

180180
public func videoClientDidFail(_ client: VideoClient?, status: video_client_status_t, controlStatus: Int32) {
181-
logger.info(msg: "videoClientDidFail")
181+
logger.error(msg: "videoClientDidFail")
182182
ObserverUtils.forEach(observers: videoObservers) { (observer: AudioVideoObserver) in
183183
observer.videoSessionDidStopWithStatus(sessionStatus:
184184
MeetingSessionStatus(statusCode: .videoServiceUnavailable))
@@ -196,6 +196,16 @@ extension DefaultVideoClientController: VideoClientDelegate {
196196
.didDemoteFromPrimaryMeeting(status: MeetingSessionStatus.init(statusCode: MeetingSessionStatusCode.audioInternalServerError))
197197
self.primaryMeetingPromotionObserver = nil
198198
}
199+
200+
public func videoClientDidReceive(_ event: video_client_event) {
201+
logger.info(msg: "videoClientDidReceive event: \(event.event_type)")
202+
if (event.event_type == VIDEO_CLIENT_EVENT_TYPE_SIGNALING_DROPPED) {
203+
logger.error(msg: "event: \(event.event_type) error: \(event.signaling_dropped_error)")
204+
eventAnalyticsController.publishEvent(name: .signalingDropped, attributes: [
205+
EventAttributeName.signalingDroppedError: SignalingDroppedError(from: event.signaling_dropped_error)
206+
])
207+
}
208+
}
199209

200210
public func videoClient(_ client: VideoClient?, cameraSendIsAvailable available: Bool) {
201211
logger.info(msg: "videoClientCameraSendIsAvailable \(available)")

0 commit comments

Comments
 (0)