loadwavev1

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2026 License: AGPL-3.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ControlService_Join_FullMethodName = "/loadwave.v1.ControlService/Join"
)

Variables

View Source
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.

View Source
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.

View Source
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.

View Source
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.

View Source
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.

View Source
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.

View Source
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)

View Source
var File_loadwave_v1_control_proto protoreflect.FileDescriptor
View Source
var File_loadwave_v1_metrics_proto protoreflect.FileDescriptor
View Source
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) Descriptor() ([]byte, []int)

Deprecated: Use Accepted.ProtoReflect.Descriptor instead.

func (*Accepted) GetAssignedNodeId

func (x *Accepted) GetAssignedNodeId() string

func (*Accepted) GetHeartbeatInterval

func (x *Accepted) GetHeartbeatInterval() *durationpb.Duration

func (*Accepted) GetMetricsInterval

func (x *Accepted) GetMetricsInterval() *durationpb.Duration

func (*Accepted) GetSupervisorVersion

func (x *Accepted) GetSupervisorVersion() string

func (*Accepted) ProtoMessage

func (*Accepted) ProtoMessage()

func (*Accepted) ProtoReflect

func (x *Accepted) ProtoReflect() protoreflect.Message

func (*Accepted) Reset

func (x *Accepted) Reset()

func (*Accepted) String

func (x *Accepted) String() string

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.

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) Enum

func (x ExecutorType) Enum() *ExecutorType

func (ExecutorType) EnumDescriptor deprecated

func (ExecutorType) EnumDescriptor() ([]byte, []int)

Deprecated: Use ExecutorType.Descriptor instead.

func (ExecutorType) Number

func (ExecutorType) String

func (x ExecutorType) String() string

func (ExecutorType) Type

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) Descriptor() ([]byte, []int)

Deprecated: Use LogEvent.ProtoReflect.Descriptor instead.

func (*LogEvent) GetFields

func (x *LogEvent) GetFields() map[string]string

func (*LogEvent) GetLevel

func (x *LogEvent) GetLevel() LogLevel

func (*LogEvent) GetMessage

func (x *LogEvent) GetMessage() string

func (*LogEvent) GetNodeId

func (x *LogEvent) GetNodeId() string

func (*LogEvent) GetRunId

func (x *LogEvent) GetRunId() string

func (*LogEvent) GetTime

func (x *LogEvent) GetTime() *timestamppb.Timestamp

func (*LogEvent) ProtoMessage

func (*LogEvent) ProtoMessage()

func (*LogEvent) ProtoReflect

func (x *LogEvent) ProtoReflect() protoreflect.Message

func (*LogEvent) Reset

func (x *LogEvent) Reset()

func (*LogEvent) String

func (x *LogEvent) String() string

type LogLevel

type LogLevel int32
const (
	LogLevel_LOG_LEVEL_UNSPECIFIED LogLevel = 0
	LogLevel_LOG_LEVEL_DEBUG       LogLevel = 1
	LogLevel_LOG_LEVEL_INFO        LogLevel = 2
	LogLevel_LOG_LEVEL_WARN        LogLevel = 3
	LogLevel_LOG_LEVEL_ERROR       LogLevel = 4
)

func (LogLevel) Descriptor

func (LogLevel) Descriptor() protoreflect.EnumDescriptor

func (LogLevel) Enum

func (x LogLevel) Enum() *LogLevel

func (LogLevel) EnumDescriptor deprecated

func (LogLevel) EnumDescriptor() ([]byte, []int)

Deprecated: Use LogLevel.Descriptor instead.

func (LogLevel) Number

func (x LogLevel) Number() protoreflect.EnumNumber

func (LogLevel) String

func (x LogLevel) String() string

func (LogLevel) Type

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

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) Descriptor() ([]byte, []int)

Deprecated: Use NodeDown.ProtoReflect.Descriptor instead.

func (*NodeDown) GetAccepted

func (x *NodeDown) GetAccepted() *Accepted

func (*NodeDown) GetPayload

func (x *NodeDown) GetPayload() isNodeDown_Payload

func (*NodeDown) GetPing

func (x *NodeDown) GetPing() *Ping

func (*NodeDown) GetSetQuota

func (x *NodeDown) GetSetQuota() *SetQuota

func (*NodeDown) GetStartRun

func (x *NodeDown) GetStartRun() *StartRun

func (*NodeDown) GetStopRun

func (x *NodeDown) GetStopRun() *StopRun

func (*NodeDown) ProtoMessage

func (*NodeDown) ProtoMessage()

func (*NodeDown) ProtoReflect

func (x *NodeDown) ProtoReflect() protoreflect.Message

func (*NodeDown) Reset

func (x *NodeDown) Reset()

