Skip to content

Commit ab60840

Browse files
authored
Merge pull request #55 from GetStream/update-call-stats-client
[VID-000] Update video stats related endpoints and models
2 parents 18a2a78 + c0a45e7 commit ab60840

File tree

2 files changed

+221
-0
lines changed

2 files changed

+221
-0
lines changed

getstream/models/__init__.py

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,12 @@ class BodyguardSeverityRule(DataClassJsonMixin):
798798
severity: str = dc_field(metadata=dc_config(field_name="severity"))
799799

800800

801+
@dataclass
802+
class Bound(DataClassJsonMixin):
803+
inclusive: bool = dc_field(metadata=dc_config(field_name="inclusive"))
804+
value: float = dc_field(metadata=dc_config(field_name="value"))
805+
806+
801807
@dataclass
802808
class BroadcastSettings(DataClassJsonMixin):
803809
enabled: bool = dc_field(metadata=dc_config(field_name="enabled"))
@@ -829,6 +835,20 @@ class BroadcastSettingsResponse(DataClassJsonMixin):
829835
rtmp: "RTMPSettingsResponse" = dc_field(metadata=dc_config(field_name="rtmp"))
830836

831837

838+
@dataclass
839+
class CallDurationReport(DataClassJsonMixin):
840+
histogram: "List[ReportByHistogramBucket]" = dc_field(
841+
metadata=dc_config(field_name="histogram")
842+
)
843+
844+
845+
@dataclass
846+
class CallDurationReportResponse(DataClassJsonMixin):
847+
daily: "List[DailyAggregateCallDurationReportResponse]" = dc_field(
848+
metadata=dc_config(field_name="daily")
849+
)
850+
851+
832852
@dataclass
833853
class CallEvent(DataClassJsonMixin):
834854
description: str = dc_field(metadata=dc_config(field_name="description"))
@@ -854,6 +874,20 @@ class CallIngressResponse(DataClassJsonMixin):
854874
rtmp: "RTMPIngress" = dc_field(metadata=dc_config(field_name="rtmp"))
855875

856876

877+
@dataclass
878+
class CallParticipantCountReport(DataClassJsonMixin):
879+
histogram: "List[ReportByHistogramBucket]" = dc_field(
880+
metadata=dc_config(field_name="histogram")
881+
)
882+
883+
884+
@dataclass
885+
class CallParticipantCountReportResponse(DataClassJsonMixin):
886+
daily: "List[DailyAggregateCallParticipantCountReportResponse]" = dc_field(
887+
metadata=dc_config(field_name="daily")
888+
)
889+
890+
857891
@dataclass
858892
class CallParticipantResponse(DataClassJsonMixin):
859893
joined_at: datetime = dc_field(
@@ -1211,6 +1245,9 @@ class CallStatsReportSummaryResponse(DataClassJsonMixin):
12111245
mm_field=fields.DateTime(format="iso"),
12121246
),
12131247
)
1248+
min_user_rating: Optional[int] = dc_field(
1249+
default=None, metadata=dc_config(field_name="min_user_rating")
1250+
)
12141251
quality_score: Optional[int] = dc_field(
12151252
default=None, metadata=dc_config(field_name="quality_score")
12161253
)
@@ -1306,6 +1343,18 @@ class CallTypeResponse(DataClassJsonMixin):
13061343
)
13071344

13081345

1346+
@dataclass
1347+
class CallsPerDayReport(DataClassJsonMixin):
1348+
count: int = dc_field(metadata=dc_config(field_name="count"))
1349+
1350+
1351+
@dataclass
1352+
class CallsPerDayReportResponse(DataClassJsonMixin):
1353+
daily: "List[DailyAggregateCallsPerDayReportResponse]" = dc_field(
1354+
metadata=dc_config(field_name="daily")
1355+
)
1356+
1357+
13091358
@dataclass
13101359
class CampaignChannelTemplate(DataClassJsonMixin):
13111360
type: str = dc_field(metadata=dc_config(field_name="type"))
@@ -3045,6 +3094,44 @@ class CustomCheckResponse(DataClassJsonMixin):
30453094
)
30463095

