sockstats

package
v1.38.3 Latest Latest
Warning

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

Go to latest
Published: Mar 29, 2023 License: BSD-3-Clause Imports: 3 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 GetWithValidation

func GetWithValidation() (*SockStats, *ValidationSockStats)

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

func SetLinkMonitor

func SetLinkMonitor(lm LinkMonitor)

SetLinkMonitor 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) context.Context

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

Types

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
)

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 LinkMonitor

type LinkMonitor interface {
	InterfaceState() *interfaces.State
	RegisterChangeCallback(interfaces.ChangeFunc) (unregister func())
}

LinkMonitor is the interface for the parts of wgengine/mointor's Mon that we need, to avoid the dependency.

type SockStat

type SockStat struct {
	TxBytes            uint64
	RxBytes            uint64
	TxBytesByInterface map[string]uint64
	RxBytesByInterface map[string]uint64
}

SockStat contains the sent and received bytes for a socket instrumented with the WithSockStats() function. The bytes are also broken down by interface, though this may be a subset of the total if interfaces were added after the instrumented socket was created.

type SockStats

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

SockStats contains statistics for sockets instrumented with the WithSockStats() function, along with the interfaces that we have per-interface statistics for.

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.

Jump to

Keyboard shortcuts

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