From e7532dfc617d0c920eb905a93b6ca0d3ca4033e9 Mon Sep 17 00:00:00 2001 From: Benjamin Pracht Date: Tue, 23 Dec 2025 19:44:14 -0800 Subject: [PATCH] Factory for egress observability (#1347) --------- Co-authored-by: Paul Wells --- observability/egressobs/gen_reporter.go | 58 +++++++++++++++ observability/egressobs/gen_reporter_noop.go | 76 ++++++++++++++++++++ observability/egressobs/gen_source.go | 45 ++++++++++++ observability/reporter.go | 7 +- 4 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 observability/egressobs/gen_reporter.go create mode 100644 observability/egressobs/gen_reporter_noop.go create mode 100644 observability/egressobs/gen_source.go diff --git a/observability/egressobs/gen_reporter.go b/observability/egressobs/gen_reporter.go new file mode 100644 index 00000000..7b7e13fd --- /dev/null +++ b/observability/egressobs/gen_reporter.go @@ -0,0 +1,58 @@ +// Code generated; DO NOT EDIT. + +package egressobs + +import ( + "time" +) + +const Version_CEG4FE8 = true + +type KeyResolver interface { + Resolve(string) + Reset() +} + +type Reporter interface { + WithProject(id string) ProjectReporter + WithDeferredProject() (ProjectReporter, KeyResolver) +} + +type ProjectTx interface{} + +type ProjectReporter interface { + RegisterFunc(func(ts time.Time, tx ProjectTx) bool) + Tx(func(tx ProjectTx)) + TxAt(time.Time, func(tx ProjectTx)) + WithEgress(id string) EgressReporter + WithDeferredEgress() (EgressReporter, KeyResolver) + ProjectTx +} + +type EgressTx interface { + ReportStartTime(v time.Time) + ReportEndTime(v time.Time) + ReportUpdateTime(v time.Time) + ReportDuration(v uint64) + ReportRequestType(v EgressRequestType) + ReportSourceType(v EgressSourceType) + ReportRegion(v string) + ReportRoomName(v string) + ReportRoomID(v string) + ReportStatus(v EgressStatus) + ReportDetails(v string) + ReportError(v string) + ReportErrorCode(v int32) + ReportManifestLocation(v string) + ReportBackupStorageUsed(v bool) + ReportResult(v string) + ReportRequest(v string) + ReportAudioOnly(v bool) +} + +type EgressReporter interface { + RegisterFunc(func(ts time.Time, tx EgressTx) bool) + Tx(func(tx EgressTx)) + TxAt(time.Time, func(tx EgressTx)) + EgressTx +} diff --git a/observability/egressobs/gen_reporter_noop.go b/observability/egressobs/gen_reporter_noop.go new file mode 100644 index 00000000..bdda1fcd --- /dev/null +++ b/observability/egressobs/gen_reporter_noop.go @@ -0,0 +1,76 @@ +// Code generated; DO NOT EDIT. + +package egressobs + +import ( + "time" +) + +var ( + _ Reporter = (*noopReporter)(nil) + _ ProjectReporter = (*noopProjectReporter)(nil) + _ EgressReporter = (*noopEgressReporter)(nil) +) + +type noopKeyResolver struct{} + +func (noopKeyResolver) Resolve(string) {} +func (noopKeyResolver) Reset() {} + +type noopReporter struct{} + +func NewNoopReporter() Reporter { + return &noopReporter{} +} + +func (r *noopReporter) WithProject(id string) ProjectReporter { + return &noopProjectReporter{} +} + +func (r *noopReporter) WithDeferredProject() (ProjectReporter, KeyResolver) { + return &noopProjectReporter{}, noopKeyResolver{} +} + +type noopProjectReporter struct{} + +func NewNoopProjectReporter() ProjectReporter { + return &noopProjectReporter{} +} + +func (r *noopProjectReporter) RegisterFunc(f func(ts time.Time, tx ProjectTx) bool) {} +func (r *noopProjectReporter) Tx(f func(ProjectTx)) {} +func (r *noopProjectReporter) TxAt(ts time.Time, f func(ProjectTx)) {} +func (r *noopProjectReporter) WithEgress(id string) EgressReporter { + return &noopEgressReporter{} +} +func (r *noopProjectReporter) WithDeferredEgress() (EgressReporter, KeyResolver) { + return &noopEgressReporter{}, noopKeyResolver{} +} + +type noopEgressReporter struct{} + +func NewNoopEgressReporter() EgressReporter { + return &noopEgressReporter{} +} + +func (r *noopEgressReporter) RegisterFunc(f func(ts time.Time, tx EgressTx) bool) {} +func (r *noopEgressReporter) Tx(f func(EgressTx)) {} +func (r *noopEgressReporter) TxAt(ts time.Time, f func(EgressTx)) {} +func (r *noopEgressReporter) ReportStartTime(v time.Time) {} +func (r *noopEgressReporter) ReportEndTime(v time.Time) {} +func (r *noopEgressReporter) ReportUpdateTime(v time.Time) {} +func (r *noopEgressReporter) ReportDuration(v uint64) {} +func (r *noopEgressReporter) ReportRequestType(v EgressRequestType) {} +func (r *noopEgressReporter) ReportSourceType(v EgressSourceType) {} +func (r *noopEgressReporter) ReportRegion(v string) {} +func (r *noopEgressReporter) ReportRoomName(v string) {} +func (r *noopEgressReporter) ReportRoomID(v string) {} +func (r *noopEgressReporter) ReportStatus(v EgressStatus) {} +func (r *noopEgressReporter) ReportDetails(v string) {} +func (r *noopEgressReporter) ReportError(v string) {} +func (r *noopEgressReporter) ReportErrorCode(v int32) {} +func (r *noopEgressReporter) ReportManifestLocation(v string) {} +func (r *noopEgressReporter) ReportBackupStorageUsed(v bool) {} +func (r *noopEgressReporter) ReportResult(v string) {} +func (r *noopEgressReporter) ReportRequest(v string) {} +func (r *noopEgressReporter) ReportAudioOnly(v bool) {} diff --git a/observability/egressobs/gen_source.go b/observability/egressobs/gen_source.go new file mode 100644 index 00000000..978cf535 --- /dev/null +++ b/observability/egressobs/gen_source.go @@ -0,0 +1,45 @@ +// Code generated; DO NOT EDIT. +package egressobs + +type EgressRequestType string + +const ( + EgressRequestTypeUndefined EgressRequestType = "" + EgressRequestTypeRoomComposite EgressRequestType = "room_composite" + EgressRequestTypeTrackComposite EgressRequestType = "track_composite" + EgressRequestTypeTrack EgressRequestType = "track" + EgressRequestTypeParticipant EgressRequestType = "participant" + EgressRequestTypeWeb EgressRequestType = "web" +) + +type EgressSourceType string + +const ( + EgressSourceTypeUndefined EgressSourceType = "" + EgressSourceTypeSdk EgressSourceType = "sdk" + EgressSourceTypeWeb EgressSourceType = "web" +) + +type EgressStatus string + +const ( + EgressStatusUndefined EgressStatus = "" + EgressStatusStarting EgressStatus = "starting" + EgressStatusActive EgressStatus = "active" + EgressStatusEnding EgressStatus = "ending" + EgressStatusComplete EgressStatus = "complete" + EgressStatusFailed EgressStatus = "failed" + EgressStatusAborted EgressStatus = "aborted" + EgressStatusLimitReached EgressStatus = "limit_reached" +) + +type Rollup string + +const ( + RollupUndefined Rollup = "" + RollupProject Rollup = "project" + RollupEgressIndex Rollup = "egress_index" + RollupEndTimeIndex Rollup = "end_time_index" + RollupStartTimeIndex Rollup = "start_time_index" + RollupRoomNameIndex Rollup = "room_name_index" +) diff --git a/observability/reporter.go b/observability/reporter.go index 267bff37..b29872a5 100644 --- a/observability/reporter.go +++ b/observability/reporter.go @@ -2,6 +2,7 @@ package observability import ( "github.com/livekit/protocol/observability/agentsobs" + "github.com/livekit/protocol/observability/egressobs" "github.com/livekit/protocol/observability/gatewayobs" "github.com/livekit/protocol/observability/roomobs" "github.com/livekit/protocol/observability/telephonyobs" @@ -15,7 +16,7 @@ type Reporter interface { Gateway() gatewayobs.Reporter Telephony() telephonyobs.Reporter Connector() any // any is a placeholder for the connector type - Egress() any + Egress() egressobs.Reporter Ingress() any Close() } @@ -46,8 +47,8 @@ func (reporter) Connector() any { return nil } -func (reporter) Egress() any { - return nil +func (reporter) Egress() egressobs.Reporter { + return egressobs.NewNoopReporter() } func (reporter) Ingress() any {