30473096

3097+
@dataclass
3098+
class DailyAggregateCallDurationReportResponse(DataClassJsonMixin):
3099+
date: str = dc_field(metadata=dc_config(field_name="date"))
3100+
report: "CallDurationReport" = dc_field(metadata=dc_config(field_name="report"))
3101+
3102+
3103+
@dataclass
3104+
class DailyAggregateCallParticipantCountReportResponse(DataClassJsonMixin):
3105+
date: str = dc_field(metadata=dc_config(field_name="date"))
3106+
report: "CallParticipantCountReport" = dc_field(
3107+
metadata=dc_config(field_name="report")
3108+
)
3109+
3110+
3111+
@dataclass
3112+
class DailyAggregateCallsPerDayReportResponse(DataClassJsonMixin):
3113+
date: str = dc_field(metadata=dc_config(field_name="date"))
3114+
report: "CallsPerDayReport" = dc_field(metadata=dc_config(field_name="report"))
3115+
3116+
3117+
@dataclass
3118+
class DailyAggregateQualityScoreReportResponse(DataClassJsonMixin):
3119+
date: str = dc_field(metadata=dc_config(field_name="date"))
3120+
report: "QualityScoreReport" = dc_field(metadata=dc_config(field_name="report"))
3121+
3122+
3123+
@dataclass
3124+
class DailyAggregateSDKUsageReportResponse(DataClassJsonMixin):
3125+
date: str = dc_field(metadata=dc_config(field_name="date"))
3126+
report: "SDKUsageReport" = dc_field(metadata=dc_config(field_name="report"))
3127+
3128+
3129+
@dataclass
3130+
class DailyAggregateUserFeedbackReportResponse(DataClassJsonMixin):
3131+
date: str = dc_field(metadata=dc_config(field_name="date"))
3132+
report: "UserFeedbackReport" = dc_field(metadata=dc_config(field_name="report"))
3133+
3134+
30483135
@dataclass
30493136
class Data(DataClassJsonMixin):
30503137
id: str = dc_field(metadata=dc_config(field_name="id"))
@@ -4193,6 +4280,9 @@ class GetCallStatsResponse(DataClassJsonMixin):
41934280
metadata=dc_config(field_name="participant_report")
41944281
)
41954282
sfus: "List[SFULocationResponse]" = dc_field(metadata=dc_config(field_name="sfus"))
4283+
average_connection_time: Optional[float] = dc_field(
4284+
default=None, metadata=dc_config(field_name="average_connection_time")
4285+
)
41964286
aggregated: "Optional[AggregatedStats]" = dc_field(
41974287
default=None, metadata=dc_config(field_name="aggregated")
41984288
)
@@ -6014,6 +6104,22 @@ class MuteUsersResponse(DataClassJsonMixin):
60146104
duration: str = dc_field(metadata=dc_config(field_name="duration"))
60156105

60166106

6107+
@dataclass
6108+
class NetworkMetricsReportResponse(DataClassJsonMixin):
6109+
average_connection_time: Optional[float] = dc_field(
6110+
default=None, metadata=dc_config(field_name="average_connection_time")
6111+
)
6112+
average_jitter: Optional[float] = dc_field(
6113+
default=None, metadata=dc_config(field_name="average_jitter")
6114+
)
6115+
average_latency: Optional[float] = dc_field(
6116+
default=None, metadata=dc_config(field_name="average_latency")
6117+
)
6118+
average_time_to_reconnect: Optional[float] = dc_field(
6119+
default=None, metadata=dc_config(field_name="average_time_to_reconnect")
6120+
)
6121+
6122+
60176123
@dataclass
60186124
class NoiseCancellationSettings(DataClassJsonMixin):
60196125
mode: str = dc_field(metadata=dc_config(field_name="mode"))
@@ -6318,6 +6424,12 @@ class PendingMessageResponse(DataClassJsonMixin):
63186424
)
63196425

