lib

package
v1.4.2 Latest Latest
Warning

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

Go to latest
Published: Jan 28, 2019 License: MPL-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// SeededSecurely is set to true if a cryptographically secure seed
	// was used to initialize rand.  When false, the start time is used
	// as a seed.
	SeededSecurely bool
)

Functions

func AbsInt added in v0.7.0

func AbsInt(a int) int

func ComputeDistance added in v0.8.0

func ComputeDistance(a *coordinate.Coordinate, b *coordinate.Coordinate) float64

ComputeDistance returns the distance between the two network coordinates in seconds. If either of the coordinates is nil then this will return positive infinity.

func DurationMinusBuffer added in v0.7.0

func DurationMinusBuffer(intv time.Duration, buffer time.Duration, jitter int64) time.Duration

DurationMinusBuffer returns a duration, minus a buffer and jitter subtracted from the duration. This function is used primarily for servicing Consul TTL Checks in advance of the TTL.

func DurationMinusBufferDomain added in v0.7.0

func DurationMinusBufferDomain(intv time.Duration, buffer time.Duration, jitter int64) (min time.Duration, max time.Duration)

DurationMinusBufferDomain returns the domain of valid durations from a call to DurationMinusBuffer. This function is used to check user specified input values to DurationMinusBuffer.

func EnsurePath added in v0.7.3

func EnsurePath(path string, dir bool) error

EnsurePath is used to make sure a path exists

func GenerateCoordinate added in v0.8.0

func GenerateCoordinate(rtt time.Duration) *coordinate.Coordinate

GenerateCoordinate creates a new coordinate with the given distance from the origin. This should only be used for tests.

func GenerateUUID added in v1.4.0

func GenerateUUID(checkFn UUIDCheckFunc) (string, error)

func GetSerfTags added in v1.4.0

func GetSerfTags(serf *serf.Serf) map[string]string

func InitTelemetry added in v1.2.0

func InitTelemetry(cfg TelemetryConfig) (*metrics.InmemSink, error)

InitTelemetry configures go-metrics based on map of telemetry config values as returned by Runtimecfg.Config().

func IsErrEOF added in v1.0.0

func IsErrEOF(err error) bool

IsErrEOF returns true if we get an EOF error from the socket itself, or an EOF equivalent error from yamux.

func MaxInt added in v0.7.0

func MaxInt(a, b int) int

func MinInt added in v0.7.0

func MinInt(a, b int) int

func RandomStagger

func RandomStagger(intv time.Duration) time.Duration

RandomStagger returns an interval between 0 and the duration

func RateScaledInterval

func RateScaledInterval(rate float64, min time.Duration, n int) time.Duration

RateScaledInterval is used to choose an interval to perform an action in order to target an aggregate number of actions per second across the whole cluster.

func SeedMathRand

func SeedMathRand()

SeedMathRand provides weak, but guaranteed seeding, which is better than running with Go's default seed of 1. A call to SeedMathRand() is expected to be called via init(), but never a second time.

func SerfDefaultConfig added in v1.0.2

func SerfDefaultConfig() *serf.Config

SerfDefaultConfig returns a Consul-flavored Serf default configuration, suitable as a basis for a LAN, WAN, segment, or area.

func StrContains

func StrContains(l []string, s string) bool

StrContains checks if a list contains a string

func UpdateSerfTag added in v1.4.0

func UpdateSerfTag(serf *serf.Serf, tag, value string)

func UserAgent added in v1.2.0

func UserAgent() string

UserAgent returns the consistent user-agent string for Consul.

Types

type CoordinateSet added in v0.9.3

type CoordinateSet map[string]*coordinate.Coordinate

CoordinateSet holds all the coordinates for a given node, indexed by network segment name.

func (CoordinateSet) Intersect added in v0.9.3

Intersect tries to return a pair of coordinates which are compatible with the current set and a given set. We employ some special knowledge about network segments to avoid doing a full intersection, since this is in several hot paths. This might return nil for either coordinate in the output pair if an intersection cannot be found. The ComputeDistance function above is designed to deal with that.

type StopChannelContext added in v1.4.0

type StopChannelContext struct {
	StopCh <-chan struct{}
}

StopChannelContext implements the context.Context interface You provide the channel to select on to determine whether the context should be cancelled and other code such as the rate.Limiter will automatically use the channel appropriately

func (*StopChannelContext) Deadline added in v1.4.0

func (c *StopChannelContext) Deadline() (deadline time.Time, ok bool)

func (*StopChannelContext) Done added in v1.4.0

func (c *StopChannelContext) Done() <-chan struct{}

func (*StopChannelContext) Err added in v1.4.0

func (c *StopChannelContext) Err() error

func (*StopChannelContext) Value added in v1.4.0

func (c *StopChannelContext) Value(key interface{}) interface{}

