mirror of
https://github.com/prometheus/prometheus.git
synced 2025-09-21 05:41:01 +02:00
148 lines
4.3 KiB
Go
148 lines
4.3 KiB
Go
package storage
|
|
|
|
import (
|
|
"github.com/prometheus/prometheus/model/exemplar"
|
|
"github.com/prometheus/prometheus/model/histogram"
|
|
"github.com/prometheus/prometheus/model/labels"
|
|
"github.com/prometheus/prometheus/model/metadata"
|
|
)
|
|
|
|
// AsAppender exposes new combined appender implementation as old appender.
|
|
//
|
|
// Because old appender interface was not combined, you need extra appender pieces
|
|
// to handle old behaviour of disconnected exemplars, metadata and sample cts.
|
|
func AsAppender(appender CombinedAppender, exemplar ExemplarAppender, metadata MetadataUpdater, ct CreatedTimestampAppender) Appender {
|
|
return &asAppender{app: appender, exemplar: exemplar, metadata: metadata, ct: ct}
|
|
}
|
|
|
|
type asAppender struct {
|
|
opts CombinedAppendOptions
|
|
app CombinedAppender
|
|
|
|
exemplar ExemplarAppender
|
|
metadata MetadataUpdater
|
|
ct CreatedTimestampAppender
|
|
}
|
|
|
|
func (a *asAppender) Append(ref SeriesRef, l labels.Labels, t int64, v float64) (SeriesRef, error) {
|
|
return a.app.AppendSample(ref, l, metadata.Metadata{}, 0, t, v, nil)
|
|
}
|
|
|
|
func (a *asAppender) AppendHistogram(ref SeriesRef, l labels.Labels, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (SeriesRef, error) {
|
|
return a.app.AppendHistogram(ref, l, metadata.Metadata{}, 0, t, h, fh, nil)
|
|
}
|
|
|
|
func (a *asAppender) Commit() error {
|
|
return a.app.Commit()
|
|
}
|
|
|
|
func (a *asAppender) Rollback() error {
|
|
return a.app.Rollback()
|
|
}
|
|
|
|
func (a *asAppender) SetOptions(opts *AppendOptions) {
|
|
if opts == nil {
|
|
return
|
|
}
|
|
|
|
a.opts.DiscardOutOfOrder = opts.DiscardOutOfOrder
|
|
a.app.SetOptions(&a.opts)
|
|
}
|
|
|
|
func (a *asAppender) AppendCTZeroSample(ref SeriesRef, l labels.Labels, t int64, ct int64) (SeriesRef, error) {
|
|
return a.ct.AppendCTZeroSample(ref, l, t, ct)
|
|
}
|
|
|
|
func (a *asAppender) AppendHistogramCTZeroSample(ref SeriesRef, l labels.Labels, t int64, ct int64, h *histogram.Histogram, fh *histogram.FloatHistogram) (SeriesRef, error) {
|
|
a.opts.AppendCTAsZero = true
|
|
a.app.SetOptions(&a.opts)
|
|
return a.app.AppendHistogram(ref, l, metadata.Metadata{}, ct, t, h, fh, nil)
|
|
}
|
|
|
|
func (a *asAppender) AppendExemplar(ref SeriesRef, l labels.Labels, e exemplar.Exemplar) (SeriesRef, error) {
|
|
return a.exemplar.AppendExemplar(ref, l, e)
|
|
}
|
|
|
|
func (a *asAppender) UpdateMetadata(ref SeriesRef, l labels.Labels, m metadata.Metadata) (SeriesRef, error) {
|
|
return a.metadata.UpdateMetadata(ref, l, m)
|
|
}
|
|
|
|
// AsCombinedAppender exposes old appender implementation as a new combined appender.
|
|
func AsCombinedAppender(appender Appender) CombinedAppender {
|
|
return &asCombinedAppender{app: appender}
|
|
}
|
|
|
|
type asCombinedAppender struct {
|
|
app Appender
|
|
opts CombinedAppendOptions
|
|
}
|
|
|
|
func (a *asCombinedAppender) AppendSample(ref SeriesRef, ls labels.Labels, meta metadata.Metadata, ct, t int64, v float64, es []exemplar.Exemplar) (_ SeriesRef, err error) {
|
|
if ct != 0 && a.opts.AppendCTAsZero {
|
|
ref, err = a.app.AppendCTZeroSample(ref, ls, t, ct)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
}
|
|
ref, err = a.app.Append(ref, ls, t, v)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
|
|
// Check feature flag?
|
|
for _, e := range es {
|
|
ref, err = a.app.AppendExemplar(ref, ls, e)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
}
|
|
// Check feature flag?
|
|
if !meta.IsEmpty() {
|
|
ref, err = a.app.UpdateMetadata(ref, ls, meta)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
}
|
|
return ref, err
|
|
}
|
|
|
|
func (a *asCombinedAppender) AppendHistogram(ref SeriesRef, ls labels.Labels, meta metadata.Metadata, ct, t int64, h *histogram.Histogram, fh *histogram.FloatHistogram, es []exemplar.Exemplar) (_ SeriesRef, err error) {
|
|
if ct != 0 && a.opts.AppendCTAsZero {
|
|
ref, err = a.app.AppendHistogramCTZeroSample(ref, ls, t, ct, h, fh)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
}
|
|
ref, err = a.app.AppendHistogram(ref, ls, t, h, fh)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
// Check feature flag?
|
|
for _, e := range es {
|
|
ref, err = a.app.AppendExemplar(ref, ls, e)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
}
|
|
// Check feature flag?
|
|
if !meta.IsEmpty() {
|
|
ref, err = a.app.UpdateMetadata(ref, ls, meta)
|
|
if err != nil {
|
|
return ref, err
|
|
}
|
|
}
|
|
return ref, err
|
|
}
|
|
|
|
func (a *asCombinedAppender) Commit() error { return a.app.Commit() }
|
|
|
|
func (a *asCombinedAppender) Rollback() error { return a.app.Rollback() }
|
|
|
|
func (a *asCombinedAppender) SetOptions(opts *CombinedAppendOptions) {
|
|
if opts == nil {
|
|
return
|
|
}
|
|
a.opts = *opts
|
|
a.app.SetOptions(&AppendOptions{DiscardOutOfOrder: opts.DiscardOutOfOrder})
|
|
}
|