63206426

6427+
@dataclass
6428+
class PerSDKUsageReport(DataClassJsonMixin):
6429+
total: int = dc_field(metadata=dc_config(field_name="total"))
6430+
by_version: "Dict[str, int]" = dc_field(metadata=dc_config(field_name="by_version"))
6431+
6432+
63216433
@dataclass
63226434
class Permission(DataClassJsonMixin):
63236435
action: str = dc_field(metadata=dc_config(field_name="action"))
@@ -6938,6 +7050,57 @@ class PushProviderResponse(DataClassJsonMixin):
69387050
)
69397051

69407052

7053+
@dataclass
7054+
class QualityScoreReport(DataClassJsonMixin):
7055+
histogram: "List[ReportByHistogramBucket]" = dc_field(
7056+
metadata=dc_config(field_name="histogram")
7057+
)
7058+
7059+
7060+
@dataclass
7061+
class QualityScoreReportResponse(DataClassJsonMixin):
7062+
daily: "List[DailyAggregateQualityScoreReportResponse]" = dc_field(
7063+
metadata=dc_config(field_name="daily")
7064+
)
7065+
7066+
7067+
@dataclass
7068+
class QueryAggregateCallStatsRequest(DataClassJsonMixin):
7069+
_from: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="from"))
7070+
to: Optional[str] = dc_field(default=None, metadata=dc_config(field_name="to"))
7071+
report_types: Optional[List[str]] = dc_field(
7072+
default=None, metadata=dc_config(field_name="report_types")
7073+
)
7074+
7075+
7076+
@dataclass
7077+
class QueryAggregateCallStatsResponse(DataClassJsonMixin):
7078+
duration: str = dc_field(metadata=dc_config(field_name="duration"))
7079+
call_duration_report: "Optional[CallDurationReportResponse]" = dc_field(
7080+
default=None, metadata=dc_config(field_name="call_duration_report")
7081+
)
7082+
call_participant_count_report: "Optional[CallParticipantCountReportResponse]" = (
7083+
dc_field(
7084+
default=None, metadata=dc_config(field_name="call_participant_count_report")
7085+
)
7086+
)
7087+
calls_per_day_report: "Optional[CallsPerDayReportResponse]" = dc_field(
7088+
default=None, metadata=dc_config(field_name="calls_per_day_report")
7089+
)
7090+
network_metrics_report: "Optional[NetworkMetricsReportResponse]" = dc_field(
7091+
default=None, metadata=dc_config(field_name="network_metrics_report")
7092+
)
7093+
quality_score_report: "Optional[QualityScoreReportResponse]" = dc_field(
7094+
default=None, metadata=dc_config(field_name="quality_score_report")
7095+
)
7096+
sdk_usage_report: "Optional[SDKUsageReportResponse]" = dc_field(
7097+
default=None, metadata=dc_config(field_name="sdk_usage_report")
7098+
)
7099+
user_feedback_report: "Optional[UserFeedbackReportResponse]" = dc_field(
7100+
default=None, metadata=dc_config(field_name="user_feedback_report")
7101+
)
7102+
7103+
69417104
@dataclass
69427105
class QueryBannedUsersPayload(DataClassJsonMixin):
69437106
filter_conditions: Dict[str, object] = dc_field(
@@ -7848,6 +8011,20 @@ class RecordSettingsResponse(DataClassJsonMixin):
78488011
layout: "LayoutSettingsResponse" = dc_field(metadata=dc_config(field_name="layout"))
78498012

78508013

8014+
@dataclass
8015+
class ReportByHistogramBucket(DataClassJsonMixin):
8016+
category: str = dc_field(metadata=dc_config(field_name="category"))
8017+
count: int = dc_field(metadata=dc_config(field_name="count"))
8018+
mean: float = dc_field(metadata=dc_config(field_name="mean"))
8019+
sum: float = dc_field(metadata=dc_config(field_name="sum"))
8020+
lower_bound: "Optional[Bound]" = dc_field(
8021+
default=None, metadata=dc_config(field_name="lower_bound")
8022+
)
8023+
upper_bound: "Optional[Bound]" = dc_field(
8024+
default=None, metadata=dc_config(field_name="upper_bound")
8025+
)
8026+
8027+
78518028
@dataclass
78528029
class Response(DataClassJsonMixin):
78538030
duration: str = dc_field(metadata=dc_config(field_name="duration"))
@@ -8075,6 +8252,20 @@ class S3Request(DataClassJsonMixin):
80758252
)
80768253

