81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
| // Copyright 2017 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 remote
 | |
| 
 | |
| import (
 | |
| 	"github.com/prometheus/client_golang/prometheus"
 | |
| 	"github.com/prometheus/client_golang/prometheus/promauto"
 | |
| 	"github.com/prometheus/prometheus/pkg/labels"
 | |
| 	"github.com/prometheus/prometheus/storage"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	samplesIn = promauto.NewCounter(prometheus.CounterOpts{
 | |
| 		Namespace: namespace,
 | |
| 		Subsystem: subsystem,
 | |
| 		Name:      "samples_in_total",
 | |
| 		Help:      "Samples in to remote storage, compare to samples out for queue managers.",
 | |
| 	})
 | |
| 	highestTimestamp = maxGauge{
 | |
| 		Gauge: promauto.NewGauge(prometheus.GaugeOpts{
 | |
| 			Namespace: namespace,
 | |
| 			Subsystem: subsystem,
 | |
| 			Name:      "highest_timestamp_in_seconds",
 | |
| 			Help:      "Highest timestamp that has come into the remote storage via the Appender interface, in seconds since epoch.",
 | |
| 		}),
 | |
| 	}
 | |
| )
 | |
| 
 | |
| // Appender implements scrape.Appendable.
 | |
| func (s *Storage) Appender() (storage.Appender, error) {
 | |
| 	return ×tampTracker{
 | |
| 		storage: s,
 | |
| 	}, nil
 | |
| }
 | |
| 
 | |
| type timestampTracker struct {
 | |
| 	storage          *Storage
 | |
| 	samples          int64
 | |
| 	highestTimestamp int64
 | |
| }
 | |
| 
 | |
| // Add implements storage.Appender.
 | |
| func (t *timestampTracker) Add(_ labels.Labels, ts int64, v float64) (uint64, error) {
 | |
| 	t.samples++
 | |
| 	if ts > t.highestTimestamp {
 | |
| 		t.highestTimestamp = ts
 | |
| 	}
 | |
| 	return 0, nil
 | |
| }
 | |
| 
 | |
| // AddFast implements storage.Appender.
 | |
| func (t *timestampTracker) AddFast(l labels.Labels, _ uint64, ts int64, v float64) error {
 | |
| 	_, err := t.Add(l, ts, v)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| // Commit implements storage.Appender.
 | |
| func (t *timestampTracker) Commit() error {
 | |
| 	t.storage.samplesIn.incr(t.samples)
 | |
| 
 | |
| 	samplesIn.Add(float64(t.samples))
 | |
| 	highestTimestamp.Set(float64(t.highestTimestamp / 1000))
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // Rollback implements storage.Appender.
 | |
| func (*timestampTracker) Rollback() error {
 | |
| 	return nil
 | |
| }
 |