Documentation
¶
Overview ¶
Package rpcgrpc pkg/visor/rpcgrpc/client.go c3-vis-core
Package rpcgrpc pkg/visor/rpcgrpc/server.go c3-vis-core
Package rpcgrpc pkg/visor/rpcgrpc/server_mux_bandwidth.go c3-vis-core server-side implementation of the StreamMuxBandwidth gRPC RPC.
Test the operator's hypothesis: bandwidth aggregated across N parallel routes (with min_hops >= 2 forcing the routes through intermediates) should exceed the bandwidth of the single direct transport between the same two visors. This RPC drives N concurrent pump goroutines, sums their throughput, and emits periodic samples + a terminal Done event.
Pump shape (per route, in its own goroutine):
- Dial (with MinHops constraint when set).
- Pump bytes via PingOnceWithEcho until ctx-cancel or cfg.Duration elapsed. Each call returns (sent, recvd, _, err).
- On goroutine exit, decrement activeRoutes.
Sampler shape (one goroutine total):
- On a sample_interval ticker, sum all routes' counters and emit a MuxBandwidthSample event.
Optional probe shape (one goroutine when ProbeRtt is set):
- On a probe_interval ticker, run a single PingOnce on the first established route. Emit a MuxRttProbe event per attempt.
All goroutines share a bounded event channel; a single sender drains it to stream.Send so events arrive in a serializable order.
Package rpcgrpc pkg/visor/rpcgrpc/server_ping_tree.go c3-vis-core implementation of the StreamPingTree gRPC RPC. Replaces the client-side BFS in cmd/skywire-cli/commands/visor/ping/tree.go, giving the visor direct access to per-transport latency data and the route-finder graph without paying for RPC roundtrips per BFS step.
Wire shape: per ping.proto, one PingTreeEvent per discovered entry / ping result / level boundary / run terminus. Per-level concurrency, ctx.Done() observed at every BFS iteration, bounded event channel with drop-StatusUpdate-before-PingResult policy.
Authorization: TODO — first cut runs unauthenticated for development; follow-up PR gates on the dmsgWL whitelist (hypervisors + own PK + Dmsgpty.Whitelist) before opening to the network. Local CLI use over the unix-socket RPC is implicitly trusted via filesystem permissions; the gate matters for the dmsg-port gRPC entry point.
Package rpcgrpc pkg/visor/rpcgrpc/server_policy_bandwidth.go c3-vis-core the `policy-bw` control layer that drives the in-process mux-bandwidth rig through the WASM / Starlark routing-policy engine — proving a preset is demonstrably ADAPTIVE over a live multiplexed route.
Where the pure mux-bw baseline (server_mux_bandwidth.go) plans a fixed set of disjoint routes and pumps them unchanged for the whole run, this layer:
- at dial time, calls the engine's decide_route hook to pick the mux leg count + min-hops (muxBwController.decideAtDial), then reuses the same disjoint planner + setup path; and
- during the pump, on the preset's rotation cadence, fires the engine's on_tick hook against the live per-leg stats and applies the returned RotationAction — dropping / adding legs and promoting / demoting warm standbys (muxBwController.controlLoop → applyRotation).
The leg-management surface is the in-process analog of the route group's RotationAction executor (pkg/router/route_group.go rotationServiceFn): a drop cancels one leg's pump + tears down its conn; an add plans a fresh disjoint route and spawns a pump; a demote parks a leg on warm standby (conn kept alive via a keepalive ping, not byte-pumped) and a promote resumes it instantly with no re-dial. Route-group LegInfo semantics are preserved so a preset written against the app path behaves identically here: leg indices are slice positions that compact after a drop, and each leg's TransportID (the key a preset uses to smooth an EWMA across ticks) is its stable intermediate PK.
Concurrency: active/all and the sampler tracker are touched ONLY by the single controlLoop goroutine (after a happens-before init in startPumps), so they need no lock; the pump goroutines share state only through the per-leg atomics on muxBwRouteState. totals()/peaks() are read after pumpWg.Wait(), i.e. once controlLoop has returned.
Package rpcgrpc pkg/visor/rpcgrpc/server_routegroup_mux_info.go c3-vis-core server-side implementation of the StreamRouteGroupMuxInfo gRPC RPC.
This is the server-streaming counterpart of the unary RouteGroupMuxInfo net/rpc call. 'cli proxy mux plot' (default, watch-a-running-app mode) used to poll that unary RPC once per --interval — a gob round-trip per tick that read choppy next to the --pk StreamMuxBandwidth path. This RPC pushes the same per-leg breakdown on a server-side ticker so the plot updates smoothly/continuously without per-tick connection overhead.
Package rpcgrpc pkg/visor/rpcgrpc/systemstats.go c3-vis-core
Index ¶
- Constants
- Variables
- func RegisterPingServiceServer(s grpc.ServiceRegistrar, srv PingServiceServer)
- type AppLogCallback
- type AppLogEntry
- func (*AppLogEntry) Descriptor() ([]byte, []int)deprecated
- func (x *AppLogEntry) GetFields() map[string]string
- func (x *AppLogEntry) GetLevel() string
- func (x *AppLogEntry) GetMessage() string
- func (x *AppLogEntry) GetModule() string
- func (x *AppLogEntry) GetSubscribed() bool
- func (x *AppLogEntry) GetTimestampNs() int64
- func (*AppLogEntry) ProtoMessage()
- func (x *AppLogEntry) ProtoReflect() protoreflect.Message
- func (x *AppLogEntry) Reset()
- func (x *AppLogEntry) String() string
- type AppLogStreamRequest
- func (*AppLogStreamRequest) Descriptor() ([]byte, []int)deprecated
- func (x *AppLogStreamRequest) GetAppName() string
- func (x *AppLogStreamRequest) GetIncludeRouter() bool
- func (x *AppLogStreamRequest) GetMinLevel() string
- func (x *AppLogStreamRequest) GetModules() []string
- func (*AppLogStreamRequest) ProtoMessage()
- func (x *AppLogStreamRequest) ProtoReflect() protoreflect.Message
- func (x *AppLogStreamRequest) Reset()
- func (x *AppLogStreamRequest) String() string
- type BandwidthProgress
- func (*BandwidthProgress) Descriptor() ([]byte, []int)deprecated
- func (x *BandwidthProgress) GetBytesReceived() uint64
- func (x *BandwidthProgress) GetBytesSent() uint64
- func (x *BandwidthProgress) GetDownloadSpeed() float64
- func (x *BandwidthProgress) GetElapsedNs() int64
- func (x *BandwidthProgress) GetError() string
- func (x *BandwidthProgress) GetIsFinal() bool
- func (x *BandwidthProgress) GetUploadSpeed() float64
- func (*BandwidthProgress) ProtoMessage()
- func (x *BandwidthProgress) ProtoReflect() protoreflect.Message
- func (x *BandwidthProgress) Reset()
- func (x *BandwidthProgress) String() string
- type BandwidthProgressCallback
- type BandwidthRequest
- func (*BandwidthRequest) Descriptor() ([]byte, []int)deprecated
- func (x *BandwidthRequest) GetDurationNs() int64
- func (x *BandwidthRequest) GetLocalRoute() bool
- func (x *BandwidthRequest) GetPacketSizeKb() int32
- func (x *BandwidthRequest) GetPublicKey() string
- func (*BandwidthRequest) ProtoMessage()
- func (x *BandwidthRequest) ProtoReflect() protoreflect.Message
- func (x *BandwidthRequest) Reset()
- func (x *BandwidthRequest) String() string
- type CalcHop
- func (*CalcHop) Descriptor() ([]byte, []int)deprecated
- func (x *CalcHop) GetFrom() string
- func (x *CalcHop) GetTo() string
- func (x *CalcHop) GetTpId() string
- func (*CalcHop) ProtoMessage()
- func (x *CalcHop) ProtoReflect() protoreflect.Message
- func (x *CalcHop) Reset()
- func (x *CalcHop) String() string
- type CalcRoute
- type CalcRouteCallback
- type CalcRoutesRequest
- func (*CalcRoutesRequest) Descriptor() ([]byte, []int)deprecated
- func (x *CalcRoutesRequest) GetCount() int32
- func (x *CalcRoutesRequest) GetDstPk() string
- func (x *CalcRoutesRequest) GetMaxHops() int32
- func (x *CalcRoutesRequest) GetMinHops() int32
- func (x *CalcRoutesRequest) GetQueueCap() int32
- func (x *CalcRoutesRequest) GetSource() string
- func (x *CalcRoutesRequest) GetSrcPk() string
- func (x *CalcRoutesRequest) GetTpdUrl() string
- func (*CalcRoutesRequest) ProtoMessage()
- func (x *CalcRoutesRequest) ProtoReflect() protoreflect.Message
- func (x *CalcRoutesRequest) Reset()
- func (x *CalcRoutesRequest) String() string
- type CpuStat
- type DiskStat
- func (*DiskStat) Descriptor() ([]byte, []int)deprecated
- func (x *DiskStat) GetDevice() string
- func (x *DiskStat) GetFree() uint64
- func (x *DiskStat) GetFstype() string
- func (x *DiskStat) GetMountpoint() string
- func (x *DiskStat) GetTotal() uint64
- func (x *DiskStat) GetUsed() uint64
- func (x *DiskStat) GetUsedPercent() float64
- func (*DiskStat) ProtoMessage()
- func (x *DiskStat) ProtoReflect() protoreflect.Message
- func (x *DiskStat) Reset()
- func (x *DiskStat) String() string
- type DmsgServersRequest
- func (*DmsgServersRequest) Descriptor() ([]byte, []int)deprecated
- func (x *DmsgServersRequest) GetPublicKey() string
- func (*DmsgServersRequest) ProtoMessage()
- func (x *DmsgServersRequest) ProtoReflect() protoreflect.Message
- func (x *DmsgServersRequest) Reset()
- func (x *DmsgServersRequest) String() string
- type DmsgServersResponse
- func (*DmsgServersResponse) Descriptor() ([]byte, []int)deprecated
- func (x *DmsgServersResponse) GetServerPks() []string
- func (*DmsgServersResponse) ProtoMessage()
- func (x *DmsgServersResponse) ProtoReflect() protoreflect.Message
- func (x *DmsgServersResponse) Reset()
- func (x *DmsgServersResponse) String() string
- type GroupMessageCallback
- type GroupMessageData
- type GroupMessageEvent
- func (*GroupMessageEvent) Descriptor() ([]byte, []int)deprecated
- func (x *GroupMessageEvent) GetBody() string
- func (x *GroupMessageEvent) GetGroupId() string
- func (x *GroupMessageEvent) GetSenderPk() string
- func (x *GroupMessageEvent) GetSubscribed() bool
- func (x *GroupMessageEvent) GetTimestampNs() int64
- func (*GroupMessageEvent) ProtoMessage()
- func (x *GroupMessageEvent) ProtoReflect() protoreflect.Message
- func (x *GroupMessageEvent) Reset()
- func (x *GroupMessageEvent) String() string
- type GroupMessagesRequest
- func (*GroupMessagesRequest) Descriptor() ([]byte, []int)deprecated
- func (x *GroupMessagesRequest) GetGroupId() string
- func (x *GroupMessagesRequest) GetSinceTimestampNs() int64
- func (*GroupMessagesRequest) ProtoMessage()
- func (x *GroupMessagesRequest) ProtoReflect() protoreflect.Message
- func (x *GroupMessagesRequest) Reset()
- func (x *GroupMessagesRequest) String() string
- type HostInfo
- func (*HostInfo) Descriptor() ([]byte, []int)deprecated
- func (x *HostInfo) GetHostname() string
- func (x *HostInfo) GetKernelArch() string
- func (x *HostInfo) GetKernelVersion() string
- func (x *HostInfo) GetNumCpus() int32
- func (x *HostInfo) GetOs() string
- func (x *HostInfo) GetPlatform() string
- func (x *HostInfo) GetPlatformVersion() string
- func (x *HostInfo) GetUptimeSec() int64
- func (*HostInfo) ProtoMessage()
- func (x *HostInfo) ProtoReflect() protoreflect.Message
- func (x *HostInfo) Reset()
- func (x *HostInfo) String() string
- type MemoryStat
- func (*MemoryStat) Descriptor() ([]byte, []int)deprecated
- func (x *MemoryStat) GetAvailable() uint64
- func (x *MemoryStat) GetTotal() uint64
- func (x *MemoryStat) GetUsed() uint64
- func (x *MemoryStat) GetUsedPercent() float64
- func (*MemoryStat) ProtoMessage()
- func (x *MemoryStat) ProtoReflect() protoreflect.Message
- func (x *MemoryStat) Reset()
- func (x *MemoryStat) String() string
- type MuxBandwidthDone
- func (*MuxBandwidthDone) Descriptor() ([]byte, []int)deprecated
- func (x *MuxBandwidthDone) GetAvgRecvBps() float64
- func (x *MuxBandwidthDone) GetAvgSendBps() float64
- func (x *MuxBandwidthDone) GetIdleProbeAvgNs() int64
- func (x *MuxBandwidthDone) GetIdleProbeCount() int32
- func (x *MuxBandwidthDone) GetIdleProbeJitterNs() int64
- func (x *MuxBandwidthDone) GetIdleProbeP50Ns() int64
- func (x *MuxBandwidthDone) GetIdleProbeP99Ns() int64
- func (x *MuxBandwidthDone) GetPeakRecvBps() float64
- func (x *MuxBandwidthDone) GetPeakSendBps() float64
- func (x *MuxBandwidthDone) GetProbeAvgNs() int64
- func (x *MuxBandwidthDone) GetProbeCount() int32
- func (x *MuxBandwidthDone) GetProbeJitterNs() int64
- func (x *MuxBandwidthDone) GetProbeP50Ns() int64
- func (x *MuxBandwidthDone) GetProbeP99Ns() int64
- func (x *MuxBandwidthDone) GetPumpTimeNs() int64
- func (x *MuxBandwidthDone) GetRoutesEstablished() int32
- func (x *MuxBandwidthDone) GetRoutesRequested() int32
- func (x *MuxBandwidthDone) GetSetupTotalNs() int64
- func (x *MuxBandwidthDone) GetTerminationReason() string
- func (x *MuxBandwidthDone) GetTotalBytesReceived() uint64
- func (x *MuxBandwidthDone) GetTotalBytesSent() uint64
- func (x *MuxBandwidthDone) GetWallTimeNs() int64
- func (*MuxBandwidthDone) ProtoMessage()
- func (x *MuxBandwidthDone) ProtoReflect() protoreflect.Message
- func (x *MuxBandwidthDone) Reset()
- func (x *MuxBandwidthDone) String() string
- type MuxBandwidthError
- func (*MuxBandwidthError) Descriptor() ([]byte, []int)deprecated
- func (x *MuxBandwidthError) GetCode() string
- func (x *MuxBandwidthError) GetMessage() string
- func (*MuxBandwidthError) ProtoMessage()
- func (x *MuxBandwidthError) ProtoReflect() protoreflect.Message
- func (x *MuxBandwidthError) Reset()
- func (x *MuxBandwidthError) String() string
- type MuxBandwidthEvent
- func (*MuxBandwidthEvent) Descriptor() ([]byte, []int)deprecated
- func (x *MuxBandwidthEvent) GetDone() *MuxBandwidthDone
- func (x *MuxBandwidthEvent) GetError() *MuxBandwidthError
- func (x *MuxBandwidthEvent) GetLegLifecycle() *MuxLegLifecycle
- func (x *MuxBandwidthEvent) GetPayload() isMuxBandwidthEvent_Payload
- func (x *MuxBandwidthEvent) GetRouteEstablished() *MuxRouteEstablished
- func (x *MuxBandwidthEvent) GetRouteFailure() *MuxRouteFailure
- func (x *MuxBandwidthEvent) GetRttProbe() *MuxRttProbe
- func (x *MuxBandwidthEvent) GetSample() *MuxBandwidthSample
- func (x *MuxBandwidthEvent) GetTimestampNs() int64
- func (*MuxBandwidthEvent) ProtoMessage()
- func (x *MuxBandwidthEvent) ProtoReflect() protoreflect.Message
- func (x *MuxBandwidthEvent) Reset()
- func (x *MuxBandwidthEvent) String() string
- type MuxBandwidthEvent_Done
- type MuxBandwidthEvent_Error
- type MuxBandwidthEvent_LegLifecycle
- type MuxBandwidthEvent_RouteEstablished
- type MuxBandwidthEvent_RouteFailure
- type MuxBandwidthEvent_RttProbe
- type MuxBandwidthEvent_Sample
- type MuxBandwidthRequest
- func (*MuxBandwidthRequest) Descriptor() ([]byte, []int)deprecated
- func (x *MuxBandwidthRequest) GetCliOverrides() map[string]string
- func (x *MuxBandwidthRequest) GetDurationNs() int64
- func (x *MuxBandwidthRequest) GetIdleBaselineDurationNs() int64
- func (x *MuxBandwidthRequest) GetLocalRoute() bool
- func (x *MuxBandwidthRequest) GetMinHops() int32
- func (x *MuxBandwidthRequest) GetPacketSizeKb() int32
- func (x *MuxBandwidthRequest) GetPolicyApp() string
- func (x *MuxBandwidthRequest) GetProbeIntervalNs() int64
- func (x *MuxBandwidthRequest) GetProbeRtt() bool
- func (x *MuxBandwidthRequest) GetRoutes() int32
- func (x *MuxBandwidthRequest) GetRoutingPolicy() string
- func (x *MuxBandwidthRequest) GetSampleIntervalNs() int64
- func (x *MuxBandwidthRequest) GetSetupTimeoutNs() int64
- func (x *MuxBandwidthRequest) GetTargetPk() string
- func (*MuxBandwidthRequest) ProtoMessage()
- func (x *MuxBandwidthRequest) ProtoReflect() protoreflect.Message
- func (x *MuxBandwidthRequest) Reset()
- func (x *MuxBandwidthRequest) String() string
- type MuxBandwidthSample
- func (*MuxBandwidthSample) Descriptor() ([]byte, []int)deprecated
- func (x *MuxBandwidthSample) GetActiveRoutes() int32
- func (x *MuxBandwidthSample) GetAvgRecvBps() float64
- func (x *MuxBandwidthSample) GetAvgSendBps() float64
- func (x *MuxBandwidthSample) GetBytesReceived() uint64
- func (x *MuxBandwidthSample) GetBytesSent() uint64
- func (x *MuxBandwidthSample) GetElapsedNs() int64
- func (x *MuxBandwidthSample) GetInstantRecvBps() float64
- func (x *MuxBandwidthSample) GetInstantSendBps() float64
- func (x *MuxBandwidthSample) GetLegs() []*MuxLegSample
- func (*MuxBandwidthSample) ProtoMessage()
- func (x *MuxBandwidthSample) ProtoReflect() protoreflect.Message
- func (x *MuxBandwidthSample) Reset()
- func (x *MuxBandwidthSample) String() string
- type MuxLegLifecycle
- func (*MuxLegLifecycle) Descriptor() ([]byte, []int)deprecated
- func (x *MuxLegLifecycle) GetElapsedNs() int64
- func (x *MuxLegLifecycle) GetEvent() string
- func (x *MuxLegLifecycle) GetGateState() string
- func (x *MuxLegLifecycle) GetIntermediatePk() string
- func (x *MuxLegLifecycle) GetRouteIndex() int32
- func (x *MuxLegLifecycle) GetTransportKind() string
- func (*MuxLegLifecycle) ProtoMessage()
- func (x *MuxLegLifecycle) ProtoReflect() protoreflect.Message
- func (x *MuxLegLifecycle) Reset()
- func (x *MuxLegLifecycle) String() string
- type MuxLegSample
- func (*MuxLegSample) Descriptor() ([]byte, []int)deprecated
- func (x *MuxLegSample) GetAlive() bool
- func (x *MuxLegSample) GetBytesRecv() int64
- func (x *MuxLegSample) GetBytesSent() int64
- func (x *MuxLegSample) GetInstRecvBps() float64
- func (x *MuxLegSample) GetInstSendBps() float64
- func (x *MuxLegSample) GetIntermediatePk() string
- func (x *MuxLegSample) GetLatencyMs() int32
- func (x *MuxLegSample) GetRouteIndex() int32
- func (x *MuxLegSample) GetStandby() bool
- func (x *MuxLegSample) GetTransportKind() string
- func (*MuxLegSample) ProtoMessage()
- func (x *MuxLegSample) ProtoReflect() protoreflect.Message
- func (x *MuxLegSample) Reset()
- func (x *MuxLegSample) String() string
- type MuxRouteEstablished
- func (*MuxRouteEstablished) Descriptor() ([]byte, []int)deprecated
- func (x *MuxRouteEstablished) GetFailed() bool
- func (x *MuxRouteEstablished) GetHops() []*RouteHop
- func (x *MuxRouteEstablished) GetRouteIndex() int32
- func (x *MuxRouteEstablished) GetSetupErr() string
- func (x *MuxRouteEstablished) GetSetupLatencyNs() int64
- func (*MuxRouteEstablished) ProtoMessage()
- func (x *MuxRouteEstablished) ProtoReflect() protoreflect.Message
- func (x *MuxRouteEstablished) Reset()
- func (x *MuxRouteEstablished) String() string
- type MuxRouteFailure
- func (*MuxRouteFailure) Descriptor() ([]byte, []int)deprecated
- func (x *MuxRouteFailure) GetBytesReceivedBeforeFailure() uint64
- func (x *MuxRouteFailure) GetBytesSentBeforeFailure() uint64
- func (x *MuxRouteFailure) GetElapsedNs() int64
- func (x *MuxRouteFailure) GetErrorMessage() string
- func (x *MuxRouteFailure) GetRouteIndex() int32
- func (*MuxRouteFailure) ProtoMessage()
- func (x *MuxRouteFailure) ProtoReflect() protoreflect.Message
- func (x *MuxRouteFailure) Reset()
- func (x *MuxRouteFailure) String() string
- type MuxRttProbe
- func (*MuxRttProbe) Descriptor() ([]byte, []int)deprecated
- func (x *MuxRttProbe) GetElapsedNs() int64
- func (x *MuxRttProbe) GetError() string
- func (x *MuxRttProbe) GetLatencyNs() int64
- func (x *MuxRttProbe) GetSequence() int64
- func (*MuxRttProbe) ProtoMessage()
- func (x *MuxRttProbe) ProtoReflect() protoreflect.Message
- func (x *MuxRttProbe) Reset()
- func (x *MuxRttProbe) String() string
- type NetworkStat
- func (*NetworkStat) Descriptor() ([]byte, []int)deprecated
- func (x *NetworkStat) GetBytesRecv() uint64
- func (x *NetworkStat) GetBytesRecvRate() float64
- func (x *NetworkStat) GetBytesSent() uint64
- func (x *NetworkStat) GetBytesSentRate() float64
- func (x *NetworkStat) GetPacketsRecv() uint64
- func (x *NetworkStat) GetPacketsSent() uint64
- func (*NetworkStat) ProtoMessage()
- func (x *NetworkStat) ProtoReflect() protoreflect.Message
- func (x *NetworkStat) Reset()
- func (x *NetworkStat) String() string
- type PingClient
- func (c *PingClient) Close() error
- func (c *PingClient) GetRemoteDmsgServers(ctx context.Context, pk string) ([]string, error)
- func (c *PingClient) GetSystemStats(ctx context.Context, includeProcesses bool, processLimit int32) (*SystemStats, error)
- func (c *PingClient) StreamAppLogs(ctx context.Context, appName string, includeRouter bool, minLevel string, ...) error
- func (c *PingClient) StreamBandwidthTest(ctx context.Context, pk string, duration time.Duration, pcktSize int32, ...) error
- func (c *PingClient) StreamCalcRoutes(ctx context.Context, srcPK, dstPK string, ...) error
- func (c *PingClient) StreamDmsgBandwidthTest(ctx context.Context, pk string, duration time.Duration, pcktSize int32, ...) error
- func (c *PingClient) StreamDmsgPing(ctx context.Context, pk string, tries int32, pcktSize int32, ...) error
- func (c *PingClient) StreamGroupMessages(ctx context.Context, groupID string, sinceTimestampNs int64, ...) error
- func (c *PingClient) StreamMuxBandwidth(ctx context.Context, req *MuxBandwidthRequest) (PingService_StreamMuxBandwidthClient, error)
- func (c *PingClient) StreamPing(ctx context.Context, pk string, tries int32, pcktSize int32, localRoute bool, ...) error
- func (c *PingClient) StreamPingTree(ctx context.Context, req *PingTreeRequest) (PingService_StreamPingTreeClient, error)
- func (c *PingClient) StreamPingWithRoute(ctx context.Context, pk string, tries int32, pcktSize int32, localRoute bool, ...) error
- func (c *PingClient) StreamPingWithTransport(ctx context.Context, pk string, tries int32, pcktSize int32, localRoute bool, ...) error
- func (c *PingClient) StreamRemoteSystemStats(ctx context.Context, remotePK string, updateInterval time.Duration, ...) error
- func (c *PingClient) StreamRouteGroupMuxInfo(ctx context.Context, req *StreamRouteGroupMuxInfoRequest) (PingService_StreamRouteGroupMuxInfoClient, error)
- func (c *PingClient) StreamSystemStats(ctx context.Context, updateInterval time.Duration, includeProcesses bool, ...) error
- type PingConf
- type PingRequest
- func (*PingRequest) Descriptor() ([]byte, []int)deprecated
- func (x *PingRequest) GetDmsgServerPk() string
- func (x *PingRequest) GetForwardHops() []*RouteHop
- func (x *PingRequest) GetLocalRoute() bool
- func (x *PingRequest) GetPacketSizeKb() int32
- func (x *PingRequest) GetPingTimeoutNs() int64
- func (x *PingRequest) GetPublicKey() string
- func (x *PingRequest) GetReverseHops() []*RouteHop
- func (x *PingRequest) GetSetupTimeoutNs() int64
- func (x *PingRequest) GetTransportId() string
- func (x *PingRequest) GetTries() int32
- func (*PingRequest) ProtoMessage()
- func (x *PingRequest) ProtoReflect() protoreflect.Message
- func (x *PingRequest) Reset()
- func (x *PingRequest) String() string
- type PingResult
- func (*PingResult) Descriptor() ([]byte, []int)deprecated
- func (x *PingResult) GetDmsgServerPk() string
- func (x *PingResult) GetError() string
- func (x *PingResult) GetIsSetup() bool
- func (x *PingResult) GetLatencyNs() int64
- func (x *PingResult) GetRouteCalcTimeNs() int64
- func (x *PingResult) GetRouteHopDetails() []*RouteHop
- func (x *PingResult) GetRouteHops() []string
- func (x *PingResult) GetSequence() int32
- func (*PingResult) ProtoMessage()
- func (x *PingResult) ProtoReflect() protoreflect.Message
- func (x *PingResult) Reset()
- func (x *PingResult) String() string
- type PingResultCallback
- type PingRouteRef
- type PingServer
- func (s *PingServer) GetRemoteDmsgServers(_ context.Context, req *DmsgServersRequest) (*DmsgServersResponse, error)
- func (s *PingServer) GetSystemStats(ctx context.Context, req *SystemStatsRequest) (*SystemStats, error)
- func (s *PingServer) StreamAppLogs(req *AppLogStreamRequest, stream PingService_StreamAppLogsServer) error
- func (s *PingServer) StreamBandwidthTest(req *BandwidthRequest, stream PingService_StreamBandwidthTestServer) error
- func (s *PingServer) StreamCalcRoutes(req *CalcRoutesRequest, stream PingService_StreamCalcRoutesServer) error
- func (s *PingServer) StreamDmsgBandwidthTest(req *BandwidthRequest, stream PingService_StreamDmsgBandwidthTestServer) error
- func (s *PingServer) StreamDmsgPing(req *PingRequest, stream PingService_StreamDmsgPingServer) error
- func (s *PingServer) StreamGroupMessages(req *GroupMessagesRequest, stream PingService_StreamGroupMessagesServer) error
- func (s *PingServer) StreamMuxBandwidth(req *MuxBandwidthRequest, stream PingService_StreamMuxBandwidthServer) error
- func (s *PingServer) StreamPing(req *PingRequest, stream PingService_StreamPingServer) error
- func (s *PingServer) StreamPingTree(req *PingTreeRequest, stream PingService_StreamPingTreeServer) error
- func (s *PingServer) StreamRemoteSystemStats(req *RemoteSystemStatsRequest, ...) error
- func (s *PingServer) StreamRouteGroupMuxInfo(req *StreamRouteGroupMuxInfoRequest, ...) error
- func (s *PingServer) StreamSystemStats(req *SystemStatsRequest, stream PingService_StreamSystemStatsServer) error
- type PingServiceClient
- type PingServiceServer
- type PingService_StreamAppLogsClient
- type PingService_StreamAppLogsServer
- type PingService_StreamBandwidthTestClient
- type PingService_StreamBandwidthTestServer
- type PingService_StreamCalcRoutesClient
- type PingService_StreamCalcRoutesServer
- type PingService_StreamDmsgBandwidthTestClient
- type PingService_StreamDmsgBandwidthTestServer
- type PingService_StreamDmsgPingClient
- type PingService_StreamDmsgPingServer
- type PingService_StreamGroupMessagesClient
- type PingService_StreamGroupMessagesServer
- type PingService_StreamMuxBandwidthClient
- type PingService_StreamMuxBandwidthServer
- type PingService_StreamPingClient
- type PingService_StreamPingServer
- type PingService_StreamPingTreeClient
- type PingService_StreamPingTreeServer
- type PingService_StreamRemoteSystemStatsClient
- type PingService_StreamRemoteSystemStatsServer
- type PingService_StreamRouteGroupMuxInfoClient
- type PingService_StreamRouteGroupMuxInfoServer
- type PingService_StreamSystemStatsClient
- type PingService_StreamSystemStatsServer
- type PingTreeDiscovered
- func (*PingTreeDiscovered) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeDiscovered) GetLevel() int32
- func (x *PingTreeDiscovered) GetParentPk() string
- func (x *PingTreeDiscovered) GetRemotePk() string
- func (x *PingTreeDiscovered) GetTpId() string
- func (x *PingTreeDiscovered) GetTpType() string
- func (*PingTreeDiscovered) ProtoMessage()
- func (x *PingTreeDiscovered) ProtoReflect() protoreflect.Message
- func (x *PingTreeDiscovered) Reset()
- func (x *PingTreeDiscovered) String() string
- type PingTreeEvent
- func (*PingTreeEvent) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeEvent) GetDiscovered() *PingTreeDiscovered
- func (x *PingTreeEvent) GetLevelDone() *PingTreeLevelDone
- func (x *PingTreeEvent) GetPayload() isPingTreeEvent_Payload
- func (x *PingTreeEvent) GetPingResult() *PingTreeResult
- func (x *PingTreeEvent) GetRunDone() *PingTreeRunDone
- func (x *PingTreeEvent) GetServerError() *PingTreeServerError
- func (x *PingTreeEvent) GetStatusUpdate() *PingTreeStatusUpdate
- func (x *PingTreeEvent) GetTimestampNs() int64
- func (*PingTreeEvent) ProtoMessage()
- func (x *PingTreeEvent) ProtoReflect() protoreflect.Message
- func (x *PingTreeEvent) Reset()
- func (x *PingTreeEvent) String() string
- type PingTreeEvent_Discovered
- type PingTreeEvent_LevelDone
- type PingTreeEvent_PingResult
- type PingTreeEvent_RunDone
- type PingTreeEvent_ServerError
- type PingTreeEvent_StatusUpdate
- type PingTreeLevelDone
- func (*PingTreeLevelDone) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeLevelDone) GetAttempted() int32
- func (x *PingTreeLevelDone) GetFailed() int32
- func (x *PingTreeLevelDone) GetLevel() int32
- func (x *PingTreeLevelDone) GetSkippedCached() int32
- func (x *PingTreeLevelDone) GetSucceeded() int32
- func (*PingTreeLevelDone) ProtoMessage()
- func (x *PingTreeLevelDone) ProtoReflect() protoreflect.Message
- func (x *PingTreeLevelDone) Reset()
- func (x *PingTreeLevelDone) String() string
- type PingTreeRequest
- func (*PingTreeRequest) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeRequest) GetConcurrency() int32
- func (x *PingTreeRequest) GetDmsgOnly() bool
- func (x *PingTreeRequest) GetDmsgPreCheck() bool
- func (x *PingTreeRequest) GetDryRun() bool
- func (x *PingTreeRequest) GetHops() int32
- func (x *PingTreeRequest) GetMaxLevel() int32
- func (x *PingTreeRequest) GetMinVersion() string
- func (x *PingTreeRequest) GetOnlineOnly() bool
- func (x *PingTreeRequest) GetPacketSizeKb() int32
- func (x *PingTreeRequest) GetPingTimeoutNs() int64
- func (x *PingTreeRequest) GetRetries() int32
- func (x *PingTreeRequest) GetSetupTimeoutNs() int64
- func (x *PingTreeRequest) GetTries() int32
- func (x *PingTreeRequest) GetUseTransportLatency() bool
- func (*PingTreeRequest) ProtoMessage()
- func (x *PingTreeRequest) ProtoReflect() protoreflect.Message
- func (x *PingTreeRequest) Reset()
- func (x *PingTreeRequest) String() string
- type PingTreeResult
- func (*PingTreeResult) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeResult) GetCalcErr() string
- func (x *PingTreeResult) GetCanceled() bool
- func (x *PingTreeResult) GetFailed() bool
- func (x *PingTreeResult) GetJitterNs() int64
- func (x *PingTreeResult) GetLatencySource() string
- func (x *PingTreeResult) GetLevel() int32
- func (x *PingTreeResult) GetParentPk() string
- func (x *PingTreeResult) GetPingAvgNs() int64
- func (x *PingTreeResult) GetPingErr() string
- func (x *PingTreeResult) GetPingP50Ns() int64
- func (x *PingTreeResult) GetPingP99Ns() int64
- func (x *PingTreeResult) GetRemotePk() string
- func (x *PingTreeResult) GetRoute() []*RouteHop
- func (x *PingTreeResult) GetSampleCount() int32
- func (x *PingTreeResult) GetSetupErr() string
- func (x *PingTreeResult) GetSetupLatencyNs() int64
- func (x *PingTreeResult) GetTpId() string
- func (x *PingTreeResult) GetTpType() string
- func (*PingTreeResult) ProtoMessage()
- func (x *PingTreeResult) ProtoReflect() protoreflect.Message
- func (x *PingTreeResult) Reset()
- func (x *PingTreeResult) String() string
- type PingTreeRunDone
- func (*PingTreeRunDone) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeRunDone) GetPeakInFlight() int32
- func (x *PingTreeRunDone) GetTerminationReason() string
- func (x *PingTreeRunDone) GetTotalDiscovered() int32
- func (x *PingTreeRunDone) GetTotalFailed() int32
- func (x *PingTreeRunDone) GetTotalPinged() int32
- func (x *PingTreeRunDone) GetTotalSkippedCached() int32
- func (x *PingTreeRunDone) GetTotalSucceeded() int32
- func (x *PingTreeRunDone) GetWallTimeNs() int64
- func (*PingTreeRunDone) ProtoMessage()
- func (x *PingTreeRunDone) ProtoReflect() protoreflect.Message
- func (x *PingTreeRunDone) Reset()
- func (x *PingTreeRunDone) String() string
- type PingTreeServerError
- func (*PingTreeServerError) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeServerError) GetCode() string
- func (x *PingTreeServerError) GetMessage() string
- func (*PingTreeServerError) ProtoMessage()
- func (x *PingTreeServerError) ProtoReflect() protoreflect.Message
- func (x *PingTreeServerError) Reset()
- func (x *PingTreeServerError) String() string
- type PingTreeStatusUpdate
- func (*PingTreeStatusUpdate) Descriptor() ([]byte, []int)deprecated
- func (x *PingTreeStatusUpdate) GetInFlight() int32
- func (x *PingTreeStatusUpdate) GetMessage() string
- func (x *PingTreeStatusUpdate) GetPending() int32
- func (x *PingTreeStatusUpdate) GetPhase() string
- func (*PingTreeStatusUpdate) ProtoMessage()
- func (x *PingTreeStatusUpdate) ProtoReflect() protoreflect.Message
- func (x *PingTreeStatusUpdate) Reset()
- func (x *PingTreeStatusUpdate) String() string
- type ProcessStat
- func (*ProcessStat) Descriptor() ([]byte, []int)deprecated
- func (x *ProcessStat) GetCpuPercent() float64
- func (x *ProcessStat) GetMemoryPercent() float64
- func (x *ProcessStat) GetMemoryRss() uint64
- func (x *ProcessStat) GetName() string
- func (x *ProcessStat) GetPid() int32
- func (x *ProcessStat) GetStatus() string
- func (x *ProcessStat) GetUsername() string
- func (*ProcessStat) ProtoMessage()
- func (x *ProcessStat) ProtoReflect() protoreflect.Message
- func (x *ProcessStat) Reset()
- func (x *ProcessStat) String() string
- type RemoteSystemStatsRequest
- func (*RemoteSystemStatsRequest) Descriptor() ([]byte, []int)deprecated
- func (x *RemoteSystemStatsRequest) GetIncludeProcesses() bool
- func (x *RemoteSystemStatsRequest) GetProcessLimit() int32
- func (x *RemoteSystemStatsRequest) GetRemotePk() string
- func (x *RemoteSystemStatsRequest) GetUpdateIntervalNs() int64
- func (*RemoteSystemStatsRequest) ProtoMessage()
- func (x *RemoteSystemStatsRequest) ProtoReflect() protoreflect.Message
- func (x *RemoteSystemStatsRequest) Reset()
- func (x *RemoteSystemStatsRequest) String() string
- type RouteGroupMuxInfo
- func (*RouteGroupMuxInfo) Descriptor() ([]byte, []int)deprecated
- func (x *RouteGroupMuxInfo) GetLegs() []*RouteGroupMuxLeg
- func (x *RouteGroupMuxInfo) GetMuxEnabled() bool
- func (x *RouteGroupMuxInfo) GetSackEnabled() bool
- func (*RouteGroupMuxInfo) ProtoMessage()
- func (x *RouteGroupMuxInfo) ProtoReflect() protoreflect.Message
- func (x *RouteGroupMuxInfo) Reset()
- func (x *RouteGroupMuxInfo) String() string
- type RouteGroupMuxInfoData
- type RouteGroupMuxInfoSample
- func (*RouteGroupMuxInfoSample) Descriptor() ([]byte, []int)deprecated
- func (x *RouteGroupMuxInfoSample) GetRouteGroups() []*RouteGroupMuxInfo
- func (x *RouteGroupMuxInfoSample) GetTimestampNs() int64
- func (*RouteGroupMuxInfoSample) ProtoMessage()
- func (x *RouteGroupMuxInfoSample) ProtoReflect() protoreflect.Message
- func (x *RouteGroupMuxInfoSample) Reset()
- func (x *RouteGroupMuxInfoSample) String() string
- type RouteGroupMuxLeg
- func (*RouteGroupMuxLeg) Descriptor() ([]byte, []int)deprecated
- func (x *RouteGroupMuxLeg) GetAlive() bool
- func (x *RouteGroupMuxLeg) GetLatencyMs() float64
- func (x *RouteGroupMuxLeg) GetRecvBytes() uint64
- func (x *RouteGroupMuxLeg) GetRecvPackets() uint64
- func (x *RouteGroupMuxLeg) GetRemotePk() string
- func (x *RouteGroupMuxLeg) GetRetransmits() uint64
- func (x *RouteGroupMuxLeg) GetRouteIndex() int32
- func (x *RouteGroupMuxLeg) GetSentBytes() uint64
- func (x *RouteGroupMuxLeg) GetSentPackets() uint64
- func (x *RouteGroupMuxLeg) GetStandby() bool
- func (x *RouteGroupMuxLeg) GetTransportId() string
- func (x *RouteGroupMuxLeg) GetTransportKind() string
- func (*RouteGroupMuxLeg) ProtoMessage()
- func (x *RouteGroupMuxLeg) ProtoReflect() protoreflect.Message
- func (x *RouteGroupMuxLeg) Reset()
- func (x *RouteGroupMuxLeg) String() string
- type RouteGroupMuxLegData
- type RouteHop
- func (*RouteHop) Descriptor() ([]byte, []int)deprecated
- func (x *RouteHop) GetFrom() string
- func (x *RouteHop) GetTo() string
- func (x *RouteHop) GetTpId() string
- func (x *RouteHop) GetTpType() string
- func (*RouteHop) ProtoMessage()
- func (x *RouteHop) ProtoReflect() protoreflect.Message
- func (x *RouteHop) Reset()
- func (x *RouteHop) String() string
- type RouteHopDetail
- type RouteHopInfo
- type StreamRouteGroupMuxInfoRequest
- func (*StreamRouteGroupMuxInfoRequest) Descriptor() ([]byte, []int)deprecated
- func (x *StreamRouteGroupMuxInfoRequest) GetAppName() string
- func (x *StreamRouteGroupMuxInfoRequest) GetSampleIntervalNs() int64
- func (*StreamRouteGroupMuxInfoRequest) ProtoMessage()
- func (x *StreamRouteGroupMuxInfoRequest) ProtoReflect() protoreflect.Message
- func (x *StreamRouteGroupMuxInfoRequest) Reset()
- func (x *StreamRouteGroupMuxInfoRequest) String() string
- type SystemStats
- func (*SystemStats) Descriptor() ([]byte, []int)deprecated
- func (x *SystemStats) GetCpu() []*CpuStat
- func (x *SystemStats) GetCpuAverage() float64
- func (x *SystemStats) GetDisks() []*DiskStat
- func (x *SystemStats) GetError() string
- func (x *SystemStats) GetHost() *HostInfo
- func (x *SystemStats) GetMemory() *MemoryStat
- func (x *SystemStats) GetNetwork() *NetworkStat
- func (x *SystemStats) GetProcesses() []*ProcessStat
- func (x *SystemStats) GetSwap() *MemoryStat
- func (x *SystemStats) GetTemps() []*TempStat
- func (x *SystemStats) GetTimestampNs() int64
- func (*SystemStats) ProtoMessage()
- func (x *SystemStats) ProtoReflect() protoreflect.Message
- func (x *SystemStats) Reset()
- func (x *SystemStats) String() string
- type SystemStatsCallback
- type SystemStatsCollector
- type SystemStatsRequest
- func (*SystemStatsRequest) Descriptor() ([]byte, []int)deprecated
- func (x *SystemStatsRequest) GetIncludeProcesses() bool
- func (x *SystemStatsRequest) GetProcessLimit() int32
- func (x *SystemStatsRequest) GetUpdateIntervalNs() int64
- func (*SystemStatsRequest) ProtoMessage()
- func (x *SystemStatsRequest) ProtoReflect() protoreflect.Message
- func (x *SystemStatsRequest) Reset()
- func (x *SystemStatsRequest) String() string
- type TempStat
- func (*TempStat) Descriptor() ([]byte, []int)deprecated
- func (x *TempStat) GetCritical() float64
- func (x *TempStat) GetHigh() float64
- func (x *TempStat) GetSensorKey() string
- func (x *TempStat) GetTemperature() float64
- func (*TempStat) ProtoMessage()
- func (x *TempStat) ProtoReflect() protoreflect.Message
- func (x *TempStat) Reset()
- func (x *TempStat) String() string
- type UnimplementedPingServiceServer
- func (UnimplementedPingServiceServer) GetRemoteDmsgServers(context.Context, *DmsgServersRequest) (*DmsgServersResponse, error)
- func (UnimplementedPingServiceServer) GetSystemStats(context.Context, *SystemStatsRequest) (*SystemStats, error)
- func (UnimplementedPingServiceServer) StreamAppLogs(*AppLogStreamRequest, grpc.ServerStreamingServer[AppLogEntry]) error
- func (UnimplementedPingServiceServer) StreamBandwidthTest(*BandwidthRequest, grpc.ServerStreamingServer[BandwidthProgress]) error
- func (UnimplementedPingServiceServer) StreamCalcRoutes(*CalcRoutesRequest, grpc.ServerStreamingServer[CalcRoute]) error
- func (UnimplementedPingServiceServer) StreamDmsgBandwidthTest(*BandwidthRequest, grpc.ServerStreamingServer[BandwidthProgress]) error
- func (UnimplementedPingServiceServer) StreamDmsgPing(*PingRequest, grpc.ServerStreamingServer[PingResult]) error
- func (UnimplementedPingServiceServer) StreamGroupMessages(*GroupMessagesRequest, grpc.ServerStreamingServer[GroupMessageEvent]) error
- func (UnimplementedPingServiceServer) StreamMuxBandwidth(*MuxBandwidthRequest, grpc.ServerStreamingServer[MuxBandwidthEvent]) error
- func (UnimplementedPingServiceServer) StreamPing(*PingRequest, grpc.ServerStreamingServer[PingResult]) error
- func (UnimplementedPingServiceServer) StreamPingTree(*PingTreeRequest, grpc.ServerStreamingServer[PingTreeEvent]) error
- func (UnimplementedPingServiceServer) StreamRemoteSystemStats(*RemoteSystemStatsRequest, grpc.ServerStreamingServer[SystemStats]) error
- func (UnimplementedPingServiceServer) StreamRouteGroupMuxInfo(*StreamRouteGroupMuxInfoRequest, ...) error
- func (UnimplementedPingServiceServer) StreamSystemStats(*SystemStatsRequest, grpc.ServerStreamingServer[SystemStats]) error
- type UnsafePingServiceServer
- type VisorAPI
Constants ¶
const ( PingService_StreamPing_FullMethodName = "/rpcgrpc.PingService/StreamPing" PingService_StreamDmsgPing_FullMethodName = "/rpcgrpc.PingService/StreamDmsgPing" PingService_StreamBandwidthTest_FullMethodName = "/rpcgrpc.PingService/StreamBandwidthTest" PingService_StreamDmsgBandwidthTest_FullMethodName = "/rpcgrpc.PingService/StreamDmsgBandwidthTest" PingService_GetRemoteDmsgServers_FullMethodName = "/rpcgrpc.PingService/GetRemoteDmsgServers" PingService_StreamSystemStats_FullMethodName = "/rpcgrpc.PingService/StreamSystemStats" PingService_GetSystemStats_FullMethodName = "/rpcgrpc.PingService/GetSystemStats" PingService_StreamRemoteSystemStats_FullMethodName = "/rpcgrpc.PingService/StreamRemoteSystemStats" PingService_StreamAppLogs_FullMethodName = "/rpcgrpc.PingService/StreamAppLogs" PingService_StreamCalcRoutes_FullMethodName = "/rpcgrpc.PingService/StreamCalcRoutes" PingService_StreamGroupMessages_FullMethodName = "/rpcgrpc.PingService/StreamGroupMessages" PingService_StreamPingTree_FullMethodName = "/rpcgrpc.PingService/StreamPingTree" PingService_StreamMuxBandwidth_FullMethodName = "/rpcgrpc.PingService/StreamMuxBandwidth" PingService_StreamRouteGroupMuxInfo_FullMethodName = "/rpcgrpc.PingService/StreamRouteGroupMuxInfo" )
Variables ¶
var File_ping_proto protoreflect.FileDescriptor
var PingService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "rpcgrpc.PingService", HandlerType: (*PingServiceServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "GetRemoteDmsgServers", Handler: _PingService_GetRemoteDmsgServers_Handler, }, { MethodName: "GetSystemStats", Handler: _PingService_GetSystemStats_Handler, }, }, Streams: []grpc.StreamDesc{ { StreamName: "StreamPing", Handler: _PingService_StreamPing_Handler, ServerStreams: true, }, { StreamName: "StreamDmsgPing", Handler: _PingService_StreamDmsgPing_Handler, ServerStreams: true, }, { StreamName: "StreamBandwidthTest", Handler: _PingService_StreamBandwidthTest_Handler, ServerStreams: true, }, { StreamName: "StreamDmsgBandwidthTest", Handler: _PingService_StreamDmsgBandwidthTest_Handler, ServerStreams: true, }, { StreamName: "StreamSystemStats", Handler: _PingService_StreamSystemStats_Handler, ServerStreams: true, }, { StreamName: "StreamRemoteSystemStats", Handler: _PingService_StreamRemoteSystemStats_Handler, ServerStreams: true, }, { StreamName: "StreamAppLogs", Handler: _PingService_StreamAppLogs_Handler, ServerStreams: true, }, { StreamName: "StreamCalcRoutes", Handler: _PingService_StreamCalcRoutes_Handler, ServerStreams: true, }, { StreamName: "StreamGroupMessages", Handler: _PingService_StreamGroupMessages_Handler, ServerStreams: true, }, { StreamName: "StreamPingTree", Handler: _PingService_StreamPingTree_Handler, ServerStreams: true, }, { StreamName: "StreamMuxBandwidth", Handler: _PingService_StreamMuxBandwidth_Handler, ServerStreams: true, }, { StreamName: "StreamRouteGroupMuxInfo", Handler: _PingService_StreamRouteGroupMuxInfo_Handler, ServerStreams: true, }, }, Metadata: "ping.proto", }
PingService_ServiceDesc is the grpc.ServiceDesc for PingService service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)
Functions ¶
func RegisterPingServiceServer ¶
func RegisterPingServiceServer(s grpc.ServiceRegistrar, srv PingServiceServer)
Types ¶
type AppLogCallback ¶
type AppLogCallback func(entry *AppLogEntry)
AppLogCallback is called for each log entry received from the stream.
type AppLogEntry ¶
type AppLogEntry struct {
TimestampNs int64 `protobuf:"varint,1,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"` // entry time as Unix nanoseconds
Level string `protobuf:"bytes,2,opt,name=level,proto3" json:"level,omitempty"` // "trace"|"debug"|"info"|"warn"|"error"|"fatal"|"panic"
Module string `protobuf:"bytes,3,opt,name=module,proto3" json:"module,omitempty"` // _module field (e.g. "router", "skysocks-client")
Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // formatted message text
Fields map[string]string `` // remaining structured fields
/* 139-byte string literal not displayed */
// Subscribed is set on a sentinel entry the server sends
// immediately after it has registered the subscription with the
// broadcaster. Clients use this to know that any subsequent log
// activity will reach them — letting them gate downstream RPC
// calls (e.g. StartAppWithMode) on subscription readiness so the
// first ~50ms of setup logs aren't lost to the race between
// subscription handshake and the action that triggers them.
// The other fields are unused on the sentinel.
Subscribed bool `protobuf:"varint,6,opt,name=subscribed,proto3" json:"subscribed,omitempty"`
// contains filtered or unexported fields
}
AppLogEntry is one log line forwarded to the gRPC client.
func (*AppLogEntry) Descriptor
deprecated
func (*AppLogEntry) Descriptor() ([]byte, []int)
Deprecated: Use AppLogEntry.ProtoReflect.Descriptor instead.
func (*AppLogEntry) GetFields ¶
func (x *AppLogEntry) GetFields() map[string]string
func (*AppLogEntry) GetLevel ¶
func (x *AppLogEntry) GetLevel() string
func (*AppLogEntry) GetMessage ¶
func (x *AppLogEntry) GetMessage() string
func (*AppLogEntry) GetModule ¶
func (x *AppLogEntry) GetModule() string
func (*AppLogEntry) GetSubscribed ¶
func (x *AppLogEntry) GetSubscribed() bool
func (*AppLogEntry) GetTimestampNs ¶
func (x *AppLogEntry) GetTimestampNs() int64
func (*AppLogEntry) ProtoMessage ¶
func (*AppLogEntry) ProtoMessage()
func (*AppLogEntry) ProtoReflect ¶
func (x *AppLogEntry) ProtoReflect() protoreflect.Message
func (*AppLogEntry) Reset ¶
func (x *AppLogEntry) Reset()
func (*AppLogEntry) String ¶
func (x *AppLogEntry) String() string
type AppLogStreamRequest ¶
type AppLogStreamRequest struct {
// AppName scopes the stream to entries originating from this app's
// module or carrying app=<name> as a logrus field. Either AppName
// or Modules (or both) must be set.
AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
// IncludeRouter is retained on the wire for forward compatibility
// but is ignored — the app_name field tagging now covers what it
// used to do, and Modules below is the explicit path for non-app
// scoping (e.g. 'cli dmsg curl --verbose' picking up dmsg layers).
IncludeRouter bool `protobuf:"varint,2,opt,name=include_router,json=includeRouter,proto3" json:"include_router,omitempty"`
// MinLevel filters out lower-severity entries: trace|debug|info|warn|error.
// Default debug.
MinLevel string `protobuf:"bytes,3,opt,name=min_level,json=minLevel,proto3" json:"min_level,omitempty"`
// Modules filters by _module prefix, OR-merged with the AppName
// match. Use this when no app context exists — e.g. 'dmsg curl
// --verbose' sends ["dmsgC","dmsghttp","dmsg_grpc"]. Empty means
// "no module-prefix match"; AppName is then the only path.
Modules []string `protobuf:"bytes,4,rep,name=modules,proto3" json:"modules,omitempty"`
// contains filtered or unexported fields
}
AppLogStreamRequest configures app-scoped log streaming.
func (*AppLogStreamRequest) Descriptor
deprecated
func (*AppLogStreamRequest) Descriptor() ([]byte, []int)
Deprecated: Use AppLogStreamRequest.ProtoReflect.Descriptor instead.
func (*AppLogStreamRequest) GetAppName ¶
func (x *AppLogStreamRequest) GetAppName() string
func (*AppLogStreamRequest) GetIncludeRouter ¶
func (x *AppLogStreamRequest) GetIncludeRouter() bool
func (*AppLogStreamRequest) GetMinLevel ¶
func (x *AppLogStreamRequest) GetMinLevel() string
func (*AppLogStreamRequest) GetModules ¶
func (x *AppLogStreamRequest) GetModules() []string
func (*AppLogStreamRequest) ProtoMessage ¶
func (*AppLogStreamRequest) ProtoMessage()
func (*AppLogStreamRequest) ProtoReflect ¶
func (x *AppLogStreamRequest) ProtoReflect() protoreflect.Message
func (*AppLogStreamRequest) Reset ¶
func (x *AppLogStreamRequest) Reset()
func (*AppLogStreamRequest) String ¶
func (x *AppLogStreamRequest) String() string
type BandwidthProgress ¶
type BandwidthProgress struct {
BytesSent uint64 `protobuf:"varint,1,opt,name=bytes_sent,json=bytesSent,proto3" json:"bytes_sent,omitempty"` // Cumulative bytes sent
BytesReceived uint64 `protobuf:"varint,2,opt,name=bytes_received,json=bytesReceived,proto3" json:"bytes_received,omitempty"` // Cumulative bytes received
ElapsedNs int64 `protobuf:"varint,3,opt,name=elapsed_ns,json=elapsedNs,proto3" json:"elapsed_ns,omitempty"` // Elapsed time in nanoseconds
UploadSpeed float64 `protobuf:"fixed64,4,opt,name=upload_speed,json=uploadSpeed,proto3" json:"upload_speed,omitempty"` // Current upload speed in KB/s
DownloadSpeed float64 `protobuf:"fixed64,5,opt,name=download_speed,json=downloadSpeed,proto3" json:"download_speed,omitempty"` // Current download speed in KB/s
IsFinal bool `protobuf:"varint,6,opt,name=is_final,json=isFinal,proto3" json:"is_final,omitempty"` // True if this is the final result
Error string `protobuf:"bytes,7,opt,name=error,proto3" json:"error,omitempty"` // Error message if test failed
// contains filtered or unexported fields
}
func (*BandwidthProgress) Descriptor
deprecated
func (*BandwidthProgress) Descriptor() ([]byte, []int)
Deprecated: Use BandwidthProgress.ProtoReflect.Descriptor instead.
func (*BandwidthProgress) GetBytesReceived ¶
func (x *BandwidthProgress) GetBytesReceived() uint64
func (*BandwidthProgress) GetBytesSent ¶
func (x *BandwidthProgress) GetBytesSent() uint64
func (*BandwidthProgress) GetDownloadSpeed ¶
func (x *BandwidthProgress) GetDownloadSpeed() float64
func (*BandwidthProgress) GetElapsedNs ¶
func (x *BandwidthProgress) GetElapsedNs() int64
func (*BandwidthProgress) GetError ¶
func (x *BandwidthProgress) GetError() string
func (*BandwidthProgress) GetIsFinal ¶
func (x *BandwidthProgress) GetIsFinal() bool
func (*BandwidthProgress) GetUploadSpeed ¶
func (x *BandwidthProgress) GetUploadSpeed() float64
func (*BandwidthProgress) ProtoMessage ¶
func (*BandwidthProgress) ProtoMessage()
func (*BandwidthProgress) ProtoReflect ¶
func (x *BandwidthProgress) ProtoReflect() protoreflect.Message
func (*BandwidthProgress) Reset ¶
func (x *BandwidthProgress) Reset()
func (*BandwidthProgress) String ¶
func (x *BandwidthProgress) String() string
type BandwidthProgressCallback ¶
type BandwidthProgressCallback func(bytesSent, bytesReceived uint64, elapsed time.Duration, uploadSpeed, downloadSpeed float64, isFinal bool, err error)
BandwidthProgressCallback is called for each bandwidth progress update.
type BandwidthRequest ¶
type BandwidthRequest struct {
PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // Target visor public key
DurationNs int64 `protobuf:"varint,2,opt,name=duration_ns,json=durationNs,proto3" json:"duration_ns,omitempty"` // Duration to run the test in nanoseconds
PacketSizeKb int32 `protobuf:"varint,3,opt,name=packet_size_kb,json=packetSizeKb,proto3" json:"packet_size_kb,omitempty"` // Packet size in KB (default 32)
LocalRoute bool `protobuf:"varint,4,opt,name=local_route,json=localRoute,proto3" json:"local_route,omitempty"` // Use local route calculation (for skywire route)
// contains filtered or unexported fields
}
func (*BandwidthRequest) Descriptor
deprecated
func (*BandwidthRequest) Descriptor() ([]byte, []int)
Deprecated: Use BandwidthRequest.ProtoReflect.Descriptor instead.
func (*BandwidthRequest) GetDurationNs ¶
func (x *BandwidthRequest) GetDurationNs() int64
func (*BandwidthRequest) GetLocalRoute ¶
func (x *BandwidthRequest) GetLocalRoute() bool
func (*BandwidthRequest) GetPacketSizeKb ¶
func (x *BandwidthRequest) GetPacketSizeKb() int32
func (*BandwidthRequest) GetPublicKey ¶
func (x *BandwidthRequest) GetPublicKey() string
func (*BandwidthRequest) ProtoMessage ¶
func (*BandwidthRequest) ProtoMessage()
func (*BandwidthRequest) ProtoReflect ¶
func (x *BandwidthRequest) ProtoReflect() protoreflect.Message
func (*BandwidthRequest) Reset ¶
func (x *BandwidthRequest) Reset()
func (*BandwidthRequest) String ¶
func (x *BandwidthRequest) String() string
type CalcHop ¶
type CalcHop struct {
TpId string `protobuf:"bytes,1,opt,name=tp_id,json=tpId,proto3" json:"tp_id,omitempty"`
From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
To string `protobuf:"bytes,3,opt,name=to,proto3" json:"to,omitempty"`
// contains filtered or unexported fields
}
CalcHop is one edge in a route.
func (*CalcHop) Descriptor
deprecated
func (*CalcHop) ProtoMessage ¶
func (*CalcHop) ProtoMessage()
func (*CalcHop) ProtoReflect ¶
func (x *CalcHop) ProtoReflect() protoreflect.Message
type CalcRoute ¶
type CalcRoute struct {
Hops []*CalcHop `protobuf:"bytes,1,rep,name=hops,proto3" json:"hops,omitempty"`
// contains filtered or unexported fields
}
CalcRoute is one path the BFS found. Hops are listed in forward order from src to dst; the caller can derive the reverse by mirroring.
func (*CalcRoute) Descriptor
deprecated
func (*CalcRoute) ProtoMessage ¶
func (*CalcRoute) ProtoMessage()
func (*CalcRoute) ProtoReflect ¶
func (x *CalcRoute) ProtoReflect() protoreflect.Message
type CalcRouteCallback ¶
CalcRouteCallback is called once per route received from StreamCalcRoutes. Returning false stops further reception (the underlying gRPC stream is canceled, signaling the server to stop the BFS as well).
type CalcRoutesRequest ¶
type CalcRoutesRequest struct {
// SrcPk is the source visor public key. Empty means use the receiving
// visor's own PK (the common case — calc routes from this visor).
SrcPk string `protobuf:"bytes,1,opt,name=src_pk,json=srcPk,proto3" json:"src_pk,omitempty"`
// DstPk is the destination visor public key. Required.
DstPk string `protobuf:"bytes,2,opt,name=dst_pk,json=dstPk,proto3" json:"dst_pk,omitempty"`
// MinHops is the minimum hop count. 0 falls back to the visor's
// routing.min_hops, then 1.
MinHops int32 `protobuf:"varint,3,opt,name=min_hops,json=minHops,proto3" json:"min_hops,omitempty"`
// MaxHops is the maximum hop count. 0 falls back to a safe default.
MaxHops int32 `protobuf:"varint,4,opt,name=max_hops,json=maxHops,proto3" json:"max_hops,omitempty"`
// Count caps how many routes to return. 0 means unbounded (the BFS
// runs until the search space is exhausted; the streaming wire
// protocol means the caller can still dump them as they arrive
// without buffering the whole set).
Count int32 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"`
// Source selects the transport-graph data source. "tpd" (HTTP),
// "dht" (visor's local DHT store), or "auto" (DHT then TPD fallback).
Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"`
// TpdUrl optionally overrides the default transport-discovery URL.
TpdUrl string `protobuf:"bytes,7,opt,name=tpd_url,json=tpdUrl,proto3" json:"tpd_url,omitempty"`
// QueueCap caps the per-call BFS queue size on the server. 0 falls
// back to the route-finder package's DefaultMaxBFSQueue. Negative
// means unbounded (use with caution on dense graphs).
QueueCap int32 `protobuf:"varint,8,opt,name=queue_cap,json=queueCap,proto3" json:"queue_cap,omitempty"`
// contains filtered or unexported fields
}
CalcRoutesRequest configures server-side route calculation streaming.
func (*CalcRoutesRequest) Descriptor
deprecated
func (*CalcRoutesRequest) Descriptor() ([]byte, []int)
Deprecated: Use CalcRoutesRequest.ProtoReflect.Descriptor instead.
func (*CalcRoutesRequest) GetCount ¶
func (x *CalcRoutesRequest) GetCount() int32
func (*CalcRoutesRequest) GetDstPk ¶
func (x *CalcRoutesRequest) GetDstPk() string
func (*CalcRoutesRequest) GetMaxHops ¶
func (x *CalcRoutesRequest) GetMaxHops() int32
func (*CalcRoutesRequest) GetMinHops ¶
func (x *CalcRoutesRequest) GetMinHops() int32
func (*CalcRoutesRequest) GetQueueCap ¶
func (x *CalcRoutesRequest) GetQueueCap() int32
func (*CalcRoutesRequest) GetSource ¶
func (x *CalcRoutesRequest) GetSource() string
func (*CalcRoutesRequest) GetSrcPk ¶
func (x *CalcRoutesRequest) GetSrcPk() string
func (*CalcRoutesRequest) GetTpdUrl ¶
func (x *CalcRoutesRequest) GetTpdUrl() string
func (*CalcRoutesRequest) ProtoMessage ¶
func (*CalcRoutesRequest) ProtoMessage()
func (*CalcRoutesRequest) ProtoReflect ¶
func (x *CalcRoutesRequest) ProtoReflect() protoreflect.Message
func (*CalcRoutesRequest) Reset ¶
func (x *CalcRoutesRequest) Reset()
func (*CalcRoutesRequest) String ¶
func (x *CalcRoutesRequest) String() string
type CpuStat ¶
type CpuStat struct {
Cpu string `protobuf:"bytes,1,opt,name=cpu,proto3" json:"cpu,omitempty"` // CPU identifier (cpu0, cpu1, etc. or cpu-total)
UsagePercent float64 `protobuf:"fixed64,2,opt,name=usage_percent,json=usagePercent,proto3" json:"usage_percent,omitempty"` // Usage percentage (0-100)
// contains filtered or unexported fields
}
CpuStat contains CPU usage for a single core
func (*CpuStat) Descriptor
deprecated
func (*CpuStat) GetUsagePercent ¶
func (*CpuStat) ProtoMessage ¶
func (*CpuStat) ProtoMessage()
func (*CpuStat) ProtoReflect ¶
func (x *CpuStat) ProtoReflect() protoreflect.Message
type DiskStat ¶
type DiskStat struct {
Device string `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"` // Device name
Mountpoint string `protobuf:"bytes,2,opt,name=mountpoint,proto3" json:"mountpoint,omitempty"` // Mount point
Fstype string `protobuf:"bytes,3,opt,name=fstype,proto3" json:"fstype,omitempty"` // Filesystem type
Total uint64 `protobuf:"varint,4,opt,name=total,proto3" json:"total,omitempty"` // Total space in bytes
Used uint64 `protobuf:"varint,5,opt,name=used,proto3" json:"used,omitempty"` // Used space in bytes
Free uint64 `protobuf:"varint,6,opt,name=free,proto3" json:"free,omitempty"` // Free space in bytes
UsedPercent float64 `protobuf:"fixed64,7,opt,name=used_percent,json=usedPercent,proto3" json:"used_percent,omitempty"` // Usage percentage (0-100)
// contains filtered or unexported fields
}
DiskStat contains disk usage for a partition
func (*DiskStat) Descriptor
deprecated
func (*DiskStat) GetMountpoint ¶
func (*DiskStat) GetUsedPercent ¶
func (*DiskStat) ProtoMessage ¶
func (*DiskStat) ProtoMessage()
func (*DiskStat) ProtoReflect ¶
func (x *DiskStat) ProtoReflect() protoreflect.Message
type DmsgServersRequest ¶
type DmsgServersRequest struct {
PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // Remote visor public key to look up
// contains filtered or unexported fields
}
func (*DmsgServersRequest) Descriptor
deprecated
func (*DmsgServersRequest) Descriptor() ([]byte, []int)
Deprecated: Use DmsgServersRequest.ProtoReflect.Descriptor instead.
func (*DmsgServersRequest) GetPublicKey ¶
func (x *DmsgServersRequest) GetPublicKey() string
func (*DmsgServersRequest) ProtoMessage ¶
func (*DmsgServersRequest) ProtoMessage()
func (*DmsgServersRequest) ProtoReflect ¶
func (x *DmsgServersRequest) ProtoReflect() protoreflect.Message
func (*DmsgServersRequest) Reset ¶
func (x *DmsgServersRequest) Reset()
func (*DmsgServersRequest) String ¶
func (x *DmsgServersRequest) String() string
type DmsgServersResponse ¶
type DmsgServersResponse struct {
ServerPks []string `protobuf:"bytes,1,rep,name=server_pks,json=serverPks,proto3" json:"server_pks,omitempty"` // List of DMSG server public keys
// contains filtered or unexported fields
}
func (*DmsgServersResponse) Descriptor
deprecated
func (*DmsgServersResponse) Descriptor() ([]byte, []int)
Deprecated: Use DmsgServersResponse.ProtoReflect.Descriptor instead.
func (*DmsgServersResponse) GetServerPks ¶
func (x *DmsgServersResponse) GetServerPks() []string
func (*DmsgServersResponse) ProtoMessage ¶
func (*DmsgServersResponse) ProtoMessage()
func (*DmsgServersResponse) ProtoReflect ¶
func (x *DmsgServersResponse) ProtoReflect() protoreflect.Message
func (*DmsgServersResponse) Reset ¶
func (x *DmsgServersResponse) Reset()
func (*DmsgServersResponse) String ¶
func (x *DmsgServersResponse) String() string
type GroupMessageCallback ¶
type GroupMessageCallback func(e *GroupMessageEvent)
GroupMessageCallback is invoked for every group message the stream delivers. The Subscribed-sentinel entry is filtered out by StreamGroupMessages — callers only see real messages.
type GroupMessageData ¶
GroupMessageData mirrors visor.GroupMessage one-for-one but lives in rpcgrpc so VisorAPI.SubscribeGroupMessages doesn't pull pkg/visor into rpcgrpc's import graph. The adapter at the visor's init wires a tiny converter goroutine between the inbox's chan visor.GroupMessage and this chan GroupMessageData.
type GroupMessageEvent ¶
type GroupMessageEvent struct {
// TimestampNs is the message Unix-nanos timestamp from the sender.
TimestampNs int64 `protobuf:"varint,1,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"`
// GroupId is the group the message arrived on.
GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
// SenderPk is the publishing member's hex public key.
SenderPk string `protobuf:"bytes,3,opt,name=sender_pk,json=senderPk,proto3" json:"sender_pk,omitempty"`
// Body is the message text (may contain embedded newlines —
// callers that need one-line-per-event should escape on display).
Body string `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"`
// Subscribed is set on a sentinel sent immediately after the
// server registers the subscription. Lets clients gate downstream
// RPCs on subscription liveness — same pattern AppLogEntry uses.
Subscribed bool `protobuf:"varint,5,opt,name=subscribed,proto3" json:"subscribed,omitempty"`
// contains filtered or unexported fields
}
GroupMessageEvent is one inbound group message delivered to the stream. Mirrors visor.GroupMessage one-for-one.
func (*GroupMessageEvent) Descriptor
deprecated
func (*GroupMessageEvent) Descriptor() ([]byte, []int)
Deprecated: Use GroupMessageEvent.ProtoReflect.Descriptor instead.
func (*GroupMessageEvent) GetBody ¶
func (x *GroupMessageEvent) GetBody() string
func (*GroupMessageEvent) GetGroupId ¶
func (x *GroupMessageEvent) GetGroupId() string
func (*GroupMessageEvent) GetSenderPk ¶
func (x *GroupMessageEvent) GetSenderPk() string
func (*GroupMessageEvent) GetSubscribed ¶
func (x *GroupMessageEvent) GetSubscribed() bool
func (*GroupMessageEvent) GetTimestampNs ¶
func (x *GroupMessageEvent) GetTimestampNs() int64
func (*GroupMessageEvent) ProtoMessage ¶
func (*GroupMessageEvent) ProtoMessage()
func (*GroupMessageEvent) ProtoReflect ¶
func (x *GroupMessageEvent) ProtoReflect() protoreflect.Message
func (*GroupMessageEvent) Reset ¶
func (x *GroupMessageEvent) Reset()
func (*GroupMessageEvent) String ¶
func (x *GroupMessageEvent) String() string
type GroupMessagesRequest ¶
type GroupMessagesRequest struct {
// GroupId filters to one group. Empty subscribes to every group
// the visor is currently in (the default 'cli skychat group listen'
// behavior).
GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
// SinceTimestampNs replays buffered messages with TS strictly
// greater than this value before live deliveries start. Zero
// means "live only" — drains nothing from history. Mirrors the
// 'since' arg the previous GroupPoll RPC accepted.
SinceTimestampNs int64 `protobuf:"varint,2,opt,name=since_timestamp_ns,json=sinceTimestampNs,proto3" json:"since_timestamp_ns,omitempty"`
// contains filtered or unexported fields
}
GroupMessagesRequest configures a group-message stream subscription.
func (*GroupMessagesRequest) Descriptor
deprecated
func (*GroupMessagesRequest) Descriptor() ([]byte, []int)
Deprecated: Use GroupMessagesRequest.ProtoReflect.Descriptor instead.
func (*GroupMessagesRequest) GetGroupId ¶
func (x *GroupMessagesRequest) GetGroupId() string
func (*GroupMessagesRequest) GetSinceTimestampNs ¶
func (x *GroupMessagesRequest) GetSinceTimestampNs() int64
func (*GroupMessagesRequest) ProtoMessage ¶
func (*GroupMessagesRequest) ProtoMessage()
func (*GroupMessagesRequest) ProtoReflect ¶
func (x *GroupMessagesRequest) ProtoReflect() protoreflect.Message
func (*GroupMessagesRequest) Reset ¶
func (x *GroupMessagesRequest) Reset()
func (*GroupMessagesRequest) String ¶
func (x *GroupMessagesRequest) String() string
type HostInfo ¶
type HostInfo struct {
Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"`
UptimeSec int64 `protobuf:"varint,2,opt,name=uptime_sec,json=uptimeSec,proto3" json:"uptime_sec,omitempty"` // System uptime in seconds
Os string `protobuf:"bytes,3,opt,name=os,proto3" json:"os,omitempty"` // Operating system name
Platform string `protobuf:"bytes,4,opt,name=platform,proto3" json:"platform,omitempty"` // Platform (e.g., ubuntu, centos)
PlatformVersion string `protobuf:"bytes,5,opt,name=platform_version,json=platformVersion,proto3" json:"platform_version,omitempty"` // Platform version
KernelVersion string `protobuf:"bytes,6,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"` // Kernel version
KernelArch string `protobuf:"bytes,7,opt,name=kernel_arch,json=kernelArch,proto3" json:"kernel_arch,omitempty"` // Kernel architecture
NumCpus int32 `protobuf:"varint,8,opt,name=num_cpus,json=numCpus,proto3" json:"num_cpus,omitempty"` // Number of logical CPUs
// contains filtered or unexported fields
}
HostInfo contains basic host information
func (*HostInfo) Descriptor
deprecated
func (*HostInfo) GetHostname ¶
func (*HostInfo) GetKernelArch ¶
func (*HostInfo) GetKernelVersion ¶
func (*HostInfo) GetNumCpus ¶
func (*HostInfo) GetPlatform ¶
func (*HostInfo) GetPlatformVersion ¶
func (*HostInfo) GetUptimeSec ¶
func (*HostInfo) ProtoMessage ¶
func (*HostInfo) ProtoMessage()
func (*HostInfo) ProtoReflect ¶
func (x *HostInfo) ProtoReflect() protoreflect.Message
type MemoryStat ¶
type MemoryStat struct {
Total uint64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` // Total memory in bytes
Used uint64 `protobuf:"varint,2,opt,name=used,proto3" json:"used,omitempty"` // Used memory in bytes
Available uint64 `protobuf:"varint,3,opt,name=available,proto3" json:"available,omitempty"` // Available memory in bytes
UsedPercent float64 `protobuf:"fixed64,4,opt,name=used_percent,json=usedPercent,proto3" json:"used_percent,omitempty"` // Usage percentage (0-100)
// contains filtered or unexported fields
}
MemoryStat contains memory usage information
func (*MemoryStat) Descriptor
deprecated
func (*MemoryStat) Descriptor() ([]byte, []int)
Deprecated: Use MemoryStat.ProtoReflect.Descriptor instead.
func (*MemoryStat) GetAvailable ¶
func (x *MemoryStat) GetAvailable() uint64
func (*MemoryStat) GetTotal ¶
func (x *MemoryStat) GetTotal() uint64
func (*MemoryStat) GetUsed ¶
func (x *MemoryStat) GetUsed() uint64
func (*MemoryStat) GetUsedPercent ¶
func (x *MemoryStat) GetUsedPercent() float64
func (*MemoryStat) ProtoMessage ¶
func (*MemoryStat) ProtoMessage()
func (*MemoryStat) ProtoReflect ¶
func (x *MemoryStat) ProtoReflect() protoreflect.Message
func (*MemoryStat) Reset ¶
func (x *MemoryStat) Reset()
func (*MemoryStat) String ¶
func (x *MemoryStat) String() string
type MuxBandwidthDone ¶
type MuxBandwidthDone struct {
TotalBytesSent uint64 `protobuf:"varint,1,opt,name=total_bytes_sent,json=totalBytesSent,proto3" json:"total_bytes_sent,omitempty"`
TotalBytesReceived uint64 `protobuf:"varint,2,opt,name=total_bytes_received,json=totalBytesReceived,proto3" json:"total_bytes_received,omitempty"`
// WallTimeNs is total elapsed including setup; PumpTimeNs excludes
// setup. Operators comparing throughput across runs typically want
// PumpTimeNs (apples-to-apples regardless of how long setup took).
WallTimeNs int64 `protobuf:"varint,3,opt,name=wall_time_ns,json=wallTimeNs,proto3" json:"wall_time_ns,omitempty"`
PumpTimeNs int64 `protobuf:"varint,4,opt,name=pump_time_ns,json=pumpTimeNs,proto3" json:"pump_time_ns,omitempty"`
AvgSendBps float64 `protobuf:"fixed64,5,opt,name=avg_send_bps,json=avgSendBps,proto3" json:"avg_send_bps,omitempty"`
AvgRecvBps float64 `protobuf:"fixed64,6,opt,name=avg_recv_bps,json=avgRecvBps,proto3" json:"avg_recv_bps,omitempty"`
PeakSendBps float64 `protobuf:"fixed64,7,opt,name=peak_send_bps,json=peakSendBps,proto3" json:"peak_send_bps,omitempty"`
PeakRecvBps float64 `protobuf:"fixed64,8,opt,name=peak_recv_bps,json=peakRecvBps,proto3" json:"peak_recv_bps,omitempty"`
RoutesRequested int32 `protobuf:"varint,9,opt,name=routes_requested,json=routesRequested,proto3" json:"routes_requested,omitempty"`
RoutesEstablished int32 `protobuf:"varint,10,opt,name=routes_established,json=routesEstablished,proto3" json:"routes_established,omitempty"`
SetupTotalNs int64 `protobuf:"varint,11,opt,name=setup_total_ns,json=setupTotalNs,proto3" json:"setup_total_ns,omitempty"`
// RTT distribution under load — across all probes that fired
// during the bulk pump phase. Zero when no probes ran or
// ProbeRtt was false. Jitter is population stddev — same
// formula as PingTreeResult.jitter_ns.
ProbeCount int32 `protobuf:"varint,12,opt,name=probe_count,json=probeCount,proto3" json:"probe_count,omitempty"`
ProbeAvgNs int64 `protobuf:"varint,13,opt,name=probe_avg_ns,json=probeAvgNs,proto3" json:"probe_avg_ns,omitempty"`
ProbeP50Ns int64 `protobuf:"varint,14,opt,name=probe_p50_ns,json=probeP50Ns,proto3" json:"probe_p50_ns,omitempty"`
ProbeP99Ns int64 `protobuf:"varint,15,opt,name=probe_p99_ns,json=probeP99Ns,proto3" json:"probe_p99_ns,omitempty"`
ProbeJitterNs int64 `protobuf:"varint,16,opt,name=probe_jitter_ns,json=probeJitterNs,proto3" json:"probe_jitter_ns,omitempty"`
// TerminationReason: "duration" | "context_cancel" | "all_routes_failed" | "error".
TerminationReason string `protobuf:"bytes,17,opt,name=termination_reason,json=terminationReason,proto3" json:"termination_reason,omitempty"`
// RTT distribution under no contention — across all probes that
// fired during the IdleBaselineDuration phase BEFORE the bulk
// pump. Zero when idle_baseline_duration_ns was 0 or no probes
// landed in the window. Operators compute the queueing delay
// as (probe_pXX - idle_probe_pXX); the CLI's summary prints
// this delta directly when both distributions are present.
IdleProbeCount int32 `protobuf:"varint,18,opt,name=idle_probe_count,json=idleProbeCount,proto3" json:"idle_probe_count,omitempty"`
IdleProbeAvgNs int64 `protobuf:"varint,19,opt,name=idle_probe_avg_ns,json=idleProbeAvgNs,proto3" json:"idle_probe_avg_ns,omitempty"`
IdleProbeP50Ns int64 `protobuf:"varint,20,opt,name=idle_probe_p50_ns,json=idleProbeP50Ns,proto3" json:"idle_probe_p50_ns,omitempty"`
IdleProbeP99Ns int64 `protobuf:"varint,21,opt,name=idle_probe_p99_ns,json=idleProbeP99Ns,proto3" json:"idle_probe_p99_ns,omitempty"`
IdleProbeJitterNs int64 `protobuf:"varint,22,opt,name=idle_probe_jitter_ns,json=idleProbeJitterNs,proto3" json:"idle_probe_jitter_ns,omitempty"`
// contains filtered or unexported fields
}
MuxBandwidthDone is the terminal event. Aggregates the run.
func (*MuxBandwidthDone) Descriptor
deprecated
func (*MuxBandwidthDone) Descriptor() ([]byte, []int)
Deprecated: Use MuxBandwidthDone.ProtoReflect.Descriptor instead.
func (*MuxBandwidthDone) GetAvgRecvBps ¶
func (x *MuxBandwidthDone) GetAvgRecvBps() float64
func (*MuxBandwidthDone) GetAvgSendBps ¶
func (x *MuxBandwidthDone) GetAvgSendBps() float64
func (*MuxBandwidthDone) GetIdleProbeAvgNs ¶
func (x *MuxBandwidthDone) GetIdleProbeAvgNs() int64
func (*MuxBandwidthDone) GetIdleProbeCount ¶
func (x *MuxBandwidthDone) GetIdleProbeCount() int32
func (*MuxBandwidthDone) GetIdleProbeJitterNs ¶
func (x *MuxBandwidthDone) GetIdleProbeJitterNs() int64
func (*MuxBandwidthDone) GetIdleProbeP50Ns ¶
func (x *MuxBandwidthDone) GetIdleProbeP50Ns() int64
func (*MuxBandwidthDone) GetIdleProbeP99Ns ¶
func (x *MuxBandwidthDone) GetIdleProbeP99Ns() int64
func (*MuxBandwidthDone) GetPeakRecvBps ¶
func (x *MuxBandwidthDone) GetPeakRecvBps() float64
func (*MuxBandwidthDone) GetPeakSendBps ¶
func (x *MuxBandwidthDone) GetPeakSendBps() float64
func (*MuxBandwidthDone) GetProbeAvgNs ¶
func (x *MuxBandwidthDone) GetProbeAvgNs() int64
func (*MuxBandwidthDone) GetProbeCount ¶
func (x *MuxBandwidthDone) GetProbeCount() int32
func (*MuxBandwidthDone) GetProbeJitterNs ¶
func (x *MuxBandwidthDone) GetProbeJitterNs() int64
func (*MuxBandwidthDone) GetProbeP50Ns ¶
func (x *MuxBandwidthDone) GetProbeP50Ns() int64
func (*MuxBandwidthDone) GetProbeP99Ns ¶
func (x *MuxBandwidthDone) GetProbeP99Ns() int64
func (*MuxBandwidthDone) GetPumpTimeNs ¶
func (x *MuxBandwidthDone) GetPumpTimeNs() int64
func (*MuxBandwidthDone) GetRoutesEstablished ¶
func (x *MuxBandwidthDone) GetRoutesEstablished() int32
func (*MuxBandwidthDone) GetRoutesRequested ¶
func (x *MuxBandwidthDone) GetRoutesRequested() int32
func (*MuxBandwidthDone) GetSetupTotalNs ¶
func (x *MuxBandwidthDone) GetSetupTotalNs() int64
func (*MuxBandwidthDone) GetTerminationReason ¶
func (x *MuxBandwidthDone) GetTerminationReason() string
func (*MuxBandwidthDone) GetTotalBytesReceived ¶
func (x *MuxBandwidthDone) GetTotalBytesReceived() uint64
func (*MuxBandwidthDone) GetTotalBytesSent ¶
func (x *MuxBandwidthDone) GetTotalBytesSent() uint64
func (*MuxBandwidthDone) GetWallTimeNs ¶
func (x *MuxBandwidthDone) GetWallTimeNs() int64
func (*MuxBandwidthDone) ProtoMessage ¶
func (*MuxBandwidthDone) ProtoMessage()
func (*MuxBandwidthDone) ProtoReflect ¶
func (x *MuxBandwidthDone) ProtoReflect() protoreflect.Message
func (*MuxBandwidthDone) Reset ¶
func (x *MuxBandwidthDone) Reset()
func (*MuxBandwidthDone) String ¶
func (x *MuxBandwidthDone) String() string
type MuxBandwidthError ¶
type MuxBandwidthError struct {
Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"`
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
// contains filtered or unexported fields
}
MuxBandwidthError signals an unrecoverable condition. Last event before stream close.
func (*MuxBandwidthError) Descriptor
deprecated
func (*MuxBandwidthError) Descriptor() ([]byte, []int)
Deprecated: Use MuxBandwidthError.ProtoReflect.Descriptor instead.
func (*MuxBandwidthError) GetCode ¶
func (x *MuxBandwidthError) GetCode() string
func (*MuxBandwidthError) GetMessage ¶
func (x *MuxBandwidthError) GetMessage() string
func (*MuxBandwidthError) ProtoMessage ¶
func (*MuxBandwidthError) ProtoMessage()
func (*MuxBandwidthError) ProtoReflect ¶
func (x *MuxBandwidthError) ProtoReflect() protoreflect.Message
func (*MuxBandwidthError) Reset ¶
func (x *MuxBandwidthError) Reset()
func (*MuxBandwidthError) String ¶
func (x *MuxBandwidthError) String() string
type MuxBandwidthEvent ¶
type MuxBandwidthEvent struct {
TimestampNs int64 `protobuf:"varint,1,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"`
// Types that are valid to be assigned to Payload:
//
// *MuxBandwidthEvent_RouteEstablished
// *MuxBandwidthEvent_Sample
// *MuxBandwidthEvent_RttProbe
// *MuxBandwidthEvent_Done
// *MuxBandwidthEvent_Error
// *MuxBandwidthEvent_RouteFailure
// *MuxBandwidthEvent_LegLifecycle
Payload isMuxBandwidthEvent_Payload `protobuf_oneof:"payload"`
// contains filtered or unexported fields
}
MuxBandwidthEvent is one entry on the stream. Exactly one oneof payload is set per message.
func (*MuxBandwidthEvent) Descriptor
deprecated
func (*MuxBandwidthEvent) Descriptor() ([]byte, []int)
Deprecated: Use MuxBandwidthEvent.ProtoReflect.Descriptor instead.
func (*MuxBandwidthEvent) GetDone ¶
func (x *MuxBandwidthEvent) GetDone() *MuxBandwidthDone
func (*MuxBandwidthEvent) GetError ¶
func (x *MuxBandwidthEvent) GetError() *MuxBandwidthError
func (*MuxBandwidthEvent) GetLegLifecycle ¶
func (x *MuxBandwidthEvent) GetLegLifecycle() *MuxLegLifecycle
func (*MuxBandwidthEvent) GetPayload ¶
func (x *MuxBandwidthEvent) GetPayload() isMuxBandwidthEvent_Payload
func (*MuxBandwidthEvent) GetRouteEstablished ¶
func (x *MuxBandwidthEvent) GetRouteEstablished() *MuxRouteEstablished
func (*MuxBandwidthEvent) GetRouteFailure ¶
func (x *MuxBandwidthEvent) GetRouteFailure() *MuxRouteFailure
func (*MuxBandwidthEvent) GetRttProbe ¶
func (x *MuxBandwidthEvent) GetRttProbe() *MuxRttProbe
func (*MuxBandwidthEvent) GetSample ¶
func (x *MuxBandwidthEvent) GetSample() *MuxBandwidthSample
func (*MuxBandwidthEvent) GetTimestampNs ¶
func (x *MuxBandwidthEvent) GetTimestampNs() int64
func (*MuxBandwidthEvent) ProtoMessage ¶
func (*MuxBandwidthEvent) ProtoMessage()
func (*MuxBandwidthEvent) ProtoReflect ¶
func (x *MuxBandwidthEvent) ProtoReflect() protoreflect.Message
func (*MuxBandwidthEvent) Reset ¶
func (x *MuxBandwidthEvent) Reset()
func (*MuxBandwidthEvent) String ¶
func (x *MuxBandwidthEvent) String() string
type MuxBandwidthEvent_Done ¶
type MuxBandwidthEvent_Done struct {
// Done is the terminal event before stream close. Carries the
// aggregated totals + RTT distribution stats.
Done *MuxBandwidthDone `protobuf:"bytes,13,opt,name=done,proto3,oneof"`
}
type MuxBandwidthEvent_Error ¶
type MuxBandwidthEvent_Error struct {
// Error signals an unrecoverable condition. Last event before
// stream close; same shape semantics as PingTreeServerError.
Error *MuxBandwidthError `protobuf:"bytes,14,opt,name=error,proto3,oneof"`
}
type MuxBandwidthEvent_LegLifecycle ¶
type MuxBandwidthEvent_LegLifecycle struct {
// LegLifecycle fires when the routing-policy on_tick hook mutates the
// leg set — a leg added, dropped, promoted from warm standby, or demoted
// to it. Only emitted on policy-driven (`policy-bw`) runs; the pure
// mux-bw baseline never mutates its leg set mid-run so never emits these.
// Lets the telemetry chart render hot-swaps against the per-leg bandwidth
// series.
LegLifecycle *MuxLegLifecycle `protobuf:"bytes,16,opt,name=leg_lifecycle,json=legLifecycle,proto3,oneof"`
}
type MuxBandwidthEvent_RouteEstablished ¶
type MuxBandwidthEvent_RouteEstablished struct {
// RouteEstablished fires once per route (in any order) as the
// setup phase completes. Carries the actual route hops chosen,
// letting consumers verify min_hops was honored.
RouteEstablished *MuxRouteEstablished `protobuf:"bytes,10,opt,name=route_established,json=routeEstablished,proto3,oneof"`
}
type MuxBandwidthEvent_RouteFailure ¶
type MuxBandwidthEvent_RouteFailure struct {
// RouteFailure fires when a route's pump goroutine exits with an
// error AFTER the route was established. Distinct from
// MuxRouteEstablished{failed:true,setup_err:...} which covers
// setup-phase failures. Carries the partial bytes shipped before
// the pump goroutine died so the consumer can attribute throughput
// contributions accurately.
RouteFailure *MuxRouteFailure `protobuf:"bytes,15,opt,name=route_failure,json=routeFailure,proto3,oneof"`
}
type MuxBandwidthEvent_RttProbe ¶
type MuxBandwidthEvent_RttProbe struct {
// RttProbe fires every probe_interval_ns when ProbeRtt is set.
// Standalone from the Sample event because probes are async.
RttProbe *MuxRttProbe `protobuf:"bytes,12,opt,name=rtt_probe,json=rttProbe,proto3,oneof"`
}
type MuxBandwidthEvent_Sample ¶
type MuxBandwidthEvent_Sample struct {
// Sample fires every sample_interval_ns with cumulative + instant
// throughput numbers. Sent until pump duration elapses.
Sample *MuxBandwidthSample `protobuf:"bytes,11,opt,name=sample,proto3,oneof"`
}
type MuxBandwidthRequest ¶
type MuxBandwidthRequest struct {
// TargetPk is the remote visor's public key. Required.
TargetPk string `protobuf:"bytes,1,opt,name=target_pk,json=targetPk,proto3" json:"target_pk,omitempty"`
// Routes is the number of parallel route connections to open.
// 1 = single route (the StreamBandwidthTest equivalent).
// N > 1 = N concurrent routes pumping bytes, aggregate throughput
// is the headline measurement. 0 falls back to 1.
Routes int32 `protobuf:"varint,2,opt,name=routes,proto3" json:"routes,omitempty"`
// DurationNs caps the total wall-clock time spent pumping bytes.
// 0 falls back to 30s.
DurationNs int64 `protobuf:"varint,3,opt,name=duration_ns,json=durationNs,proto3" json:"duration_ns,omitempty"`
// PacketSizeKb sizes each write block. Larger amortizes write
// overhead; smaller surfaces stalls faster. 0 falls back to 32 KB.
PacketSizeKb int32 `protobuf:"varint,4,opt,name=packet_size_kb,json=packetSizeKb,proto3" json:"packet_size_kb,omitempty"`
// MinHops is the route-finder's minimum hop constraint. When > 1,
// the route excludes any direct transport between the local visor
// and TargetPk — forcing the bandwidth pump through intermediates.
// This is the "mux excluding direct" cell of the operator's
// hypothesis. 0 uses the visor's routing.min_hops config default
// (usually 1).
MinHops int32 `protobuf:"varint,5,opt,name=min_hops,json=minHops,proto3" json:"min_hops,omitempty"`
// SetupTimeoutNs bounds each route's setup phase. 0 falls back to
// 30s. Long setup times are common for multi-hop routes (see the
// p95=9.5s level-1 setup numbers from the ping-tree measurement).
SetupTimeoutNs int64 `protobuf:"varint,6,opt,name=setup_timeout_ns,json=setupTimeoutNs,proto3" json:"setup_timeout_ns,omitempty"`
// ProbeRtt toggles a separate small-packet RTT probe that runs
// concurrently with the bulk pump. Pairs are emitted as
// MuxRttProbe events. The probe rides the SAME first route as the
// bulk pump, so the resulting RTT samples reflect that route's
// saturation — the queueing-delay signal.
ProbeRtt bool `protobuf:"varint,7,opt,name=probe_rtt,json=probeRtt,proto3" json:"probe_rtt,omitempty"`
// ProbeIntervalNs is how often the RTT probe fires. 0 falls back
// to 100 ms. Faster = denser jitter signal; slower = less
// contention with the bulk pump.
ProbeIntervalNs int64 `protobuf:"varint,8,opt,name=probe_interval_ns,json=probeIntervalNs,proto3" json:"probe_interval_ns,omitempty"`
// SampleIntervalNs is how often a MuxBandwidthSample is emitted.
// 0 falls back to 1s. Smaller surfaces transient throughput dips
// (bufferbloat, queue spikes); larger reduces stream chatter.
SampleIntervalNs int64 `protobuf:"varint,9,opt,name=sample_interval_ns,json=sampleIntervalNs,proto3" json:"sample_interval_ns,omitempty"`
// LocalRoute uses local route calculation (cached TPD data)
// instead of querying the route-finder service. Mirrors
// BandwidthRequest.LocalRoute.
LocalRoute bool `protobuf:"varint,10,opt,name=local_route,json=localRoute,proto3" json:"local_route,omitempty"`
// IdleBaselineDurationNs, when > 0, inserts a quiescent probe
// phase between route setup and the bulk pump. During the phase
// the same probe loop fires (rate = probe_interval_ns) but no
// pump goroutines run — so the RTT samples reflect the route
// with zero contention. The aggregated distribution comes back
// in MuxBandwidthDone.idle_probe_* fields, and the queueing
// delay computed by callers is (loaded_pXX - idle_pXX). 0 = no
// idle phase (skip the baseline measurement). Implies ProbeRtt =
// true at the handler — without probes there's nothing to
// measure.
IdleBaselineDurationNs int64 `` /* 133-byte string literal not displayed */
// RoutingPolicy, when non-empty, drives this run through the WASM /
// Starlark routing-policy engine instead of the pure-measurement path.
// Accepts the same values as the visor's routing.policy_per_dial config:
// "preset:<name>" (a compiled bundle preset — rotating-bw, elastic-mux,
// latency-adaptive, app-mux, adaptive, probe-and-prune), "@/path/to.wasm",
// "@/path/to.star", or an inline Starlark string. When set, the handler
// (a) calls the engine's decide_route to pick the mux leg count + min-hops
// at setup, and (b) fires the engine's on_tick hook against the live per-leg
// stats on the sample cadence, applying the returned add/drop/promote/demote
// leg actions — the in-process rig that proves a preset is demonstrably
// adaptive over a live multiplexed route. Empty = the untouched mux-bw
// baseline. This is the `policy-bw` CLI sibling's surface.
RoutingPolicy string `protobuf:"bytes,12,opt,name=routing_policy,json=routingPolicy,proto3" json:"routing_policy,omitempty"`
// PolicyApp is the app name the routing-policy engine sees as
// RoutingContext.App — presets branch on it (latency-adaptive acts on
// vpn-client/skysocks-client/skynet-client; app-mux is per-app). Only
// meaningful when routing_policy is set; the handler defaults it to
// "skysocks-client" so the bandwidth-oriented presets are exercised.
PolicyApp string `protobuf:"bytes,13,opt,name=policy_app,json=policyApp,proto3" json:"policy_app,omitempty"`
// CliOverrides surfaces the operator's ad-hoc `--override key=value` flags
// into the routing-policy engine's RoutingContext.CLIOverrides — the same
// map the conditional presets read: geo-avoid (avoid_geo=<CC,CC>),
// trust-tiered (trusted_pks=<PK,PK>), time-of-day (business_hours=START-END).
// Only meaningful when routing_policy is set. Absent/empty = the preset's
// built-in defaults (unchanged behavior). Keys collide-last with the
// handler-derived mux_routes / min_hops entries the controller already sets.
CliOverrides map[string]string `` /* 172-byte string literal not displayed */
// contains filtered or unexported fields
}
MuxBandwidthRequest configures a multiplexed-route bandwidth + RTT probe run against a single target peer. See StreamMuxBandwidth's docstring for the operator-visible hypothesis this serves.
All durations are nanoseconds (proto convention used throughout this service). All "0 = default" fields fall back to handler-side constants documented inline.
func (*MuxBandwidthRequest) Descriptor
deprecated
func (*MuxBandwidthRequest) Descriptor() ([]byte, []int)
Deprecated: Use MuxBandwidthRequest.ProtoReflect.Descriptor instead.
func (*MuxBandwidthRequest) GetCliOverrides ¶
func (x *MuxBandwidthRequest) GetCliOverrides() map[string]string
func (*MuxBandwidthRequest) GetDurationNs ¶
func (x *MuxBandwidthRequest) GetDurationNs() int64
func (*MuxBandwidthRequest) GetIdleBaselineDurationNs ¶
func (x *MuxBandwidthRequest) GetIdleBaselineDurationNs() int64
func (*MuxBandwidthRequest) GetLocalRoute ¶
func (x *MuxBandwidthRequest) GetLocalRoute() bool
func (*MuxBandwidthRequest) GetMinHops ¶
func (x *MuxBandwidthRequest) GetMinHops() int32
func (*MuxBandwidthRequest) GetPacketSizeKb ¶
func (x *MuxBandwidthRequest) GetPacketSizeKb() int32
func (*MuxBandwidthRequest) GetPolicyApp ¶
func (x *MuxBandwidthRequest) GetPolicyApp() string
func (*MuxBandwidthRequest) GetProbeIntervalNs ¶
func (x *MuxBandwidthRequest) GetProbeIntervalNs() int64
func (*MuxBandwidthRequest) GetProbeRtt ¶
func (x *MuxBandwidthRequest) GetProbeRtt() bool
func (*MuxBandwidthRequest) GetRoutes ¶
func (x *MuxBandwidthRequest) GetRoutes() int32
func (*MuxBandwidthRequest) GetRoutingPolicy ¶
func (x *MuxBandwidthRequest) GetRoutingPolicy() string
func (*MuxBandwidthRequest) GetSampleIntervalNs ¶
func (x *MuxBandwidthRequest) GetSampleIntervalNs() int64
func (*MuxBandwidthRequest) GetSetupTimeoutNs ¶
func (x *MuxBandwidthRequest) GetSetupTimeoutNs() int64
func (*MuxBandwidthRequest) GetTargetPk ¶
func (x *MuxBandwidthRequest) GetTargetPk() string
func (*MuxBandwidthRequest) ProtoMessage ¶
func (*MuxBandwidthRequest) ProtoMessage()
func (*MuxBandwidthRequest) ProtoReflect ¶
func (x *MuxBandwidthRequest) ProtoReflect() protoreflect.Message
func (*MuxBandwidthRequest) Reset ¶
func (x *MuxBandwidthRequest) Reset()
func (*MuxBandwidthRequest) String ¶
func (x *MuxBandwidthRequest) String() string
type MuxBandwidthSample ¶
type MuxBandwidthSample struct {
// ElapsedNs is the time since the first byte was sent (NOT since
// the run was requested — excludes setup time).
ElapsedNs int64 `protobuf:"varint,1,opt,name=elapsed_ns,json=elapsedNs,proto3" json:"elapsed_ns,omitempty"`
BytesSent uint64 `protobuf:"varint,2,opt,name=bytes_sent,json=bytesSent,proto3" json:"bytes_sent,omitempty"`
BytesReceived uint64 `protobuf:"varint,3,opt,name=bytes_received,json=bytesReceived,proto3" json:"bytes_received,omitempty"`
// InstantSendBps / RecvBps are per-interval rates. avg_*_bps are
// run-cumulative rates. All in bits-per-second (matches the
// network-engineer convention; consumers needing Mbps divide by
// 1e6).
InstantSendBps float64 `protobuf:"fixed64,4,opt,name=instant_send_bps,json=instantSendBps,proto3" json:"instant_send_bps,omitempty"`
InstantRecvBps float64 `protobuf:"fixed64,5,opt,name=instant_recv_bps,json=instantRecvBps,proto3" json:"instant_recv_bps,omitempty"`
AvgSendBps float64 `protobuf:"fixed64,6,opt,name=avg_send_bps,json=avgSendBps,proto3" json:"avg_send_bps,omitempty"`
AvgRecvBps float64 `protobuf:"fixed64,7,opt,name=avg_recv_bps,json=avgRecvBps,proto3" json:"avg_recv_bps,omitempty"`
// ActiveRoutes is how many of the Routes-requested routes are
// still pumping. Drops when a route fails mid-run.
ActiveRoutes int32 `protobuf:"varint,8,opt,name=active_routes,json=activeRoutes,proto3" json:"active_routes,omitempty"`
// Legs is the per-route breakdown for this sample interval. One
// entry per established route, in route-index order. Additive to
// the aggregate fields above: consumers measuring adaptive routing
// policies read per-leg bandwidth + identity over time from here,
// while consumers wanting only the total keep using the aggregate
// fields. Empty on runs where no route came up.
Legs []*MuxLegSample `protobuf:"bytes,9,rep,name=legs,proto3" json:"legs,omitempty"`
// contains filtered or unexported fields
}
MuxBandwidthSample is a periodic throughput snapshot. Cumulative fields are run-totals across all routes; instant fields are per-sample-interval rates.
func (*MuxBandwidthSample) Descriptor
deprecated
func (*MuxBandwidthSample) Descriptor() ([]byte, []int)
Deprecated: Use MuxBandwidthSample.ProtoReflect.Descriptor instead.
func (*MuxBandwidthSample) GetActiveRoutes ¶
func (x *MuxBandwidthSample) GetActiveRoutes() int32
func (*MuxBandwidthSample) GetAvgRecvBps ¶
func (x *MuxBandwidthSample) GetAvgRecvBps() float64
func (*MuxBandwidthSample) GetAvgSendBps ¶
func (x *MuxBandwidthSample) GetAvgSendBps() float64
func (*MuxBandwidthSample) GetBytesReceived ¶
func (x *MuxBandwidthSample) GetBytesReceived() uint64
func (*MuxBandwidthSample) GetBytesSent ¶
func (x *MuxBandwidthSample) GetBytesSent() uint64
func (*MuxBandwidthSample) GetElapsedNs ¶
func (x *MuxBandwidthSample) GetElapsedNs() int64
func (*MuxBandwidthSample) GetInstantRecvBps ¶
func (x *MuxBandwidthSample) GetInstantRecvBps() float64
func (*MuxBandwidthSample) GetInstantSendBps ¶
func (x *MuxBandwidthSample) GetInstantSendBps() float64
func (*MuxBandwidthSample) GetLegs ¶
func (x *MuxBandwidthSample) GetLegs() []*MuxLegSample
func (*MuxBandwidthSample) ProtoMessage ¶
func (*MuxBandwidthSample) ProtoMessage()
func (*MuxBandwidthSample) ProtoReflect ¶
func (x *MuxBandwidthSample) ProtoReflect() protoreflect.Message
func (*MuxBandwidthSample) Reset ¶
func (x *MuxBandwidthSample) Reset()
func (*MuxBandwidthSample) String ¶
func (x *MuxBandwidthSample) String() string
type MuxLegLifecycle ¶
type MuxLegLifecycle struct {
// Event is one of "added", "dropped", "promoted", "demoted".
Event string `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"`
// RouteIndex is the affected leg's index at the time of the event.
RouteIndex int32 `protobuf:"varint,2,opt,name=route_index,json=routeIndex,proto3" json:"route_index,omitempty"`
// GateState is the leg's resulting warm-standby gate state: "active"
// (selected for pumping) or "standby" (kept alive via keepalive but not
// pumped). Mirrors router.LegInfo.Standby observed by the on_tick ABI.
GateState string `protobuf:"bytes,3,opt,name=gate_state,json=gateState,proto3" json:"gate_state,omitempty"`
// IntermediatePk / TransportKind identify the affected leg's path — same
// fields as MuxLegSample so a consumer can join the event to the series.
IntermediatePk string `protobuf:"bytes,4,opt,name=intermediate_pk,json=intermediatePk,proto3" json:"intermediate_pk,omitempty"`
TransportKind string `protobuf:"bytes,5,opt,name=transport_kind,json=transportKind,proto3" json:"transport_kind,omitempty"`
// ElapsedNs is time since pump-start when the mutation was applied. Same
// epoch as MuxBandwidthSample.ElapsedNs.
ElapsedNs int64 `protobuf:"varint,6,opt,name=elapsed_ns,json=elapsedNs,proto3" json:"elapsed_ns,omitempty"`
// contains filtered or unexported fields
}
MuxLegLifecycle records one policy-driven leg-set mutation from the on_tick hook. The rig is the in-process analog of the route group's RotationAction executor (add/drop/promote/demote), so a preset's adaptive behavior is visible as a stream of these events interleaved with the per-leg MuxBandwidthSample series.
func (*MuxLegLifecycle) Descriptor
deprecated
func (*MuxLegLifecycle) Descriptor() ([]byte, []int)
Deprecated: Use MuxLegLifecycle.ProtoReflect.Descriptor instead.
func (*MuxLegLifecycle) GetElapsedNs ¶
func (x *MuxLegLifecycle) GetElapsedNs() int64
func (*MuxLegLifecycle) GetEvent ¶
func (x *MuxLegLifecycle) GetEvent() string
func (*MuxLegLifecycle) GetGateState ¶
func (x *MuxLegLifecycle) GetGateState() string
func (*MuxLegLifecycle) GetIntermediatePk ¶
func (x *MuxLegLifecycle) GetIntermediatePk() string
func (*MuxLegLifecycle) GetRouteIndex ¶
func (x *MuxLegLifecycle) GetRouteIndex() int32
func (*MuxLegLifecycle) GetTransportKind ¶
func (x *MuxLegLifecycle) GetTransportKind() string
func (*MuxLegLifecycle) ProtoMessage ¶
func (*MuxLegLifecycle) ProtoMessage()
func (*MuxLegLifecycle) ProtoReflect ¶
func (x *MuxLegLifecycle) ProtoReflect() protoreflect.Message
func (*MuxLegLifecycle) Reset ¶
func (x *MuxLegLifecycle) Reset()
func (*MuxLegLifecycle) String ¶
func (x *MuxLegLifecycle) String() string
type MuxLegSample ¶
type MuxLegSample struct {
// RouteIndex is the same 0..Routes-1 index from the matching
// MuxRouteEstablished event, letting consumers join a leg's
// per-sample series back to its established path.
RouteIndex int32 `protobuf:"varint,1,opt,name=route_index,json=routeIndex,proto3" json:"route_index,omitempty"`
// IntermediatePk is the first hop's `to` PK — the leg's
// distinguishing intermediate. Empty when the route is direct
// (single hop straight to the target, no intermediate).
IntermediatePk string `protobuf:"bytes,2,opt,name=intermediate_pk,json=intermediatePk,proto3" json:"intermediate_pk,omitempty"`
// TransportKind is the first hop's transport type (stcpr, sudph,
// dmsg, ...). Lets consumers correlate per-leg throughput with the
// carrier the leg egresses on.
TransportKind string `protobuf:"bytes,3,opt,name=transport_kind,json=transportKind,proto3" json:"transport_kind,omitempty"`
// BytesSent / BytesRecv are cumulative for this leg since pump
// start (NOT since the last sample) — same epoch as the aggregate
// MuxBandwidthSample.BytesSent.
BytesSent int64 `protobuf:"varint,4,opt,name=bytes_sent,json=bytesSent,proto3" json:"bytes_sent,omitempty"`
BytesRecv int64 `protobuf:"varint,5,opt,name=bytes_recv,json=bytesRecv,proto3" json:"bytes_recv,omitempty"`
// InstSendBps / InstRecvBps are this leg's per-interval rates
// (delta since the previous sample), in bits-per-second — mirrors
// how MuxBandwidthSample.InstantSendBps is computed for the
// aggregate.
InstSendBps float64 `protobuf:"fixed64,6,opt,name=inst_send_bps,json=instSendBps,proto3" json:"inst_send_bps,omitempty"`
InstRecvBps float64 `protobuf:"fixed64,7,opt,name=inst_recv_bps,json=instRecvBps,proto3" json:"inst_recv_bps,omitempty"`
// Alive is the route's not-failed state — true while the leg's
// pump goroutine is still running. Matches the accounting behind
// MuxBandwidthSample.ActiveRoutes.
Alive bool `protobuf:"varint,8,opt,name=alive,proto3" json:"alive,omitempty"`
// LatencyMs is the leg's EWMA-smoothed round-trip latency in
// milliseconds, sampled by the per-leg policy probe. 0 = unknown (no
// measurement yet). Only populated on policy-driven runs — the pure
// baseline uses a single dedicated probe route, not per-leg probes.
// This is the signal latency-adaptive / adaptive presets evict on.
LatencyMs int32 `protobuf:"varint,9,opt,name=latency_ms,json=latencyMs,proto3" json:"latency_ms,omitempty"`
// Standby is the leg's warm-standby gate state: true when the policy
// demoted this leg (kept alive via keepalive, not pumped). Lets the
// telemetry consumer see the gate flip in the per-sample series, not
// just at the lifecycle event.
Standby bool `protobuf:"varint,10,opt,name=standby,proto3" json:"standby,omitempty"`
// contains filtered or unexported fields
}
MuxLegSample is one route's contribution within a single MuxBandwidthSample interval. It carries both the leg's cumulative byte counters and its per-interval instantaneous rates, plus the identity fields (intermediate PK + first-hop transport kind) that distinguish this leg from the others — so a policy-measurement consumer can attribute throughput to a specific path over time.
func (*MuxLegSample) Descriptor
deprecated
func (*MuxLegSample) Descriptor() ([]byte, []int)
Deprecated: Use MuxLegSample.ProtoReflect.Descriptor instead.
func (*MuxLegSample) GetAlive ¶
func (x *MuxLegSample) GetAlive() bool
func (*MuxLegSample) GetBytesRecv ¶
func (x *MuxLegSample) GetBytesRecv() int64
func (*MuxLegSample) GetBytesSent ¶
func (x *MuxLegSample) GetBytesSent() int64
func (*MuxLegSample) GetInstRecvBps ¶
func (x *MuxLegSample) GetInstRecvBps() float64
func (*MuxLegSample) GetInstSendBps ¶
func (x *MuxLegSample) GetInstSendBps() float64
func (*MuxLegSample) GetIntermediatePk ¶
func (x *MuxLegSample) GetIntermediatePk() string
func (*MuxLegSample) GetLatencyMs ¶
func (x *MuxLegSample) GetLatencyMs() int32
func (*MuxLegSample) GetRouteIndex ¶
func (x *MuxLegSample) GetRouteIndex() int32
func (*MuxLegSample) GetStandby ¶
func (x *MuxLegSample) GetStandby() bool
func (*MuxLegSample) GetTransportKind ¶
func (x *MuxLegSample) GetTransportKind() string
func (*MuxLegSample) ProtoMessage ¶
func (*MuxLegSample) ProtoMessage()
func (*MuxLegSample) ProtoReflect ¶
func (x *MuxLegSample) ProtoReflect() protoreflect.Message
func (*MuxLegSample) Reset ¶
func (x *MuxLegSample) Reset()
func (*MuxLegSample) String ¶
func (x *MuxLegSample) String() string
type MuxRouteEstablished ¶
type MuxRouteEstablished struct {
// RouteIndex is 0..Routes-1, assigned in setup-order.
RouteIndex int32 `protobuf:"varint,1,opt,name=route_index,json=routeIndex,proto3" json:"route_index,omitempty"`
// SetupLatencyNs is the time spent on the route-setup phase
// (route-finder query + setup-node negotiation + handshake).
SetupLatencyNs int64 `protobuf:"varint,2,opt,name=setup_latency_ns,json=setupLatencyNs,proto3" json:"setup_latency_ns,omitempty"`
// Hops is the chosen path. Consumers verify min_hops by
// counting (len(hops) - 1) intermediate edges.
Hops []*RouteHop `protobuf:"bytes,3,rep,name=hops,proto3" json:"hops,omitempty"`
// Failed is set when the route could not be established;
// SetupErr carries the cause. The route is excluded from the
// pump phase but kept in the event log for diagnostics.
Failed bool `protobuf:"varint,4,opt,name=failed,proto3" json:"failed,omitempty"`
SetupErr string `protobuf:"bytes,5,opt,name=setup_err,json=setupErr,proto3" json:"setup_err,omitempty"`
// contains filtered or unexported fields
}
MuxRouteEstablished records one route's setup outcome.
func (*MuxRouteEstablished) Descriptor
deprecated
func (*MuxRouteEstablished) Descriptor() ([]byte, []int)
Deprecated: Use MuxRouteEstablished.ProtoReflect.Descriptor instead.
func (*MuxRouteEstablished) GetFailed ¶
func (x *MuxRouteEstablished) GetFailed() bool
func (*MuxRouteEstablished) GetHops ¶
func (x *MuxRouteEstablished) GetHops() []*RouteHop
func (*MuxRouteEstablished) GetRouteIndex ¶
func (x *MuxRouteEstablished) GetRouteIndex() int32
func (*MuxRouteEstablished) GetSetupErr ¶
func (x *MuxRouteEstablished) GetSetupErr() string
func (*MuxRouteEstablished) GetSetupLatencyNs ¶
func (x *MuxRouteEstablished) GetSetupLatencyNs() int64
func (*MuxRouteEstablished) ProtoMessage ¶
func (*MuxRouteEstablished) ProtoMessage()
func (*MuxRouteEstablished) ProtoReflect ¶
func (x *MuxRouteEstablished) ProtoReflect() protoreflect.Message
func (*MuxRouteEstablished) Reset ¶
func (x *MuxRouteEstablished) Reset()
func (*MuxRouteEstablished) String ¶
func (x *MuxRouteEstablished) String() string
type MuxRouteFailure ¶
type MuxRouteFailure struct {
// RouteIndex is the same 0..Routes-1 index from the matching
// MuxRouteEstablished event.
RouteIndex int32 `protobuf:"varint,1,opt,name=route_index,json=routeIndex,proto3" json:"route_index,omitempty"`
// ErrorMessage is the formatted error returned by the pump call.
ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
// BytesSentBeforeFailure / BytesReceivedBeforeFailure are the
// cumulative bytes the route had pumped up to the failure point.
// Zero is meaningful — indicates the first call after route
// establishment failed before any bytes shipped.
BytesSentBeforeFailure uint64 `` /* 132-byte string literal not displayed */
BytesReceivedBeforeFailure uint64 `` /* 144-byte string literal not displayed */
// ElapsedNs is time since pump-start when the failure happened.
// Same epoch as MuxBandwidthSample.ElapsedNs.
ElapsedNs int64 `protobuf:"varint,5,opt,name=elapsed_ns,json=elapsedNs,proto3" json:"elapsed_ns,omitempty"`
// contains filtered or unexported fields
}
MuxRouteFailure records a route's pump-phase exit-with-error. Distinct from MuxRouteEstablished{failed:true} which covers setup-phase failures. Pre-this event, pump goroutines that hit PingOnceWithEcho errors silently exited and the route's bytes contribution stopped accruing — operator-visible only as a drop in MuxBandwidthSample.active_routes with no explanation.
This event surfaces the cause: the first PingOnceWithEcho call that fails terminates the route's pump goroutine, and we emit one of these with the bytes shipped before the failure so the consumer can compute per-route effective throughput.
func (*MuxRouteFailure) Descriptor
deprecated
func (*MuxRouteFailure) Descriptor() ([]byte, []int)
Deprecated: Use MuxRouteFailure.ProtoReflect.Descriptor instead.
func (*MuxRouteFailure) GetBytesReceivedBeforeFailure ¶
func (x *MuxRouteFailure) GetBytesReceivedBeforeFailure() uint64
func (*MuxRouteFailure) GetBytesSentBeforeFailure ¶
func (x *MuxRouteFailure) GetBytesSentBeforeFailure() uint64
func (*MuxRouteFailure) GetElapsedNs ¶
func (x *MuxRouteFailure) GetElapsedNs() int64
func (*MuxRouteFailure) GetErrorMessage ¶
func (x *MuxRouteFailure) GetErrorMessage() string
func (*MuxRouteFailure) GetRouteIndex ¶
func (x *MuxRouteFailure) GetRouteIndex() int32
func (*MuxRouteFailure) ProtoMessage ¶
func (*MuxRouteFailure) ProtoMessage()
func (*MuxRouteFailure) ProtoReflect ¶
func (x *MuxRouteFailure) ProtoReflect() protoreflect.Message
func (*MuxRouteFailure) Reset ¶
func (x *MuxRouteFailure) Reset()
func (*MuxRouteFailure) String ¶
func (x *MuxRouteFailure) String() string
type MuxRttProbe ¶
type MuxRttProbe struct {
// Sequence is the 1-indexed probe number, in emit order.
Sequence int64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"`
// LatencyNs is the measured RTT. 0 when the probe failed; Error
// carries the cause.
LatencyNs int64 `protobuf:"varint,2,opt,name=latency_ns,json=latencyNs,proto3" json:"latency_ns,omitempty"`
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
// ElapsedNs is the time since the first byte was sent (same epoch
// as MuxBandwidthSample.ElapsedNs). Lets consumers align probes
// with concurrent bandwidth samples without timestamp diffing.
ElapsedNs int64 `protobuf:"varint,4,opt,name=elapsed_ns,json=elapsedNs,proto3" json:"elapsed_ns,omitempty"`
// contains filtered or unexported fields
}
MuxRttProbe is one RTT measurement during the pump. Allows consumers to plot loaded-RTT-over-time and compute queueing delay as (loaded_rtt - baseline_rtt).
func (*MuxRttProbe) Descriptor
deprecated
func (*MuxRttProbe) Descriptor() ([]byte, []int)
Deprecated: Use MuxRttProbe.ProtoReflect.Descriptor instead.
func (*MuxRttProbe) GetElapsedNs ¶
func (x *MuxRttProbe) GetElapsedNs() int64
func (*MuxRttProbe) GetError ¶
func (x *MuxRttProbe) GetError() string
func (*MuxRttProbe) GetLatencyNs ¶
func (x *MuxRttProbe) GetLatencyNs() int64
func (*MuxRttProbe) GetSequence ¶
func (x *MuxRttProbe) GetSequence() int64
func (*MuxRttProbe) ProtoMessage ¶
func (*MuxRttProbe) ProtoMessage()
func (*MuxRttProbe) ProtoReflect ¶
func (x *MuxRttProbe) ProtoReflect() protoreflect.Message
func (*MuxRttProbe) Reset ¶
func (x *MuxRttProbe) Reset()
func (*MuxRttProbe) String ¶
func (x *MuxRttProbe) String() string
type NetworkStat ¶
type NetworkStat struct {
BytesSent uint64 `protobuf:"varint,1,opt,name=bytes_sent,json=bytesSent,proto3" json:"bytes_sent,omitempty"` // Total bytes sent
BytesRecv uint64 `protobuf:"varint,2,opt,name=bytes_recv,json=bytesRecv,proto3" json:"bytes_recv,omitempty"` // Total bytes received
PacketsSent uint64 `protobuf:"varint,3,opt,name=packets_sent,json=packetsSent,proto3" json:"packets_sent,omitempty"` // Total packets sent
PacketsRecv uint64 `protobuf:"varint,4,opt,name=packets_recv,json=packetsRecv,proto3" json:"packets_recv,omitempty"` // Total packets received
BytesSentRate float64 `protobuf:"fixed64,5,opt,name=bytes_sent_rate,json=bytesSentRate,proto3" json:"bytes_sent_rate,omitempty"` // Bytes sent per second (since last update)
BytesRecvRate float64 `protobuf:"fixed64,6,opt,name=bytes_recv_rate,json=bytesRecvRate,proto3" json:"bytes_recv_rate,omitempty"` // Bytes received per second (since last update)
// contains filtered or unexported fields
}
NetworkStat contains network I/O information
func (*NetworkStat) Descriptor
deprecated
func (*NetworkStat) Descriptor() ([]byte, []int)
Deprecated: Use NetworkStat.ProtoReflect.Descriptor instead.
func (*NetworkStat) GetBytesRecv ¶
func (x *NetworkStat) GetBytesRecv() uint64
func (*NetworkStat) GetBytesRecvRate ¶
func (x *NetworkStat) GetBytesRecvRate() float64
func (*NetworkStat) GetBytesSent ¶
func (x *NetworkStat) GetBytesSent() uint64
func (*NetworkStat) GetBytesSentRate ¶
func (x *NetworkStat) GetBytesSentRate() float64
func (*NetworkStat) GetPacketsRecv ¶
func (x *NetworkStat) GetPacketsRecv() uint64
func (*NetworkStat) GetPacketsSent ¶
func (x *NetworkStat) GetPacketsSent() uint64
func (*NetworkStat) ProtoMessage ¶
func (*NetworkStat) ProtoMessage()
func (*NetworkStat) ProtoReflect ¶
func (x *NetworkStat) ProtoReflect() protoreflect.Message
func (*NetworkStat) Reset ¶
func (x *NetworkStat) Reset()
func (*NetworkStat) String ¶
func (x *NetworkStat) String() string
type PingClient ¶
type PingClient struct {
// contains filtered or unexported fields
}
PingClient provides streaming ping operations via gRPC
func NewPingClient ¶
func NewPingClient(addr string) (*PingClient, error)
NewPingClient creates a new gRPC ping client NewPingClient creates a new gRPC ping client. It dials through vnet, so in a browser tab the address reaches the in-tab visor, and passthrough keeps gRPC from resolving it over DNS, which a tab does not have.
func (*PingClient) GetRemoteDmsgServers ¶
GetRemoteDmsgServers returns the DMSG servers a remote visor is connected to
func (*PingClient) GetSystemStats ¶
func (c *PingClient) GetSystemStats(ctx context.Context, includeProcesses bool, processLimit int32) (*SystemStats, error)
GetSystemStats returns a single snapshot of system stats.
func (*PingClient) StreamAppLogs ¶
func (c *PingClient) StreamAppLogs(ctx context.Context, appName string, includeRouter bool, minLevel string, modules []string, subscribed chan<- struct{}, cb AppLogCallback) error
StreamAppLogs subscribes to the visor's master logger and calls cb for each entry that matches the filter. Blocks until ctx is canceled or the stream errors. Used by 'proxy start --verbose' (app-name scoped) and 'dmsg curl --verbose' (module-prefix scoped).
modules is OR-merged with appName; either or both must be non-empty.
If subscribed is non-nil, it is closed once the server confirms the subscription is live (via the Subscribed sentinel entry). Callers should wait on this channel before triggering downstream RPCs whose log output they want to capture, so the first burst of activity isn't lost to the subscription handshake. The sentinel itself is not delivered to cb.
func (*PingClient) StreamBandwidthTest ¶
func (c *PingClient) StreamBandwidthTest(ctx context.Context, pk string, duration time.Duration, pcktSize int32, localRoute bool, cb BandwidthProgressCallback) error
StreamBandwidthTest performs a bandwidth test over skywire route and calls callback for each progress update
func (*PingClient) StreamCalcRoutes ¶
func (c *PingClient) StreamCalcRoutes( ctx context.Context, srcPK, dstPK string, minHops, maxHops, count, queueCap int32, source, tpdURL string, cb CalcRouteCallback, ) error
StreamCalcRoutes runs a server-side route-finder BFS and invokes cb for each path the server emits. count == 0 means "until exhausted"; the streaming wire shape lets the caller dump every route as it arrives without buffering the whole set, which matters when the server's BFS is exploring an unbounded result space.
Source PK empty means "use the receiving visor's PK". queueCap caps the server's BFS queue (0 = server default).
func (*PingClient) StreamDmsgBandwidthTest ¶
func (c *PingClient) StreamDmsgBandwidthTest(ctx context.Context, pk string, duration time.Duration, pcktSize int32, cb BandwidthProgressCallback) error
StreamDmsgBandwidthTest performs a bandwidth test over dmsg and calls callback for each progress update
func (*PingClient) StreamDmsgPing ¶
func (c *PingClient) StreamDmsgPing(ctx context.Context, pk string, tries int32, pcktSize int32, timeout time.Duration, dmsgServerPK string, cb PingResultCallback) error
StreamDmsgPing performs dmsg pings and calls the callback for each result timeout applies only to the ping phase (after dial), 0 means no timeout dmsgServerPK optionally specifies which DMSG server to dial through (empty string for auto-select)
func (*PingClient) StreamGroupMessages ¶
func (c *PingClient) StreamGroupMessages(ctx context.Context, groupID string, sinceTimestampNs int64, subscribed chan<- struct{}, cb GroupMessageCallback) error
StreamGroupMessages opens a server-streaming subscription to the visor's group inbox. Blocks until ctx is canceled or the stream errors. Replaces the net/rpc GroupPoll loop in 'cli skychat group listen', whose underlying conn was killed every 5 minutes by the per-conn deadline at init_apps.go (the deadline exists to bound unary RPC hang detection; it's the wrong tool for long-lived listen-style RPCs).
groupID, when non-empty, scopes the stream to one group (server-side filter). Empty subscribes to every group the visor is in.
sinceTimestampNs requests backlog replay of messages with TS strictly greater than the value before live deliveries start. Zero means live-only. (Backlog replay is currently honored on the wire but the server-side implementation may be a no-op pending the snapshotAfter accessor — see the server handler comment.)
If subscribed is non-nil, it is closed once the server emits the Subscribed sentinel — the same handshake pattern StreamAppLogs uses. The sentinel itself is filtered and not delivered to cb.
func (*PingClient) StreamMuxBandwidth ¶
func (c *PingClient) StreamMuxBandwidth(ctx context.Context, req *MuxBandwidthRequest) (PingService_StreamMuxBandwidthClient, error)
StreamMuxBandwidth opens the multiplexed-route bandwidth + RTT probe stream. Same event-level-control rationale as StreamPingTree — the CLI consumer drives Recv() and the harness path consumes the raw events.
func (*PingClient) StreamPing ¶
func (c *PingClient) StreamPing(ctx context.Context, pk string, tries int32, pcktSize int32, localRoute bool, timeout time.Duration, setupTimeout time.Duration, cb PingResultCallback) error
StreamPing performs pings and calls the callback for each result timeout applies only to the ping phase (after route setup), 0 means no timeout setupTimeout applies to route setup phase, 0 means no timeout
func (*PingClient) StreamPingTree ¶
func (c *PingClient) StreamPingTree(ctx context.Context, req *PingTreeRequest) (PingService_StreamPingTreeClient, error)
StreamPingTree opens the server-side BFS ping-tree stream. The caller drives the returned stream via Recv() and is responsible for handling the io.EOF terminus + any wire errors. Unlike the other PingClient methods this returns the raw protoc-generated stream type because callers want event-level control (e.g. the 'cli visor ping tree-stream' command emits NDJSON envelopes, the ping tree TUI drives its own update loop). Wrapping in a callback pattern here would force every consumer to re-marshal back to the event type.
func (*PingClient) StreamPingWithRoute ¶
func (c *PingClient) StreamPingWithRoute(ctx context.Context, pk string, tries int32, pcktSize int32, localRoute bool, timeout time.Duration, setupTimeout time.Duration, forwardHops []RouteHopDetail, reverseHops []RouteHopDetail, cb PingResultCallback) error
StreamPingWithRoute performs pings using a specific route (skips route calculation) forwardHops and reverseHops define the exact path to use
func (*PingClient) StreamPingWithTransport ¶
func (c *PingClient) StreamPingWithTransport(ctx context.Context, pk string, tries int32, pcktSize int32, localRoute bool, timeout time.Duration, setupTimeout time.Duration, transportID string, cb PingResultCallback) error
StreamPingWithTransport performs pings using a specific transport (skips route calculation) If transportID is empty, normal route calculation is used
func (*PingClient) StreamRemoteSystemStats ¶
func (c *PingClient) StreamRemoteSystemStats(ctx context.Context, remotePK string, updateInterval time.Duration, includeProcesses bool, processLimit int32, cb SystemStatsCallback) error
StreamRemoteSystemStats streams system stats from a remote visor via DMSG. The local visor proxies the connection to the remote visor using its DMSG client.
func (*PingClient) StreamRouteGroupMuxInfo ¶
func (c *PingClient) StreamRouteGroupMuxInfo(ctx context.Context, req *StreamRouteGroupMuxInfoRequest) (PingService_StreamRouteGroupMuxInfoClient, error)
StreamRouteGroupMuxInfo opens the running-app per-leg mux telemetry stream — the smooth server-streaming replacement for the unary RouteGroupMuxInfo poll that 'cli proxy mux plot' (default mode) rides. Same event-level-control rationale as StreamMuxBandwidth: the CLI consumer drives Recv() and renders each sample as it arrives. Returns the raw generated stream so the caller can distinguish a never- implemented RPC (first Recv errors) and fall back to the unary poll.
func (*PingClient) StreamSystemStats ¶
func (c *PingClient) StreamSystemStats(ctx context.Context, updateInterval time.Duration, includeProcesses bool, processLimit int32, cb SystemStatsCallback) error
StreamSystemStats streams system stats and calls the callback for each update. updateInterval specifies how often to receive updates (default 1s). includeProcesses controls whether to include top processes (more expensive). processLimit limits the number of processes to include (default 10).
type PingConf ¶
type PingConf struct {
PK cipher.PubKey
Tries int
PcktSize int
LocalRoute bool
TransportID string // Optional: use specific transport (skips route calculation)
ForwardHops []RouteHopInfo // Optional: explicit forward route (skips route calculation)
ReverseHops []RouteHopInfo // Optional: explicit reverse route (skips route calculation)
// RouteIndex selects among N parallel routes to the same peer.
// Zero = primary / single-route (legacy behavior). Mirrors
// visor.PingConfig.RouteIndex; the adapter passes it through.
RouteIndex int
// MinHops is the per-call route-finder min-hops constraint.
// Mirrors visor.PingConfig.MinHops; adapter passes it through.
// 0 = inherit visor-global routing.min_hops.
MinHops int
// SetupTimeoutNs is the dial-setup ceiling in nanoseconds.
// Mirrors visor.PingConfig.SetupTimeout; adapter converts to
// time.Duration. 0 falls back to DialPing's 30s default.
SetupTimeoutNs int64
// Timeout bounds a single PingOnce round-trip. Mirrors
// visor.PingConfig.Timeout; 0 = the visor-side 10s default. The
// mux-bw probe loop sets it to the remaining measurement window.
Timeout time.Duration
}
PingConf mirrors visor.PingConfig to avoid import cycles
type PingRequest ¶
type PingRequest struct {
PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // Target visor public key
Tries int32 `protobuf:"varint,2,opt,name=tries,proto3" json:"tries,omitempty"` // Number of ping attempts
PacketSizeKb int32 `protobuf:"varint,3,opt,name=packet_size_kb,json=packetSizeKb,proto3" json:"packet_size_kb,omitempty"` // Packet size in KB
LocalRoute bool `protobuf:"varint,4,opt,name=local_route,json=localRoute,proto3" json:"local_route,omitempty"` // Use local route calculation
PingTimeoutNs int64 `protobuf:"varint,5,opt,name=ping_timeout_ns,json=pingTimeoutNs,proto3" json:"ping_timeout_ns,omitempty"` // Timeout for ping phase only (after route setup), 0 = no timeout
SetupTimeoutNs int64 `protobuf:"varint,6,opt,name=setup_timeout_ns,json=setupTimeoutNs,proto3" json:"setup_timeout_ns,omitempty"` // Timeout for route setup phase, 0 = no timeout (default 30s recommended)
DmsgServerPk string `protobuf:"bytes,7,opt,name=dmsg_server_pk,json=dmsgServerPk,proto3" json:"dmsg_server_pk,omitempty"` // Optional: specific DMSG server to use for DMSG pings
TransportId string `protobuf:"bytes,8,opt,name=transport_id,json=transportId,proto3" json:"transport_id,omitempty"` // Optional: use specific transport (skips route calculation)
ForwardHops []*RouteHop `protobuf:"bytes,9,rep,name=forward_hops,json=forwardHops,proto3" json:"forward_hops,omitempty"` // Optional: explicit forward route (skips route calculation)
ReverseHops []*RouteHop `protobuf:"bytes,10,rep,name=reverse_hops,json=reverseHops,proto3" json:"reverse_hops,omitempty"` // Optional: explicit reverse route (skips route calculation)
// contains filtered or unexported fields
}
func (*PingRequest) Descriptor
deprecated
func (*PingRequest) Descriptor() ([]byte, []int)
Deprecated: Use PingRequest.ProtoReflect.Descriptor instead.
func (*PingRequest) GetDmsgServerPk ¶
func (x *PingRequest) GetDmsgServerPk() string
func (*PingRequest) GetForwardHops ¶
func (x *PingRequest) GetForwardHops() []*RouteHop
func (*PingRequest) GetLocalRoute ¶
func (x *PingRequest) GetLocalRoute() bool
func (*PingRequest) GetPacketSizeKb ¶
func (x *PingRequest) GetPacketSizeKb() int32
func (*PingRequest) GetPingTimeoutNs ¶
func (x *PingRequest) GetPingTimeoutNs() int64
func (*PingRequest) GetPublicKey ¶
func (x *PingRequest) GetPublicKey() string
func (*PingRequest) GetReverseHops ¶
func (x *PingRequest) GetReverseHops() []*RouteHop
func (*PingRequest) GetSetupTimeoutNs ¶
func (x *PingRequest) GetSetupTimeoutNs() int64
func (*PingRequest) GetTransportId ¶
func (x *PingRequest) GetTransportId() string
func (*PingRequest) GetTries ¶
func (x *PingRequest) GetTries() int32
func (*PingRequest) ProtoMessage ¶
func (*PingRequest) ProtoMessage()
func (*PingRequest) ProtoReflect ¶
func (x *PingRequest) ProtoReflect() protoreflect.Message
func (*PingRequest) Reset ¶
func (x *PingRequest) Reset()
func (*PingRequest) String ¶
func (x *PingRequest) String() string
type PingResult ¶
type PingResult struct {
Sequence int32 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"` // Ping sequence number (1-indexed)
LatencyNs int64 `protobuf:"varint,2,opt,name=latency_ns,json=latencyNs,proto3" json:"latency_ns,omitempty"` // Round-trip time in nanoseconds
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` // Error message if ping failed
IsSetup bool `protobuf:"varint,4,opt,name=is_setup,json=isSetup,proto3" json:"is_setup,omitempty"` // True if this is the route setup time, not a ping
RouteHops []string `protobuf:"bytes,5,rep,name=route_hops,json=routeHops,proto3" json:"route_hops,omitempty"` // Route hops (public keys), only set for setup message (deprecated)
RouteHopDetails []*RouteHop `protobuf:"bytes,6,rep,name=route_hop_details,json=routeHopDetails,proto3" json:"route_hop_details,omitempty"` // Detailed route hops with transport info
DmsgServerPk string `protobuf:"bytes,7,opt,name=dmsg_server_pk,json=dmsgServerPk,proto3" json:"dmsg_server_pk,omitempty"` // For DMSG pings: the server PK used for this connection
RouteCalcTimeNs int64 `protobuf:"varint,8,opt,name=route_calc_time_ns,json=routeCalcTimeNs,proto3" json:"route_calc_time_ns,omitempty"` // Route calculation time in nanoseconds (local route mode only)
// contains filtered or unexported fields
}
func (*PingResult) Descriptor
deprecated
func (*PingResult) Descriptor() ([]byte, []int)
Deprecated: Use PingResult.ProtoReflect.Descriptor instead.
func (*PingResult) GetDmsgServerPk ¶
func (x *PingResult) GetDmsgServerPk() string
func (*PingResult) GetError ¶
func (x *PingResult) GetError() string
func (*PingResult) GetIsSetup ¶
func (x *PingResult) GetIsSetup() bool
func (*PingResult) GetLatencyNs ¶
func (x *PingResult) GetLatencyNs() int64
func (*PingResult) GetRouteCalcTimeNs ¶
func (x *PingResult) GetRouteCalcTimeNs() int64
func (*PingResult) GetRouteHopDetails ¶
func (x *PingResult) GetRouteHopDetails() []*RouteHop
func (*PingResult) GetRouteHops ¶
func (x *PingResult) GetRouteHops() []string
func (*PingResult) GetSequence ¶
func (x *PingResult) GetSequence() int32
func (*PingResult) ProtoMessage ¶
func (*PingResult) ProtoMessage()
func (*PingResult) ProtoReflect ¶
func (x *PingResult) ProtoReflect() protoreflect.Message
func (*PingResult) Reset ¶
func (x *PingResult) Reset()
func (*PingResult) String ¶
func (x *PingResult) String() string
type PingResultCallback ¶
type PingResultCallback func(seq int32, latency time.Duration, isSetup bool, routeHopDetails []RouteHopDetail, dmsgServerPK string, routeCalcTime time.Duration, err error)
PingResultCallback is called for each ping result received from the stream. routeHopDetails is only set for the setup message (isSetup=true) for skywire route pings. dmsgServerPK is only set for DMSG pings and contains the server used for the connection. routeCalcTime is the time spent calculating the route (local route mode only, isSetup=true).
type PingRouteRef ¶
PingRouteRef identifies a specific route in a mux-set. Mirrors visor.PingRouteRef across the package boundary to avoid the rpcgrpc → visor import cycle. The visorPingAdapter converts at the boundary.
type PingServer ¶
type PingServer struct {
UnimplementedPingServiceServer
// contains filtered or unexported fields
}
PingServer implements the gRPC PingService
func NewPingServer ¶
func NewPingServer(visor VisorAPI, log *logging.Logger) *PingServer
NewPingServer creates a new gRPC ping server
func (*PingServer) GetRemoteDmsgServers ¶
func (s *PingServer) GetRemoteDmsgServers(_ context.Context, req *DmsgServersRequest) (*DmsgServersResponse, error)
GetRemoteDmsgServers returns the DMSG servers a remote visor is connected to
func (*PingServer) GetSystemStats ¶
func (s *PingServer) GetSystemStats(ctx context.Context, req *SystemStatsRequest) (*SystemStats, error)
GetSystemStats returns a single snapshot of system stats
func (*PingServer) StreamAppLogs ¶
func (s *PingServer) StreamAppLogs(req *AppLogStreamRequest, stream PingService_StreamAppLogsServer) error
StreamAppLogs subscribes to the visor's master logger and forwards matching entries to the gRPC client. Used by 'proxy start --verbose' and 'dmsg curl --verbose'.
Filtering: AppName matches by _module exact equality OR app/app_name field. Modules matches by _module prefix. The two are OR-merged; at least one must be specified (AppName="*" enables wildcard mode for diagnostics).
The visor's router/mux/setup layers attach app_name=<n> to rg-scoped entries (see router.Config.AppLookup), so AppName filtering scopes to one app's session — including layered events that happen on behalf of the app, not just app stdout.
IncludeRouter is retained on the wire for forward compatibility but is currently ignored — Modules is the explicit replacement.
The subscription's per-stream buffer is bounded; bursts beyond it are dropped and counted (cancel returns the count).
func (*PingServer) StreamBandwidthTest ¶
func (s *PingServer) StreamBandwidthTest(req *BandwidthRequest, stream PingService_StreamBandwidthTestServer) error
StreamBandwidthTest performs a bandwidth test over skywire route and streams progress
func (*PingServer) StreamCalcRoutes ¶
func (s *PingServer) StreamCalcRoutes(req *CalcRoutesRequest, stream PingService_StreamCalcRoutesServer) error
StreamCalcRoutes runs a route-finder BFS server-side and streams each valid path back to the caller as it's discovered. The streaming wire shape lets callers consume routes incrementally — neither side has to hold every result in memory at once, which matters for unbounded requests on dense graphs.
Source PK defaults to this visor's own. Max-hops defaults to a safe 5 if zero. count == 0 means "until exhausted"; the server will keep emitting until no more routes exist or the client disconnects.
The route-finder package's StreamRoutes drives the search; the loop here is just transport-graph fetch + protocol marshaling.
func (*PingServer) StreamDmsgBandwidthTest ¶
func (s *PingServer) StreamDmsgBandwidthTest(req *BandwidthRequest, stream PingService_StreamDmsgBandwidthTestServer) error
StreamDmsgBandwidthTest performs a bandwidth test over dmsg and streams progress
func (*PingServer) StreamDmsgPing ¶
func (s *PingServer) StreamDmsgPing(req *PingRequest, stream PingService_StreamDmsgPingServer) error
StreamDmsgPing performs multiple pings over dmsg and streams results
func (*PingServer) StreamGroupMessages ¶
func (s *PingServer) StreamGroupMessages(req *GroupMessagesRequest, stream PingService_StreamGroupMessagesServer) error
func (*PingServer) StreamMuxBandwidth ¶
func (s *PingServer) StreamMuxBandwidth(req *MuxBandwidthRequest, stream PingService_StreamMuxBandwidthServer) error
StreamMuxBandwidth is the canonical implementation of the RPC. See ping.proto for the wire contract.
func (*PingServer) StreamPing ¶
func (s *PingServer) StreamPing(req *PingRequest, stream PingService_StreamPingServer) error
StreamPing performs multiple pings and streams results back
func (*PingServer) StreamPingTree ¶
func (s *PingServer) StreamPingTree(req *PingTreeRequest, stream PingService_StreamPingTreeServer) error
StreamPingTree walks the visor's neighborhood breadth-first and streams discovery + ping events. See ping.proto for the wire shape; this function is the canonical implementation.
Implementation outline:
- Fetch the global transport-discovery adjacency once (FetchAllTransportEntries returns every entry in the system).
- Spawn a sender goroutine that drains a bounded event channel to stream.Send. The bounded channel + non-blocking send for StatusUpdate gives backpressure visibility without dropping measurement data.
- BFS: - Level 1: enumerate candidates from adjacency[localPK]. - For each level, emit Discovered, then ping with bounded concurrency, then emit LevelDone. - At each iteration check ctx.Done() so a client disconnect tears the walk down within one in-flight ping.
- Emit RunDone with termination_reason.
Level-1 fast path via TransportSummary.LatencyMS is left as a TODO with the explicit hook so the follow-up PR can land it without restructuring (Beta's slice per role split).
func (*PingServer) StreamRemoteSystemStats ¶
func (s *PingServer) StreamRemoteSystemStats(req *RemoteSystemStatsRequest, stream PingService_StreamRemoteSystemStatsServer) error
StreamRemoteSystemStats proxies system stats from a remote visor via DMSG. The local visor dials the remote visor over DMSG and forwards the stats stream.
func (*PingServer) StreamRouteGroupMuxInfo ¶
func (s *PingServer) StreamRouteGroupMuxInfo(req *StreamRouteGroupMuxInfoRequest, stream PingService_StreamRouteGroupMuxInfoServer) error
StreamRouteGroupMuxInfo streams a running app's per-leg mux telemetry on a fixed cadence. See ping.proto for the wire contract.
The first sample fires immediately (so the client renders without waiting a full interval), then every sample_interval_ns until the client disconnects / cancels. A transient absent route group is NOT an error — the handler emits an empty sample and keeps sampling, so the plot shows an empty frame until the app dials.
func (*PingServer) StreamSystemStats ¶
func (s *PingServer) StreamSystemStats(req *SystemStatsRequest, stream PingService_StreamSystemStatsServer) error
StreamSystemStats streams system stats for gotop-style monitoring
type PingServiceClient ¶
type PingServiceClient interface {
// StreamPing performs multiple pings and streams results back one at a time
StreamPing(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PingResult], error)
// StreamDmsgPing performs multiple pings over dmsg and streams results
StreamDmsgPing(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PingResult], error)
// StreamBandwidthTest performs a bandwidth test and streams progress
StreamBandwidthTest(ctx context.Context, in *BandwidthRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[BandwidthProgress], error)
// StreamDmsgBandwidthTest performs a bandwidth test over dmsg and streams progress
StreamDmsgBandwidthTest(ctx context.Context, in *BandwidthRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[BandwidthProgress], error)
// GetRemoteDmsgServers returns the DMSG servers a remote visor is connected to
GetRemoteDmsgServers(ctx context.Context, in *DmsgServersRequest, opts ...grpc.CallOption) (*DmsgServersResponse, error)
// StreamSystemStats streams system stats (CPU, memory, disk, network, etc.) for gotop-style monitoring
StreamSystemStats(ctx context.Context, in *SystemStatsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SystemStats], error)
// GetSystemStats returns a single snapshot of system stats
GetSystemStats(ctx context.Context, in *SystemStatsRequest, opts ...grpc.CallOption) (*SystemStats, error)
// StreamRemoteSystemStats proxies system stats from a remote visor via DMSG
// The local visor dials the remote visor over DMSG and forwards the stats stream
StreamRemoteSystemStats(ctx context.Context, in *RemoteSystemStatsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SystemStats], error)
// StreamAppLogs streams visor log entries scoped to one app's session.
// Used by 'skywire-cli proxy start --verbose' to surface what the visor is
// doing while spinning up an app's transports/routes.
StreamAppLogs(ctx context.Context, in *AppLogStreamRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[AppLogEntry], error)
// StreamCalcRoutes runs a route-finder BFS server-side and streams each
// valid route back as it's discovered. Lets the CLI display routes
// incrementally and avoids accumulating every result in memory before
// returning — important when count is large or unbounded.
StreamCalcRoutes(ctx context.Context, in *CalcRoutesRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[CalcRoute], error)
// StreamGroupMessages opens a long-lived stream of inbound group
// messages. The server holds a per-stream subscription to the
// visor's group inbox and pushes each delivered message to the
// client as it arrives. Replaces the net/rpc poll loop in
// 'cli skychat group listen', which would lose its underlying
// connection every 5 minutes to the per-conn deadline applied at
// init_apps.go for unary-RPC hang detection. Stream lifetime is
// the listen lifetime, no arbitrary ceiling.
StreamGroupMessages(ctx context.Context, in *GroupMessagesRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GroupMessageEvent], error)
// StreamPingTree walks the visor's neighborhood breadth-first and
// streams discovery + ping events as they happen. Replaces the
// client-side BFS in 'cli visor ping tree' — server-side has
// direct access to TransportSummary.LatencyMS (the smoothed per-
// transport RTT measured continuously by the transport layer),
// the route-finder, and the local tpM, so it can:
// - Skip live pings at level 1 when the transport already has a
// warmed latency cache (use_transport_latency flag);
// - Walk tpM.WalkTransports directly without the snapshot
// allocation cost that the unary Transports() RPC imposes
// on visors with hundreds of transports;
// - Observe cancellation at every BFS iteration so a client
// disconnect tears down the walk within one in-flight ping.
//
// Result events arrive in chunk-complete-by-completion order, NOT
// deterministically grouped per peer — consumers that want
// (level, parent_pk, remote_pk) grouping must sort/bucket on
// receive. Server-side per-level concurrency means events for
// level N+1 never appear before level N's LevelDone.
//
// Authorization: the handler gates on the same whitelist used by
// dmsgscp (hypervisors + own PK + Dmsgpty.Whitelist). On a public
// visor with hundreds of transports, an unauthenticated caller
// could trigger a many-target ping storm; the gate prevents that.
StreamPingTree(ctx context.Context, in *PingTreeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PingTreeEvent], error)
// StreamMuxBandwidth measures bandwidth + queueing-delay between
// this visor and a target peer, optionally across N parallel
// routes. The operator-visible hypothesis: routes that EXCLUDE the
// direct transport (via min_hops >= 2) should sum to MORE bandwidth
// than the direct edge alone, because intermediates aggregate
// independent paths. This RPC produces the data to test that.
//
// Three flavors via the request fields:
// - routes=1, min_hops=0: baseline — whatever route the finder
// picks. With a healthy direct transport this measures the
// direct edge.
// - routes=1, min_hops=2: single non-direct path — forces the
// route through at least one intermediate.
// - routes=N, min_hops=>=0: N parallel routes pumping bytes
// concurrently. Aggregate throughput is the operator's headline
// comparison metric.
//
// Optionally a separate small-packet probe runs alongside the bulk
// load to capture queueing-delay: loaded RTT vs unloaded RTT
// baseline. The probe rides the SAME first route as the bulk pump,
// so the queueing-delay number reflects that route's saturation.
//
// Wire shape mirrors StreamPingTree: server-side BFS becomes
// server-side bandwidth-pump, events stream as they happen,
// ctx.Done() at every iteration, bounded internal channel.
StreamMuxBandwidth(ctx context.Context, in *MuxBandwidthRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[MuxBandwidthEvent], error)
// StreamRouteGroupMuxInfo streams a running app's per-leg mux
// telemetry on a fixed cadence — the server-streaming equivalent of
// the unary RouteGroupMuxInfo net/rpc call that 'cli proxy mux plot'
// (default, watch-a-running-app mode) polls. Lets that plot update
// smoothly/continuously like the --pk StreamMuxBandwidth path,
// instead of the choppy 1 Hz unary gob poll. Each sample carries the
// same []visor.MuxRouteGroupInfo per-leg breakdown the unary RPC
// returns. The handler never errors the stream on a transient absent
// route group — it emits an empty sample and keeps sampling, so the
// plot renders an empty frame until the app dials.
StreamRouteGroupMuxInfo(ctx context.Context, in *StreamRouteGroupMuxInfoRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RouteGroupMuxInfoSample], error)
}
PingServiceClient is the client API for PingService 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.
PingService provides streaming ping functionality
func NewPingServiceClient ¶
func NewPingServiceClient(cc grpc.ClientConnInterface) PingServiceClient
type PingServiceServer ¶
type PingServiceServer interface {
// StreamPing performs multiple pings and streams results back one at a time
StreamPing(*PingRequest, grpc.ServerStreamingServer[PingResult]) error
// StreamDmsgPing performs multiple pings over dmsg and streams results
StreamDmsgPing(*PingRequest, grpc.ServerStreamingServer[PingResult]) error
// StreamBandwidthTest performs a bandwidth test and streams progress
StreamBandwidthTest(*BandwidthRequest, grpc.ServerStreamingServer[BandwidthProgress]) error
// StreamDmsgBandwidthTest performs a bandwidth test over dmsg and streams progress
StreamDmsgBandwidthTest(*BandwidthRequest, grpc.ServerStreamingServer[BandwidthProgress]) error
// GetRemoteDmsgServers returns the DMSG servers a remote visor is connected to
GetRemoteDmsgServers(context.Context, *DmsgServersRequest) (*DmsgServersResponse, error)
// StreamSystemStats streams system stats (CPU, memory, disk, network, etc.) for gotop-style monitoring
StreamSystemStats(*SystemStatsRequest, grpc.ServerStreamingServer[SystemStats]) error
// GetSystemStats returns a single snapshot of system stats
GetSystemStats(context.Context, *SystemStatsRequest) (*SystemStats, error)
// StreamRemoteSystemStats proxies system stats from a remote visor via DMSG
// The local visor dials the remote visor over DMSG and forwards the stats stream
StreamRemoteSystemStats(*RemoteSystemStatsRequest, grpc.ServerStreamingServer[SystemStats]) error
// StreamAppLogs streams visor log entries scoped to one app's session.
// Used by 'skywire-cli proxy start --verbose' to surface what the visor is
// doing while spinning up an app's transports/routes.
StreamAppLogs(*AppLogStreamRequest, grpc.ServerStreamingServer[AppLogEntry]) error
// StreamCalcRoutes runs a route-finder BFS server-side and streams each
// valid route back as it's discovered. Lets the CLI display routes
// incrementally and avoids accumulating every result in memory before
// returning — important when count is large or unbounded.
StreamCalcRoutes(*CalcRoutesRequest, grpc.ServerStreamingServer[CalcRoute]) error
// StreamGroupMessages opens a long-lived stream of inbound group
// messages. The server holds a per-stream subscription to the
// visor's group inbox and pushes each delivered message to the
// client as it arrives. Replaces the net/rpc poll loop in
// 'cli skychat group listen', which would lose its underlying
// connection every 5 minutes to the per-conn deadline applied at
// init_apps.go for unary-RPC hang detection. Stream lifetime is
// the listen lifetime, no arbitrary ceiling.
StreamGroupMessages(*GroupMessagesRequest, grpc.ServerStreamingServer[GroupMessageEvent]) error
// StreamPingTree walks the visor's neighborhood breadth-first and
// streams discovery + ping events as they happen. Replaces the
// client-side BFS in 'cli visor ping tree' — server-side has
// direct access to TransportSummary.LatencyMS (the smoothed per-
// transport RTT measured continuously by the transport layer),
// the route-finder, and the local tpM, so it can:
// - Skip live pings at level 1 when the transport already has a
// warmed latency cache (use_transport_latency flag);
// - Walk tpM.WalkTransports directly without the snapshot
// allocation cost that the unary Transports() RPC imposes
// on visors with hundreds of transports;
// - Observe cancellation at every BFS iteration so a client
// disconnect tears down the walk within one in-flight ping.
//
// Result events arrive in chunk-complete-by-completion order, NOT
// deterministically grouped per peer — consumers that want
// (level, parent_pk, remote_pk) grouping must sort/bucket on
// receive. Server-side per-level concurrency means events for
// level N+1 never appear before level N's LevelDone.
//
// Authorization: the handler gates on the same whitelist used by
// dmsgscp (hypervisors + own PK + Dmsgpty.Whitelist). On a public
// visor with hundreds of transports, an unauthenticated caller
// could trigger a many-target ping storm; the gate prevents that.
StreamPingTree(*PingTreeRequest, grpc.ServerStreamingServer[PingTreeEvent]) error
// StreamMuxBandwidth measures bandwidth + queueing-delay between
// this visor and a target peer, optionally across N parallel
// routes. The operator-visible hypothesis: routes that EXCLUDE the
// direct transport (via min_hops >= 2) should sum to MORE bandwidth
// than the direct edge alone, because intermediates aggregate
// independent paths. This RPC produces the data to test that.
//
// Three flavors via the request fields:
// - routes=1, min_hops=0: baseline — whatever route the finder
// picks. With a healthy direct transport this measures the
// direct edge.
// - routes=1, min_hops=2: single non-direct path — forces the
// route through at least one intermediate.
// - routes=N, min_hops=>=0: N parallel routes pumping bytes
// concurrently. Aggregate throughput is the operator's headline
// comparison metric.
//
// Optionally a separate small-packet probe runs alongside the bulk
// load to capture queueing-delay: loaded RTT vs unloaded RTT
// baseline. The probe rides the SAME first route as the bulk pump,
// so the queueing-delay number reflects that route's saturation.
//
// Wire shape mirrors StreamPingTree: server-side BFS becomes
// server-side bandwidth-pump, events stream as they happen,
// ctx.Done() at every iteration, bounded internal channel.
StreamMuxBandwidth(*MuxBandwidthRequest, grpc.ServerStreamingServer[MuxBandwidthEvent]) error
// StreamRouteGroupMuxInfo streams a running app's per-leg mux
// telemetry on a fixed cadence — the server-streaming equivalent of
// the unary RouteGroupMuxInfo net/rpc call that 'cli proxy mux plot'
// (default, watch-a-running-app mode) polls. Lets that plot update
// smoothly/continuously like the --pk StreamMuxBandwidth path,
// instead of the choppy 1 Hz unary gob poll. Each sample carries the
// same []visor.MuxRouteGroupInfo per-leg breakdown the unary RPC
// returns. The handler never errors the stream on a transient absent
// route group — it emits an empty sample and keeps sampling, so the
// plot renders an empty frame until the app dials.
StreamRouteGroupMuxInfo(*StreamRouteGroupMuxInfoRequest, grpc.ServerStreamingServer[RouteGroupMuxInfoSample]) error
// contains filtered or unexported methods
}
PingServiceServer is the server API for PingService service. All implementations must embed UnimplementedPingServiceServer for forward compatibility.
PingService provides streaming ping functionality
type PingService_StreamAppLogsClient ¶
type PingService_StreamAppLogsClient = grpc.ServerStreamingClient[AppLogEntry]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamAppLogsServer ¶
type PingService_StreamAppLogsServer = grpc.ServerStreamingServer[AppLogEntry]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamBandwidthTestClient ¶
type PingService_StreamBandwidthTestClient = grpc.ServerStreamingClient[BandwidthProgress]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamBandwidthTestServer ¶
type PingService_StreamBandwidthTestServer = grpc.ServerStreamingServer[BandwidthProgress]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamCalcRoutesClient ¶
type PingService_StreamCalcRoutesClient = grpc.ServerStreamingClient[CalcRoute]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamCalcRoutesServer ¶
type PingService_StreamCalcRoutesServer = grpc.ServerStreamingServer[CalcRoute]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamDmsgBandwidthTestClient ¶
type PingService_StreamDmsgBandwidthTestClient = grpc.ServerStreamingClient[BandwidthProgress]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamDmsgBandwidthTestServer ¶
type PingService_StreamDmsgBandwidthTestServer = grpc.ServerStreamingServer[BandwidthProgress]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamDmsgPingClient ¶
type PingService_StreamDmsgPingClient = grpc.ServerStreamingClient[PingResult]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamDmsgPingServer ¶
type PingService_StreamDmsgPingServer = grpc.ServerStreamingServer[PingResult]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamGroupMessagesClient ¶
type PingService_StreamGroupMessagesClient = grpc.ServerStreamingClient[GroupMessageEvent]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamGroupMessagesServer ¶
type PingService_StreamGroupMessagesServer = grpc.ServerStreamingServer[GroupMessageEvent]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamMuxBandwidthClient ¶
type PingService_StreamMuxBandwidthClient = grpc.ServerStreamingClient[MuxBandwidthEvent]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamMuxBandwidthServer ¶
type PingService_StreamMuxBandwidthServer = grpc.ServerStreamingServer[MuxBandwidthEvent]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamPingClient ¶
type PingService_StreamPingClient = grpc.ServerStreamingClient[PingResult]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamPingServer ¶
type PingService_StreamPingServer = grpc.ServerStreamingServer[PingResult]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamPingTreeClient ¶
type PingService_StreamPingTreeClient = grpc.ServerStreamingClient[PingTreeEvent]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamPingTreeServer ¶
type PingService_StreamPingTreeServer = grpc.ServerStreamingServer[PingTreeEvent]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamRemoteSystemStatsClient ¶
type PingService_StreamRemoteSystemStatsClient = grpc.ServerStreamingClient[SystemStats]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamRemoteSystemStatsServer ¶
type PingService_StreamRemoteSystemStatsServer = grpc.ServerStreamingServer[SystemStats]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamRouteGroupMuxInfoClient ¶
type PingService_StreamRouteGroupMuxInfoClient = grpc.ServerStreamingClient[RouteGroupMuxInfoSample]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamRouteGroupMuxInfoServer ¶
type PingService_StreamRouteGroupMuxInfoServer = grpc.ServerStreamingServer[RouteGroupMuxInfoSample]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamSystemStatsClient ¶
type PingService_StreamSystemStatsClient = grpc.ServerStreamingClient[SystemStats]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingService_StreamSystemStatsServer ¶
type PingService_StreamSystemStatsServer = grpc.ServerStreamingServer[SystemStats]
This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
type PingTreeDiscovered ¶
type PingTreeDiscovered struct {
TpId string `protobuf:"bytes,1,opt,name=tp_id,json=tpId,proto3" json:"tp_id,omitempty"`
TpType string `protobuf:"bytes,2,opt,name=tp_type,json=tpType,proto3" json:"tp_type,omitempty"`
RemotePk string `protobuf:"bytes,3,opt,name=remote_pk,json=remotePk,proto3" json:"remote_pk,omitempty"`
ParentPk string `protobuf:"bytes,4,opt,name=parent_pk,json=parentPk,proto3" json:"parent_pk,omitempty"`
Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"`
// contains filtered or unexported fields
}
Discovered fires when the BFS adds a (transport, peer) pair to the candidate set at level N. Fires BEFORE the corresponding PingResult.
func (*PingTreeDiscovered) Descriptor
deprecated
func (*PingTreeDiscovered) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeDiscovered.ProtoReflect.Descriptor instead.
func (*PingTreeDiscovered) GetLevel ¶
func (x *PingTreeDiscovered) GetLevel() int32
func (*PingTreeDiscovered) GetParentPk ¶
func (x *PingTreeDiscovered) GetParentPk() string
func (*PingTreeDiscovered) GetRemotePk ¶
func (x *PingTreeDiscovered) GetRemotePk() string
func (*PingTreeDiscovered) GetTpId ¶
func (x *PingTreeDiscovered) GetTpId() string
func (*PingTreeDiscovered) GetTpType ¶
func (x *PingTreeDiscovered) GetTpType() string
func (*PingTreeDiscovered) ProtoMessage ¶
func (*PingTreeDiscovered) ProtoMessage()
func (*PingTreeDiscovered) ProtoReflect ¶
func (x *PingTreeDiscovered) ProtoReflect() protoreflect.Message
func (*PingTreeDiscovered) Reset ¶
func (x *PingTreeDiscovered) Reset()
func (*PingTreeDiscovered) String ¶
func (x *PingTreeDiscovered) String() string
type PingTreeEvent ¶
type PingTreeEvent struct {
TimestampNs int64 `protobuf:"varint,1,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"`
// Types that are valid to be assigned to Payload:
//
// *PingTreeEvent_Discovered
// *PingTreeEvent_PingResult
// *PingTreeEvent_LevelDone
// *PingTreeEvent_RunDone
// *PingTreeEvent_StatusUpdate
// *PingTreeEvent_ServerError
Payload isPingTreeEvent_Payload `protobuf_oneof:"payload"`
// contains filtered or unexported fields
}
PingTreeEvent is one entry on the stream. Exactly one oneof payload is set per message. Consumers switch on the payload type; the top-level timestamp_ns is server-side wall time at emit.
func (*PingTreeEvent) Descriptor
deprecated
func (*PingTreeEvent) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeEvent.ProtoReflect.Descriptor instead.
func (*PingTreeEvent) GetDiscovered ¶
func (x *PingTreeEvent) GetDiscovered() *PingTreeDiscovered
func (*PingTreeEvent) GetLevelDone ¶
func (x *PingTreeEvent) GetLevelDone() *PingTreeLevelDone
func (*PingTreeEvent) GetPayload ¶
func (x *PingTreeEvent) GetPayload() isPingTreeEvent_Payload
func (*PingTreeEvent) GetPingResult ¶
func (x *PingTreeEvent) GetPingResult() *PingTreeResult
func (*PingTreeEvent) GetRunDone ¶
func (x *PingTreeEvent) GetRunDone() *PingTreeRunDone
func (*PingTreeEvent) GetServerError ¶
func (x *PingTreeEvent) GetServerError() *PingTreeServerError
func (*PingTreeEvent) GetStatusUpdate ¶
func (x *PingTreeEvent) GetStatusUpdate() *PingTreeStatusUpdate
func (*PingTreeEvent) GetTimestampNs ¶
func (x *PingTreeEvent) GetTimestampNs() int64
func (*PingTreeEvent) ProtoMessage ¶
func (*PingTreeEvent) ProtoMessage()
func (*PingTreeEvent) ProtoReflect ¶
func (x *PingTreeEvent) ProtoReflect() protoreflect.Message
func (*PingTreeEvent) Reset ¶
func (x *PingTreeEvent) Reset()
func (*PingTreeEvent) String ¶
func (x *PingTreeEvent) String() string
type PingTreeEvent_Discovered ¶
type PingTreeEvent_Discovered struct {
Discovered *PingTreeDiscovered `protobuf:"bytes,10,opt,name=discovered,proto3,oneof"`
}
type PingTreeEvent_LevelDone ¶
type PingTreeEvent_LevelDone struct {
LevelDone *PingTreeLevelDone `protobuf:"bytes,12,opt,name=level_done,json=levelDone,proto3,oneof"`
}
type PingTreeEvent_PingResult ¶
type PingTreeEvent_PingResult struct {
PingResult *PingTreeResult `protobuf:"bytes,11,opt,name=ping_result,json=pingResult,proto3,oneof"`
}
type PingTreeEvent_RunDone ¶
type PingTreeEvent_RunDone struct {
RunDone *PingTreeRunDone `protobuf:"bytes,13,opt,name=run_done,json=runDone,proto3,oneof"`
}
type PingTreeEvent_ServerError ¶
type PingTreeEvent_ServerError struct {
// ServerError is a terminal event: the handler is about to
// close the stream because of an unrecoverable condition
// (e.g. proto break, internal panic recovered). Clients should
// treat receipt as equivalent to stream-EOF with a known cause.
ServerError *PingTreeServerError `protobuf:"bytes,15,opt,name=server_error,json=serverError,proto3,oneof"`
}
type PingTreeEvent_StatusUpdate ¶
type PingTreeEvent_StatusUpdate struct {
StatusUpdate *PingTreeStatusUpdate `protobuf:"bytes,14,opt,name=status_update,json=statusUpdate,proto3,oneof"`
}
type PingTreeLevelDone ¶
type PingTreeLevelDone struct {
Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"`
// Attempted = sum of (succeeded + failed + skipped_cached + skipped_dry).
Attempted int32 `protobuf:"varint,2,opt,name=attempted,proto3" json:"attempted,omitempty"`
Succeeded int32 `protobuf:"varint,3,opt,name=succeeded,proto3" json:"succeeded,omitempty"`
Failed int32 `protobuf:"varint,4,opt,name=failed,proto3" json:"failed,omitempty"`
// SkippedCached is the count of entries where the
// use_transport_latency fast-path fired. Lets harnesses compute
// cache hit rate.
SkippedCached int32 `protobuf:"varint,5,opt,name=skipped_cached,json=skippedCached,proto3" json:"skipped_cached,omitempty"`
// contains filtered or unexported fields
}
LevelDone fires after every transport at level N has either completed its ping or been skipped. Always fires before the next level's Discovered events. Counts are authoritative for the harness.
func (*PingTreeLevelDone) Descriptor
deprecated
func (*PingTreeLevelDone) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeLevelDone.ProtoReflect.Descriptor instead.
func (*PingTreeLevelDone) GetAttempted ¶
func (x *PingTreeLevelDone) GetAttempted() int32
func (*PingTreeLevelDone) GetFailed ¶
func (x *PingTreeLevelDone) GetFailed() int32
func (*PingTreeLevelDone) GetLevel ¶
func (x *PingTreeLevelDone) GetLevel() int32
func (*PingTreeLevelDone) GetSkippedCached ¶
func (x *PingTreeLevelDone) GetSkippedCached() int32
func (*PingTreeLevelDone) GetSucceeded ¶
func (x *PingTreeLevelDone) GetSucceeded() int32
func (*PingTreeLevelDone) ProtoMessage ¶
func (*PingTreeLevelDone) ProtoMessage()
func (*PingTreeLevelDone) ProtoReflect ¶
func (x *PingTreeLevelDone) ProtoReflect() protoreflect.Message
func (*PingTreeLevelDone) Reset ¶
func (x *PingTreeLevelDone) Reset()
func (*PingTreeLevelDone) String ¶
func (x *PingTreeLevelDone) String() string
type PingTreeRequest ¶
type PingTreeRequest struct {
// MaxLevel caps BFS depth. 0 = unlimited until expansion exhausts.
MaxLevel int32 `protobuf:"varint,1,opt,name=max_level,json=maxLevel,proto3" json:"max_level,omitempty"`
// Hops, when > 0, pings ONLY entries at exactly N hops. The BFS
// still discovers intermediate levels (so it can reach the target),
// but no PingResult fires for non-target levels. Synth's "latency
// as a function of hop count" measurement uses this.
Hops int32 `protobuf:"varint,2,opt,name=hops,proto3" json:"hops,omitempty"`
// Tries is the per-transport ping count. The PingResult carries
// the aggregated stats (avg, p50, p99, jitter) over all tries.
// 0 falls back to 1.
Tries int32 `protobuf:"varint,3,opt,name=tries,proto3" json:"tries,omitempty"`
// PacketSizeKb is the per-ping packet size. 0 falls back to 2 KB.
PacketSizeKb int32 `protobuf:"varint,4,opt,name=packet_size_kb,json=packetSizeKb,proto3" json:"packet_size_kb,omitempty"`
// PingTimeoutNs bounds each individual ping (after route setup).
// 0 falls back to 30s.
PingTimeoutNs int64 `protobuf:"varint,5,opt,name=ping_timeout_ns,json=pingTimeoutNs,proto3" json:"ping_timeout_ns,omitempty"`
// SetupTimeoutNs bounds the route-setup phase per transport.
// 0 falls back to 30s.
SetupTimeoutNs int64 `protobuf:"varint,6,opt,name=setup_timeout_ns,json=setupTimeoutNs,proto3" json:"setup_timeout_ns,omitempty"`
// Concurrency limits in-flight pings per level. The cap resets
// between levels (level 2 starts with a fresh budget after level 1
// drains) — predictable LevelDone semantics + bounded fan-out at
// deep levels. 0 falls back to 16.
Concurrency int32 `protobuf:"varint,7,opt,name=concurrency,proto3" json:"concurrency,omitempty"`
// OnlineOnly filters discovered visors via the uptime tracker.
OnlineOnly bool `protobuf:"varint,8,opt,name=online_only,json=onlineOnly,proto3" json:"online_only,omitempty"`
// MinVersion filters by minimum visor version (semver). Empty = no
// filter.
MinVersion string `protobuf:"bytes,9,opt,name=min_version,json=minVersion,proto3" json:"min_version,omitempty"`
// UseTransportLatency turns on the level-1 fast path: when a
// direct transport already has a non-zero smoothed
// TransportSummary.LatencyMS, the handler emits a PingResult with
// latency_source="transport_summary" and skips the live ping.
// Saves traffic + makes level 1 instant for warm transports.
// Deeper levels always live-ping (no transport-level latency for
// multi-hop routes).
UseTransportLatency bool `protobuf:"varint,10,opt,name=use_transport_latency,json=useTransportLatency,proto3" json:"use_transport_latency,omitempty"`
// DmsgOnly forces the ping to ride the DMSG path instead of the
// skywire router. Mirrors `cli visor ping --dmsg`.
DmsgOnly bool `protobuf:"varint,11,opt,name=dmsg_only,json=dmsgOnly,proto3" json:"dmsg_only,omitempty"`
// DmsgPreCheck probes DMSG reachability before attempting a
// route ping. Discards unreachable visors early.
DmsgPreCheck bool `protobuf:"varint,12,opt,name=dmsg_pre_check,json=dmsgPreCheck,proto3" json:"dmsg_pre_check,omitempty"`
// Retries adds N retry attempts on failed pings. 0 = no retry.
Retries int32 `protobuf:"varint,13,opt,name=retries,proto3" json:"retries,omitempty"`
// DryRun runs the BFS discovery but emits no PingResult events;
// useful for visualizing the reachable graph without traffic.
DryRun bool `protobuf:"varint,14,opt,name=dry_run,json=dryRun,proto3" json:"dry_run,omitempty"`
// contains filtered or unexported fields
}
PingTreeRequest configures a server-side BFS ping-tree walk. All durations are in nanoseconds (proto convention used throughout this service). All "0 = default" fields fall back to handler-side constants documented inline.
func (*PingTreeRequest) Descriptor
deprecated
func (*PingTreeRequest) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeRequest.ProtoReflect.Descriptor instead.
func (*PingTreeRequest) GetConcurrency ¶
func (x *PingTreeRequest) GetConcurrency() int32
func (*PingTreeRequest) GetDmsgOnly ¶
func (x *PingTreeRequest) GetDmsgOnly() bool
func (*PingTreeRequest) GetDmsgPreCheck ¶
func (x *PingTreeRequest) GetDmsgPreCheck() bool
func (*PingTreeRequest) GetDryRun ¶
func (x *PingTreeRequest) GetDryRun() bool
func (*PingTreeRequest) GetHops ¶
func (x *PingTreeRequest) GetHops() int32
func (*PingTreeRequest) GetMaxLevel ¶
func (x *PingTreeRequest) GetMaxLevel() int32
func (*PingTreeRequest) GetMinVersion ¶
func (x *PingTreeRequest) GetMinVersion() string
func (*PingTreeRequest) GetOnlineOnly ¶
func (x *PingTreeRequest) GetOnlineOnly() bool
func (*PingTreeRequest) GetPacketSizeKb ¶
func (x *PingTreeRequest) GetPacketSizeKb() int32
func (*PingTreeRequest) GetPingTimeoutNs ¶
func (x *PingTreeRequest) GetPingTimeoutNs() int64
func (*PingTreeRequest) GetRetries ¶
func (x *PingTreeRequest) GetRetries() int32
func (*PingTreeRequest) GetSetupTimeoutNs ¶
func (x *PingTreeRequest) GetSetupTimeoutNs() int64
func (*PingTreeRequest) GetTries ¶
func (x *PingTreeRequest) GetTries() int32
func (*PingTreeRequest) GetUseTransportLatency ¶
func (x *PingTreeRequest) GetUseTransportLatency() bool
func (*PingTreeRequest) ProtoMessage ¶
func (*PingTreeRequest) ProtoMessage()
func (*PingTreeRequest) ProtoReflect ¶
func (x *PingTreeRequest) ProtoReflect() protoreflect.Message
func (*PingTreeRequest) Reset ¶
func (x *PingTreeRequest) Reset()
func (*PingTreeRequest) String ¶
func (x *PingTreeRequest) String() string
type PingTreeResult ¶
type PingTreeResult struct {
TpId string `protobuf:"bytes,1,opt,name=tp_id,json=tpId,proto3" json:"tp_id,omitempty"`
TpType string `protobuf:"bytes,2,opt,name=tp_type,json=tpType,proto3" json:"tp_type,omitempty"`
RemotePk string `protobuf:"bytes,3,opt,name=remote_pk,json=remotePk,proto3" json:"remote_pk,omitempty"`
ParentPk string `protobuf:"bytes,4,opt,name=parent_pk,json=parentPk,proto3" json:"parent_pk,omitempty"`
Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"`
Failed bool `protobuf:"varint,6,opt,name=failed,proto3" json:"failed,omitempty"`
// Canceled distinguishes ctx-canceled-mid-flight from genuine
// failure. Set when ctx.Err() != nil at the time the result was
// finalized. Different operator action: retry vs investigate.
Canceled bool `protobuf:"varint,7,opt,name=canceled,proto3" json:"canceled,omitempty"`
// SetupLatencyNs is the route-setup phase time. Excluded from the
// ping_*_ns aggregations below — those are per-ping post-setup.
SetupLatencyNs int64 `protobuf:"varint,8,opt,name=setup_latency_ns,json=setupLatencyNs,proto3" json:"setup_latency_ns,omitempty"`
// SampleCount is the number of successful pings (out of Tries).
// Zero when failed.
SampleCount int32 `protobuf:"varint,9,opt,name=sample_count,json=sampleCount,proto3" json:"sample_count,omitempty"`
// PingAvgNs / PingP50Ns / PingP99Ns / JitterNs are aggregations
// over the sample series. Jitter is the population stddev:
// sqrt(sum((x - mean)^2) / N). Zero when sample_count < 2 (no
// stddev defined for a single sample).
PingAvgNs int64 `protobuf:"varint,10,opt,name=ping_avg_ns,json=pingAvgNs,proto3" json:"ping_avg_ns,omitempty"`
PingP50Ns int64 `protobuf:"varint,11,opt,name=ping_p50_ns,json=pingP50Ns,proto3" json:"ping_p50_ns,omitempty"`
PingP99Ns int64 `protobuf:"varint,12,opt,name=ping_p99_ns,json=pingP99Ns,proto3" json:"ping_p99_ns,omitempty"`
JitterNs int64 `protobuf:"varint,13,opt,name=jitter_ns,json=jitterNs,proto3" json:"jitter_ns,omitempty"`
// SetupErr / PingErr / CalcErr surface the most-recent error from
// each phase. Multiple may be set when multiple phases failed.
SetupErr string `protobuf:"bytes,14,opt,name=setup_err,json=setupErr,proto3" json:"setup_err,omitempty"`
PingErr string `protobuf:"bytes,15,opt,name=ping_err,json=pingErr,proto3" json:"ping_err,omitempty"`
CalcErr string `protobuf:"bytes,16,opt,name=calc_err,json=calcErr,proto3" json:"calc_err,omitempty"`
// LatencySource carries the provenance of the latency stats:
//
// "live_ping" — measured by an actual ping just now
// "transport_summary" — pulled from TransportSummary.LatencyMS
// (smoothed cache, level-1 fast path)
// "skipped" — entry was --hops mismatch or --dry-run
//
// Consumers use this to weight stale-cache values vs fresh probes.
LatencySource string `protobuf:"bytes,17,opt,name=latency_source,json=latencySource,proto3" json:"latency_source,omitempty"`
// Route is the hop sequence used for this ping. Empty for the
// transport_summary fast-path (no route was constructed).
Route []*RouteHop `protobuf:"bytes,18,rep,name=route,proto3" json:"route,omitempty"`
// contains filtered or unexported fields
}
PingResult fires when a transport's ping (or the cache fast-path) completes. Both success and failure produce a PingResult; consumers switch on the failed bool. Latency stats are aggregated across the per-tries sample series.
func (*PingTreeResult) Descriptor
deprecated
func (*PingTreeResult) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeResult.ProtoReflect.Descriptor instead.
func (*PingTreeResult) GetCalcErr ¶
func (x *PingTreeResult) GetCalcErr() string
func (*PingTreeResult) GetCanceled ¶
func (x *PingTreeResult) GetCanceled() bool
func (*PingTreeResult) GetFailed ¶
func (x *PingTreeResult) GetFailed() bool
func (*PingTreeResult) GetJitterNs ¶
func (x *PingTreeResult) GetJitterNs() int64
func (*PingTreeResult) GetLatencySource ¶
func (x *PingTreeResult) GetLatencySource() string
func (*PingTreeResult) GetLevel ¶
func (x *PingTreeResult) GetLevel() int32
func (*PingTreeResult) GetParentPk ¶
func (x *PingTreeResult) GetParentPk() string
func (*PingTreeResult) GetPingAvgNs ¶
func (x *PingTreeResult) GetPingAvgNs() int64
func (*PingTreeResult) GetPingErr ¶
func (x *PingTreeResult) GetPingErr() string
func (*PingTreeResult) GetPingP50Ns ¶
func (x *PingTreeResult) GetPingP50Ns() int64
func (*PingTreeResult) GetPingP99Ns ¶
func (x *PingTreeResult) GetPingP99Ns() int64
func (*PingTreeResult) GetRemotePk ¶
func (x *PingTreeResult) GetRemotePk() string
func (*PingTreeResult) GetRoute ¶
func (x *PingTreeResult) GetRoute() []*RouteHop
func (*PingTreeResult) GetSampleCount ¶
func (x *PingTreeResult) GetSampleCount() int32
func (*PingTreeResult) GetSetupErr ¶
func (x *PingTreeResult) GetSetupErr() string
func (*PingTreeResult) GetSetupLatencyNs ¶
func (x *PingTreeResult) GetSetupLatencyNs() int64
func (*PingTreeResult) GetTpId ¶
func (x *PingTreeResult) GetTpId() string
func (*PingTreeResult) GetTpType ¶
func (x *PingTreeResult) GetTpType() string
func (*PingTreeResult) ProtoMessage ¶
func (*PingTreeResult) ProtoMessage()
func (*PingTreeResult) ProtoReflect ¶
func (x *PingTreeResult) ProtoReflect() protoreflect.Message
func (*PingTreeResult) Reset ¶
func (x *PingTreeResult) Reset()
func (*PingTreeResult) String ¶
func (x *PingTreeResult) String() string
type PingTreeRunDone ¶
type PingTreeRunDone struct {
TotalDiscovered int32 `protobuf:"varint,1,opt,name=total_discovered,json=totalDiscovered,proto3" json:"total_discovered,omitempty"`
TotalPinged int32 `protobuf:"varint,2,opt,name=total_pinged,json=totalPinged,proto3" json:"total_pinged,omitempty"`
TotalSucceeded int32 `protobuf:"varint,3,opt,name=total_succeeded,json=totalSucceeded,proto3" json:"total_succeeded,omitempty"`
TotalFailed int32 `protobuf:"varint,4,opt,name=total_failed,json=totalFailed,proto3" json:"total_failed,omitempty"`
TotalSkippedCached int32 `protobuf:"varint,5,opt,name=total_skipped_cached,json=totalSkippedCached,proto3" json:"total_skipped_cached,omitempty"`
WallTimeNs int64 `protobuf:"varint,6,opt,name=wall_time_ns,json=wallTimeNs,proto3" json:"wall_time_ns,omitempty"`
// PeakInFlight is the highest concurrent ping count observed
// during the run. Useful for tuning concurrency.
PeakInFlight int32 `protobuf:"varint,7,opt,name=peak_in_flight,json=peakInFlight,proto3" json:"peak_in_flight,omitempty"`
// TerminationReason is one of:
//
// "max_level" — hit cfg.MaxLevel
// "no_neighbors" — BFS exhausted before MaxLevel
// "hops_target" — reached cfg.Hops target level
// "context_cancel" — client disconnect / server shutdown
// "error" — see ServerError preceding this event
TerminationReason string `protobuf:"bytes,8,opt,name=termination_reason,json=terminationReason,proto3" json:"termination_reason,omitempty"`
// contains filtered or unexported fields
}
RunDone is the terminal event before stream close. Fires exactly once per StreamPingTree call.
func (*PingTreeRunDone) Descriptor
deprecated
func (*PingTreeRunDone) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeRunDone.ProtoReflect.Descriptor instead.
func (*PingTreeRunDone) GetPeakInFlight ¶
func (x *PingTreeRunDone) GetPeakInFlight() int32
func (*PingTreeRunDone) GetTerminationReason ¶
func (x *PingTreeRunDone) GetTerminationReason() string
func (*PingTreeRunDone) GetTotalDiscovered ¶
func (x *PingTreeRunDone) GetTotalDiscovered() int32
func (*PingTreeRunDone) GetTotalFailed ¶
func (x *PingTreeRunDone) GetTotalFailed() int32
func (*PingTreeRunDone) GetTotalPinged ¶
func (x *PingTreeRunDone) GetTotalPinged() int32
func (*PingTreeRunDone) GetTotalSkippedCached ¶
func (x *PingTreeRunDone) GetTotalSkippedCached() int32
func (*PingTreeRunDone) GetTotalSucceeded ¶
func (x *PingTreeRunDone) GetTotalSucceeded() int32
func (*PingTreeRunDone) GetWallTimeNs ¶
func (x *PingTreeRunDone) GetWallTimeNs() int64
func (*PingTreeRunDone) ProtoMessage ¶
func (*PingTreeRunDone) ProtoMessage()
func (*PingTreeRunDone) ProtoReflect ¶
func (x *PingTreeRunDone) ProtoReflect() protoreflect.Message
func (*PingTreeRunDone) Reset ¶
func (x *PingTreeRunDone) Reset()
func (*PingTreeRunDone) String ¶
func (x *PingTreeRunDone) String() string
type PingTreeServerError ¶
type PingTreeServerError struct {
// Code is a short stable identifier (e.g. "auth_denied",
// "internal_panic", "tpm_unavailable"). Suitable for grep / metric
// labeling.
Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"`
// Message carries operator-readable detail. Not stable across
// versions.
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
// contains filtered or unexported fields
}
ServerError signals an unrecoverable condition that's about to close the stream. Clients receive it as the last event before stream-EOF; preserves a known cause vs an opaque transport error.
func (*PingTreeServerError) Descriptor
deprecated
func (*PingTreeServerError) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeServerError.ProtoReflect.Descriptor instead.
func (*PingTreeServerError) GetCode ¶
func (x *PingTreeServerError) GetCode() string
func (*PingTreeServerError) GetMessage ¶
func (x *PingTreeServerError) GetMessage() string
func (*PingTreeServerError) ProtoMessage ¶
func (*PingTreeServerError) ProtoMessage()
func (*PingTreeServerError) ProtoReflect ¶
func (x *PingTreeServerError) ProtoReflect() protoreflect.Message
func (*PingTreeServerError) Reset ¶
func (x *PingTreeServerError) Reset()
func (*PingTreeServerError) String ¶
func (x *PingTreeServerError) String() string
type PingTreeStatusUpdate ¶
type PingTreeStatusUpdate struct {
// Phase is one of: "discovering" | "pinging_level_N" | "finalizing".
Phase string `protobuf:"bytes,1,opt,name=phase,proto3" json:"phase,omitempty"`
// InFlight is the count of currently-active ping goroutines.
InFlight int32 `protobuf:"varint,2,opt,name=in_flight,json=inFlight,proto3" json:"in_flight,omitempty"`
// Pending is the count of queued-but-not-started pings.
Pending int32 `protobuf:"varint,3,opt,name=pending,proto3" json:"pending,omitempty"`
// Message is an optional human-readable hint (e.g. "waiting on 3
// slow pings at level 2"). Empty for routine progress.
Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
// contains filtered or unexported fields
}
StatusUpdate is a low-priority informational event (e.g. "expanding level 3", "draining in-flight"). The handler MUST prefer dropping StatusUpdate over PingResult under backpressure — never trade measurement data for status text.
func (*PingTreeStatusUpdate) Descriptor
deprecated
func (*PingTreeStatusUpdate) Descriptor() ([]byte, []int)
Deprecated: Use PingTreeStatusUpdate.ProtoReflect.Descriptor instead.
func (*PingTreeStatusUpdate) GetInFlight ¶
func (x *PingTreeStatusUpdate) GetInFlight() int32
func (*PingTreeStatusUpdate) GetMessage ¶
func (x *PingTreeStatusUpdate) GetMessage() string
func (*PingTreeStatusUpdate) GetPending ¶
func (x *PingTreeStatusUpdate) GetPending() int32
func (*PingTreeStatusUpdate) GetPhase ¶
func (x *PingTreeStatusUpdate) GetPhase() string
func (*PingTreeStatusUpdate) ProtoMessage ¶
func (*PingTreeStatusUpdate) ProtoMessage()
func (*PingTreeStatusUpdate) ProtoReflect ¶
func (x *PingTreeStatusUpdate) ProtoReflect() protoreflect.Message
func (*PingTreeStatusUpdate) Reset ¶
func (x *PingTreeStatusUpdate) Reset()
func (*PingTreeStatusUpdate) String ¶
func (x *PingTreeStatusUpdate) String() string
type ProcessStat ¶
type ProcessStat struct {
Pid int32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` // Process ID
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Process name
CpuPercent float64 `protobuf:"fixed64,3,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"` // CPU usage percentage
MemoryPercent float64 `protobuf:"fixed64,4,opt,name=memory_percent,json=memoryPercent,proto3" json:"memory_percent,omitempty"` // Memory usage percentage
MemoryRss uint64 `protobuf:"varint,5,opt,name=memory_rss,json=memoryRss,proto3" json:"memory_rss,omitempty"` // Resident set size in bytes
Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` // Username running the process
Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` // Process status (running, sleeping, etc.)
// contains filtered or unexported fields
}
ProcessStat contains information about a running process
func (*ProcessStat) Descriptor
deprecated
func (*ProcessStat) Descriptor() ([]byte, []int)
Deprecated: Use ProcessStat.ProtoReflect.Descriptor instead.
func (*ProcessStat) GetCpuPercent ¶
func (x *ProcessStat) GetCpuPercent() float64
func (*ProcessStat) GetMemoryPercent ¶
func (x *ProcessStat) GetMemoryPercent() float64
func (*ProcessStat) GetMemoryRss ¶
func (x *ProcessStat) GetMemoryRss() uint64
func (*ProcessStat) GetName ¶
func (x *ProcessStat) GetName() string
func (*ProcessStat) GetPid ¶
func (x *ProcessStat) GetPid() int32
func (*ProcessStat) GetStatus ¶
func (x *ProcessStat) GetStatus() string
func (*ProcessStat) GetUsername ¶
func (x *ProcessStat) GetUsername() string
func (*ProcessStat) ProtoMessage ¶
func (*ProcessStat) ProtoMessage()
func (*ProcessStat) ProtoReflect ¶
func (x *ProcessStat) ProtoReflect() protoreflect.Message
func (*ProcessStat) Reset ¶
func (x *ProcessStat) Reset()
func (*ProcessStat) String ¶
func (x *ProcessStat) String() string
type RemoteSystemStatsRequest ¶
type RemoteSystemStatsRequest struct {
RemotePk string `protobuf:"bytes,1,opt,name=remote_pk,json=remotePk,proto3" json:"remote_pk,omitempty"` // Public key of remote visor to connect to
UpdateIntervalNs int64 `protobuf:"varint,2,opt,name=update_interval_ns,json=updateIntervalNs,proto3" json:"update_interval_ns,omitempty"` // Update interval in nanoseconds (default 1s)
IncludeProcesses bool `protobuf:"varint,3,opt,name=include_processes,json=includeProcesses,proto3" json:"include_processes,omitempty"` // Include top processes (more expensive)
ProcessLimit int32 `protobuf:"varint,4,opt,name=process_limit,json=processLimit,proto3" json:"process_limit,omitempty"` // Max processes to include (default 10)
// contains filtered or unexported fields
}
RemoteSystemStatsRequest requests system stats from a remote visor via DMSG
func (*RemoteSystemStatsRequest) Descriptor
deprecated
func (*RemoteSystemStatsRequest) Descriptor() ([]byte, []int)
Deprecated: Use RemoteSystemStatsRequest.ProtoReflect.Descriptor instead.
func (*RemoteSystemStatsRequest) GetIncludeProcesses ¶
func (x *RemoteSystemStatsRequest) GetIncludeProcesses() bool
func (*RemoteSystemStatsRequest) GetProcessLimit ¶
func (x *RemoteSystemStatsRequest) GetProcessLimit() int32
func (*RemoteSystemStatsRequest) GetRemotePk ¶
func (x *RemoteSystemStatsRequest) GetRemotePk() string
func (*RemoteSystemStatsRequest) GetUpdateIntervalNs ¶
func (x *RemoteSystemStatsRequest) GetUpdateIntervalNs() int64
func (*RemoteSystemStatsRequest) ProtoMessage ¶
func (*RemoteSystemStatsRequest) ProtoMessage()
func (*RemoteSystemStatsRequest) ProtoReflect ¶
func (x *RemoteSystemStatsRequest) ProtoReflect() protoreflect.Message
func (*RemoteSystemStatsRequest) Reset ¶
func (x *RemoteSystemStatsRequest) Reset()
func (*RemoteSystemStatsRequest) String ¶
func (x *RemoteSystemStatsRequest) String() string
type RouteGroupMuxInfo ¶
type RouteGroupMuxInfo struct {
MuxEnabled bool `protobuf:"varint,1,opt,name=mux_enabled,json=muxEnabled,proto3" json:"mux_enabled,omitempty"`
SackEnabled bool `protobuf:"varint,2,opt,name=sack_enabled,json=sackEnabled,proto3" json:"sack_enabled,omitempty"`
Legs []*RouteGroupMuxLeg `protobuf:"bytes,3,rep,name=legs,proto3" json:"legs,omitempty"`
// contains filtered or unexported fields
}
RouteGroupMuxInfo is one route group's mux state plus its per-leg counters. Field-for-field mirror of visor.MuxRouteGroupInfo (minus the descriptor, which the plot consumer does not render).
func (*RouteGroupMuxInfo) Descriptor
deprecated
func (*RouteGroupMuxInfo) Descriptor() ([]byte, []int)
Deprecated: Use RouteGroupMuxInfo.ProtoReflect.Descriptor instead.
func (*RouteGroupMuxInfo) GetLegs ¶
func (x *RouteGroupMuxInfo) GetLegs() []*RouteGroupMuxLeg
func (*RouteGroupMuxInfo) GetMuxEnabled ¶
func (x *RouteGroupMuxInfo) GetMuxEnabled() bool
func (*RouteGroupMuxInfo) GetSackEnabled ¶
func (x *RouteGroupMuxInfo) GetSackEnabled() bool
func (*RouteGroupMuxInfo) ProtoMessage ¶
func (*RouteGroupMuxInfo) ProtoMessage()
func (*RouteGroupMuxInfo) ProtoReflect ¶
func (x *RouteGroupMuxInfo) ProtoReflect() protoreflect.Message
func (*RouteGroupMuxInfo) Reset ¶
func (x *RouteGroupMuxInfo) Reset()
func (*RouteGroupMuxInfo) String ¶
func (x *RouteGroupMuxInfo) String() string
type RouteGroupMuxInfoData ¶
type RouteGroupMuxInfoData struct {
MuxEnabled bool
SACKEnabled bool
Legs []RouteGroupMuxLegData
}
RouteGroupMuxInfoData mirrors visor.MuxRouteGroupInfo at the rpcgrpc boundary so VisorAPI doesn't pull pkg/visor into rpcgrpc's import graph. The adapter at the visor's init transcribes the visor type into this one.
type RouteGroupMuxInfoSample ¶
type RouteGroupMuxInfoSample struct {
// TimestampNs is server-side wall time at emit.
TimestampNs int64 `protobuf:"varint,1,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"`
// RouteGroups is one entry per active route group tagged with the
// requested app. Empty when the app has no route group yet — the
// stream stays open and keeps sampling rather than erroring.
RouteGroups []*RouteGroupMuxInfo `protobuf:"bytes,2,rep,name=route_groups,json=routeGroups,proto3" json:"route_groups,omitempty"`
// contains filtered or unexported fields
}
RouteGroupMuxInfoSample is one snapshot of a running app's mux'd route-group telemetry, emitted every sample_interval_ns. Mirrors the []visor.MuxRouteGroupInfo the unary RouteGroupMuxInfo RPC returns.
func (*RouteGroupMuxInfoSample) Descriptor
deprecated
func (*RouteGroupMuxInfoSample) Descriptor() ([]byte, []int)
Deprecated: Use RouteGroupMuxInfoSample.ProtoReflect.Descriptor instead.
func (*RouteGroupMuxInfoSample) GetRouteGroups ¶
func (x *RouteGroupMuxInfoSample) GetRouteGroups() []*RouteGroupMuxInfo
func (*RouteGroupMuxInfoSample) GetTimestampNs ¶
func (x *RouteGroupMuxInfoSample) GetTimestampNs() int64
func (*RouteGroupMuxInfoSample) ProtoMessage ¶
func (*RouteGroupMuxInfoSample) ProtoMessage()
func (*RouteGroupMuxInfoSample) ProtoReflect ¶
func (x *RouteGroupMuxInfoSample) ProtoReflect() protoreflect.Message
func (*RouteGroupMuxInfoSample) Reset ¶
func (x *RouteGroupMuxInfoSample) Reset()
func (*RouteGroupMuxInfoSample) String ¶
func (x *RouteGroupMuxInfoSample) String() string
type RouteGroupMuxLeg ¶
type RouteGroupMuxLeg struct {
// RouteIndex is the leg's stable index within the group
// (visor.MuxLegInfo.Index).
RouteIndex int32 `protobuf:"varint,1,opt,name=route_index,json=routeIndex,proto3" json:"route_index,omitempty"`
TransportId string `protobuf:"bytes,2,opt,name=transport_id,json=transportId,proto3" json:"transport_id,omitempty"`
// TransportKind is the leg's transport type (stcpr, sudph, dmsg, ...)
// — visor.MuxLegInfo.TpType.
TransportKind string `protobuf:"bytes,3,opt,name=transport_kind,json=transportKind,proto3" json:"transport_kind,omitempty"`
RemotePk string `protobuf:"bytes,4,opt,name=remote_pk,json=remotePk,proto3" json:"remote_pk,omitempty"`
LatencyMs float64 `protobuf:"fixed64,5,opt,name=latency_ms,json=latencyMs,proto3" json:"latency_ms,omitempty"`
SentBytes uint64 `protobuf:"varint,6,opt,name=sent_bytes,json=sentBytes,proto3" json:"sent_bytes,omitempty"`
SentPackets uint64 `protobuf:"varint,7,opt,name=sent_packets,json=sentPackets,proto3" json:"sent_packets,omitempty"`
RecvBytes uint64 `protobuf:"varint,8,opt,name=recv_bytes,json=recvBytes,proto3" json:"recv_bytes,omitempty"`
RecvPackets uint64 `protobuf:"varint,9,opt,name=recv_packets,json=recvPackets,proto3" json:"recv_packets,omitempty"`
Retransmits uint64 `protobuf:"varint,10,opt,name=retransmits,proto3" json:"retransmits,omitempty"`
// Alive is false once the leg's transport is closed; Standby is true
// for a warm standby (rules kept, not sending) — the leg's gate_state.
Alive bool `protobuf:"varint,11,opt,name=alive,proto3" json:"alive,omitempty"`
Standby bool `protobuf:"varint,12,opt,name=standby,proto3" json:"standby,omitempty"`
// contains filtered or unexported fields
}
RouteGroupMuxLeg is one leg (route) within a mux'd group — mirror of visor.MuxLegInfo.
func (*RouteGroupMuxLeg) Descriptor
deprecated
func (*RouteGroupMuxLeg) Descriptor() ([]byte, []int)
Deprecated: Use RouteGroupMuxLeg.ProtoReflect.Descriptor instead.
func (*RouteGroupMuxLeg) GetAlive ¶
func (x *RouteGroupMuxLeg) GetAlive() bool
func (*RouteGroupMuxLeg) GetLatencyMs ¶
func (x *RouteGroupMuxLeg) GetLatencyMs() float64
func (*RouteGroupMuxLeg) GetRecvBytes ¶
func (x *RouteGroupMuxLeg) GetRecvBytes() uint64
func (*RouteGroupMuxLeg) GetRecvPackets ¶
func (x *RouteGroupMuxLeg) GetRecvPackets() uint64
func (*RouteGroupMuxLeg) GetRemotePk ¶
func (x *RouteGroupMuxLeg) GetRemotePk() string
func (*RouteGroupMuxLeg) GetRetransmits ¶
func (x *RouteGroupMuxLeg) GetRetransmits() uint64
func (*RouteGroupMuxLeg) GetRouteIndex ¶
func (x *RouteGroupMuxLeg) GetRouteIndex() int32
func (*RouteGroupMuxLeg) GetSentBytes ¶
func (x *RouteGroupMuxLeg) GetSentBytes() uint64
func (*RouteGroupMuxLeg) GetSentPackets ¶
func (x *RouteGroupMuxLeg) GetSentPackets() uint64
func (*RouteGroupMuxLeg) GetStandby ¶
func (x *RouteGroupMuxLeg) GetStandby() bool
func (*RouteGroupMuxLeg) GetTransportId ¶
func (x *RouteGroupMuxLeg) GetTransportId() string
func (*RouteGroupMuxLeg) GetTransportKind ¶
func (x *RouteGroupMuxLeg) GetTransportKind() string
func (*RouteGroupMuxLeg) ProtoMessage ¶
func (*RouteGroupMuxLeg) ProtoMessage()
func (*RouteGroupMuxLeg) ProtoReflect ¶
func (x *RouteGroupMuxLeg) ProtoReflect() protoreflect.Message
func (*RouteGroupMuxLeg) Reset ¶
func (x *RouteGroupMuxLeg) Reset()
func (*RouteGroupMuxLeg) String ¶
func (x *RouteGroupMuxLeg) String() string
type RouteGroupMuxLegData ¶
type RouteGroupMuxLegData struct {
Index int
TransportID string
TpType string
RemotePK string
LatencyMS float64
SentBytes uint64
SentPackets uint64
RecvBytes uint64
RecvPackets uint64
Retransmits uint64
Alive bool
Standby bool
}
RouteGroupMuxLegData mirrors visor.MuxLegInfo — one leg (route) within a mux'd route group.
type RouteHop ¶
type RouteHop struct {
TpId string `protobuf:"bytes,1,opt,name=tp_id,json=tpId,proto3" json:"tp_id,omitempty"` // Transport ID (UUID)
From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"` // Source public key
To string `protobuf:"bytes,3,opt,name=to,proto3" json:"to,omitempty"` // Destination public key
TpType string `protobuf:"bytes,4,opt,name=tp_type,json=tpType,proto3" json:"tp_type,omitempty"` // Transport type (stcpr, sudph, dmsg)
// contains filtered or unexported fields
}
func (*RouteHop) Descriptor
deprecated
func (*RouteHop) ProtoMessage ¶
func (*RouteHop) ProtoMessage()
func (*RouteHop) ProtoReflect ¶
func (x *RouteHop) ProtoReflect() protoreflect.Message
type RouteHopDetail ¶
type RouteHopDetail struct {
TpID string // Transport ID
From string // Source public key
To string // Destination public key
TpType string // Transport type (stcpr, sudph, dmsg)
}
RouteHopDetail contains detailed information about a route hop for display.
type RouteHopInfo ¶
RouteHopInfo contains detailed information about a single hop in a route. Mirrors router.RouteHopInfo to avoid import cycles.
type StreamRouteGroupMuxInfoRequest ¶
type StreamRouteGroupMuxInfoRequest struct {
// AppName scopes the telemetry to route groups tagged with this app
// (skysocks-client, vpn-client, ...). Empty returns every mux'd route
// group the visor has — matching the unary RouteGroupMuxInfo("").
AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"`
// SampleIntervalNs is how often a RouteGroupMuxInfoSample is emitted.
// 0 falls back to 500 ms; the handler floors it to a 100 ms minimum
// so a client can't spin the visor. Nanoseconds (proto convention
// used throughout this service).
SampleIntervalNs int64 `protobuf:"varint,2,opt,name=sample_interval_ns,json=sampleIntervalNs,proto3" json:"sample_interval_ns,omitempty"`
// contains filtered or unexported fields
}
StreamRouteGroupMuxInfoRequest configures a live route-group mux telemetry stream for a running app. See StreamRouteGroupMuxInfo.
func (*StreamRouteGroupMuxInfoRequest) Descriptor
deprecated
func (*StreamRouteGroupMuxInfoRequest) Descriptor() ([]byte, []int)
Deprecated: Use StreamRouteGroupMuxInfoRequest.ProtoReflect.Descriptor instead.
func (*StreamRouteGroupMuxInfoRequest) GetAppName ¶
func (x *StreamRouteGroupMuxInfoRequest) GetAppName() string
func (*StreamRouteGroupMuxInfoRequest) GetSampleIntervalNs ¶
func (x *StreamRouteGroupMuxInfoRequest) GetSampleIntervalNs() int64
func (*StreamRouteGroupMuxInfoRequest) ProtoMessage ¶
func (*StreamRouteGroupMuxInfoRequest) ProtoMessage()
func (*StreamRouteGroupMuxInfoRequest) ProtoReflect ¶
func (x *StreamRouteGroupMuxInfoRequest) ProtoReflect() protoreflect.Message
func (*StreamRouteGroupMuxInfoRequest) Reset ¶
func (x *StreamRouteGroupMuxInfoRequest) Reset()
func (*StreamRouteGroupMuxInfoRequest) String ¶
func (x *StreamRouteGroupMuxInfoRequest) String() string
type SystemStats ¶
type SystemStats struct {
TimestampNs int64 `protobuf:"varint,1,opt,name=timestamp_ns,json=timestampNs,proto3" json:"timestamp_ns,omitempty"` // Unix timestamp in nanoseconds
Host *HostInfo `protobuf:"bytes,2,opt,name=host,proto3" json:"host,omitempty"` // Host information
Cpu []*CpuStat `protobuf:"bytes,3,rep,name=cpu,proto3" json:"cpu,omitempty"` // CPU usage per core
CpuAverage float64 `protobuf:"fixed64,4,opt,name=cpu_average,json=cpuAverage,proto3" json:"cpu_average,omitempty"` // Average CPU usage across all cores
Memory *MemoryStat `protobuf:"bytes,5,opt,name=memory,proto3" json:"memory,omitempty"` // Memory usage
Swap *MemoryStat `protobuf:"bytes,6,opt,name=swap,proto3" json:"swap,omitempty"` // Swap usage
Disks []*DiskStat `protobuf:"bytes,7,rep,name=disks,proto3" json:"disks,omitempty"` // Disk usage per partition
Network *NetworkStat `protobuf:"bytes,8,opt,name=network,proto3" json:"network,omitempty"` // Network I/O
Temps []*TempStat `protobuf:"bytes,9,rep,name=temps,proto3" json:"temps,omitempty"` // Temperature sensors
Processes []*ProcessStat `protobuf:"bytes,10,rep,name=processes,proto3" json:"processes,omitempty"` // Top processes
Error string `protobuf:"bytes,11,opt,name=error,proto3" json:"error,omitempty"` // Error message if collection failed
// contains filtered or unexported fields
}
SystemStats contains system monitoring data for gotop-style display
func (*SystemStats) Descriptor
deprecated
func (*SystemStats) Descriptor() ([]byte, []int)
Deprecated: Use SystemStats.ProtoReflect.Descriptor instead.
func (*SystemStats) GetCpu ¶
func (x *SystemStats) GetCpu() []*CpuStat
func (*SystemStats) GetCpuAverage ¶
func (x *SystemStats) GetCpuAverage() float64
func (*SystemStats) GetDisks ¶
func (x *SystemStats) GetDisks() []*DiskStat
func (*SystemStats) GetError ¶
func (x *SystemStats) GetError() string
func (*SystemStats) GetHost ¶
func (x *SystemStats) GetHost() *HostInfo
func (*SystemStats) GetMemory ¶
func (x *SystemStats) GetMemory() *MemoryStat
func (*SystemStats) GetNetwork ¶
func (x *SystemStats) GetNetwork() *NetworkStat
func (*SystemStats) GetProcesses ¶
func (x *SystemStats) GetProcesses() []*ProcessStat
func (*SystemStats) GetSwap ¶
func (x *SystemStats) GetSwap() *MemoryStat
func (*SystemStats) GetTemps ¶
func (x *SystemStats) GetTemps() []*TempStat
func (*SystemStats) GetTimestampNs ¶
func (x *SystemStats) GetTimestampNs() int64
func (*SystemStats) ProtoMessage ¶
func (*SystemStats) ProtoMessage()
func (*SystemStats) ProtoReflect ¶
func (x *SystemStats) ProtoReflect() protoreflect.Message
func (*SystemStats) Reset ¶
func (x *SystemStats) Reset()
func (*SystemStats) String ¶
func (x *SystemStats) String() string
type SystemStatsCallback ¶
type SystemStatsCallback func(stats *SystemStats)
SystemStatsCallback is called for each system stats update received from the stream.
type SystemStatsCollector ¶
type SystemStatsCollector struct {
// contains filtered or unexported fields
}
SystemStatsCollector collects system stats using gopsutil
func NewSystemStatsCollector ¶
func NewSystemStatsCollector() *SystemStatsCollector
NewSystemStatsCollector creates a new system stats collector
func (*SystemStatsCollector) Collect ¶
func (c *SystemStatsCollector) Collect(ctx context.Context, includeProcesses bool, processLimit int) (*SystemStats, error)
Collect gathers system stats and returns them as a proto message
type SystemStatsRequest ¶
type SystemStatsRequest struct {
UpdateIntervalNs int64 `protobuf:"varint,1,opt,name=update_interval_ns,json=updateIntervalNs,proto3" json:"update_interval_ns,omitempty"` // Update interval in nanoseconds (default 1s)
IncludeProcesses bool `protobuf:"varint,2,opt,name=include_processes,json=includeProcesses,proto3" json:"include_processes,omitempty"` // Include top processes (more expensive)
ProcessLimit int32 `protobuf:"varint,3,opt,name=process_limit,json=processLimit,proto3" json:"process_limit,omitempty"` // Max processes to include (default 10)
// contains filtered or unexported fields
}
SystemStatsRequest configures system stats streaming
func (*SystemStatsRequest) Descriptor
deprecated
func (*SystemStatsRequest) Descriptor() ([]byte, []int)
Deprecated: Use SystemStatsRequest.ProtoReflect.Descriptor instead.
func (*SystemStatsRequest) GetIncludeProcesses ¶
func (x *SystemStatsRequest) GetIncludeProcesses() bool
func (*SystemStatsRequest) GetProcessLimit ¶
func (x *SystemStatsRequest) GetProcessLimit() int32
func (*SystemStatsRequest) GetUpdateIntervalNs ¶
func (x *SystemStatsRequest) GetUpdateIntervalNs() int64
func (*SystemStatsRequest) ProtoMessage ¶
func (*SystemStatsRequest) ProtoMessage()
func (*SystemStatsRequest) ProtoReflect ¶
func (x *SystemStatsRequest) ProtoReflect() protoreflect.Message
func (*SystemStatsRequest) Reset ¶
func (x *SystemStatsRequest) Reset()
func (*SystemStatsRequest) String ¶
func (x *SystemStatsRequest) String() string
type TempStat ¶
type TempStat struct {
SensorKey string `protobuf:"bytes,1,opt,name=sensor_key,json=sensorKey,proto3" json:"sensor_key,omitempty"` // Sensor identifier
Temperature float64 `protobuf:"fixed64,2,opt,name=temperature,proto3" json:"temperature,omitempty"` // Temperature in Celsius
High float64 `protobuf:"fixed64,3,opt,name=high,proto3" json:"high,omitempty"` // High threshold (if available)
Critical float64 `protobuf:"fixed64,4,opt,name=critical,proto3" json:"critical,omitempty"` // Critical threshold (if available)
// contains filtered or unexported fields
}
TempStat contains temperature sensor information
func (*TempStat) Descriptor
deprecated
func (*TempStat) GetCritical ¶
func (*TempStat) GetSensorKey ¶
func (*TempStat) GetTemperature ¶
func (*TempStat) ProtoMessage ¶
func (*TempStat) ProtoMessage()
func (*TempStat) ProtoReflect ¶
func (x *TempStat) ProtoReflect() protoreflect.Message
type UnimplementedPingServiceServer ¶
type UnimplementedPingServiceServer struct{}
UnimplementedPingServiceServer 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 (UnimplementedPingServiceServer) GetRemoteDmsgServers ¶
func (UnimplementedPingServiceServer) GetRemoteDmsgServers(context.Context, *DmsgServersRequest) (*DmsgServersResponse, error)
func (UnimplementedPingServiceServer) GetSystemStats ¶
func (UnimplementedPingServiceServer) GetSystemStats(context.Context, *SystemStatsRequest) (*SystemStats, error)
func (UnimplementedPingServiceServer) StreamAppLogs ¶
func (UnimplementedPingServiceServer) StreamAppLogs(*AppLogStreamRequest, grpc.ServerStreamingServer[AppLogEntry]) error
func (UnimplementedPingServiceServer) StreamBandwidthTest ¶
func (UnimplementedPingServiceServer) StreamBandwidthTest(*BandwidthRequest, grpc.ServerStreamingServer[BandwidthProgress]) error
func (UnimplementedPingServiceServer) StreamCalcRoutes ¶
func (UnimplementedPingServiceServer) StreamCalcRoutes(*CalcRoutesRequest, grpc.ServerStreamingServer[CalcRoute]) error
func (UnimplementedPingServiceServer) StreamDmsgBandwidthTest ¶
func (UnimplementedPingServiceServer) StreamDmsgBandwidthTest(*BandwidthRequest, grpc.ServerStreamingServer[BandwidthProgress]) error
func (UnimplementedPingServiceServer) StreamDmsgPing ¶
func (UnimplementedPingServiceServer) StreamDmsgPing(*PingRequest, grpc.ServerStreamingServer[PingResult]) error
func (UnimplementedPingServiceServer) StreamGroupMessages ¶
func (UnimplementedPingServiceServer) StreamGroupMessages(*GroupMessagesRequest, grpc.ServerStreamingServer[GroupMessageEvent]) error
func (UnimplementedPingServiceServer) StreamMuxBandwidth ¶
func (UnimplementedPingServiceServer) StreamMuxBandwidth(*MuxBandwidthRequest, grpc.ServerStreamingServer[MuxBandwidthEvent]) error
func (UnimplementedPingServiceServer) StreamPing ¶
func (UnimplementedPingServiceServer) StreamPing(*PingRequest, grpc.ServerStreamingServer[PingResult]) error
func (UnimplementedPingServiceServer) StreamPingTree ¶
func (UnimplementedPingServiceServer) StreamPingTree(*PingTreeRequest, grpc.ServerStreamingServer[PingTreeEvent]) error
func (UnimplementedPingServiceServer) StreamRemoteSystemStats ¶
func (UnimplementedPingServiceServer) StreamRemoteSystemStats(*RemoteSystemStatsRequest, grpc.ServerStreamingServer[SystemStats]) error
func (UnimplementedPingServiceServer) StreamRouteGroupMuxInfo ¶
func (UnimplementedPingServiceServer) StreamRouteGroupMuxInfo(*StreamRouteGroupMuxInfoRequest, grpc.ServerStreamingServer[RouteGroupMuxInfoSample]) error
func (UnimplementedPingServiceServer) StreamSystemStats ¶
func (UnimplementedPingServiceServer) StreamSystemStats(*SystemStatsRequest, grpc.ServerStreamingServer[SystemStats]) error
type UnsafePingServiceServer ¶
type UnsafePingServiceServer interface {
// contains filtered or unexported methods
}
UnsafePingServiceServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to PingServiceServer will result in compilation errors.
type VisorAPI ¶
type VisorAPI interface {
DialPing(conf PingConf) error
PingOnce(conf PingConf) (time.Duration, error)
PingOnceWithEcho(conf PingConf, echoFull bool) (bytesSent, bytesReceived uint64, latency time.Duration, err error)
StopPing(pk cipher.PubKey) error
// StopPingRoute tears down a single route in a mux-set without
// touching the peer's other parallel routes. Used by
// StreamMuxBandwidth to drop a failed aux route mid-pump.
StopPingRoute(ref PingRouteRef) error
GetPingRoute(pk cipher.PubKey) []cipher.PubKey
GetPingRouteDetails(pk cipher.PubKey) []RouteHopInfo
// GetPingRouteDetailsAt returns the hops for a specific route in
// a mux-set. The peer-keyed accessor (GetPingRouteDetails) can't
// distinguish among N parallel routes to the same target, so
// per-route emit paths (MuxRouteEstablished.hops) ride this.
GetPingRouteDetailsAt(ref PingRouteRef) []RouteHopInfo
GetLastRouteCalcTime() time.Duration
DialDmsgPing(pk cipher.PubKey) error
DialDmsgPingViaServer(pk cipher.PubKey, serverPK cipher.PubKey) error
DmsgPingOnce(conf PingConf) (time.Duration, error)
DmsgPingOnceWithEcho(conf PingConf, echoFull bool) (bytesSent, bytesReceived uint64, latency time.Duration, err error)
StopDmsgPing(pk cipher.PubKey) error
GetDmsgPingServerPK(pk cipher.PubKey) (cipher.PubKey, error)
GetRemoteDmsgServers(pk cipher.PubKey) ([]cipher.PubKey, error)
// DialDmsgRPC dials a remote visor's gRPC/RPC port over DMSG and returns the connection
DialDmsgRPC(pk cipher.PubKey) (net.Conn, error)
// SubscribeLogs returns a channel of logrus entries matching the
// filter; cancel() unsubscribes and returns the dropped count.
// Both may be nil (visor without a broadcaster wired up).
SubscribeLogs(f logging.Filter, capacity int) (<-chan *logrus.Entry, func() uint64)
// SubscribeGroupMessages returns a channel of inbound group
// messages converted into GroupMessageData (rpcgrpc's wire-friendly
// mirror of visor.GroupMessage to avoid the visor → rpcgrpc import
// cycle). cancel() unsubscribes and returns the dropped count.
// Returns (nil, no-op) when grouping is not yet initialized on
// the visor or running in a test harness.
SubscribeGroupMessages(capacity int) (<-chan GroupMessageData, func() uint64)
// SnapshotGroupMessagesAfterNs returns inbox-buffered group
// messages with TS > sinceNs (UnixNano). Used by
// StreamGroupMessages to replay events that landed during a
// client's reconnect gap before entering the live dispatch loop.
// Empty slice when grouping is uninitialized; bounded by the
// inbox ring capacity (long disconnect → only the tail is
// recoverable).
SnapshotGroupMessagesAfterNs(sinceNs int64) []GroupMessageData
// SnapshotGroupHistoryAfterNs returns durably-persisted group
// messages with TS > sinceNs for the named group. Powers the
// history-fallback path that backfills a subscriber whose
// reconnect gap exceeds the in-memory inbox ring. Empty when the
// operator hasn't enabled GroupHistoryDB, when the group has no
// stored messages, or when no messages newer than sinceNs exist.
SnapshotGroupHistoryAfterNs(groupID string, sinceNs int64) []GroupMessageData
// IncGroupStreamSend records one successful stream.Send call from
// StreamGroupMessages — i.e. one data event handed to the gRPC
// transport. Called by the streaming handler after each successful
// Send so the visor can surface a stream_send_count alongside the
// inbox-side DeliverCount and SubDropCount in GroupInfo. The two
// PingServer instances (local CLI + dmsg-RPC) share a single
// adapter, so the counter aggregates across both transports.
//
// The Subscribed sentinel is NOT counted — operators care about
// data delivery throughput, not handshake bookkeeping.
IncGroupStreamSend()
// LocalPK returns the visor's own public key. Used by route-calc
// gRPC handlers that default the src PK to the local visor.
LocalPK() cipher.PubKey
// FetchAllTransportEntries pulls every transport entry from TPD via
// the visor's existing discovery client. The route-calc gRPC
// handler builds the BFS graph from this slice.
FetchAllTransportEntries(ctx context.Context) ([]*transport.Entry, error)
// GetTransportLatencyByRemotePK returns the smoothed avg RTT (ms)
// for the local managed transport to remotePK, or 0 if no such
// transport exists or its latency is not yet sampled. Powers the
// ping-tree UseTransportLatency fast-path at level-1.
GetTransportLatencyByRemotePK(remotePK cipher.PubKey) float64
// RouteGroupMuxInfo returns the per-mux-leg counters for every active
// route group tagged with appName — the same data the unary
// RouteGroupMuxInfo net/rpc call returns, projected into the
// rpcgrpc-local mirror so this package stays free of pkg/visor
// imports. Powers StreamRouteGroupMuxInfo (the smooth server-stream
// backing 'cli proxy mux plot'). Returns an empty slice (not an
// error) when the app has no route group yet.
RouteGroupMuxInfo(appName string) ([]RouteGroupMuxInfoData, error)
}
VisorAPI defines the interface for visor ping operations