// Copyright 2014 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package storage import ( "errors" "github.com/prometheus/prometheus/pkg/labels" ) var ( ErrOutOfOrderSample = errors.New("out of order sample") ErrDuplicateSampleForTimestamp = errors.New("duplicate sample for timestamp") ) // Storage ingests and manages samples, along with various indexes. All methods // are goroutine-safe. Storage implements storage.SampleAppender. type Storage interface { // Querier returns a new Querier on the storage. Querier(mint, maxt int64) (Querier, error) // Appender returns a new appender against the storage. Appender() (Appender, error) // Close closes the storage and all its underlying resources. Close() error } // Querier provides reading access to time series data. type Querier interface { // Select returns a set of series that matches the given label matchers. Select(...*labels.Matcher) SeriesSet // LabelValues returns all potential values for a label name. LabelValues(name string) ([]string, error) // Close releases the resources of the Querier. Close() error } // Appender provides batched appends against a storage. type Appender interface { SetSeries(labels.Labels) (uint64, error) // Add adds a sample pair for the referenced series. Add(ref uint64, t int64, v float64) error // Commit submits the collected samples and purges the batch. Commit() error Rollback() error } // SeriesSet contains a set of series. type SeriesSet interface { Next() bool At() Series Err() error } // Series represents a single time series. type Series interface { // Labels returns the complete set of labels identifying the series. Labels() labels.Labels // Iterator returns a new iterator of the data of the series. Iterator() SeriesIterator } // SeriesIterator iterates over the data of a time series. type SeriesIterator interface { // Seek advances the iterator forward to the value at or after // the given timestamp. Seek(t int64) bool // At returns the current timestamp/value pair. At() (t int64, v float64) // Next advances the iterator by one. Next() bool // Err returns the current error. Err() error }