opentsdb

package
v0.0.0-...-84fef90 Latest Latest
Warning

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

Go to latest
Published: Nov 23, 2020 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client allows sending batches of Prometheus samples to OpenTSDB.

func NewClient

func NewClient(logger log.Logger, url string, timeout time.Duration) *Client

NewClient creates a new Client.

func (Client) Name

func (c Client) Name() string

Name identifies the client as an OpenTSDB client.

func (*Client) Write

func (c *Client) Write(samples model.Samples) error

Write sends a batch of samples to OpenTSDB via its HTTP API.

type StoreSamplesRequest

type StoreSamplesRequest struct {
	Metric    TagValue            `json:"metric"`
	Timestamp int64               `json:"timestamp"`
	Value     float64             `json:"value"`
	Tags      map[string]TagValue `json:"tags"`
}

StoreSamplesRequest is used for building a JSON request for storing samples via the OpenTSDB.

type TagValue

type TagValue model.LabelValue

TagValue is a model.LabelValue that implements json.Marshaler and json.Unmarshaler. These implementations avoid characters illegal in OpenTSDB. See the MarshalJSON for details. TagValue is used for the values of OpenTSDB tags as well as for OpenTSDB metric names.

func (TagValue) MarshalJSON

func (tv TagValue) MarshalJSON() ([]byte, error)

MarshalJSON marshals this TagValue into JSON that only contains runes allowed in OpenTSDB. It implements json.Marshaler. The runes allowed in OpenTSDB are all single-byte. This function encodes the arbitrary byte sequence found in this TagValue in the following way:

- The string that underlies TagValue is scanned byte by byte.

- If a byte represents a legal OpenTSDB rune with the exception of '_', that byte is directly copied to the resulting JSON byte slice.

- If '_' is encountered, it is replaced by '__'.

- If ':' is encountered, it is replaced by '_.'.

- All other bytes are replaced by '_' followed by two bytes containing the uppercase ASCII representation of their hexadecimal value.

This encoding allows to save arbitrary Go strings in OpenTSDB. That's required because Prometheus label values can contain anything, and even Prometheus metric names may (and often do) contain ':' (which is disallowed in OpenTSDB strings). The encoding uses '_' as an escape character and renders a ':' more or less recognizable as '_.'

Examples:

"foo-bar-42" -> "foo-bar-42"

"foo_bar_42" -> "foo__bar__42"

"http://example.org:8080" -> "http_.//example.org_.8080"

"Björn's email: bjoern@soundcloud.com" -> "Bj_C3_B6rn_27s_20email_._20bjoern_40soundcloud.com"

"日" -> "_E6_97_A5"

func (*TagValue) UnmarshalJSON

func (tv *TagValue) UnmarshalJSON(json []byte) error

UnmarshalJSON unmarshals JSON strings coming from OpenTSDB into Go strings by applying the inverse of what is described for the MarshalJSON method.

Jump to

Keyboard shortcuts

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