sockstats

package
v1.76.6 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 2024 License: BSD-3-Clause Imports: 4 Imported by: 24

Documentation

Overview

Package sockstats collects statistics about network sockets used by the Tailscale client. The context where sockets are used must be instrumented with the WithSockStats() function.

Only available on POSIX platforms when built with Tailscale's fork of Go.

Index

Constants

View Source
const IsAvailable = false

Variables

This section is empty.

Functions

func DebugInfo added in v1.40.0

func DebugInfo() string

DebugInfo returns a string containing debug information about the tracked statistics.

func SetNetMon added in v1.40.0

func SetNetMon(netMon *netmon.Monitor)

SetNetMon configures the sockstats package to monitor the active interface, so that per-interface stats can be collected.

func WithSockStats

func WithSockStats(ctx context.Context, label Label, logf logger.Logf) context.Context

WithSockStats instruments a context so that sockets created with it will have their statistics collected.

Types

type InterfaceSockStat added in v1.40.0

type InterfaceSockStat struct {
	TxBytesByInterface map[string]uint64
	RxBytesByInterface map[string]uint64
}

InterfaceSockStat contains the per-interface sent and received bytes for a socket instrumented with the WithSockStats() function.

type InterfaceSockStats added in v1.40.0

type InterfaceSockStats struct {
	Stats      map[Label]InterfaceSockStat
	Interfaces []string
}

InterfaceSockStats contains statistics for sockets instrumented with the WithSockStats() function, broken down by interface. The statistics may be a subset of the total if interfaces were added after the instrumented socket was created.

func GetInterfaces added in v1.40.0

func GetInterfaces() *InterfaceSockStats

GetWithInterfaces is a variant of Get that returns the current socket statistics broken down by interface. It is slightly more expensive than Get.

type Label

type Label uint8

Label is an identifier for a socket that stats are collected for. A finite set of values that may be used to label a socket to encourage grouping and to make storage more efficient.

const (
	LabelControlClientAuto   Label = 0  // control/controlclient/auto.go
	LabelControlClientDialer Label = 1  // control/controlhttp/client.go
	LabelDERPHTTPClient      Label = 2  // derp/derphttp/derphttp_client.go
	LabelLogtailLogger       Label = 3  // logtail/logtail.go
	LabelDNSForwarderDoH     Label = 4  // net/dns/resolver/forwarder.go
	LabelDNSForwarderUDP     Label = 5  // net/dns/resolver/forwarder.go
	LabelNetcheckClient      Label = 6  // net/netcheck/netcheck.go
	LabelPortmapperClient    Label = 7  // net/portmapper/portmapper.go
	LabelMagicsockConnUDP4   Label = 8  // wgengine/magicsock/magicsock.go
	LabelMagicsockConnUDP6   Label = 9  // wgengine/magicsock/magicsock.go
	LabelNetlogLogger        Label = 10 // wgengine/netlog/logger.go
	LabelSockstatlogLogger   Label = 11 // log/sockstatlog/logger.go
	LabelDNSForwarderTCP     Label = 12 // net/dns/resolver/forwarder.go
)

Labels are named after the package and function/struct that uses the socket. Values may be persisted and thus existing entries should not be re-numbered.

func (Label) String

func (i Label) String() string

type SockStat

type SockStat struct {
	TxBytes uint64
	RxBytes uint64
}

SockStat contains the sent and received bytes for a socket instrumented with the WithSockStats() function.

type SockStats

type SockStats struct {
	Stats                    map[Label]SockStat
	CurrentInterfaceCellular bool
}

SockStats contains statistics for sockets instrumented with the WithSockStats() function

func Get

func Get() *SockStats

Get returns the current socket statistics.

type ValidationSockStat

type ValidationSockStat struct {
	TxBytes uint64
	RxBytes uint64
}

ValidationSockStat contains the validation bytes for a socket instrumented with WithSockStats.

type ValidationSockStats

type ValidationSockStats struct {
	Stats map[Label]ValidationSockStat
}

ValidationSockStats contains external validation numbers for sockets instrumented with WithSockStats. It may be a subset of the all sockets, depending on what externa measurement mechanisms the platform supports.

func GetValidation added in v1.40.0

func GetValidation() *ValidationSockStats

GetValidation is a variant of Get that returns external validation numbers for stats. It is more expensive than Get and should be used in debug interfaces only.

Jump to

Keyboard shortcuts

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