Documentation
¶
Index ¶
- Constants
- Variables
- func EvaluateReceiverThresholds(summaries []ReceiverSummary, thresholds []ReceiverThresholdConfig) error
- func EvaluateRunThresholds(summary RunMetricsSummary, thresholds []RunThresholdConfig) error
- func LoadCamerasFromConfig(cfg CameraConfig) (*ivf.Cameras, error)
- func SetupPacketCaptureDir(cfg PacketCaptureConfig) (string, error)
- type AssignmentSelector
- type CameraConfig
- type ChurnScenario
- type Client
- func (c *Client) AddStatsConsumer(fn func(vp9_stats.Period, vp9_stats.VideoQualitySample))
- func (c *Client) CreateUser(_ context.Context, cfg *UserConfig) (*User, error)
- func (c *Client) GetUser(userID string) *User
- func (c *Client) JoinAllRooms(ctx context.Context) error
- func (c *Client) MetricsSnapshot() RunMetricsSnapshot
- func (c *Client) MetricsSummary() RunMetricsSummary
- func (c *Client) RegisterPlugin(pluginID string, factory PluginFactory)
- func (c *Client) RegisterScenario(scenarioID string, factory ScenarioFactory)
- func (c *Client) RunScenario(ctx context.Context, scenarioID string) error
- func (c *Client) SetupPlugin(ctx context.Context, pluginID string) error
- func (c *Client) Shutdown(ctx context.Context) error
- func (c *Client) ShutdownAll(ctx context.Context) error
- type ConferenceConfig
- type Config
- type ConnectionState
- type DefaultScenario
- type FreezeDetector
- type GaugeSummary
- type HistogramSnapshot
- type HistogramSummary
- type ImpairmentAssignment
- type ImpairmentConfig
- type ImpairmentProfile
- type JoinPolicyConfig
- type JoinRequest
- type Labels
- type LeaveRequest
- type LogStreamConfig
- type LoggingConfig
- type MetadataConfig
- type MetricsCollector
- type MetricsConfig
- type NetworkConfig
- type OperationSummary
- type PacketCaptureConfig
- type Participant
- type Plugin
- type PluginEnv
- type PluginFactory
- type PluginRegistry
- type PublishVideoRequest
- type ReceiverSummary
- type ReceiverThresholdConfig
- type ReceiverThresholdFailure
- type RecordingConfig
- type RunMetricsSnapshot
- func (s RunMetricsSnapshot) CounterValue(name string, labels Labels) int64
- func (s RunMetricsSnapshot) GaugePeakValue(name string, labels Labels) float64
- func (s RunMetricsSnapshot) GaugeValue(name string, labels Labels) float64
- func (s RunMetricsSnapshot) Histogram(name string, labels Labels) HistogramSnapshot
- func (s RunMetricsSnapshot) Summary() RunMetricsSummary
- type RunMetricsSummary
- type RunThresholdConfig
- type SVCCameraConfig
- type Scenario
- type ScenarioEnv
- type ScenarioFactory
- type ScenarioRegistry
- type SpecConfig
- type StatsPipeline
- type ThresholdFailure
- type UnpublishVideoRequest
- type User
- func (u *User) Close() error
- func (u *User) JoinRoom(ctx context.Context, req *JoinRequest) error
- func (u *User) LeaveRoom(ctx context.Context, req *LeaveRequest) error
- func (u *User) MetricsSnapshot() UserMetrics
- func (u *User) PublishVideo(ctx context.Context, req *PublishVideoRequest) error
- func (u *User) UnpublishVideo(ctx context.Context, req *UnpublishVideoRequest) error
- type UserConfig
- type UserMetrics
- type UserRole
- type VideoPublisher
- type YAMLAssignmentSelector
- type YAMLCameraConfig
- type YAMLConferenceConfig
- type YAMLConfig
- type YAMLImpairmentAssignment
- type YAMLImpairmentConfig
- type YAMLImpairmentProfile
- type YAMLJoinPolicyConfig
- type YAMLLogStreamConfig
- type YAMLLoggingConfig
- type YAMLMetadataConfig
- type YAMLMetricsConfig
- type YAMLNetworkConfig
- type YAMLPacketCaptureConfig
- type YAMLReceiverThresholdConfig
- type YAMLRecordingConfig
- type YAMLRunThresholdConfig
- type YAMLSVCCamConfig
- type YAMLSpecConfig
Constants ¶
const ( APIVersionV1 = "rtcbench/v1" KindVideoCallStressTest = "VideoCallStressTest" )
const ChurnScenarioID = "churn"
const DefaultScenarioID = "default"
Variables ¶
var ( ErrUnsupportedRole = errors.New("unsupported role") ErrUnsupportedCapability = errors.New("unsupported capability") ErrCannotJoinRoom = errors.New("cannot join room") ErrConnectionNotJoined = errors.New("connection not joined") ErrUnknownPlugin = errors.New("unknown plugin") ErrUnknownScenario = errors.New("unknown scenario") ErrConnectionExists = errors.New("connection already exists") ErrUserExists = errors.New("user already exists") ErrUserClosed = errors.New("user is closed") ErrMissingRoomID = errors.New("missing room id") ErrImpairmentUnsupported = errors.New("plugin does not support network impairment") )
var ( ErrMissingAPIVersion = errors.New("missing apiVersion, expected " + APIVersionV1) ErrInvalidAPIVersion = errors.New("invalid apiVersion, expected " + APIVersionV1) ErrMissingKind = errors.New("missing kind, expected " + KindVideoCallStressTest) ErrInvalidKind = errors.New("invalid kind, expected " + KindVideoCallStressTest) ErrMissingMetadata = errors.New("missing metadata section") ErrMissingName = errors.New("missing metadata.name string") ErrInvalidName = errors.New("invalid metadata.name string") ErrMissingSpec = errors.New("missing spec section") ErrMissingPlugin = errors.New("missing spec.plugin string") ErrInvalidPlugin = errors.New("invalid spec.plugin string") ErrInvalidScenario = errors.New("invalid spec.scenario string") ErrInvalidScenarioConfig = errors.New("invalid spec.scenarioConfig section") ErrMissingConference = errors.New("missing spec.conference section") ErrMissingNetwork = errors.New("missing spec.network section") ErrMissingLogging = errors.New("missing spec.logging section") ErrMissingConferenceName = errors.New("missing spec.conference.name string") ErrInvalidConferenceName = errors.New("invalid spec.conference.name string") ErrMissingUsersPerRoom = errors.New("missing spec.conference.usersPerRoom integer") ErrNonPositiveUsersPerRoom = errors.New("invalid spec.conference.usersPerRoom integer, must be >= 1") ErrNonPositiveTotalRooms = errors.New("invalid spec.conference.totalRooms integer, must be >= 1") ErrMissingJoinPolicy = errors.New("missing spec.conference.joinPolicy section") ErrMissingCameraCountPerRoom = errors.New("missing spec.conference.cameras.perRoom integer") ErrInvalidCameraCountPerRoom = errors.New("invalid spec.conference.cameras.perRoom integer, must be >= 0") ErrMissingCameraFileType = errors.New("missing spec.conference.cameras.fileType string") ErrUnsupportedCameraFileType = errors.New("unsupported spec.conference.cameras.fileType string") ErrMissingCameraVideoCodec = errors.New("missing spec.conference.cameras.videoCodec string") ErrUnsupportedCameraVideoCodec = errors.New("unsupported spec.conference.cameras.videoCodec string") ErrMissingCameraDirectory = errors.New("missing spec.conference.cameras.directory string") ErrMissingJoinPolicyConcurrency = errors.New("missing spec.conference.joinPolicy.concurrency integer") ErrNegativeJoinPolicyConcurrency = errors.New("invalid spec.conference.joinPolicy.concurrency, must be >= 0") ErrNegativeJoinStartSpacing = errors.New("invalid spec.conference.joinPolicy.joinStartSpacing, must be >= 0") ErrInvalidStatsBufferSize = errors.New("invalid spec.conference.statsBufferSize integer, must be in range [64..4096]") ErrInvalidSVCMode = errors.New("invalid spec.conference.cameras.svc.mode, must be auto|on|off") ErrInvalidSVCSpatialLayers = errors.New("invalid spec.conference.cameras.svc.spatialLayers, must be 1-3") ErrInvalidSVCTemporalLayers = errors.New("invalid spec.conference.cameras.svc.temporalLayers, must be 1-3") ErrMissingRecordingDirectory = errors.New("missing spec.conference.recording.directory pathname") ErrMissingPacketCaptureDirectory = errors.New("missing spec.conference.packetCapture.directory pathname") ErrMissingServerIP = errors.New("missing spec.network.serverIP address") ErrInvalidServerIP = errors.New("invalid spec.network.serverIP address") ErrInvalidServerPort = errors.New("spec.network.serverPort must be in [1,65535]") ErrInvalidClientIP = errors.New("invalid spec.network.clientIP address") ErrImpairmentProfilesEmpty = errors.New("spec.network.impairment.profiles is empty") ErrImpairmentProfileNameEmpty = errors.New("spec.network.impairment.profiles has an empty key") ErrImpairmentProfileBandwidthNeg = errors.New("spec.network.impairment.profiles.*.bandwidthKbps must be >= 0") ErrImpairmentProfileLatencyNeg = errors.New("spec.network.impairment.profiles.*.latency must be >= 0") ErrImpairmentProfileJitterNeg = errors.New("spec.network.impairment.profiles.*.jitter must be >= 0") ErrImpairmentProfileLossRange = errors.New("spec.network.impairment.profiles.*.lossPercent must be in [0,100]") ErrImpairmentDefaultMissing = errors.New("spec.network.impairment.default is required") ErrImpairmentDefaultUnknown = errors.New("spec.network.impairment.default references an unknown profile") ErrImpairmentAssignmentProfileEmpty = errors.New("spec.network.impairment.assignments[*].profile is required") ErrImpairmentAssignmentProfileUnknown = errors.New("spec.network.impairment.assignments[*].profile references an unknown profile") ErrImpairmentAssignmentMatchEmpty = errors.New("spec.network.impairment.assignments[*].match must set at least one selector") ErrImpairmentAssignmentRoleInvalid = errors.New("spec.network.impairment.assignments[*].match.role must be 'sender' or 'viewer'") ErrImpairmentAssignmentPatternInvalid = errors.New("spec.network.impairment.assignments[*].match.userIDPattern must be a valid glob") ErrImpairmentAssignmentIndexRange = errors.New("spec.network.impairment.assignments[*].match.userIndexRange must be [min,max] with min<=max or max=-1") ErrMissingLoggingDirectory = errors.New("missing spec.logging.directory pathname") ErrInvalidConsoleLevel = errors.New("invalid spec.logging.consoleLevel string, must match " + logLevelRegex.String()) ErrInvalidFileLevel = errors.New("invalid spec.logging.fileLevel string, must match " + logLevelRegex.String()) ErrInvalidMetricsThreshold = errors.New("invalid spec.metrics.thresholds section") ErrMissingLogStreamName = errors.New("missing spec.logging.streams[#].name string") ErrInvalidLogStreamName = errors.New("invalid spec.logging.streams[#].name string") ErrMissingLogStreamLevel = errors.New("missing spec.logging.streams[#].level string") ErrInvalidLogStreamLevel = errors.New("invalid spec.logging.streams[#].level string, must match " + logLevelRegex.String()) SupportedCameraVideoCodecs = []string{"vp9"} SupportedCameraFileTypes = []string{"ivf"} )
Functions ¶
func EvaluateReceiverThresholds ¶
func EvaluateReceiverThresholds(summaries []ReceiverSummary, thresholds []ReceiverThresholdConfig) error
func EvaluateRunThresholds ¶
func EvaluateRunThresholds(summary RunMetricsSummary, thresholds []RunThresholdConfig) error
func LoadCamerasFromConfig ¶
func LoadCamerasFromConfig(cfg CameraConfig) (*ivf.Cameras, error)
LoadCamerasFromConfig loads IVF camera files when senders are configured. Returns nil when perRoom is 0.
func SetupPacketCaptureDir ¶
func SetupPacketCaptureDir(cfg PacketCaptureConfig) (string, error)
SetupPacketCaptureDir creates a timestamped directory for packet captures under the configured base directory. Returns the path, or empty string if packet capture is disabled.
Types ¶
type AssignmentSelector ¶
type CameraConfig ¶
type CameraConfig struct {
PerRoom int
FileType string
VideoCodec string
Directory string
InMemory bool
// MixedRole makes the PerRoom camera-holding participants act as full
// conference participants (publish AND subscribe) rather than send-only.
// Set PerRoom == usersPerRoom for an all-participants-send-and-receive
// conference, when supported by the selected plugin
MixedRole bool
SVC SVCCameraConfig
}
type ChurnScenario ¶
type ChurnScenario struct{}
func (ChurnScenario) Run ¶
func (ChurnScenario) Run(ctx context.Context, env ScenarioEnv) error
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) AddStatsConsumer ¶
func (c *Client) AddStatsConsumer(fn func(vp9_stats.Period, vp9_stats.VideoQualitySample))
func (*Client) CreateUser ¶
func (*Client) MetricsSnapshot ¶
func (c *Client) MetricsSnapshot() RunMetricsSnapshot
func (*Client) MetricsSummary ¶
func (c *Client) MetricsSummary() RunMetricsSummary
func (*Client) RegisterPlugin ¶
func (c *Client) RegisterPlugin(pluginID string, factory PluginFactory)
func (*Client) RegisterScenario ¶
func (c *Client) RegisterScenario(scenarioID string, factory ScenarioFactory)
func (*Client) RunScenario ¶
func (*Client) SetupPlugin ¶
type ConferenceConfig ¶
type ConferenceConfig struct {
Name string
UsersPerRoom int
TotalRooms int
StatsBufferSize int
StatsInputChanSize int
Cameras CameraConfig
JoinPolicy JoinPolicyConfig
Recording RecordingConfig
PacketCapture PacketCaptureConfig
}
type Config ¶
type Config struct {
APIVersion string
Kind string
Metadata MetadataConfig
Spec SpecConfig
}
type ConnectionState ¶
type ConnectionState int
const ( StateNew ConnectionState = iota StateJoined StateLeft StateClosed )
type DefaultScenario ¶
type DefaultScenario struct{}
func (DefaultScenario) Run ¶
func (DefaultScenario) Run(ctx context.Context, env ScenarioEnv) error
type FreezeDetector ¶
type FreezeDetector struct {
// contains filtered or unexported fields
}
func NewFreezeDetector ¶
func NewFreezeDetector(fpsThreshold float32, freezeThresholdMS int) *FreezeDetector
func (*FreezeDetector) Reset ¶
func (d *FreezeDetector) Reset()
type GaugeSummary ¶
type HistogramSnapshot ¶
type HistogramSnapshot struct {
Count int64
Sum float64
Min float64
Max float64
BucketBounds []float64
BucketCounts []uint64
}
func (HistogramSnapshot) Mean ¶
func (h HistogramSnapshot) Mean() float64
func (HistogramSnapshot) Quantile ¶
func (h HistogramSnapshot) Quantile(q float64) float64
type HistogramSummary ¶
type ImpairmentAssignment ¶
type ImpairmentAssignment struct {
Match AssignmentSelector
Profile string
}
type ImpairmentConfig ¶
type ImpairmentConfig struct {
Profiles map[string]*ImpairmentProfile
Assignments []ImpairmentAssignment
Default string
}
type ImpairmentProfile ¶
type JoinPolicyConfig ¶
type JoinRequest ¶
type LeaveRequest ¶
func (*LeaveRequest) GetPlugin ¶
func (r *LeaveRequest) GetPlugin() string
func (*LeaveRequest) GetRoomID ¶
func (r *LeaveRequest) GetRoomID() string
type LogStreamConfig ¶
type LoggingConfig ¶
type MetadataConfig ¶
type MetadataConfig struct {
Name string
}
type MetricsCollector ¶
type MetricsConfig ¶
type MetricsConfig struct {
Port int
StatsJSONLPath string
Thresholds []RunThresholdConfig
ReceiverThresholds []ReceiverThresholdConfig
}
type NetworkConfig ¶
type NetworkConfig struct {
ServerIP string
ServerPort int
ClientIP string
Impairment *ImpairmentConfig
}
type OperationSummary ¶
type PacketCaptureConfig ¶
type Participant ¶
type Participant interface {
JoinRoom(ctx context.Context, req *JoinRequest) error
LeaveRoom(ctx context.Context, req *LeaveRequest) error
Close() error
}
type PluginFactory ¶
type PluginFactory func() Plugin
type PluginRegistry ¶
type PluginRegistry map[string]PluginFactory
type PublishVideoRequest ¶
func (*PublishVideoRequest) GetPlugin ¶
func (r *PublishVideoRequest) GetPlugin() string
func (*PublishVideoRequest) GetRoomID ¶
func (r *PublishVideoRequest) GetRoomID() string
type ReceiverSummary ¶
type ReceiverThresholdConfig ¶
type ReceiverThresholdFailure ¶
type ReceiverThresholdFailure struct {
Threshold ReceiverThresholdConfig
Actual ReceiverSummary
Reason string
}
func (ReceiverThresholdFailure) Error ¶
func (f ReceiverThresholdFailure) Error() string
type RecordingConfig ¶
type RunMetricsSnapshot ¶
type RunMetricsSnapshot struct {
Counters map[string]int64
Gauges map[string]float64
GaugePeaks map[string]float64
Histograms map[string]HistogramSnapshot
Receivers []ReceiverSummary
}
func (RunMetricsSnapshot) CounterValue ¶
func (s RunMetricsSnapshot) CounterValue(name string, labels Labels) int64
func (RunMetricsSnapshot) GaugePeakValue ¶
func (s RunMetricsSnapshot) GaugePeakValue(name string, labels Labels) float64
func (RunMetricsSnapshot) GaugeValue ¶
func (s RunMetricsSnapshot) GaugeValue(name string, labels Labels) float64
func (RunMetricsSnapshot) Histogram ¶
func (s RunMetricsSnapshot) Histogram(name string, labels Labels) HistogramSnapshot
func (RunMetricsSnapshot) Summary ¶
func (s RunMetricsSnapshot) Summary() RunMetricsSummary
type RunMetricsSummary ¶
type RunMetricsSummary struct {
Operations []OperationSummary
Sessions []HistogramSummary
Gauges []GaugeSummary
Receivers []ReceiverSummary
}
type RunThresholdConfig ¶
type SVCCameraConfig ¶
type SVCCameraConfig struct {
Mode string // "auto" (default), "on", "off"
SpatialLayers int // 1-3 when Mode="on", 0 = auto-detect from IVF
TemporalLayers int // 1-3 when Mode="on", 0 = auto-detect from IVF
}
SVCCameraConfig controls VP9 SVC (Scalable Video Coding) behavior for senders.
- Mode "auto": detect from IVF file. Non-SVC files use simple path, SVC files use SVC path.
- Mode "on": force SVC path. SpatialLayers/TemporalLayers override auto-detection (0 = auto).
- Mode "off": force simple path regardless of IVF file content.
type ScenarioEnv ¶
type ScenarioFactory ¶
type ScenarioFactory func() Scenario
type ScenarioRegistry ¶
type ScenarioRegistry map[string]ScenarioFactory
type SpecConfig ¶
type SpecConfig struct {
Plugin string
Scenario string
ScenarioConfig map[string]any
Conference ConferenceConfig
Network NetworkConfig
PluginConfig map[string]any
Logging LoggingConfig
Metrics MetricsConfig
}
type StatsPipeline ¶
StatsPipeline encapsulates the viewer manager and stats publisher that every plugin creates identically in Setup(). Use NewStatsPipeline in Setup and call Stop in Shutdown.
func NewStatsPipeline ¶
func NewStatsPipeline(e PluginEnv) *StatsPipeline
NewStatsPipeline builds the stats channel, viewer manager, publisher, default log subscriber, and external consumers. It starts the publisher goroutine.
func (*StatsPipeline) Stop ¶
func (sp *StatsPipeline) Stop()
Stop shuts down the viewer manager and publisher in the correct order.
type ThresholdFailure ¶
type ThresholdFailure struct {
Threshold RunThresholdConfig
Actual OperationSummary
Reason string
}
func (ThresholdFailure) Error ¶
func (f ThresholdFailure) Error() string
type UnpublishVideoRequest ¶
func (*UnpublishVideoRequest) GetPlugin ¶
func (r *UnpublishVideoRequest) GetPlugin() string
func (*UnpublishVideoRequest) GetRoomID ¶
func (r *UnpublishVideoRequest) GetRoomID() string
type User ¶
type User struct {
// contains filtered or unexported fields
}
func (*User) MetricsSnapshot ¶
func (u *User) MetricsSnapshot() UserMetrics
func (*User) PublishVideo ¶
func (u *User) PublishVideo(ctx context.Context, req *PublishVideoRequest) error
func (*User) UnpublishVideo ¶
func (u *User) UnpublishVideo(ctx context.Context, req *UnpublishVideoRequest) error
type UserConfig ¶
type UserConfig struct {
UserID string
Role UserRole
ImpairmentProfile *ImpairmentProfile
}
type UserMetrics ¶
type UserMetrics struct {
JoinAttempts int64
JoinSuccesses int64
JoinFailures int64
JoinLatencyTotal time.Duration
LeaveAttempts int64
LeaveSuccesses int64
LeaveFailures int64
LeaveLatencyTotal time.Duration
PublishVideoAttempts int64
PublishVideoSuccesses int64
PublishVideoFailures int64
PublishVideoLatencyTotal time.Duration
UnpublishVideoAttempts int64
UnpublishVideoSuccesses int64
UnpublishVideoFailures int64
UnpublishVideoLatencyTotal time.Duration
CloseAttempts int64
CloseSuccesses int64
CloseFailures int64
CloseLatencyTotal time.Duration
}
type UserRole ¶
type UserRole string
const ( Viewer UserRole = "viewer" Sender UserRole = "sender" // Both is a mixed-role participant that simultaneously publishes its own // video (like Sender) and subscribes to every other participant (like // Viewer), i.e. a full conference participant // Plugins without mixed-role support return ErrUnsupportedRole Both UserRole = "both" )
type VideoPublisher ¶
type VideoPublisher interface {
PublishVideo(ctx context.Context, req *PublishVideoRequest) error
UnpublishVideo(ctx context.Context, req *UnpublishVideoRequest) error
}
type YAMLAssignmentSelector ¶
type YAMLCameraConfig ¶
type YAMLCameraConfig struct {
PerRoom *int `yaml:"perRoom,omitempty"`
FileType *string `yaml:"fileType,omitempty"`
VideoCodec *string `yaml:"videoCodec,omitempty"`
Directory *string `yaml:"directory,omitempty"`
InMemory *bool `yaml:"inMemory,omitempty"`
MixedRole *bool `yaml:"mixedRole,omitempty"`
SVC *YAMLSVCCamConfig `yaml:"svc,omitempty"`
}
type YAMLConferenceConfig ¶
type YAMLConferenceConfig struct {
// Name conference room identifier
Name *string `yaml:"name,omitempty"`
// UsersPerRoom number of users per conference room
UsersPerRoom *int `yaml:"usersPerRoom,omitempty"`
// TotalRooms defaults to 1
TotalRooms *int `yaml:"totalRooms,omitempty"`
// StatsBufferSize optional ring buffer size for video quality stats (default 768)
StatsBufferSize *int `yaml:"statsBufferSize,omitempty"`
// StatsInputChanSize optional channel buffer size for stats input (default 65536)
StatsInputChanSize *int `yaml:"statsInputChanSize,omitempty"`
// Cameras optional config for some (or all) users to turn on their cameras
Cameras *YAMLCameraConfig `yaml:"cameras,omitempty"`
JoinPolicy *YAMLJoinPolicyConfig `yaml:"joinPolicy,omitempty"`
// Recording optional section, defaults to disabled
Recording *YAMLRecordingConfig `yaml:"recording,omitempty"`
// PacketCapture optional section, defaults to disabled
PacketCapture *YAMLPacketCaptureConfig `yaml:"packetCapture,omitempty"`
}
type YAMLConfig ¶
type YAMLConfig struct {
APIVersion *string `yaml:"apiVersion,omitempty"`
Kind *string `yaml:"kind,omitempty"`
Metadata *YAMLMetadataConfig `yaml:"metadata,omitempty"`
Spec *YAMLSpecConfig `yaml:"spec,omitempty"`
}
func (*YAMLConfig) IntoConfig ¶
func (yc *YAMLConfig) IntoConfig() (*Config, error)
type YAMLImpairmentAssignment ¶
type YAMLImpairmentAssignment struct {
Match YAMLAssignmentSelector `yaml:"match"`
Profile string `yaml:"profile"`
}
type YAMLImpairmentConfig ¶
type YAMLImpairmentConfig struct {
Profiles map[string]*YAMLImpairmentProfile `yaml:"profiles"`
Assignments []YAMLImpairmentAssignment `yaml:"assignments,omitempty"`
Default string `yaml:"default"`
}
type YAMLImpairmentProfile ¶
type YAMLJoinPolicyConfig ¶
type YAMLLogStreamConfig ¶
type YAMLLoggingConfig ¶
type YAMLLoggingConfig struct {
Console bool `yaml:"console"`
ConsoleLevel *string `yaml:"consoleLevel,omitempty"`
Color *bool `yaml:"color,omitempty"`
Directory *string `yaml:"directory,omitempty"`
FileLevel *string `yaml:"fileLevel,omitempty"`
Combined *bool `yaml:"combined,omitempty"`
Streams []YAMLLogStreamConfig `yaml:"streams,omitempty"`
}
type YAMLMetadataConfig ¶
type YAMLMetadataConfig struct {
Name *string `yaml:"name,omitempty"`
}
type YAMLMetricsConfig ¶
type YAMLMetricsConfig struct {
Port *int `yaml:"port,omitempty"`
StatsJSONLPath *string `yaml:"statsJSONLPath,omitempty"`
Thresholds []YAMLRunThresholdConfig `yaml:"thresholds,omitempty"`
ReceiverThresholds []YAMLReceiverThresholdConfig `yaml:"receiverThresholds,omitempty"`
}
type YAMLNetworkConfig ¶
type YAMLNetworkConfig struct {
ServerIP *string `yaml:"serverIP,omitempty"`
ServerPort *int `yaml:"serverPort,omitempty"`
ClientIP *string `yaml:"clientIP,omitempty"`
Impairment *YAMLImpairmentConfig `yaml:"impairment,omitempty"`
}
type YAMLPacketCaptureConfig ¶
type YAMLReceiverThresholdConfig ¶
type YAMLReceiverThresholdConfig struct {
Scenario *string `yaml:"scenario,omitempty"`
Plugin *string `yaml:"plugin,omitempty"`
Profile *string `yaml:"profile,omitempty"`
UserID *string `yaml:"userID,omitempty"`
MaxFreezeCount *int64 `yaml:"maxFreezeCount,omitempty"`
MaxFreezeDuration *float64 `yaml:"maxFreezeDuration,omitempty"`
MaxFrameLossRatio *float64 `yaml:"maxFrameLossRatio,omitempty"`
MinBitrateBps *float64 `yaml:"minBitrateBps,omitempty"`
MinFPS *float64 `yaml:"minFPS,omitempty"`
MaxJitterUS *float64 `yaml:"maxJitterUS,omitempty"`
MaxMeanRTTMS *float64 `yaml:"maxMeanRTTMS,omitempty"`
MaxPLICount *int64 `yaml:"maxPLICount,omitempty"`
}
type YAMLRecordingConfig ¶
type YAMLRunThresholdConfig ¶
type YAMLRunThresholdConfig struct {
Op *string `yaml:"op,omitempty"`
Scenario *string `yaml:"scenario,omitempty"`
Plugin *string `yaml:"plugin,omitempty"`
Role *string `yaml:"role,omitempty"`
MaxFailureRate *float64 `yaml:"maxFailureRate,omitempty"`
MaxMean *string `yaml:"maxMean,omitempty"`
MaxP95 *string `yaml:"maxP95,omitempty"`
MaxP99 *string `yaml:"maxP99,omitempty"`
}
type YAMLSVCCamConfig ¶
type YAMLSpecConfig ¶
type YAMLSpecConfig struct {
Plugin *string `yaml:"plugin,omitempty"`
Scenario *string `yaml:"scenario,omitempty"`
ScenarioConfig map[string]any `yaml:"scenarioConfig,omitempty"`
Conference *YAMLConferenceConfig `yaml:"conference,omitempty"`
Network *YAMLNetworkConfig `yaml:"network,omitempty"`
PluginConfig map[string]any `yaml:"pluginConfig,omitempty"`
Logging *YAMLLoggingConfig `yaml:"logging,omitempty"`
Metrics *YAMLMetricsConfig `yaml:"metrics,omitempty"`
}