Documentation
¶
Index ¶
- Constants
- Variables
- func RegisterControlServiceServer(s grpc.ServiceRegistrar, srv ControlServiceServer)
- type Accepted
- func (*Accepted) Descriptor() ([]byte, []int)deprecated
- func (x *Accepted) GetAssignedNodeId() string
- func (x *Accepted) GetHeartbeatInterval() *durationpb.Duration
- func (x *Accepted) GetMetricsInterval() *durationpb.Duration
- func (x *Accepted) GetSupervisorVersion() string
- func (*Accepted) ProtoMessage()
- func (x *Accepted) ProtoReflect() protoreflect.Message
- func (x *Accepted) Reset()
- func (x *Accepted) String() string
- type ControlServiceClient
- type ControlServiceServer
- type ControlService_JoinClient
- type ControlService_JoinServer
- type ExecutorType
- func (ExecutorType) Descriptor() protoreflect.EnumDescriptor
- func (x ExecutorType) Enum() *ExecutorType
- func (ExecutorType) EnumDescriptor() ([]byte, []int)deprecated
- func (x ExecutorType) Number() protoreflect.EnumNumber
- func (x ExecutorType) String() string
- func (ExecutorType) Type() protoreflect.EnumType
- type FailureSample
- func (*FailureSample) Descriptor() ([]byte, []int)deprecated
- func (x *FailureSample) GetCount() uint64
- func (x *FailureSample) GetErrorClass() string
- func (x *FailureSample) GetLastSeen() *timestamppb.Timestamp
- func (x *FailureSample) GetMessage() string
- func (x *FailureSample) GetMethod() string
- func (x *FailureSample) GetName() string
- func (x *FailureSample) GetStatus() int32
- func (*FailureSample) ProtoMessage()
- func (x *FailureSample) ProtoReflect() protoreflect.Message
- func (x *FailureSample) Reset()
- func (x *FailureSample) String() string
- type HistogramSnapshot
- func (*HistogramSnapshot) Descriptor() ([]byte, []int)deprecated
- func (x *HistogramSnapshot) GetCountsRle() []int64
- func (x *HistogramSnapshot) GetHighestTrackableValue() int64
- func (x *HistogramSnapshot) GetLowestTrackableValue() int64
- func (x *HistogramSnapshot) GetSignificantFigures() int32
- func (x *HistogramSnapshot) GetTotalCount() int64
- func (*HistogramSnapshot) ProtoMessage()
- func (x *HistogramSnapshot) ProtoReflect() protoreflect.Message
- func (x *HistogramSnapshot) Reset()
- func (x *HistogramSnapshot) String() string
- type LoadProfile
- func (*LoadProfile) Descriptor() ([]byte, []int)deprecated
- func (x *LoadProfile) GetDuration() *durationpb.Duration
- func (x *LoadProfile) GetExecutor() ExecutorType
- func (x *LoadProfile) GetGracefulStop() *durationpb.Duration
- func (x *LoadProfile) GetIterations() uint64
- func (x *LoadProfile) GetMaxIterationsPerSecond() uint32
- func (x *LoadProfile) GetStages() []*Stage
- func (x *LoadProfile) GetVus() uint32
- func (*LoadProfile) ProtoMessage()
- func (x *LoadProfile) ProtoReflect() protoreflect.Message
- func (x *LoadProfile) Reset()
- func (x *LoadProfile) String() string
- type LogEvent
- func (*LogEvent) Descriptor() ([]byte, []int)deprecated
- func (x *LogEvent) GetFields() map[string]string
- func (x *LogEvent) GetLevel() LogLevel
- func (x *LogEvent) GetMessage() string
- func (x *LogEvent) GetNodeId() string
- func (x *LogEvent) GetRunId() string
- func (x *LogEvent) GetTime() *timestamppb.Timestamp
- func (*LogEvent) ProtoMessage()
- func (x *LogEvent) ProtoReflect() protoreflect.Message
- func (x *LogEvent) Reset()
- func (x *LogEvent) String() string
- type LogLevel
- type MetricBatch
- func (*MetricBatch) Descriptor() ([]byte, []int)deprecated
- func (x *MetricBatch) GetActiveVus() uint32
- func (x *MetricBatch) GetBucketStart() *timestamppb.Timestamp
- func (x *MetricBatch) GetBucketWidth() *durationpb.Duration
- func (x *MetricBatch) GetDroppedSamples() uint64
- func (x *MetricBatch) GetFailures() []*FailureSample
- func (x *MetricBatch) GetNodeId() string
- func (x *MetricBatch) GetRunId() string
- func (x *MetricBatch) GetSeries() []*SeriesDelta
- func (*MetricBatch) ProtoMessage()
- func (x *MetricBatch) ProtoReflect() protoreflect.Message
- func (x *MetricBatch) Reset()
- func (x *MetricBatch) String() string
- type MetricKind
- type NodeDown
- func (*NodeDown) Descriptor() ([]byte, []int)deprecated
- func (x *NodeDown) GetAccepted() *Accepted
- func (x *NodeDown) GetPayload() isNodeDown_Payload
- func (x *NodeDown) GetPing() *Ping
- func (x *NodeDown) GetSetQuota() *SetQuota
- func (x *NodeDown) GetStartRun() *StartRun
- func (x *NodeDown) GetStopRun() *StopRun
- func (*NodeDown) ProtoMessage()
- func (x *NodeDown) ProtoReflect() protoreflect.Message
- func (x *NodeDown) Reset()
- func (x *NodeDown) String() string
- type NodeDown_Accepted
- type NodeDown_Ping
- type NodeDown_SetQuota
- type NodeDown_StartRun
- type NodeDown_StopRun
- type NodeHeartbeat
- func (*NodeHeartbeat) Descriptor() ([]byte, []int)deprecated
- func (x *NodeHeartbeat) GetActiveVus() uint32
- func (x *NodeHeartbeat) GetCpuPercent() float64
- func (x *NodeHeartbeat) GetHealthyWorkers() uint32
- func (x *NodeHeartbeat) GetMemBytes() uint64
- func (x *NodeHeartbeat) GetSentAt() *timestamppb.Timestamp
- func (x *NodeHeartbeat) GetSequence() int64
- func (x *NodeHeartbeat) GetWorkers() []*WorkerStats
- func (*NodeHeartbeat) ProtoMessage()
- func (x *NodeHeartbeat) ProtoReflect() protoreflect.Message
- func (x *NodeHeartbeat) Reset()
- func (x *NodeHeartbeat) String() string
- type NodeHello
- func (*NodeHello) Descriptor() ([]byte, []int)deprecated
- func (x *NodeHello) GetCpuCores() uint32
- func (x *NodeHello) GetHostname() string
- func (x *NodeHello) GetLabels() map[string]string
- func (x *NodeHello) GetMaxVus() uint32
- func (x *NodeHello) GetMaxWorkers() uint32
- func (x *NodeHello) GetNodeId() string
- func (x *NodeHello) GetVersion() string
- func (*NodeHello) ProtoMessage()
- func (x *NodeHello) ProtoReflect() protoreflect.Message
- func (x *NodeHello) Reset()
- func (x *NodeHello) String() string
- type NodeUp
- func (*NodeUp) Descriptor() ([]byte, []int)deprecated
- func (x *NodeUp) GetHeartbeat() *NodeHeartbeat
- func (x *NodeUp) GetHello() *NodeHello
- func (x *NodeUp) GetLog() *LogEvent
- func (x *NodeUp) GetMetrics() *MetricBatch
- func (x *NodeUp) GetPayload() isNodeUp_Payload
- func (x *NodeUp) GetPong() *Pong
- func (x *NodeUp) GetRunStatus() *RunStatusUpdate
- func (*NodeUp) ProtoMessage()
- func (x *NodeUp) ProtoReflect() protoreflect.Message
- func (x *NodeUp) Reset()
- func (x *NodeUp) String() string
- type NodeUp_Heartbeat
- type NodeUp_Hello
- type NodeUp_Log
- type NodeUp_Metrics
- type NodeUp_Pong
- type NodeUp_RunStatus
- type Ping
- type Pong
- type RunPhase
- type RunStatusUpdate
- func (*RunStatusUpdate) Descriptor() ([]byte, []int)deprecated
- func (x *RunStatusUpdate) GetActiveVus() uint32
- func (x *RunStatusUpdate) GetCompletedIterations() uint64
- func (x *RunStatusUpdate) GetMessage() string
- func (x *RunStatusUpdate) GetPhase() RunPhase
- func (x *RunStatusUpdate) GetRunId() string
- func (*RunStatusUpdate) ProtoMessage()
- func (x *RunStatusUpdate) ProtoReflect() protoreflect.Message
- func (x *RunStatusUpdate) Reset()
- func (x *RunStatusUpdate) String() string
- type ScenarioRef
- type SeriesDelta
- func (*SeriesDelta) Descriptor() ([]byte, []int)deprecated
- func (x *SeriesDelta) GetCount() uint64
- func (x *SeriesDelta) GetHistogram() *HistogramSnapshot
- func (x *SeriesDelta) GetKind() MetricKind
- func (x *SeriesDelta) GetMax() float64
- func (x *SeriesDelta) GetMetric() string
- func (x *SeriesDelta) GetMin() float64
- func (x *SeriesDelta) GetNonZero() uint64
- func (x *SeriesDelta) GetSum() float64
- func (x *SeriesDelta) GetTags() map[string]string
- func (*SeriesDelta) ProtoMessage()
- func (x *SeriesDelta) ProtoReflect() protoreflect.Message
- func (x *SeriesDelta) Reset()
- func (x *SeriesDelta) String() string
- type SetQuota
- func (*SetQuota) Descriptor() ([]byte, []int)deprecated
- func (x *SetQuota) GetIterationRateQuota() uint32
- func (x *SetQuota) GetRamp() *durationpb.Duration
- func (x *SetQuota) GetRunId() string
- func (x *SetQuota) GetVuQuota() uint32
- func (*SetQuota) ProtoMessage()
- func (x *SetQuota) ProtoReflect() protoreflect.Message
- func (x *SetQuota) Reset()
- func (x *SetQuota) String() string
- type Stage
- type StartRun
- func (*StartRun) Descriptor() ([]byte, []int)deprecated
- func (x *StartRun) GetIterationQuota() uint64
- func (x *StartRun) GetIterationRateQuota() uint32
- func (x *StartRun) GetPlan() *TestPlan
- func (x *StartRun) GetRunId() string
- func (x *StartRun) GetShardCount() uint32
- func (x *StartRun) GetShardIndex() uint32
- func (x *StartRun) GetStartAt() *timestamppb.Timestamp
- func (x *StartRun) GetVuIdBase() int64
- func (x *StartRun) GetVuQuota() uint32
- func (x *StartRun) GetWorkerCount() uint32
- func (*StartRun) ProtoMessage()
- func (x *StartRun) ProtoReflect() protoreflect.Message
- func (x *StartRun) Reset()
- func (x *StartRun) String() string
- type StopRun
- func (*StopRun) Descriptor() ([]byte, []int)deprecated
- func (x *StopRun) GetGraceful() bool
- func (x *StopRun) GetReason() string
- func (x *StopRun) GetRunId() string
- func (*StopRun) ProtoMessage()
- func (x *StopRun) ProtoReflect() protoreflect.Message
- func (x *StopRun) Reset()
- func (x *StopRun) String() string
- type TestPlan
- func (*TestPlan) Descriptor() ([]byte, []int)deprecated
- func (x *TestPlan) GetBaseUrl() string
- func (x *TestPlan) GetConfigYaml() []byte
- func (x *TestPlan) GetLoad() *LoadProfile
- func (x *TestPlan) GetName() string
- func (x *TestPlan) GetScenarios() []*ScenarioRef
- func (x *TestPlan) GetTags() map[string]string
- func (x *TestPlan) GetThresholds() []*Threshold
- func (x *TestPlan) GetWorkersPerAgent() uint32
- func (*TestPlan) ProtoMessage()
- func (x *TestPlan) ProtoReflect() protoreflect.Message
- func (x *TestPlan) Reset()
- func (x *TestPlan) String() string
- type Threshold
- func (*Threshold) Descriptor() ([]byte, []int)deprecated
- func (x *Threshold) GetAbortOnFail() bool
- func (x *Threshold) GetMetric() string
- func (x *Threshold) GetOp() ThresholdOp
- func (x *Threshold) GetStat() ThresholdStat
- func (x *Threshold) GetValue() float64
- func (*Threshold) ProtoMessage()
- func (x *Threshold) ProtoReflect() protoreflect.Message
- func (x *Threshold) Reset()
- func (x *Threshold) String() string
- type ThresholdOp
- func (ThresholdOp) Descriptor() protoreflect.EnumDescriptor
- func (x ThresholdOp) Enum() *ThresholdOp
- func (ThresholdOp) EnumDescriptor() ([]byte, []int)deprecated
- func (x ThresholdOp) Number() protoreflect.EnumNumber
- func (x ThresholdOp) String() string
- func (ThresholdOp) Type() protoreflect.EnumType
- type ThresholdStat
- func (ThresholdStat) Descriptor() protoreflect.EnumDescriptor
- func (x ThresholdStat) Enum() *ThresholdStat
- func (ThresholdStat) EnumDescriptor() ([]byte, []int)deprecated
- func (x ThresholdStat) Number() protoreflect.EnumNumber
- func (x ThresholdStat) String() string
- func (ThresholdStat) Type() protoreflect.EnumType
- type UnimplementedControlServiceServer
- type UnsafeControlServiceServer
- type WorkerStats
- func (*WorkerStats) Descriptor() ([]byte, []int)deprecated
- func (x *WorkerStats) GetActiveVus() uint32
- func (x *WorkerStats) GetCpuPercent() float64
- func (x *WorkerStats) GetIndex() uint32
- func (x *WorkerStats) GetMemBytes() uint64
- func (x *WorkerStats) GetWorkerId() string
- func (*WorkerStats) ProtoMessage()
- func (x *WorkerStats) ProtoReflect() protoreflect.Message
- func (x *WorkerStats) Reset()
- func (x *WorkerStats) String() string
Constants ¶
const (
ControlService_Join_FullMethodName = "/loadwave.v1.ControlService/Join"
)
Variables ¶
var ( RunPhase_name = map[int32]string{ 0: "RUN_PHASE_UNSPECIFIED", 1: "RUN_PHASE_PENDING", 2: "RUN_PHASE_STARTING", 3: "RUN_PHASE_RUNNING", 4: "RUN_PHASE_STOPPING", 5: "RUN_PHASE_COMPLETED", 6: "RUN_PHASE_FAILED", 7: "RUN_PHASE_ABORTED", } RunPhase_value = map[string]int32{ "RUN_PHASE_UNSPECIFIED": 0, "RUN_PHASE_PENDING": 1, "RUN_PHASE_STARTING": 2, "RUN_PHASE_RUNNING": 3, "RUN_PHASE_STOPPING": 4, "RUN_PHASE_COMPLETED": 5, "RUN_PHASE_FAILED": 6, "RUN_PHASE_ABORTED": 7, } )
Enum value maps for RunPhase.
var ( LogLevel_name = map[int32]string{ 0: "LOG_LEVEL_UNSPECIFIED", 1: "LOG_LEVEL_DEBUG", 2: "LOG_LEVEL_INFO", 3: "LOG_LEVEL_WARN", 4: "LOG_LEVEL_ERROR", } LogLevel_value = map[string]int32{ "LOG_LEVEL_UNSPECIFIED": 0, "LOG_LEVEL_DEBUG": 1, "LOG_LEVEL_INFO": 2, "LOG_LEVEL_WARN": 3, "LOG_LEVEL_ERROR": 4, } )
Enum value maps for LogLevel.
var ( MetricKind_name = map[int32]string{ 0: "METRIC_KIND_UNSPECIFIED", 1: "METRIC_KIND_COUNTER", 2: "METRIC_KIND_GAUGE", 3: "METRIC_KIND_TREND", 4: "METRIC_KIND_RATE", } MetricKind_value = map[string]int32{ "METRIC_KIND_UNSPECIFIED": 0, "METRIC_KIND_COUNTER": 1, "METRIC_KIND_GAUGE": 2, "METRIC_KIND_TREND": 3, "METRIC_KIND_RATE": 4, } )
Enum value maps for MetricKind.
var ( ExecutorType_name = map[int32]string{ 0: "EXECUTOR_TYPE_UNSPECIFIED", 1: "EXECUTOR_TYPE_CONSTANT_VUS", 2: "EXECUTOR_TYPE_RAMPING_VUS", } ExecutorType_value = map[string]int32{ "EXECUTOR_TYPE_UNSPECIFIED": 0, "EXECUTOR_TYPE_CONSTANT_VUS": 1, "EXECUTOR_TYPE_RAMPING_VUS": 2, } )
Enum value maps for ExecutorType.
var ( ThresholdStat_name = map[int32]string{ 0: "THRESHOLD_STAT_UNSPECIFIED", 1: "THRESHOLD_STAT_COUNT", 2: "THRESHOLD_STAT_RATE", 3: "THRESHOLD_STAT_AVG", 4: "THRESHOLD_STAT_MIN", 5: "THRESHOLD_STAT_MAX", 6: "THRESHOLD_STAT_P50", 7: "THRESHOLD_STAT_P90", 8: "THRESHOLD_STAT_P95", 9: "THRESHOLD_STAT_P99", 10: "THRESHOLD_STAT_P999", } ThresholdStat_value = map[string]int32{ "THRESHOLD_STAT_UNSPECIFIED": 0, "THRESHOLD_STAT_COUNT": 1, "THRESHOLD_STAT_RATE": 2, "THRESHOLD_STAT_AVG": 3, "THRESHOLD_STAT_MIN": 4, "THRESHOLD_STAT_MAX": 5, "THRESHOLD_STAT_P50": 6, "THRESHOLD_STAT_P90": 7, "THRESHOLD_STAT_P95": 8, "THRESHOLD_STAT_P99": 9, "THRESHOLD_STAT_P999": 10, } )
Enum value maps for ThresholdStat.
var ( ThresholdOp_name = map[int32]string{ 0: "THRESHOLD_OP_UNSPECIFIED", 1: "THRESHOLD_OP_LT", 2: "THRESHOLD_OP_LTE", 3: "THRESHOLD_OP_GT", 4: "THRESHOLD_OP_GTE", } ThresholdOp_value = map[string]int32{ "THRESHOLD_OP_UNSPECIFIED": 0, "THRESHOLD_OP_LT": 1, "THRESHOLD_OP_LTE": 2, "THRESHOLD_OP_GT": 3, "THRESHOLD_OP_GTE": 4, } )
Enum value maps for ThresholdOp.
var ControlService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "loadwave.v1.ControlService", HandlerType: (*ControlServiceServer)(nil), Methods: []grpc.MethodDesc{}, Streams: []grpc.StreamDesc{ { StreamName: "Join", Handler: _ControlService_Join_Handler, ServerStreams: true, ClientStreams: true, }, }, Metadata: "loadwave/v1/control.proto", }
ControlService_ServiceDesc is the grpc.ServiceDesc for ControlService service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)
var File_loadwave_v1_control_proto protoreflect.FileDescriptor
var File_loadwave_v1_metrics_proto protoreflect.FileDescriptor
var File_loadwave_v1_plan_proto protoreflect.FileDescriptor
Functions ¶
func RegisterControlServiceServer ¶
func RegisterControlServiceServer(s grpc.ServiceRegistrar, srv ControlServiceServer)
Types ¶
type Accepted ¶
type Accepted struct {
AssignedNodeId string `protobuf:"bytes,1,opt,name=assigned_node_id,json=assignedNodeId,proto3" json:"assigned_node_id,omitempty"`
HeartbeatInterval *durationpb.Duration `protobuf:"bytes,2,opt,name=heartbeat_interval,json=heartbeatInterval,proto3" json:"heartbeat_interval,omitempty"`
MetricsInterval *durationpb.Duration `protobuf:"bytes,3,opt,name=metrics_interval,json=metricsInterval,proto3" json:"metrics_interval,omitempty"`
SupervisorVersion string `protobuf:"bytes,4,opt,name=supervisor_version,json=supervisorVersion,proto3" json:"supervisor_version,omitempty"`
// contains filtered or unexported fields
}
Accepted confirms a node has joined and tells it how to behave.
func (*Accepted) Descriptor
deprecated
func (*Accepted) GetAssignedNodeId ¶
func (*Accepted) GetHeartbeatInterval ¶
func (x *Accepted) GetHeartbeatInterval() *durationpb.Duration
func (*Accepted) GetMetricsInterval ¶
func (x *Accepted) GetMetricsInterval() *durationpb.Duration
func (*Accepted) GetSupervisorVersion ¶
func (*Accepted) ProtoMessage ¶
func (*Accepted) ProtoMessage()
func (*Accepted) ProtoReflect ¶
func (x *Accepted) ProtoReflect() protoreflect.Message
type ControlServiceClient ¶
type ControlServiceClient interface {
// The envelope names describe direction rather than the RPC, because the
// same pair is reused for the agent tier and the worker tier. JoinRequest /
// JoinResponse would obscure that symmetry.
// buf:lint:ignore RPC_REQUEST_STANDARD_NAME
// buf:lint:ignore RPC_RESPONSE_STANDARD_NAME
Join(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[NodeUp, NodeDown], error)
}
ControlServiceClient is the client API for ControlService service.
For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
ControlService is the single RPC that ties the cluster together.
The node always dials its supervisor and holds one long-lived bidirectional stream open. Commands travel down it and telemetry travels up it. Because the connection is outbound from the node, agents work from behind NAT and through egress-only firewalls with no inbound ports, and a broken stream is an unambiguous signal that the node is gone.
The same service is used at both tiers: agents speak it to the coordinator over TCP, and worker processes speak it to their local agent over a Unix domain socket.
func NewControlServiceClient ¶
func NewControlServiceClient(cc grpc.ClientConnInterface) ControlServiceClient
type ControlServiceServer ¶
type ControlServiceServer interface {
// The envelope names describe direction rather than the RPC, because the
// same pair is reused for the agent tier and the worker tier. JoinRequest /
// JoinResponse would obscure that symmetry.
// buf:lint:ignore RPC_REQUEST_STANDARD_NAME
// buf:lint:ignore RPC_RESPONSE_STANDARD_NAME
Join(grpc.BidiStreamingServer[NodeUp, NodeDown]) error
// contains filtered or unexported methods
}
ControlServiceServer is the server API for ControlService service. All implementations must embed UnimplementedControlServiceServer for forward compatibility.
ControlService is the single RPC that ties the cluster together.
The node always dials its supervisor and holds one long-lived bidirectional stream open. Commands travel down it and telemetry travels up it. Because the connection is outbound from the node, agents work from behind NAT and through egress-only firewalls with no inbound ports, and a broken stream is an unambiguous signal that the node is gone.
The same service is used at both tiers: agents speak it to the coordinator over TCP, and worker processes speak it to their local agent over a Unix domain socket.
type ControlService_JoinClient ¶
type ControlService_JoinClient = grpc.BidiStreamingClient[NodeUp, NodeDown]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type ControlService_JoinServer ¶
type ControlService_JoinServer = grpc.BidiStreamingServer[NodeUp, NodeDown]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type ExecutorType ¶
type ExecutorType int32
ExecutorType selects how LoadWave decides the number of active virtual users over the lifetime of a run.
const ( ExecutorType_EXECUTOR_TYPE_UNSPECIFIED ExecutorType = 0 // Hold a fixed number of VUs for a fixed duration. ExecutorType_EXECUTOR_TYPE_CONSTANT_VUS ExecutorType = 1 // Interpolate the VU count linearly between stage targets. ExecutorType_EXECUTOR_TYPE_RAMPING_VUS ExecutorType = 2 )
func (ExecutorType) Descriptor ¶
func (ExecutorType) Descriptor() protoreflect.EnumDescriptor
func (ExecutorType) Enum ¶
func (x ExecutorType) Enum() *ExecutorType
func (ExecutorType) EnumDescriptor
deprecated
func (ExecutorType) EnumDescriptor() ([]byte, []int)
Deprecated: Use ExecutorType.Descriptor instead.
func (ExecutorType) Number ¶
func (x ExecutorType) Number() protoreflect.EnumNumber
func (ExecutorType) String ¶
func (x ExecutorType) String() string
func (ExecutorType) Type ¶
func (ExecutorType) Type() protoreflect.EnumType
type FailureSample ¶
type FailureSample struct {
// The request's metric name, already collapsed to bounded cardinality.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"`
// HTTP status, or 0 when no response arrived.
Status int32 `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
// Transport failure classification: "timeout", "connection_refused" and
// the like. Empty when a response was received.
ErrorClass string `protobuf:"bytes,4,opt,name=error_class,json=errorClass,proto3" json:"error_class,omitempty"`
// A short, truncated excerpt of the response body or the transport error.
// Never the whole body: this is a hint for a human, not a payload.
Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
Count uint64 `protobuf:"varint,6,opt,name=count,proto3" json:"count,omitempty"`
LastSeen *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"`
// contains filtered or unexported fields
}
FailureSample explains one kind of failure, rather than merely counting it.
Metrics can say that 3% of requests failed; they cannot say why. This carries the missing half — the status, the transport error class, and a short excerpt of what the server actually said — so an operator does not have to go and reproduce the failure by hand to find out.
Samples are aggregated by their bounded fields and capped per node. The message is captured only the first time a given kind of failure is seen, which keeps a run where everything fails from spending its time copying error strings.
func (*FailureSample) Descriptor
deprecated
func (*FailureSample) Descriptor() ([]byte, []int)
Deprecated: Use FailureSample.ProtoReflect.Descriptor instead.
func (*FailureSample) GetCount ¶
func (x *FailureSample) GetCount() uint64
func (*FailureSample) GetErrorClass ¶
func (x *FailureSample) GetErrorClass() string
func (*FailureSample) GetLastSeen ¶
func (x *FailureSample) GetLastSeen() *timestamppb.Timestamp
func (*FailureSample) GetMessage ¶
func (x *FailureSample) GetMessage() string
func (*FailureSample) GetMethod ¶
func (x *FailureSample) GetMethod() string
func (*FailureSample) GetName ¶
func (x *FailureSample) GetName() string
func (*FailureSample) GetStatus ¶
func (x *FailureSample) GetStatus() int32
func (*FailureSample) ProtoMessage ¶
func (*FailureSample) ProtoMessage()
func (*FailureSample) ProtoReflect ¶
func (x *FailureSample) ProtoReflect() protoreflect.Message
func (*FailureSample) Reset ¶
func (x *FailureSample) Reset()
func (*FailureSample) String ¶
func (x *FailureSample) String() string
type HistogramSnapshot ¶
type HistogramSnapshot struct {
LowestTrackableValue int64 `protobuf:"varint,1,opt,name=lowest_trackable_value,json=lowestTrackableValue,proto3" json:"lowest_trackable_value,omitempty"`
HighestTrackableValue int64 `` /* 127-byte string literal not displayed */
SignificantFigures int32 `protobuf:"varint,3,opt,name=significant_figures,json=significantFigures,proto3" json:"significant_figures,omitempty"`
// Bucket counts, run-length encoded: a zero is followed by the length of
// the zero run. Non-zero values stand alone. HDR count arrays are mostly
// empty, so this typically shrinks the payload by one to two orders of
// magnitude.
CountsRle []int64 `protobuf:"varint,4,rep,packed,name=counts_rle,json=countsRle,proto3" json:"counts_rle,omitempty"`
TotalCount int64 `protobuf:"varint,5,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
// contains filtered or unexported fields
}
HistogramSnapshot carries an HDR histogram across the wire.
Percentiles cannot be averaged, so distributed runs must ship the whole distribution and merge it centrally. HDR histograms merge losslessly, which is what makes a p99 computed over ten agents actually correct.
func (*HistogramSnapshot) Descriptor
deprecated
func (*HistogramSnapshot) Descriptor() ([]byte, []int)
Deprecated: Use HistogramSnapshot.ProtoReflect.Descriptor instead.
func (*HistogramSnapshot) GetCountsRle ¶
func (x *HistogramSnapshot) GetCountsRle() []int64
func (*HistogramSnapshot) GetHighestTrackableValue ¶
func (x *HistogramSnapshot) GetHighestTrackableValue() int64
func (*HistogramSnapshot) GetLowestTrackableValue ¶
func (x *HistogramSnapshot) GetLowestTrackableValue() int64
func (*HistogramSnapshot) GetSignificantFigures ¶
func (x *HistogramSnapshot) GetSignificantFigures() int32
func (*HistogramSnapshot) GetTotalCount ¶
func (x *HistogramSnapshot) GetTotalCount() int64
func (*HistogramSnapshot) ProtoMessage ¶
func (*HistogramSnapshot) ProtoMessage()
func (*HistogramSnapshot) ProtoReflect ¶
func (x *HistogramSnapshot) ProtoReflect() protoreflect.Message
func (*HistogramSnapshot) Reset ¶
func (x *HistogramSnapshot) Reset()
func (*HistogramSnapshot) String ¶
func (x *HistogramSnapshot) String() string
type LoadProfile ¶
type LoadProfile struct {
Executor ExecutorType `protobuf:"varint,1,opt,name=executor,proto3,enum=loadwave.v1.ExecutorType" json:"executor,omitempty"`
// constant-vus: the VU count to hold, and for how long.
Vus uint32 `protobuf:"varint,2,opt,name=vus,proto3" json:"vus,omitempty"`
Duration *durationpb.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"`
// ramping-vus: the stages to walk through.
Stages []*Stage `protobuf:"bytes,4,rep,name=stages,proto3" json:"stages,omitempty"`
// Global ceiling on scenario iterations started per second across the whole
// run, which is the arrival rate a closed-model run would otherwise leave
// implicit. Zero means unlimited, and the VU count alone governs. The
// coordinator divides this budget across agents.
//
// This throttles iterations rather than individual requests: a scenario
// issuing five requests per iteration at a limit of 100 produces roughly
// 500 requests per second.
MaxIterationsPerSecond uint32 `` /* 132-byte string literal not displayed */
// How long VUs are given to finish their in-flight iteration once the run
// is asked to stop before they are cancelled outright.
GracefulStop *durationpb.Duration `protobuf:"bytes,6,opt,name=graceful_stop,json=gracefulStop,proto3" json:"graceful_stop,omitempty"`
// Stop the run after this many completed iterations across all VUs.
// Zero means the profile's duration governs instead.
Iterations uint64 `protobuf:"varint,7,opt,name=iterations,proto3" json:"iterations,omitempty"`
// contains filtered or unexported fields
}
LoadProfile describes the shape of the load over time. It is authored once on the coordinator and apportioned across agents, which in turn apportion their quota across worker processes.
func (*LoadProfile) Descriptor
deprecated
func (*LoadProfile) Descriptor() ([]byte, []int)
Deprecated: Use LoadProfile.ProtoReflect.Descriptor instead.
func (*LoadProfile) GetDuration ¶
func (x *LoadProfile) GetDuration() *durationpb.Duration
func (*LoadProfile) GetExecutor ¶
func (x *LoadProfile) GetExecutor() ExecutorType
func (*LoadProfile) GetGracefulStop ¶
func (x *LoadProfile) GetGracefulStop() *durationpb.Duration
func (*LoadProfile) GetIterations ¶
func (x *LoadProfile) GetIterations() uint64
func (*LoadProfile) GetMaxIterationsPerSecond ¶
func (x *LoadProfile) GetMaxIterationsPerSecond() uint32
func (*LoadProfile) GetStages ¶
func (x *LoadProfile) GetStages() []*Stage
func (*LoadProfile) GetVus ¶
func (x *LoadProfile) GetVus() uint32
func (*LoadProfile) ProtoMessage ¶
func (*LoadProfile) ProtoMessage()
func (*LoadProfile) ProtoReflect ¶
func (x *LoadProfile) ProtoReflect() protoreflect.Message
func (*LoadProfile) Reset ¶
func (x *LoadProfile) Reset()
func (*LoadProfile) String ¶
func (x *LoadProfile) String() string
type LogEvent ¶
type LogEvent struct {
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
Level LogLevel `protobuf:"varint,2,opt,name=level,proto3,enum=loadwave.v1.LogLevel" json:"level,omitempty"`
NodeId string `protobuf:"bytes,3,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
RunId string `protobuf:"bytes,4,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
Fields map[string]string `` /* 139-byte string literal not displayed */
// contains filtered or unexported fields
}
LogEvent forwards a notable event from a worker or agent up to the coordinator so it can surface in the dashboard rather than only in a log file on some other host.
func (*LogEvent) Descriptor
deprecated
func (*LogEvent) GetMessage ¶
func (*LogEvent) GetTime ¶
func (x *LogEvent) GetTime() *timestamppb.Timestamp
func (*LogEvent) ProtoMessage ¶
func (*LogEvent) ProtoMessage()
func (*LogEvent) ProtoReflect ¶
func (x *LogEvent) ProtoReflect() protoreflect.Message
type LogLevel ¶
type LogLevel int32
func (LogLevel) Descriptor ¶
func (LogLevel) Descriptor() protoreflect.EnumDescriptor
func (LogLevel) EnumDescriptor
deprecated
func (LogLevel) Number ¶
func (x LogLevel) Number() protoreflect.EnumNumber
func (LogLevel) Type ¶
func (LogLevel) Type() protoreflect.EnumType
type MetricBatch ¶
type MetricBatch struct {
RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
BucketStart *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=bucket_start,json=bucketStart,proto3" json:"bucket_start,omitempty"`
BucketWidth *durationpb.Duration `protobuf:"bytes,4,opt,name=bucket_width,json=bucketWidth,proto3" json:"bucket_width,omitempty"`
Series []*SeriesDelta `protobuf:"bytes,5,rep,name=series,proto3" json:"series,omitempty"`
// Instantaneous VU count on this node at the close of the bucket.
ActiveVus uint32 `protobuf:"varint,6,opt,name=active_vus,json=activeVus,proto3" json:"active_vus,omitempty"`
// Samples the node had to discard because its buffer was full. Non-zero
// here means the reported numbers understate reality and the UI says so.
DroppedSamples uint64 `protobuf:"varint,7,opt,name=dropped_samples,json=droppedSamples,proto3" json:"dropped_samples,omitempty"`
// What went wrong during this bucket, and why.
Failures []*FailureSample `protobuf:"bytes,8,rep,name=failures,proto3" json:"failures,omitempty"`
// contains filtered or unexported fields
}
MetricBatch is one node's complete report for one time bucket.
func (*MetricBatch) Descriptor
deprecated
func (*MetricBatch) Descriptor() ([]byte, []int)
Deprecated: Use MetricBatch.ProtoReflect.Descriptor instead.
func (*MetricBatch) GetActiveVus ¶
func (x *MetricBatch) GetActiveVus() uint32
func (*MetricBatch) GetBucketStart ¶
func (x *MetricBatch) GetBucketStart() *timestamppb.Timestamp
func (*MetricBatch) GetBucketWidth ¶
func (x *MetricBatch) GetBucketWidth() *durationpb.Duration
func (*MetricBatch) GetDroppedSamples ¶
func (x *MetricBatch) GetDroppedSamples() uint64
func (*MetricBatch) GetFailures ¶
func (x *MetricBatch) GetFailures() []*FailureSample
func (*MetricBatch) GetNodeId ¶
func (x *MetricBatch) GetNodeId() string
func (*MetricBatch) GetRunId ¶
func (x *MetricBatch) GetRunId() string
func (*MetricBatch) GetSeries ¶
func (x *MetricBatch) GetSeries() []*SeriesDelta
func (*MetricBatch) ProtoMessage ¶
func (*MetricBatch) ProtoMessage()
func (*MetricBatch) ProtoReflect ¶
func (x *MetricBatch) ProtoReflect() protoreflect.Message
func (*MetricBatch) Reset ¶
func (x *MetricBatch) Reset()
func (*MetricBatch) String ¶
func (x *MetricBatch) String() string
type MetricKind ¶
type MetricKind int32
MetricKind tells the merger how to combine two deltas for the same series.
const ( MetricKind_METRIC_KIND_UNSPECIFIED MetricKind = 0 // Monotonic totals: requests, iterations, bytes. Deltas add. MetricKind_METRIC_KIND_COUNTER MetricKind = 1 // Point-in-time values: active VUs. Deltas add across nodes, replace in time. MetricKind_METRIC_KIND_GAUGE MetricKind = 2 // Distributions: latency. Deltas merge via the histogram. MetricKind_METRIC_KIND_TREND MetricKind = 3 // Success/failure ratios, carried as count plus non-zero count. MetricKind_METRIC_KIND_RATE MetricKind = 4 )
func (MetricKind) Descriptor ¶
func (MetricKind) Descriptor() protoreflect.EnumDescriptor
func (MetricKind) Enum ¶
func (x MetricKind) Enum() *MetricKind
func (MetricKind) EnumDescriptor
deprecated
func (MetricKind) EnumDescriptor() ([]byte, []int)
Deprecated: Use MetricKind.Descriptor instead.
func (MetricKind) Number ¶
func (x MetricKind) Number() protoreflect.EnumNumber
func (MetricKind) String ¶
func (x MetricKind) String() string
func (MetricKind) Type ¶
func (MetricKind) Type() protoreflect.EnumType
type NodeDown ¶
type NodeDown struct {
// Types that are valid to be assigned to Payload:
//
// *NodeDown_Accepted
// *NodeDown_StartRun
// *NodeDown_SetQuota
// *NodeDown_StopRun
// *NodeDown_Ping
Payload isNodeDown_Payload `protobuf_oneof:"payload"`
// contains filtered or unexported fields
}
NodeDown is anything a supervisor sends downstream to a node.
func (*NodeDown) Descriptor
deprecated
func (*NodeDown) GetAccepted ¶
func (*NodeDown) GetPayload ¶
func (x *NodeDown) GetPayload() isNodeDown_Payload
func (*NodeDown) GetSetQuota ¶
func (*NodeDown) GetStartRun ¶
func (*NodeDown) GetStopRun ¶
func (*NodeDown) ProtoMessage ¶
func (*NodeDown) ProtoMessage()
func (*NodeDown) ProtoReflect ¶
func (x *NodeDown) ProtoReflect() protoreflect.Message
type NodeDown_Accepted ¶
type NodeDown_Accepted struct {
Accepted *Accepted `protobuf:"bytes,1,opt,name=accepted,proto3,oneof"`
}
type NodeDown_Ping ¶
type NodeDown_Ping struct {
Ping *Ping `protobuf:"bytes,5,opt,name=ping,proto3,oneof"`
}
type NodeDown_SetQuota ¶
type NodeDown_SetQuota struct {
SetQuota *SetQuota `protobuf:"bytes,3,opt,name=set_quota,json=setQuota,proto3,oneof"`
}
type NodeDown_StartRun ¶
type NodeDown_StartRun struct {
StartRun *StartRun `protobuf:"bytes,2,opt,name=start_run,json=startRun,proto3,oneof"`
}
type NodeDown_StopRun ¶
type NodeDown_StopRun struct {
StopRun *StopRun `protobuf:"bytes,4,opt,name=stop_run,json=stopRun,proto3,oneof"`
}
type NodeHeartbeat ¶
type NodeHeartbeat struct {
Sequence int64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"`
ActiveVus uint32 `protobuf:"varint,2,opt,name=active_vus,json=activeVus,proto3" json:"active_vus,omitempty"`
HealthyWorkers uint32 `protobuf:"varint,3,opt,name=healthy_workers,json=healthyWorkers,proto3" json:"healthy_workers,omitempty"`
// This node's own process: an agent's supervisory footprint, or a
// worker's own usage generating load.
CpuPercent float64 `protobuf:"fixed64,4,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"`
MemBytes uint64 `protobuf:"varint,5,opt,name=mem_bytes,json=memBytes,proto3" json:"mem_bytes,omitempty"`
SentAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"`
// Per-worker breakdown, populated only by an agent reporting on the
// worker processes it supervises. Empty on a worker's own heartbeat,
// which has no children of its own to report.
Workers []*WorkerStats `protobuf:"bytes,7,rep,name=workers,proto3" json:"workers,omitempty"`
// contains filtered or unexported fields
}
NodeHeartbeat is sent on a fixed interval. Missing several in a row is how the coordinator detects a partitioned or dead node.
func (*NodeHeartbeat) Descriptor
deprecated
func (*NodeHeartbeat) Descriptor() ([]byte, []int)
Deprecated: Use NodeHeartbeat.ProtoReflect.Descriptor instead.
func (*NodeHeartbeat) GetActiveVus ¶
func (x *NodeHeartbeat) GetActiveVus() uint32
func (*NodeHeartbeat) GetCpuPercent ¶
func (x *NodeHeartbeat) GetCpuPercent() float64
func (*NodeHeartbeat) GetHealthyWorkers ¶
func (x *NodeHeartbeat) GetHealthyWorkers() uint32
func (*NodeHeartbeat) GetMemBytes ¶
func (x *NodeHeartbeat) GetMemBytes() uint64
func (*NodeHeartbeat) GetSentAt ¶
func (x *NodeHeartbeat) GetSentAt() *timestamppb.Timestamp
func (*NodeHeartbeat) GetSequence ¶
func (x *NodeHeartbeat) GetSequence() int64
func (*NodeHeartbeat) GetWorkers ¶
func (x *NodeHeartbeat) GetWorkers() []*WorkerStats
func (*NodeHeartbeat) ProtoMessage ¶
func (*NodeHeartbeat) ProtoMessage()
func (*NodeHeartbeat) ProtoReflect ¶
func (x *NodeHeartbeat) ProtoReflect() protoreflect.Message
func (*NodeHeartbeat) Reset ¶
func (x *NodeHeartbeat) Reset()
func (*NodeHeartbeat) String ¶
func (x *NodeHeartbeat) String() string
type NodeHello ¶
type NodeHello struct {
NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"`
Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
CpuCores uint32 `protobuf:"varint,4,opt,name=cpu_cores,json=cpuCores,proto3" json:"cpu_cores,omitempty"`
// Worker processes this node is willing to run.
MaxWorkers uint32 `protobuf:"varint,5,opt,name=max_workers,json=maxWorkers,proto3" json:"max_workers,omitempty"`
// Virtual users this node is willing to carry, across all its workers.
MaxVus uint32 `protobuf:"varint,6,opt,name=max_vus,json=maxVus,proto3" json:"max_vus,omitempty"`
Labels map[string]string `` /* 139-byte string literal not displayed */
// contains filtered or unexported fields
}
NodeHello is the first message on a control stream. It advertises what the node is and what it can carry, so the coordinator can apportion load in proportion to real capacity rather than assuming every node is identical.
func (*NodeHello) Descriptor
deprecated
func (*NodeHello) GetCpuCores ¶
func (*NodeHello) GetHostname ¶
func (*NodeHello) GetMaxWorkers ¶
func (*NodeHello) GetVersion ¶
func (*NodeHello) ProtoMessage ¶
func (*NodeHello) ProtoMessage()
func (*NodeHello) ProtoReflect ¶
func (x *NodeHello) ProtoReflect() protoreflect.Message
type NodeUp ¶
type NodeUp struct {
// Types that are valid to be assigned to Payload:
//
// *NodeUp_Hello
// *NodeUp_Heartbeat
// *NodeUp_Metrics
// *NodeUp_RunStatus
// *NodeUp_Log
// *NodeUp_Pong
Payload isNodeUp_Payload `protobuf_oneof:"payload"`
// contains filtered or unexported fields
}
NodeUp is anything a node sends upstream to its supervisor. Agents send it to the coordinator; workers send it to their agent.
func (*NodeUp) Descriptor
deprecated
func (*NodeUp) GetHeartbeat ¶
func (x *NodeUp) GetHeartbeat() *NodeHeartbeat
func (*NodeUp) GetMetrics ¶
func (x *NodeUp) GetMetrics() *MetricBatch
func (*NodeUp) GetPayload ¶
func (x *NodeUp) GetPayload() isNodeUp_Payload
func (*NodeUp) GetRunStatus ¶
func (x *NodeUp) GetRunStatus() *RunStatusUpdate
func (*NodeUp) ProtoMessage ¶
func (*NodeUp) ProtoMessage()
func (*NodeUp) ProtoReflect ¶
func (x *NodeUp) ProtoReflect() protoreflect.Message
type NodeUp_Heartbeat ¶
type NodeUp_Heartbeat struct {
Heartbeat *NodeHeartbeat `protobuf:"bytes,2,opt,name=heartbeat,proto3,oneof"`
}
type NodeUp_Hello ¶
type NodeUp_Hello struct {
Hello *NodeHello `protobuf:"bytes,1,opt,name=hello,proto3,oneof"`
}
type NodeUp_Log ¶
type NodeUp_Log struct {
Log *LogEvent `protobuf:"bytes,5,opt,name=log,proto3,oneof"`
}
type NodeUp_Metrics ¶
type NodeUp_Metrics struct {
Metrics *MetricBatch `protobuf:"bytes,3,opt,name=metrics,proto3,oneof"`
}
type NodeUp_Pong ¶
type NodeUp_Pong struct {
Pong *Pong `protobuf:"bytes,6,opt,name=pong,proto3,oneof"`
}
type NodeUp_RunStatus ¶
type NodeUp_RunStatus struct {
RunStatus *RunStatusUpdate `protobuf:"bytes,4,opt,name=run_status,json=runStatus,proto3,oneof"`
}
type Ping ¶
type Ping struct {
Nonce int64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
SentAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"`
// contains filtered or unexported fields
}
func (*Ping) Descriptor
deprecated
func (*Ping) GetSentAt ¶
func (x *Ping) GetSentAt() *timestamppb.Timestamp
func (*Ping) ProtoMessage ¶
func (*Ping) ProtoMessage()
func (*Ping) ProtoReflect ¶
func (x *Ping) ProtoReflect() protoreflect.Message
type Pong ¶
type Pong struct {
Nonce int64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
SentAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=sent_at,json=sentAt,proto3" json:"sent_at,omitempty"`
// contains filtered or unexported fields
}
func (*Pong) Descriptor
deprecated
func (*Pong) GetSentAt ¶
func (x *Pong) GetSentAt() *timestamppb.Timestamp
func (*Pong) ProtoMessage ¶
func (*Pong) ProtoMessage()
func (*Pong) ProtoReflect ¶
func (x *Pong) ProtoReflect() protoreflect.Message
type RunPhase ¶
type RunPhase int32
RunPhase is the lifecycle state of a run, tracked identically on the coordinator, on each agent, and in each worker.
const ( RunPhase_RUN_PHASE_UNSPECIFIED RunPhase = 0 RunPhase_RUN_PHASE_PENDING RunPhase = 1 RunPhase_RUN_PHASE_STARTING RunPhase = 2 RunPhase_RUN_PHASE_RUNNING RunPhase = 3 RunPhase_RUN_PHASE_STOPPING RunPhase = 4 RunPhase_RUN_PHASE_COMPLETED RunPhase = 5 RunPhase_RUN_PHASE_FAILED RunPhase = 6 RunPhase_RUN_PHASE_ABORTED RunPhase = 7 )
func (RunPhase) Descriptor ¶
func (RunPhase) Descriptor() protoreflect.EnumDescriptor
func (RunPhase) EnumDescriptor
deprecated
func (RunPhase) Number ¶
func (x RunPhase) Number() protoreflect.EnumNumber
func (RunPhase) Type ¶
func (RunPhase) Type() protoreflect.EnumType
type RunStatusUpdate ¶
type RunStatusUpdate struct {
RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
Phase RunPhase `protobuf:"varint,2,opt,name=phase,proto3,enum=loadwave.v1.RunPhase" json:"phase,omitempty"`
Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
ActiveVus uint32 `protobuf:"varint,4,opt,name=active_vus,json=activeVus,proto3" json:"active_vus,omitempty"`
CompletedIterations uint64 `protobuf:"varint,5,opt,name=completed_iterations,json=completedIterations,proto3" json:"completed_iterations,omitempty"`
// contains filtered or unexported fields
}
RunStatusUpdate reports a node's view of a run's progress.
func (*RunStatusUpdate) Descriptor
deprecated
func (*RunStatusUpdate) Descriptor() ([]byte, []int)
Deprecated: Use RunStatusUpdate.ProtoReflect.Descriptor instead.
func (*RunStatusUpdate) GetActiveVus ¶
func (x *RunStatusUpdate) GetActiveVus() uint32
func (*RunStatusUpdate) GetCompletedIterations ¶
func (x *RunStatusUpdate) GetCompletedIterations() uint64
func (*RunStatusUpdate) GetMessage ¶
func (x *RunStatusUpdate) GetMessage() string
func (*RunStatusUpdate) GetPhase ¶
func (x *RunStatusUpdate) GetPhase() RunPhase
func (*RunStatusUpdate) GetRunId ¶
func (x *RunStatusUpdate) GetRunId() string
func (*RunStatusUpdate) ProtoMessage ¶
func (*RunStatusUpdate) ProtoMessage()
func (*RunStatusUpdate) ProtoReflect ¶
func (x *RunStatusUpdate) ProtoReflect() protoreflect.Message
func (*RunStatusUpdate) Reset ¶
func (x *RunStatusUpdate) Reset()
func (*RunStatusUpdate) String ¶
func (x *RunStatusUpdate) String() string
type ScenarioRef ¶
type ScenarioRef struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Weight uint32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"`
// contains filtered or unexported fields
}
ScenarioRef picks a registered scenario and sets its relative share of iterations. A VU picks a scenario per iteration, weighted by these values.
func (*ScenarioRef) Descriptor
deprecated
func (*ScenarioRef) Descriptor() ([]byte, []int)
Deprecated: Use ScenarioRef.ProtoReflect.Descriptor instead.
func (*ScenarioRef) GetName ¶
func (x *ScenarioRef) GetName() string
func (*ScenarioRef) GetWeight ¶
func (x *ScenarioRef) GetWeight() uint32
func (*ScenarioRef) ProtoMessage ¶
func (*ScenarioRef) ProtoMessage()
func (*ScenarioRef) ProtoReflect ¶
func (x *ScenarioRef) ProtoReflect() protoreflect.Message
func (*ScenarioRef) Reset ¶
func (x *ScenarioRef) Reset()
func (*ScenarioRef) String ¶
func (x *ScenarioRef) String() string
type SeriesDelta ¶
type SeriesDelta struct {
Metric string `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"`
Kind MetricKind `protobuf:"varint,2,opt,name=kind,proto3,enum=loadwave.v1.MetricKind" json:"kind,omitempty"`
Tags map[string]string `` /* 135-byte string literal not displayed */
Count uint64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"`
Sum float64 `protobuf:"fixed64,5,opt,name=sum,proto3" json:"sum,omitempty"`
Min float64 `protobuf:"fixed64,6,opt,name=min,proto3" json:"min,omitempty"`
Max float64 `protobuf:"fixed64,7,opt,name=max,proto3" json:"max,omitempty"`
// Populated for TREND metrics only.
Histogram *HistogramSnapshot `protobuf:"bytes,8,opt,name=histogram,proto3" json:"histogram,omitempty"`
// Populated for RATE metrics: how many of `count` observations were truthy.
NonZero uint64 `protobuf:"varint,9,opt,name=non_zero,json=nonZero,proto3" json:"non_zero,omitempty"`
// contains filtered or unexported fields
}
SeriesDelta is one metric's activity within a single time bucket on a single node. It is a delta, never a running total, so that a dropped batch costs one bucket rather than corrupting every bucket after it.
func (*SeriesDelta) Descriptor
deprecated
func (*SeriesDelta) Descriptor() ([]byte, []int)
Deprecated: Use SeriesDelta.ProtoReflect.Descriptor instead.
func (*SeriesDelta) GetCount ¶
func (x *SeriesDelta) GetCount() uint64
func (*SeriesDelta) GetHistogram ¶
func (x *SeriesDelta) GetHistogram() *HistogramSnapshot
func (*SeriesDelta) GetKind ¶
func (x *SeriesDelta) GetKind() MetricKind
func (*SeriesDelta) GetMax ¶
func (x *SeriesDelta) GetMax() float64
func (*SeriesDelta) GetMetric ¶
func (x *SeriesDelta) GetMetric() string
func (*SeriesDelta) GetMin ¶
func (x *SeriesDelta) GetMin() float64
func (*SeriesDelta) GetNonZero ¶
func (x *SeriesDelta) GetNonZero() uint64
func (*SeriesDelta) GetSum ¶
func (x *SeriesDelta) GetSum() float64
func (*SeriesDelta) GetTags ¶
func (x *SeriesDelta) GetTags() map[string]string
func (*SeriesDelta) ProtoMessage ¶
func (*SeriesDelta) ProtoMessage()
func (*SeriesDelta) ProtoReflect ¶
func (x *SeriesDelta) ProtoReflect() protoreflect.Message
func (*SeriesDelta) Reset ¶
func (x *SeriesDelta) Reset()
func (*SeriesDelta) String ¶
func (x *SeriesDelta) String() string
type SetQuota ¶
type SetQuota struct {
RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
VuQuota uint32 `protobuf:"varint,2,opt,name=vu_quota,json=vuQuota,proto3" json:"vu_quota,omitempty"`
IterationRateQuota uint32 `protobuf:"varint,3,opt,name=iteration_rate_quota,json=iterationRateQuota,proto3" json:"iteration_rate_quota,omitempty"`
// How long the node should take to reach the new virtual user quota.
//
// Zero means immediately, which is what a rebalance after an agent is lost
// wants: the surviving nodes should pick up the missing load now, not in a
// minute. An operator changing the target usually wants the opposite —
// spawning several hundred users in one tick is a step change that tells
// you how the service handles a thundering herd, not how it handles the
// load level you asked for.
Ramp *durationpb.Duration `protobuf:"bytes,4,opt,name=ramp,proto3" json:"ramp,omitempty"`
// contains filtered or unexported fields
}
SetQuota rebalances a running node's share, either because the operator scaled the run or because another node joined or died.
func (*SetQuota) Descriptor
deprecated
func (*SetQuota) GetIterationRateQuota ¶
func (*SetQuota) GetRamp ¶
func (x *SetQuota) GetRamp() *durationpb.Duration
func (*SetQuota) GetVuQuota ¶
func (*SetQuota) ProtoMessage ¶
func (*SetQuota) ProtoMessage()
func (*SetQuota) ProtoReflect ¶
func (x *SetQuota) ProtoReflect() protoreflect.Message
type Stage ¶
type Stage struct {
Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"`
Target uint32 `protobuf:"varint,2,opt,name=target,proto3" json:"target,omitempty"`
// contains filtered or unexported fields
}
Stage is one leg of a ramping-vus profile. The VU count moves linearly from whatever it was at the end of the previous stage to `target` over `duration`.
func (*Stage) Descriptor
deprecated
func (*Stage) GetDuration ¶
func (x *Stage) GetDuration() *durationpb.Duration
func (*Stage) ProtoMessage ¶
func (*Stage) ProtoMessage()
func (*Stage) ProtoReflect ¶
func (x *Stage) ProtoReflect() protoreflect.Message
type StartRun ¶
type StartRun struct {
RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
Plan *TestPlan `protobuf:"bytes,2,opt,name=plan,proto3" json:"plan,omitempty"`
// VUs this node is responsible for at peak. The node scales within this
// ceiling as the profile ramps.
VuQuota uint32 `protobuf:"varint,3,opt,name=vu_quota,json=vuQuota,proto3" json:"vu_quota,omitempty"`
// Worker processes to spawn. Meaningful for agents; ignored by workers.
WorkerCount uint32 `protobuf:"varint,4,opt,name=worker_count,json=workerCount,proto3" json:"worker_count,omitempty"`
// Iterations per second this node may start, zero for unlimited.
IterationRateQuota uint32 `protobuf:"varint,5,opt,name=iteration_rate_quota,json=iterationRateQuota,proto3" json:"iteration_rate_quota,omitempty"`
// Total iterations this node should complete before stopping, zero for
// unbounded. Set only when the plan caps total iterations.
IterationQuota uint64 `protobuf:"varint,9,opt,name=iteration_quota,json=iterationQuota,proto3" json:"iteration_quota,omitempty"`
// Wall-clock instant at which every node should consider the run started,
// so ramp curves line up across hosts despite staggered delivery.
StartAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=start_at,json=startAt,proto3" json:"start_at,omitempty"`
// This node's index and the total node count, used to deterministically
// partition shared test data without any cross-node coordination.
ShardIndex uint32 `protobuf:"varint,7,opt,name=shard_index,json=shardIndex,proto3" json:"shard_index,omitempty"`
ShardCount uint32 `protobuf:"varint,8,opt,name=shard_count,json=shardCount,proto3" json:"shard_count,omitempty"`
// First virtual user id this node may allocate. The supervisor hands out
// non-overlapping ranges so that every VU in a distributed run has a
// globally unique id without any node having to ask for one.
VuIdBase int64 `protobuf:"varint,10,opt,name=vu_id_base,json=vuIdBase,proto3" json:"vu_id_base,omitempty"`
// contains filtered or unexported fields
}
StartRun instructs a node to begin executing its share of a run.
func (*StartRun) Descriptor
deprecated
func (*StartRun) GetIterationQuota ¶
func (*StartRun) GetIterationRateQuota ¶
func (*StartRun) GetShardCount ¶
func (*StartRun) GetShardIndex ¶
func (*StartRun) GetStartAt ¶
func (x *StartRun) GetStartAt() *timestamppb.Timestamp
func (*StartRun) GetVuIdBase ¶
func (*StartRun) GetVuQuota ¶
func (*StartRun) GetWorkerCount ¶
func (*StartRun) ProtoMessage ¶
func (*StartRun) ProtoMessage()
func (*StartRun) ProtoReflect ¶
func (x *StartRun) ProtoReflect() protoreflect.Message
type StopRun ¶
type StopRun struct {
RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"run_id,omitempty"`
Graceful bool `protobuf:"varint,2,opt,name=graceful,proto3" json:"graceful,omitempty"`
Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"`
// contains filtered or unexported fields
}
StopRun ends a run. A graceful stop lets in-flight iterations finish within the plan's graceful_stop window; a non-graceful stop cancels immediately.
func (*StopRun) Descriptor
deprecated
func (*StopRun) GetGraceful ¶
func (*StopRun) ProtoMessage ¶
func (*StopRun) ProtoMessage()
func (*StopRun) ProtoReflect ¶
func (x *StopRun) ProtoReflect() protoreflect.Message
type TestPlan ¶
type TestPlan struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
BaseUrl string `protobuf:"bytes,2,opt,name=base_url,json=baseUrl,proto3" json:"base_url,omitempty"`
Load *LoadProfile `protobuf:"bytes,3,opt,name=load,proto3" json:"load,omitempty"`
Scenarios []*ScenarioRef `protobuf:"bytes,4,rep,name=scenarios,proto3" json:"scenarios,omitempty"`
Thresholds []*Threshold `protobuf:"bytes,5,rep,name=thresholds,proto3" json:"thresholds,omitempty"`
Tags map[string]string `` /* 135-byte string literal not displayed */
// Worker processes each agent should spawn for this run. Zero lets the
// agent choose based on its core count.
WorkersPerAgent uint32 `protobuf:"varint,7,opt,name=workers_per_agent,json=workersPerAgent,proto3" json:"workers_per_agent,omitempty"`
// Verbatim YAML of the configuration this plan was built from.
//
// Workers need more than the structured fields above: the HTTP client
// settings, and the step definitions of any declaratively-authored
// scenario. Rather than mirror the whole configuration schema into
// protobuf — and have to keep the two in step forever — the original
// source travels with the plan and each worker parses it locally.
ConfigYaml []byte `protobuf:"bytes,8,opt,name=config_yaml,json=configYaml,proto3" json:"config_yaml,omitempty"`
// contains filtered or unexported fields
}
TestPlan is the complete, self-contained description of a run. Everything an agent needs to execute its share is in here, so agents hold no prior state.
func (*TestPlan) Descriptor
deprecated
func (*TestPlan) GetBaseUrl ¶
func (*TestPlan) GetConfigYaml ¶
func (*TestPlan) GetLoad ¶
func (x *TestPlan) GetLoad() *LoadProfile
func (*TestPlan) GetScenarios ¶
func (x *TestPlan) GetScenarios() []*ScenarioRef
func (*TestPlan) GetThresholds ¶
func (*TestPlan) GetWorkersPerAgent ¶
func (*TestPlan) ProtoMessage ¶
func (*TestPlan) ProtoMessage()
func (*TestPlan) ProtoReflect ¶
func (x *TestPlan) ProtoReflect() protoreflect.Message
type Threshold ¶
type Threshold struct {
Metric string `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"`
Stat ThresholdStat `protobuf:"varint,2,opt,name=stat,proto3,enum=loadwave.v1.ThresholdStat" json:"stat,omitempty"`
Op ThresholdOp `protobuf:"varint,3,opt,name=op,proto3,enum=loadwave.v1.ThresholdOp" json:"op,omitempty"`
Value float64 `protobuf:"fixed64,4,opt,name=value,proto3" json:"value,omitempty"`
// Abort the run immediately on breach rather than only failing at the end.
AbortOnFail bool `protobuf:"varint,5,opt,name=abort_on_fail,json=abortOnFail,proto3" json:"abort_on_fail,omitempty"`
// contains filtered or unexported fields
}
Threshold is a pass/fail assertion over an aggregated metric. A run that breaches any threshold exits non-zero, which is what makes LoadWave usable as a CI gate.
func (*Threshold) Descriptor
deprecated
func (*Threshold) GetAbortOnFail ¶
func (*Threshold) GetOp ¶
func (x *Threshold) GetOp() ThresholdOp
func (*Threshold) GetStat ¶
func (x *Threshold) GetStat() ThresholdStat
func (*Threshold) ProtoMessage ¶
func (*Threshold) ProtoMessage()
func (*Threshold) ProtoReflect ¶
func (x *Threshold) ProtoReflect() protoreflect.Message
type ThresholdOp ¶
type ThresholdOp int32
ThresholdOp is the comparison applied as `stat op value`.
const ( ThresholdOp_THRESHOLD_OP_UNSPECIFIED ThresholdOp = 0 ThresholdOp_THRESHOLD_OP_LT ThresholdOp = 1 ThresholdOp_THRESHOLD_OP_LTE ThresholdOp = 2 ThresholdOp_THRESHOLD_OP_GT ThresholdOp = 3 ThresholdOp_THRESHOLD_OP_GTE ThresholdOp = 4 )
func (ThresholdOp) Descriptor ¶
func (ThresholdOp) Descriptor() protoreflect.EnumDescriptor
func (ThresholdOp) Enum ¶
func (x ThresholdOp) Enum() *ThresholdOp
func (ThresholdOp) EnumDescriptor
deprecated
func (ThresholdOp) EnumDescriptor() ([]byte, []int)
Deprecated: Use ThresholdOp.Descriptor instead.
func (ThresholdOp) Number ¶
func (x ThresholdOp) Number() protoreflect.EnumNumber
func (ThresholdOp) String ¶
func (x ThresholdOp) String() string
func (ThresholdOp) Type ¶
func (ThresholdOp) Type() protoreflect.EnumType
type ThresholdStat ¶
type ThresholdStat int32
ThresholdStat is the aggregate a threshold is evaluated against.
const ( ThresholdStat_THRESHOLD_STAT_UNSPECIFIED ThresholdStat = 0 ThresholdStat_THRESHOLD_STAT_COUNT ThresholdStat = 1 ThresholdStat_THRESHOLD_STAT_RATE ThresholdStat = 2 ThresholdStat_THRESHOLD_STAT_AVG ThresholdStat = 3 ThresholdStat_THRESHOLD_STAT_MIN ThresholdStat = 4 ThresholdStat_THRESHOLD_STAT_MAX ThresholdStat = 5 ThresholdStat_THRESHOLD_STAT_P50 ThresholdStat = 6 ThresholdStat_THRESHOLD_STAT_P90 ThresholdStat = 7 ThresholdStat_THRESHOLD_STAT_P95 ThresholdStat = 8 ThresholdStat_THRESHOLD_STAT_P99 ThresholdStat = 9 ThresholdStat_THRESHOLD_STAT_P999 ThresholdStat = 10 )
func (ThresholdStat) Descriptor ¶
func (ThresholdStat) Descriptor() protoreflect.EnumDescriptor
func (ThresholdStat) Enum ¶
func (x ThresholdStat) Enum() *ThresholdStat
func (ThresholdStat) EnumDescriptor
deprecated
func (ThresholdStat) EnumDescriptor() ([]byte, []int)
Deprecated: Use ThresholdStat.Descriptor instead.
func (ThresholdStat) Number ¶
func (x ThresholdStat) Number() protoreflect.EnumNumber
func (ThresholdStat) String ¶
func (x ThresholdStat) String() string
func (ThresholdStat) Type ¶
func (ThresholdStat) Type() protoreflect.EnumType
type UnimplementedControlServiceServer ¶
type UnimplementedControlServiceServer struct{}
UnimplementedControlServiceServer must be embedded to have forward compatible implementations.
NOTE: this should be embedded by value instead of pointer to avoid a nil pointer dereference when methods are called.
func (UnimplementedControlServiceServer) Join ¶
func (UnimplementedControlServiceServer) Join(grpc.BidiStreamingServer[NodeUp, NodeDown]) error
type UnsafeControlServiceServer ¶
type UnsafeControlServiceServer interface {
// contains filtered or unexported methods
}
UnsafeControlServiceServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to ControlServiceServer will result in compilation errors.
type WorkerStats ¶
type WorkerStats struct {
WorkerId string `protobuf:"bytes,1,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty"`
Index uint32 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
ActiveVus uint32 `protobuf:"varint,3,opt,name=active_vus,json=activeVus,proto3" json:"active_vus,omitempty"`
CpuPercent float64 `protobuf:"fixed64,4,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"`
MemBytes uint64 `protobuf:"varint,5,opt,name=mem_bytes,json=memBytes,proto3" json:"mem_bytes,omitempty"`
// contains filtered or unexported fields
}
WorkerStats is one worker process's resource usage, as its supervising agent measured it — the detail an aggregate agent-level figure would hide, such as one worker process starved for CPU while its siblings on the same host are not.
func (*WorkerStats) Descriptor
deprecated
func (*WorkerStats) Descriptor() ([]byte, []int)
Deprecated: Use WorkerStats.ProtoReflect.Descriptor instead.
func (*WorkerStats) GetActiveVus ¶
func (x *WorkerStats) GetActiveVus() uint32
func (*WorkerStats) GetCpuPercent ¶
func (x *WorkerStats) GetCpuPercent() float64
func (*WorkerStats) GetIndex ¶
func (x *WorkerStats) GetIndex() uint32
func (*WorkerStats) GetMemBytes ¶
func (x *WorkerStats) GetMemBytes() uint64
func (*WorkerStats) GetWorkerId ¶
func (x *WorkerStats) GetWorkerId() string
func (*WorkerStats) ProtoMessage ¶
func (*WorkerStats) ProtoMessage()
func (*WorkerStats) ProtoReflect ¶
func (x *WorkerStats) ProtoReflect() protoreflect.Message
func (*WorkerStats) Reset ¶
func (x *WorkerStats) Reset()
func (*WorkerStats) String ¶
func (x *WorkerStats) String() string