func (*NodeDown) String

func (x *NodeDown) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use NodeHello.ProtoReflect.Descriptor instead.

func (*NodeHello) GetCpuCores

func (x *NodeHello) GetCpuCores() uint32

func (*NodeHello) GetHostname

func (x *NodeHello) GetHostname() string

func (*NodeHello) GetLabels

func (x *NodeHello) GetLabels() map[string]string

func (*NodeHello) GetMaxVus

func (x *NodeHello) GetMaxVus() uint32

func (*NodeHello) GetMaxWorkers

func (x *NodeHello) GetMaxWorkers() uint32

func (*NodeHello) GetNodeId

func (x *NodeHello) GetNodeId() string

func (*NodeHello) GetVersion

func (x *NodeHello) GetVersion() string

func (*NodeHello) ProtoMessage

func (*NodeHello) ProtoMessage()

func (*NodeHello) ProtoReflect

func (x *NodeHello) ProtoReflect() protoreflect.Message

func (*NodeHello) Reset

func (x *NodeHello) Reset()

func (*NodeHello) String

func (x *NodeHello) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use NodeUp.ProtoReflect.Descriptor instead.

func (*NodeUp) GetHeartbeat

func (x *NodeUp) GetHeartbeat() *NodeHeartbeat

func (*NodeUp) GetHello

func (x *NodeUp) GetHello() *NodeHello

func (*NodeUp) GetLog

func (x *NodeUp) GetLog() *LogEvent

func (*NodeUp) GetMetrics

func (x *NodeUp) GetMetrics() *MetricBatch

func (*NodeUp) GetPayload

func (x *NodeUp) GetPayload() isNodeUp_Payload

func (*NodeUp) GetPong

func (x *NodeUp) GetPong() *Pong

func (*NodeUp) GetRunStatus

func (x *NodeUp) GetRunStatus() *RunStatusUpdate

func (*NodeUp) ProtoMessage

func (*NodeUp) ProtoMessage()

func (*NodeUp) ProtoReflect

func (x *NodeUp) ProtoReflect() protoreflect.Message

func (*NodeUp) Reset

func (x *NodeUp) Reset()

func (*NodeUp) String

func (x *NodeUp) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use Ping.ProtoReflect.Descriptor instead.

func (*Ping) GetNonce

func (x *Ping) GetNonce() int64

func (*Ping) GetSentAt

func (x *Ping) GetSentAt() *timestamppb.Timestamp

func (*Ping) ProtoMessage

func (*Ping) ProtoMessage()

func (*Ping) ProtoReflect

func (x *Ping) ProtoReflect() protoreflect.Message

func (*Ping) Reset

func (x *Ping) Reset()

func (*Ping) String

func (x *Ping) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use Pong.ProtoReflect.Descriptor instead.

func (*Pong) GetNonce

func (x *Pong) GetNonce() int64

func (*Pong) GetSentAt

func (x *Pong) GetSentAt() *timestamppb.Timestamp

func (*Pong) ProtoMessage

func (*Pong) ProtoMessage()

func (*Pong) ProtoReflect

func (x *Pong) ProtoReflect() protoreflect.Message

func (*Pong) Reset

func (x *Pong) Reset()

func (*Pong) String

func (x *Pong) String() string

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) Enum

func (x RunPhase) Enum() *RunPhase

func (RunPhase) EnumDescriptor deprecated

func (RunPhase) EnumDescriptor() ([]byte, []int)

Deprecated: Use RunPhase.Descriptor instead.

func (RunPhase) Number

func (x RunPhase) Number() protoreflect.EnumNumber

func (RunPhase) String

func (x RunPhase) String() string

func (RunPhase) Type

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) Descriptor() ([]byte, []int)

Deprecated: Use SetQuota.ProtoReflect.Descriptor instead.

func (*SetQuota) GetIterationRateQuota

func (x *SetQuota) GetIterationRateQuota() uint32

func (*SetQuota) GetRamp

func (x *SetQuota) GetRamp() *durationpb.Duration

func (*SetQuota) GetRunId

func (x *SetQuota) GetRunId() string

func (*SetQuota) GetVuQuota

func (x *SetQuota) GetVuQuota() uint32

func (*SetQuota) ProtoMessage

func (*SetQuota) ProtoMessage()

func (*SetQuota) ProtoReflect

func (x *SetQuota) ProtoReflect() protoreflect.Message

func (*SetQuota) Reset

func (x *SetQuota) Reset()

func (*SetQuota) String

func (x *SetQuota) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use Stage.ProtoReflect.Descriptor instead.

func (*Stage) GetDuration

func (x *Stage) GetDuration() *durationpb.Duration

func (*Stage) GetTarget