type TelemetryConfig added in v1.2.0

type TelemetryConfig struct {

	// CirconusAPIApp is an app name associated with API token.
	// Default: "consul"
	//
	// hcl: telemetry { circonus_api_app = string }
	CirconusAPIApp string `json:"circonus_api_app,omitempty" mapstructure:"circonus_api_app"`

	// CirconusAPIToken is a valid API Token used to create/manage check. If provided,
	// metric management is enabled.
	// Default: none
	//
	// hcl: telemetry { circonus_api_token = string }
	CirconusAPIToken string `json:"circonus_api_token,omitempty" mapstructure:"circonus_api_token"`

	// CirconusAPIURL is the base URL to use for contacting the Circonus API.
	// Default: "https://api.circonus.com/v2"
	//
	// hcl: telemetry { circonus_api_url = string }
	CirconusAPIURL string `json:"circonus_apiurl,omitempty" mapstructure:"circonus_apiurl"`

	// CirconusBrokerID is an explicit broker to use when creating a new check. The numeric portion
	// of broker._cid. If metric management is enabled and neither a Submission URL nor Check ID
	// is provided, an attempt will be made to search for an existing check using Instance ID and
	// Search Tag. If one is not found, a new HTTPTRAP check will be created.
	// Default: use Select Tag if provided, otherwise, a random Enterprise Broker associated
	// with the specified API token or the default Circonus Broker.
	// Default: none
	//
	// hcl: telemetry { circonus_broker_id = string }
	CirconusBrokerID string `json:"circonus_broker_id,omitempty" mapstructure:"circonus_broker_id"`

	// CirconusBrokerSelectTag is a special tag which will be used to select a broker when
	// a Broker ID is not provided. The best use of this is to as a hint for which broker
	// should be used based on *where* this particular instance is running.
	// (e.g. a specific geo location or datacenter, dc:sfo)
	// Default: none
	//
	// hcl: telemetry { circonus_broker_select_tag = string }
	CirconusBrokerSelectTag string `json:"circonus_broker_select_tag,omitempty" mapstructure:"circonus_broker_select_tag"`

	// CirconusCheckDisplayName is the name for the check which will be displayed in the Circonus UI.
	// Default: value of CirconusCheckInstanceID
	//
	// hcl: telemetry { circonus_check_display_name = string }
	CirconusCheckDisplayName string `json:"circonus_check_display_name,omitempty" mapstructure:"circonus_check_display_name"`

	// CirconusCheckForceMetricActivation will force enabling metrics, as they are encountered,
	// if the metric already exists and is NOT active. If check management is enabled, the default
	// behavior is to add new metrics as they are encountered. If the metric already exists in the
	// check, it will *NOT* be activated. This setting overrides that behavior.
	// Default: "false"
	//
	// hcl: telemetry { circonus_check_metrics_activation = (true|false)
	CirconusCheckForceMetricActivation string `json:"circonus_check_force_metric_activation,omitempty" mapstructure:"circonus_check_force_metric_activation"`

	// CirconusCheckID is the check id (not check bundle id) from a previously created
	// HTTPTRAP check. The numeric portion of the check._cid field.
	// Default: none
	//
	// hcl: telemetry { circonus_check_id = string }
	CirconusCheckID string `json:"circonus_check_id,omitempty" mapstructure:"circonus_check_id"`

	// CirconusCheckInstanceID serves to uniquely identify the metrics coming from this "instance".
	// It can be used to maintain metric continuity with transient or ephemeral instances as
	// they move around within an infrastructure.
	// Default: hostname:app
	//
	// hcl: telemetry { circonus_check_instance_id = string }
	CirconusCheckInstanceID string `json:"circonus_check_instance_id,omitempty" mapstructure:"circonus_check_instance_id"`

	// CirconusCheckSearchTag is a special tag which, when coupled with the instance id, helps to
	// narrow down the search results when neither a Submission URL or Check ID is provided.
	// Default: service:app (e.g. service:consul)
	//
	// hcl: telemetry { circonus_check_search_tag = string }
	CirconusCheckSearchTag string `json:"circonus_check_search_tag,omitempty" mapstructure:"circonus_check_search_tag"`

	// CirconusCheckSearchTag is a special tag which, when coupled with the instance id, helps to
	// narrow down the search results when neither a Submission URL or Check ID is provided.
	// Default: service:app (e.g. service:consul)
	//
	// hcl: telemetry { circonus_check_tags = string }
	CirconusCheckTags string `json:"circonus_check_tags,omitempty" mapstructure:"circonus_check_tags"`

	// CirconusSubmissionInterval is the interval at which metrics are submitted to Circonus.
	// Default: 10s
	//
	// hcl: telemetry { circonus_submission_interval = "duration" }
	CirconusSubmissionInterval string `json:"circonus_submission_interval,omitempty" mapstructure:"circonus_submission_interval"`

	// CirconusCheckSubmissionURL is the check.config.submission_url field from a
	// previously created HTTPTRAP check.
	// Default: none
	//
	// hcl: telemetry { circonus_submission_url = string }
	CirconusSubmissionURL string `json:"circonus_submission_url,omitempty" mapstructure:"circonus_submission_url"`

	// DisableHostname will disable hostname prefixing for all metrics.
	//
	// hcl: telemetry { disable_hostname = (true|false)
	DisableHostname bool `json:"disable_hostname,omitempty" mapstructure:"disable_hostname"`

	// DogStatsdAddr is the address of a dogstatsd instance. If provided,
	// metrics will be sent to that instance
	//
	// hcl: telemetry { dogstatsd_addr = string }
	DogstatsdAddr string `json:"dogstatsd_addr,omitempty" mapstructure:"dogstatsd_addr"`

	// DogStatsdTags are the global tags that should be sent with each packet to dogstatsd
	// It is a list of strings, where each string looks like "my_tag_name:my_tag_value"
	//
	// hcl: telemetry { dogstatsd_tags = []string }
	DogstatsdTags []string `json:"dogstatsd_tags,omitempty" mapstructure:"dogstatsd_tags"`

	// PrometheusRetentionTime is the retention time for prometheus metrics if greater than 0.
	// A value of 0 disable Prometheus support. Regarding Prometheus, it is considered a good
	// practice to put large values here (such as a few days), and at least the interval between
	// prometheus requests.
	//
	// hcl: telemetry { prometheus_retention_time = "duration" }
	PrometheusRetentionTime time.Duration `json:"prometheus_retention_time,omitempty" mapstructure:"prometheus_retention_time"`

	// FilterDefault is the default for whether to allow a metric that's not
	// covered by the filter.
	//
	// hcl: telemetry { filter_default = (true|false) }
	FilterDefault bool `json:"filter_default,omitempty" mapstructure:"filter_default"`

	// AllowedPrefixes is a list of filter rules to apply for allowing metrics
	// by prefix. Use the 'prefix_filter' option and prefix rules with '+' to be
	// included.
	//
	// hcl: telemetry { prefix_filter = []string{"+<expr>", "+<expr>", ...} }
	AllowedPrefixes []string `json:"allowed_prefixes,omitempty" mapstructure:"allowed_prefixes"`

	// BlockedPrefixes is a list of filter rules to apply for blocking metrics
	// by prefix. Use the 'prefix_filter' option and prefix rules with '-' to be
	// excluded.
	//
	// hcl: telemetry { prefix_filter = []string{"-<expr>", "-<expr>", ...} }
	BlockedPrefixes []string `json:"blocked_prefixes,omitempty" mapstructure:"blocked_prefixes"`

	// MetricsPrefix is the prefix used to write stats values to.
	// Default: "consul."
	//
	// hcl: telemetry { metrics_prefix = string }
	MetricsPrefix string `json:"metrics_prefix,omitempty" mapstructure:"metrics_prefix"`

	// StatsdAddr is the address of a statsd instance. If provided,
	// metrics will be sent to that instance.
	//
	// hcl: telemetry { statsd_address = string }
	StatsdAddr string `json:"statsd_address,omitempty" mapstructure:"statsd_address"`

	// StatsiteAddr is the address of a statsite instance. If provided,
	// metrics will be streamed to that instance.
	//
	// hcl: telemetry { statsite_address = string }
	StatsiteAddr string `json:"statsite_address,omitempty" mapstructure:"statsite_address"`
}

TelemetryConfig is embedded in config.RuntimeConfig and holds the configuration variables for go-metrics. It is a separate struct to allow it to be exported as JSON and passed to other process like managed connect proxies so they can inherit the agent's telemetry config.

It is in lib package rather than agent/config because we need to use it in the shared InitTelemetry functions below, but we can't import agent/config due to a dependency cycle.

func (*TelemetryConfig) MergeDefaults added in v1.2.0

func (c *TelemetryConfig) MergeDefaults(defaults *TelemetryConfig)

MergeDefaults copies any non-zero field from defaults into the current config.

type UUIDCheckFunc added in v1.4.0

type UUIDCheckFunc func(string) (bool, error)

UUIDCheckFunc should determine whether the given UUID is actually unique and allowed to be used

Directories

Path Synopsis
Package freeport provides a helper for allocating free ports across multiple processes on the same machine.
Package freeport provides a helper for allocating free ports across multiple processes on the same machine.
Package semaphore implements a simple semaphore that is based on golang.org/x/sync/semaphore but doesn't support weights.
Package semaphore implements a simple semaphore that is based on golang.org/x/sync/semaphore but doesn't support weights.

Jump to

Keyboard shortcuts

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