Documentation ¶
Index ¶
- Constants
- Variables
- func EnableLockTracker()
- func GetMimeTypeForAudioCodec(codec livekit.AudioCodec) string
- func GetMimeTypeForVideoCodec(codec livekit.VideoCodec) string
- func HashedID(id string) string
- func LocalNodeID() (string, error)
- func MarshalGuid[T livekit.Guid](id T) livekit.GuidBlock
- func NewGuid(prefix string) string
- func NumMutexes() int
- func ParallelExec[T any](vals []T, parallelThreshold, step uint64, fn func(T))
- func RandomSecret() string
- func UnmarshalGuid[T livekit.Guid](b livekit.GuidBlock) T
- type CPUStats
- type ErrArray
- type EventEmitter
- type EventEmitterParams
- type EventObserver
- type FlowGraph
- type Graph
- func (g *Graph[K, N, E]) DeleteEdge(src, dst K)
- func (g *Graph[K, N, E]) Edge(src, dst K) (p E, ok bool)
- func (g *Graph[K, N, E]) InEdges(dst K) map[K]E
- func (g *Graph[K, N, E]) InsertEdge(src, dst K, props E)
- func (g *Graph[K, N, E]) InsertNode(props N)
- func (g *Graph[K, N, E]) Node(id K) N
- func (g *Graph[K, N, E]) OutEdges(src K) map[K]E
- func (g *Graph[K, N, E]) ShortestPath(src, dst K) ([]N, int64)
- func (g *Graph[K, N, E]) Size() int
- func (g *Graph[K, N, E]) TopologicalSort() []N
- type GraphEdge
- type GraphEdgeProps
- type GraphNode
- type GraphNodeProps
- type MessageBus
- type MinCostMaxFlow
- type Mutex
- type ProtoProxy
- type PubSub
- type RWMutex
- type RedisMessageBus
- func (r *RedisMessageBus) Lock(ctx context.Context, key string, expiration time.Duration) (bool, error)
- func (r *RedisMessageBus) Publish(ctx context.Context, channel string, msg proto.Message) error
- func (r *RedisMessageBus) Subscribe(ctx context.Context, channel string) (PubSub, error)
- func (r *RedisMessageBus) SubscribeQueue(ctx context.Context, channel string) (PubSub, error)
- type RedisPubSub
- type StuckLock
- type TimedVersion
- func (t *TimedVersion) After(other *TimedVersion) bool
- func (t *TimedVersion) Compare(other *TimedVersion) int
- func (t *TimedVersion) IsZero() bool
- func (t *TimedVersion) Load() TimedVersion
- func (t *TimedVersion) Store(other *TimedVersion)
- func (t *TimedVersion) String() string
- func (t *TimedVersion) Time() time.Time
- func (t *TimedVersion) ToProto() *livekit.TimedVersion
- func (t *TimedVersion) Update(other *TimedVersion) bool
- type TimedVersionGenerator
- type WorkerGroup
Constants ¶
const ( RoomPrefix = "RM_" NodePrefix = "ND_" ParticipantPrefix = "PA_" TrackPrefix = "TR_" APIKeyPrefix = "API" EgressPrefix = "EG_" IngressPrefix = "IN_" RPCPrefix = "RPC_" WHIPResourcePrefix = "WH_" )
Variables ¶
var ( PromMessageBusCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: "livekit", Subsystem: "messagebus", Name: "messages", }, []string{"type", "status"}, ) )
Functions ¶
func EnableLockTracker ¶
func EnableLockTracker()
EnableLockTracker enable lock tracking background worker. This should be called during init
func GetMimeTypeForAudioCodec ¶
func GetMimeTypeForAudioCodec(codec livekit.AudioCodec) string
func GetMimeTypeForVideoCodec ¶
func GetMimeTypeForVideoCodec(codec livekit.VideoCodec) string
func LocalNodeID ¶
func NumMutexes ¶
func NumMutexes() int
func ParallelExec ¶
ParallelExec will executes the given function with each element of vals, if len(vals) >= parallelThreshold, will execute them in parallel, with the given step size. So fn must be thread-safe.
func RandomSecret ¶
func RandomSecret() string
Types ¶
type CPUStats ¶
type CPUStats struct {
// contains filtered or unexported fields
}
func NewCPUStats ¶
func (*CPUStats) GetCPUIdle ¶
type EventEmitter ¶
type EventEmitter[K comparable, V any] struct { // contains filtered or unexported fields }
func NewDefaultEventEmitter ¶
func NewDefaultEventEmitter[K comparable, V any]() *EventEmitter[K, V]
func NewEventEmitter ¶
func NewEventEmitter[K comparable, V any](params EventEmitterParams) *EventEmitter[K, V]
func (*EventEmitter[K, V]) Emit ¶
func (e *EventEmitter[K, V]) Emit(k K, v V)
func (*EventEmitter[K, V]) Observe ¶
func (e *EventEmitter[K, V]) Observe(k K) EventObserver[V]
func (*EventEmitter[K, V]) ObservedKeys ¶
func (e *EventEmitter[K, V]) ObservedKeys() []K
type EventEmitterParams ¶
type EventObserver ¶
type EventObserver[V any] struct { // contains filtered or unexported fields }
func NewEventObserver ¶
func NewEventObserver[V any](stopFunc func()) (EventObserver[V], func(v V))
func (EventObserver[V]) Events ¶
func (o EventObserver[V]) Events() <-chan V
func (EventObserver[V]) Stop ¶
func (o EventObserver[V]) Stop()
type FlowGraph ¶
type FlowGraph struct {
// contains filtered or unexported fields
}
func NewFlowGraph ¶
type Graph ¶
type Graph[K comparable, N GraphNodeProps[K], E GraphEdgeProps] struct { // contains filtered or unexported fields }
func NewGraph ¶
func NewGraph[K comparable, N GraphNodeProps[K], E GraphEdgeProps]() *Graph[K, N, E]
func (*Graph[K, N, E]) DeleteEdge ¶
func (g *Graph[K, N, E]) DeleteEdge(src, dst K)
func (*Graph[K, N, E]) InsertEdge ¶
func (g *Graph[K, N, E]) InsertEdge(src, dst K, props E)
func (*Graph[K, N, E]) InsertNode ¶
func (g *Graph[K, N, E]) InsertNode(props N)
func (*Graph[K, N, E]) ShortestPath ¶
func (*Graph[K, N, E]) TopologicalSort ¶
func (g *Graph[K, N, E]) TopologicalSort() []N
type GraphEdgeProps ¶
type GraphEdgeProps interface {
Length() int64
}
type GraphNodeProps ¶
type GraphNodeProps[K comparable] interface { ID() K }
type MessageBus ¶
type MessageBus interface { Subscribe(ctx context.Context, channel string) (PubSub, error) // SubscribeQueue is like subscribe, but ensuring only a single instance gets to process the message SubscribeQueue(ctx context.Context, channel string) (PubSub, error) Publish(ctx context.Context, channel string, msg proto.Message) error }
func NewRedisMessageBus ¶
func NewRedisMessageBus(rc redis.UniversalClient) MessageBus
type MinCostMaxFlow ¶
type MinCostMaxFlow struct {
// contains filtered or unexported fields
}
func (*MinCostMaxFlow) ComputeMaxFlow ¶
func (f *MinCostMaxFlow) ComputeMaxFlow(g FlowGraph, s, t int64) (flow, cost int64)
func (*MinCostMaxFlow) Flow ¶
func (f *MinCostMaxFlow) Flow(s, t int64) int64
type ProtoProxy ¶
ProtoProxy is a caching proxy for protobuf messages that may be expensive to compute. It is used to avoid unnecessary re-generation of Protobufs
func NewProtoProxy ¶
func NewProtoProxy[T proto.Message](refreshInterval time.Duration, updateFn func() T) *ProtoProxy[T]
NewProtoProxy creates a new ProtoProxy that regenerates underlying values at a cadence of refreshInterval this should be used for updates that should be sent periodically, but does not have the urgency of immediate delivery updateFn should provide computations required to generate the protobuf if refreshInterval is 0, then proxy will only update on MarkDirty(true)
func (*ProtoProxy[T]) Get ¶
func (p *ProtoProxy[T]) Get() T
func (*ProtoProxy[T]) MarkDirty ¶
func (p *ProtoProxy[T]) MarkDirty(immediate bool)
func (*ProtoProxy[T]) Stop ¶
func (p *ProtoProxy[T]) Stop()
func (*ProtoProxy[T]) Updated ¶
func (p *ProtoProxy[T]) Updated() <-chan struct{}
type RedisMessageBus ¶
type RedisMessageBus struct {
// contains filtered or unexported fields
}
func (*RedisMessageBus) SubscribeQueue ¶
type RedisPubSub ¶
type RedisPubSub struct {
// contains filtered or unexported fields
}
func (*RedisPubSub) Channel ¶
func (r *RedisPubSub) Channel() <-chan interface{}
func (*RedisPubSub) Close ¶
func (r *RedisPubSub) Close() error
func (*RedisPubSub) Payload ¶
func (r *RedisPubSub) Payload(msg interface{}) []byte
type StuckLock ¶
type StuckLock struct {
// contains filtered or unexported fields
}
func ScanTrackedLocks ¶
ScanTrackedLocks check all lock trackers
func ScanTrackedLocksI ¶
ScanTrackedLocksI check lock trackers incrementally n at a time
func (*StuckLock) FirstLockedAtStack ¶
func (*StuckLock) NumGoroutineHeld ¶
func (*StuckLock) NumGoroutineWaiting ¶
type TimedVersion ¶
type TimedVersion struct {
// contains filtered or unexported fields
}
func NewTimedVersionFromProto ¶
func NewTimedVersionFromProto(proto *livekit.TimedVersion) *TimedVersion
func NewTimedVersionFromTime ¶
func NewTimedVersionFromTime(t time.Time) *TimedVersion
func TimedVersionFromProto ¶
func TimedVersionFromProto(proto *livekit.TimedVersion) TimedVersion
func TimedVersionFromTime ¶
func TimedVersionFromTime(t time.Time) TimedVersion
func (*TimedVersion) After ¶
func (t *TimedVersion) After(other *TimedVersion) bool
func (*TimedVersion) Compare ¶
func (t *TimedVersion) Compare(other *TimedVersion) int
func (*TimedVersion) IsZero ¶
func (t *TimedVersion) IsZero() bool
func (*TimedVersion) Load ¶
func (t *TimedVersion) Load() TimedVersion
func (*TimedVersion) Store ¶
func (t *TimedVersion) Store(other *TimedVersion)
func (*TimedVersion) String ¶
func (t *TimedVersion) String() string
func (*TimedVersion) Time ¶
func (t *TimedVersion) Time() time.Time
func (*TimedVersion) ToProto ¶
func (t *TimedVersion) ToProto() *livekit.TimedVersion
func (*TimedVersion) Update ¶
func (t *TimedVersion) Update(other *TimedVersion) bool
type TimedVersionGenerator ¶
type TimedVersionGenerator interface { New() *TimedVersion Next() TimedVersion }
func NewDefaultTimedVersionGenerator ¶
func NewDefaultTimedVersionGenerator() TimedVersionGenerator
type WorkerGroup ¶
type WorkerGroup struct {
// contains filtered or unexported fields
}
func (*WorkerGroup) Go ¶
func (w *WorkerGroup) Go(fn func())
func (*WorkerGroup) Wait ¶
func (w *WorkerGroup) Wait()