From 8e6fc46b2d9eb01cab902f8e7fbda716dd660264 Mon Sep 17 00:00:00 2001 From: Benjamin Pracht Date: Tue, 23 Dec 2025 16:54:42 -0800 Subject: [PATCH 1/3] Factory for egress observability --- observability/egressobs/gen_reporter.go | 58 +++++++++++++++ observability/egressobs/gen_reporter_noop.go | 76 ++++++++++++++++++++ observability/egressobs/gen_source.go | 45 ++++++++++++ observability/reporter.go | 3 +- 4 files changed, 181 insertions(+), 1 deletion(-) 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..e5cc1672 --- /dev/null +++ b/observability/egressobs/gen_reporter.go @@ -0,0 +1,58 @@ +// Code generated; DO NOT EDIT. + +package egressobs + +import ( + "time" +) + +const Version_Q2S50OG = 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..2f212773 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" @@ -47,7 +48,7 @@ func (reporter) Connector() any { } func (reporter) Egress() any { - return nil + return egressobs.NewNoopReporter() } func (reporter) Ingress() any { From 199586cd78f64027c46290e2897602d7ee3c6d99 Mon Sep 17 00:00:00 2001 From: Benjamin Pracht Date: Tue, 23 Dec 2025 17:58:19 -0800 Subject: [PATCH 2/3] Reporter interface --- observability/reporter.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/observability/reporter.go b/observability/reporter.go index 2f212773..b29872a5 100644 --- a/observability/reporter.go +++ b/observability/reporter.go @@ -16,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() } @@ -47,7 +47,7 @@ func (reporter) Connector() any { return nil } -func (reporter) Egress() any { +func (reporter) Egress() egressobs.Reporter { return egressobs.NewNoopReporter() } From a2a3808d1de8ca0dbf9ab4f144ebb7ad4cae3c6c Mon Sep 17 00:00:00 2001 From: Paul Wells Date: Tue, 23 Dec 2025 19:40:10 -0800 Subject: [PATCH 3/3] update codegen --- observability/egressobs/gen_reporter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/observability/egressobs/gen_reporter.go b/observability/egressobs/gen_reporter.go index e5cc1672..7b7e13fd 100644 --- a/observability/egressobs/gen_reporter.go +++ b/observability/egressobs/gen_reporter.go @@ -6,7 +6,7 @@ import ( "time" ) -const Version_Q2S50OG = true +const Version_CEG4FE8 = true type KeyResolver interface { Resolve(string)