80778254

8255+
@dataclass
8256+
class SDKUsageReport(DataClassJsonMixin):
8257+
per_sdk_usage: "Dict[str, Optional[PerSDKUsageReport]]" = dc_field(
8258+
metadata=dc_config(field_name="per_sdk_usage")
8259+
)
8260+
8261+
8262+
@dataclass
8263+
class SDKUsageReportResponse(DataClassJsonMixin):
8264+
daily: "List[DailyAggregateSDKUsageReportResponse]" = dc_field(
8265+
metadata=dc_config(field_name="daily")
8266+
)
8267+
8268+
80788269
@dataclass
80798270
class SFULocationResponse(DataClassJsonMixin):
80808271
datacenter: str = dc_field(metadata=dc_config(field_name="datacenter"))
@@ -10197,6 +10388,21 @@ class UserCustomEventRequest(DataClassJsonMixin):
1019710388
)
1019810389

1019910390

10391+
@dataclass
10392+
class UserFeedbackReport(DataClassJsonMixin):
10393+
unreported_count: int = dc_field(metadata=dc_config(field_name="unreported_count"))
10394+
count_by_rating: "Dict[str, int]" = dc_field(
10395+
metadata=dc_config(field_name="count_by_rating")
10396+
)
10397+
10398+
10399+
@dataclass
10400+
class UserFeedbackReportResponse(DataClassJsonMixin):
10401+
daily: "List[DailyAggregateUserFeedbackReportResponse]" = dc_field(
10402+
metadata=dc_config(field_name="daily")
10403+
)
10404+
10405+
1020010406
@dataclass
1020110407
class UserInfoResponse(DataClassJsonMixin):
1020210408
id: str = dc_field(metadata=dc_config(field_name="id"))
@@ -10423,6 +10629,9 @@ class UserSessionStats(DataClassJsonMixin):
1042310629
session_id: str = dc_field(metadata=dc_config(field_name="session_id"))
1042410630
total_pixels_in: int = dc_field(metadata=dc_config(field_name="total_pixels_in"))
1042510631
total_pixels_out: int = dc_field(metadata=dc_config(field_name="total_pixels_out"))
10632+
average_connection_time: Optional[float] = dc_field(
10633+
default=None, metadata=dc_config(field_name="average_connection_time")
10634+
)
1042610635
browser: Optional[str] = dc_field(
1042710636
default=None, metadata=dc_config(field_name="browser")
1042810637
)

getstream/video/rest_client.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,3 +739,15 @@ def update_call_type(
739739

740740
def get_edges(self) -> StreamResponse[GetEdgesResponse]:
741741
return self.get("/api/v2/video/edges", GetEdgesResponse)
742+
743+
def query_aggregate_call_stats(
744+
self,
745+
_from: Optional[str] = None,
746+
to: Optional[str] = None,
747+
report_types: Optional[List[str]] = None,
748+
) -> StreamResponse[QueryAggregateCallStatsResponse]:
749+
json = build_body_dict(_from=_from, to=to, report_types=report_types)
750+
751+
return self.post(
752+
"/api/v2/video/stats", QueryAggregateCallStatsResponse, json=json
753+
)

0 commit comments

Comments
 (0)