storage

package
v0.0.0-...-c8f7835 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2015 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DiskMetricStore

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

DiskMetricStore is an implementation of MetricStore that persists metrics to disk.

func NewDiskMetricStore

func NewDiskMetricStore(
	persistenceFile string,
	persistenceInterval time.Duration,
) *DiskMetricStore

NewDiskMetricStore returns a DiskMetricStore ready to use. To cleanly shut it down and free resources, the Shutdown() method has to be called. If persistenceFile is the empty string, no persisting to disk will happen. Otherwise, a file of that name is used for persisting metrics to disk. If the file already exists, metrics are read from it as part of the start-up. Persisting is happening upon shutdown and after every write action, but the latter will only happen persistenceDuration after the previous persisting.

func (*DiskMetricStore) GetMetricFamilies

func (dms *DiskMetricStore) GetMetricFamilies() []*dto.MetricFamily

GetMetricFamilies implements the MetricStore interface.

func (*DiskMetricStore) GetMetricFamiliesMap

func (dms *DiskMetricStore) GetMetricFamiliesMap() JobToInstanceMap

GetMetricFamiliesMap implements the MetricStore interface.

func (*DiskMetricStore) Shutdown

func (dms *DiskMetricStore) Shutdown() error

Shutdown implements the MetricStore interface.

func (*DiskMetricStore) SubmitWriteRequest

func (dms *DiskMetricStore) SubmitWriteRequest(req WriteRequest)

SubmitWriteRequest implements the MetricStore interface.

type InstanceToNameMap

type InstanceToNameMap map[string]NameToTimestampedMetricFamilyMap

InstanceToNameMap is the second level of the metric store, keyed by instance name.

type JobToInstanceMap

type JobToInstanceMap map[string]InstanceToNameMap

JobToInstanceMap is the first level of the metric store, keyed by job name.

type MetricStore

type MetricStore interface {
	// SubmitWriteRequest submits a WriteRequest for processing. There is no
	// guarantee when a request will be processed, but it is guaranteed that
	// the requests are processed in the order of submission.
	SubmitWriteRequest(req WriteRequest)
	// GetMetricFamilies returns all the currently saved MetricFamilies. The
	// returned MetricFamilies are guaranteed to not be modified by the
	// MetricStore anymore. However, they may still be read somewhere else,
	// so the caller is not allowed to modify the returned MetricFamilies.
	// If different jobs and instances have saved MetricFamilies of the same
	// name, they are all merged into one MetricFamily by concatenating the
	// contained Metrics. Inconsistent help strings or types are logged, and
	// one of the versions will "win". Inconsistent labels will go
	// undetected.
	GetMetricFamilies() []*dto.MetricFamily
	// GetMetricFamiliesMap returns a nested map (job -> instance ->
	// metric-name -> TimestampedMetricFamily). The MetricFamily pointed to
	// by each TimestampedMetricFamily is guaranteed to not be modified by
	// the MetricStore anymore. However, they may still be read somewhere
	// else, so the caller is not allowed to modify it. Otherwise, the
	// returned nested map is a deep copy of the internal state of the
	// MetricStore and completely owned by the caller.
	GetMetricFamiliesMap() JobToInstanceMap
	// Shutdown must only be called after the caller has made sure that
	// SubmitWriteRequests is not called anymore. (If it is called later,
	// the request might get submitted, but not processed anymore.) The
	// Shutdown method waits for the write request queue to empty, then it
	// persists the content of the MetricStore (if supported by the
	// implementation). Also, all internal goroutines are stopped. This
	// method blocks until all of that is complete. If an error is
	// encountered, it is returned (whereupon the MetricStorage is in an
	// undefinded state). If nil is returned, the MetricStore cannot be
	// "restarted" again, but it can still be used for read operations.
	Shutdown() error
}

MetricStore is the interface to the storage layer for metrics. All its methods must be safe to be called concurrently.

type NameToTimestampedMetricFamilyMap

type NameToTimestampedMetricFamilyMap map[string]TimestampedMetricFamily

NameToTimestampedMetricFamilyMap is the third level of the metric store, keyed by metric name.

type TimestampedMetricFamily

type TimestampedMetricFamily struct {
	Timestamp    time.Time
	MetricFamily *dto.MetricFamily
}

TimestampedMetricFamily adds a timestamp to a MetricFamily-DTO.

type WriteRequest

type WriteRequest struct {
	Job, Instance  string
	Timestamp      time.Time
	MetricFamilies map[string]*dto.MetricFamily
}

WriteRequest is a request to change the MetricStore, i.e. to process it, a write lock has to be acquired. If MetricFamilies is nil, this is a request to delete metrics that share the given Job and (if not empty) Instance labels. Otherwise, this is a request to update the MetricStore with the MetricFamilies. The key in MetricFamilies is the name of the mapped metric family. All metrics in MetricFamilies MUST have already set job and instance labels that are consistent with the Job and Instance fields. The Timestamp field marks the time the request was received from the network. It is not related to the timestamp_ms field in the Metric proto message.

Jump to

Keyboard shortcuts

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