func (x *Stage) GetTarget() uint32

func (*Stage) ProtoMessage

func (*Stage) ProtoMessage()

func (*Stage) ProtoReflect

func (x *Stage) ProtoReflect() protoreflect.Message

func (*Stage) Reset

func (x *Stage) Reset()

func (*Stage) String

func (x *Stage) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use StartRun.ProtoReflect.Descriptor instead.

func (*StartRun) GetIterationQuota

func (x *StartRun) GetIterationQuota() uint64

func (*StartRun) GetIterationRateQuota

func (x *StartRun) GetIterationRateQuota() uint32

func (*StartRun) GetPlan

func (x *StartRun) GetPlan() *TestPlan

func (*StartRun) GetRunId

func (x *StartRun) GetRunId() string

func (*StartRun) GetShardCount

func (x *StartRun) GetShardCount() uint32

func (*StartRun) GetShardIndex

func (x *StartRun) GetShardIndex() uint32

func (*StartRun) GetStartAt

func (x *StartRun) GetStartAt() *timestamppb.Timestamp

func (*StartRun) GetVuIdBase

func (x *StartRun) GetVuIdBase() int64

func (*StartRun) GetVuQuota

func (x *StartRun) GetVuQuota() uint32

func (*StartRun) GetWorkerCount

func (x *StartRun) GetWorkerCount() uint32

func (*StartRun) ProtoMessage

func (*StartRun) ProtoMessage()

func (*StartRun) ProtoReflect

func (x *StartRun) ProtoReflect() protoreflect.Message

func (*StartRun) Reset

func (x *StartRun) Reset()

func (*StartRun) String

func (x *StartRun) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use StopRun.ProtoReflect.Descriptor instead.

func (*StopRun) GetGraceful

func (x *StopRun) GetGraceful() bool

func (*StopRun) GetReason

func (x *StopRun) GetReason() string

func (*StopRun) GetRunId

func (x *StopRun) GetRunId() string

func (*StopRun) ProtoMessage

func (*StopRun) ProtoMessage()

func (*StopRun) ProtoReflect

func (x *StopRun) ProtoReflect() protoreflect.Message

func (*StopRun) Reset

func (x *StopRun) Reset()

func (*StopRun) String

func (x *StopRun) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use TestPlan.ProtoReflect.Descriptor instead.

func (*TestPlan) GetBaseUrl

func (x *TestPlan) GetBaseUrl() string

func (*TestPlan) GetConfigYaml

func (x *TestPlan) GetConfigYaml() []byte

func (*TestPlan) GetLoad

func (x *TestPlan) GetLoad() *LoadProfile

func (*TestPlan) GetName

func (x *TestPlan) GetName() string

func (*TestPlan) GetScenarios

func (x *TestPlan) GetScenarios() []*ScenarioRef

func (*TestPlan) GetTags

func (x *TestPlan) GetTags() map[string]string

func (*TestPlan) GetThresholds

func (x *TestPlan) GetThresholds() []*Threshold

func (*TestPlan) GetWorkersPerAgent

func (x *TestPlan) GetWorkersPerAgent() uint32

func (*TestPlan) ProtoMessage

func (*TestPlan) ProtoMessage()

func (*TestPlan) ProtoReflect

func (x *TestPlan) ProtoReflect() protoreflect.Message

func (*TestPlan) Reset

func (x *TestPlan) Reset()

func (*TestPlan) String

func (x *TestPlan) String() string

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) Descriptor() ([]byte, []int)

Deprecated: Use Threshold.ProtoReflect.Descriptor instead.

func (*Threshold) GetAbortOnFail

func (x *Threshold) GetAbortOnFail() bool

func (*Threshold) GetMetric

func (x *Threshold) GetMetric() string

func (*Threshold) GetOp

func (x *Threshold) GetOp() ThresholdOp

func (*Threshold) GetStat

func (x *Threshold) GetStat() ThresholdStat

func (*Threshold) GetValue

func (x *Threshold) GetValue() float64

func (*Threshold) ProtoMessage

func (*Threshold) ProtoMessage()

func (*Threshold) ProtoReflect

func (x *Threshold) ProtoReflect() protoreflect.Message

func (*Threshold) Reset

func (x *Threshold) Reset()

func (*Threshold) String

func (x *Threshold) String() string

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) 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

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) Enum

func (x ThresholdStat) Enum() *ThresholdStat

func (ThresholdStat) EnumDescriptor deprecated

func (ThresholdStat) EnumDescriptor() ([]byte, []int)

Deprecated: Use ThresholdStat.Descriptor instead.

func (ThresholdStat) Number

func (ThresholdStat) String

func (x ThresholdStat) String() string

func (ThresholdStat) Type

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

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL