diff --git a/.changeset/gold-fishes-smash.md b/.changeset/gold-fishes-smash.md new file mode 100644 index 000000000..bfcb43869 --- /dev/null +++ b/.changeset/gold-fishes-smash.md @@ -0,0 +1,5 @@ +--- +"@livekit/protocol": patch +--- + +add stack utility diff --git a/observability/reporter.go b/observability/reporter.go index ceabe88b2..0d216c6f5 100644 --- a/observability/reporter.go +++ b/observability/reporter.go @@ -1,6 +1,9 @@ package observability import ( + "github.com/go-logr/logr" + + "github.com/livekit/protocol/logger" "github.com/livekit/protocol/observability/agentsobs" "github.com/livekit/protocol/observability/egressobs" "github.com/livekit/protocol/observability/gatewayobs" @@ -13,15 +16,16 @@ import ( const Project = "livekit" +var discardLogger = logger.LogRLogger(logr.Discard()) + type Reporter interface { + Logger(projectID string) (logger.Logger, error) Room() roomobs.Reporter Agent() agentsobs.Reporter Gateway() gatewayobs.Reporter Telephony() telephonyobs.Reporter - Connector() any // any is a placeholder for the connector type Egress() egressobs.Reporter Ingress() ingressobs.Reporter - GatewayMetrics() any // any is a placeholder for the gateway metrics type TelephonyCall() telephonycallobs.Reporter Storage() storageobs.Reporter Close() @@ -33,6 +37,10 @@ func NewReporter() Reporter { type reporter struct{} +func (reporter) Logger(projectID string) (logger.Logger, error) { + return discardLogger, nil +} + func (reporter) Room() roomobs.Reporter { return roomobs.NewNoopReporter() } @@ -49,10 +57,6 @@ func (reporter) Telephony() telephonyobs.Reporter { return telephonyobs.NewNoopReporter() } -func (reporter) Connector() any { - return nil -} - func (reporter) Egress() egressobs.Reporter { return egressobs.NewNoopReporter() } @@ -61,15 +65,13 @@ func (reporter) Ingress() ingressobs.Reporter { return ingressobs.NewNoopReporter() } -func (reporter) GatewayMetrics() any { - return nil -} - func (reporter) TelephonyCall() telephonycallobs.Reporter { return telephonycallobs.NewNoopReporter() } -func (reporter) Storage() storageobs.Reporter { return storageobs.NewNoopReporter() } +func (reporter) Storage() storageobs.Reporter { + return storageobs.NewNoopReporter() +} func (reporter) Close() { } diff --git a/utils/closers.go b/utils/closers.go index b95f544ca..0c855fb0f 100644 --- a/utils/closers.go +++ b/utils/closers.go @@ -16,6 +16,7 @@ package utils import ( "io" + "slices" "go.uber.org/multierr" ) @@ -28,7 +29,7 @@ func CombineClosers(cs ...io.Closer) Closers { func (s *Closers) Close() error { var err error - for _, c := range *s { + for _, c := range slices.Backward(*s) { if c != nil { err = multierr.Append(err, c.Close()) } diff --git a/utils/stack/stack.go b/utils/stack/stack.go new file mode 100644 index 000000000..152342434 --- /dev/null +++ b/utils/stack/stack.go @@ -0,0 +1,25 @@ +package stack + +type Stack[T any] []T + +func (s Stack[T]) Empty() bool { + return len(s) == 0 +} + +func (s *Stack[T]) Reset() { + *s = (*s)[:0] +} + +func (s *Stack[T]) Push(v T) { + *s = append(*s, v) +} + +func (s *Stack[T]) Pop() T { + v := (*s)[len(*s)-1] + *s = (*s)[:len(*s)-1] + return v +} + +func (s Stack[T]) Peek() T { + return s[len(s)-1] +}