github.com/sequix/cortex@v1.1.6/pkg/ruler/compat.go (about)

     1  package ruler
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/prometheus/common/model"
     7  	"github.com/prometheus/prometheus/pkg/labels"
     8  	"github.com/prometheus/prometheus/storage"
     9  
    10  	"github.com/sequix/cortex/pkg/ingester/client"
    11  )
    12  
    13  // Pusher is an ingester server that accepts pushes.
    14  type Pusher interface {
    15  	Push(context.Context, *client.WriteRequest) (*client.WriteResponse, error)
    16  }
    17  
    18  // appendableAppender adapts a distributor.Distributor to both a ruler.Appendable
    19  // and a storage.Appender.
    20  //
    21  // Distributors need a context and storage.Appender doesn't allow for
    22  // one. See
    23  // https://github.com/prometheus/prometheus/pull/2000#discussion_r79108319 for
    24  // reasons why.
    25  type appendableAppender struct {
    26  	pusher  Pusher
    27  	ctx     context.Context
    28  	samples []model.Sample
    29  }
    30  
    31  func (a *appendableAppender) Appender() (storage.Appender, error) {
    32  	return a, nil
    33  }
    34  
    35  func (a *appendableAppender) Add(l labels.Labels, t int64, v float64) (uint64, error) {
    36  	m := make(model.Metric, len(l))
    37  	for _, lbl := range l {
    38  		m[model.LabelName(lbl.Name)] = model.LabelValue(lbl.Value)
    39  	}
    40  	a.samples = append(a.samples, model.Sample{
    41  		Metric:    m,
    42  		Timestamp: model.Time(t),
    43  		Value:     model.SampleValue(v),
    44  	})
    45  	return 0, nil
    46  }
    47  
    48  func (a *appendableAppender) AddFast(l labels.Labels, ref uint64, t int64, v float64) error {
    49  	_, err := a.Add(l, t, v)
    50  	return err
    51  }
    52  
    53  func (a *appendableAppender) Commit() error {
    54  	_, err := a.pusher.Push(a.ctx, client.ToWriteRequest(a.samples, client.RULE))
    55  	a.samples = nil
    56  	return err
    57  }
    58  
    59  func (a *appendableAppender) Rollback() error {
    60  	a.samples = nil
    61  	return nil
    62  }