| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | // 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 ( | 
					
						
							| 
									
										
										
										
											2017-10-05 03:04:15 +08:00
										 |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 	"errors" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/prometheus/prometheus/pkg/labels" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-04 17:24:13 +08:00
										 |  |  | // The errors exposed.
 | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | var ( | 
					
						
							| 
									
										
										
										
											2017-01-16 00:33:07 +08:00
										 |  |  | 	ErrNotFound                    = errors.New("not found") | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 	ErrOutOfOrderSample            = errors.New("out of order sample") | 
					
						
							|  |  |  | 	ErrDuplicateSampleForTimestamp = errors.New("duplicate sample for timestamp") | 
					
						
							| 
									
										
										
										
											2017-07-04 17:24:13 +08:00
										 |  |  | 	ErrOutOfBounds                 = errors.New("out of bounds") | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Storage ingests and manages samples, along with various indexes. All methods
 | 
					
						
							|  |  |  | // are goroutine-safe. Storage implements storage.SampleAppender.
 | 
					
						
							|  |  |  | type Storage interface { | 
					
						
							| 
									
										
										
										
											2017-11-12 08:27:45 +08:00
										 |  |  | 	Queryable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-18 19:08:14 +08:00
										 |  |  | 	// StartTime returns the oldest timestamp stored in the storage.
 | 
					
						
							|  |  |  | 	StartTime() (int64, error) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 	// Appender returns a new appender against the storage.
 | 
					
						
							|  |  |  | 	Appender() (Appender, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Close closes the storage and all its underlying resources.
 | 
					
						
							|  |  |  | 	Close() error | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-12 08:27:45 +08:00
										 |  |  | // A Queryable handles queries against a storage.
 | 
					
						
							|  |  |  | type Queryable interface { | 
					
						
							|  |  |  | 	// Querier returns a new Querier on the storage.
 | 
					
						
							|  |  |  | 	Querier(ctx context.Context, mint, maxt int64) (Querier, error) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | // Querier provides reading access to time series data.
 | 
					
						
							|  |  |  | type Querier interface { | 
					
						
							|  |  |  | 	// Select returns a set of series that matches the given label matchers.
 | 
					
						
							| 
									
										
										
										
											2019-01-02 19:10:13 +08:00
										 |  |  | 	Select(*SelectParams, ...*labels.Matcher) (SeriesSet, Warnings, error) | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// LabelValues returns all potential values for a label name.
 | 
					
						
							|  |  |  | 	LabelValues(name string) ([]string, error) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-19 18:21:14 +08:00
										 |  |  | 	// LabelNames returns all the unique label names present in the block in sorted order.
 | 
					
						
							|  |  |  | 	LabelNames() ([]string, error) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 	// Close releases the resources of the Querier.
 | 
					
						
							|  |  |  | 	Close() error | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-10 00:44:23 +08:00
										 |  |  | // SelectParams specifies parameters passed to data selections.
 | 
					
						
							|  |  |  | type SelectParams struct { | 
					
						
							| 
									
										
										
										
											2018-07-18 11:58:00 +08:00
										 |  |  | 	Start int64 // Start time in milliseconds for this select.
 | 
					
						
							|  |  |  | 	End   int64 // End time in milliseconds for this select.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-10 00:44:23 +08:00
										 |  |  | 	Step int64  // Query step size in milliseconds.
 | 
					
						
							|  |  |  | 	Func string // String representation of surrounding function or aggregation.
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-12 08:27:45 +08:00
										 |  |  | // QueryableFunc is an adapter to allow the use of ordinary functions as
 | 
					
						
							|  |  |  | // Queryables. It follows the idea of http.HandlerFunc.
 | 
					
						
							|  |  |  | type QueryableFunc func(ctx context.Context, mint, maxt int64) (Querier, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Querier calls f() with the given parameters.
 | 
					
						
							|  |  |  | func (f QueryableFunc) Querier(ctx context.Context, mint, maxt int64) (Querier, error) { | 
					
						
							|  |  |  | 	return f(ctx, mint, maxt) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | // Appender provides batched appends against a storage.
 | 
					
						
							|  |  |  | type Appender interface { | 
					
						
							| 
									
										
										
										
											2017-09-07 20:14:41 +08:00
										 |  |  | 	Add(l labels.Labels, t int64, v float64) (uint64, error) | 
					
						
							| 
									
										
										
										
											2017-01-13 21:48:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-07 20:14:41 +08:00
										 |  |  | 	AddFast(l labels.Labels, ref uint64, t int64, v float64) error | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Commit submits the collected samples and purges the batch.
 | 
					
						
							|  |  |  | 	Commit() error | 
					
						
							| 
									
										
										
										
											2017-01-13 21:48:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Rollback() error | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SeriesSet contains a set of series.
 | 
					
						
							|  |  |  | type SeriesSet interface { | 
					
						
							|  |  |  | 	Next() bool | 
					
						
							| 
									
										
										
										
											2017-01-02 20:33:37 +08:00
										 |  |  | 	At() Series | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 	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 | 
					
						
							| 
									
										
										
										
											2017-01-02 20:33:37 +08:00
										 |  |  | 	// At returns the current timestamp/value pair.
 | 
					
						
							|  |  |  | 	At() (t int64, v float64) | 
					
						
							| 
									
										
										
										
											2016-12-25 08:40:28 +08:00
										 |  |  | 	// Next advances the iterator by one.
 | 
					
						
							|  |  |  | 	Next() bool | 
					
						
							|  |  |  | 	// Err returns the current error.
 | 
					
						
							|  |  |  | 	Err() error | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-11-30 22:27:12 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | type Warnings []error |