mirror of https://github.com/grafana/loki
Copy `cortex/pkg/prom1` package dependency into Loki (#5196)
* Fork cortex `prom1`. * Use forked `prom1` instead of Cortex one.pull/5110/head
parent
c9d49cea6f
commit
3f78d876ff
@ -0,0 +1,66 @@ |
||||
// This file was taken from Prometheus (https://github.com/prometheus/prometheus).
|
||||
// The original license header is included below:
|
||||
//
|
||||
// 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 metric |
||||
|
||||
import "github.com/prometheus/common/model" |
||||
|
||||
// Metric wraps a model.Metric and copies it upon modification if Copied is false.
|
||||
type Metric struct { |
||||
Copied bool |
||||
Metric model.Metric |
||||
} |
||||
|
||||
// Set sets a label name in the wrapped Metric to a given value and copies the
|
||||
// Metric initially, if it is not already a copy.
|
||||
func (m *Metric) Set(ln model.LabelName, lv model.LabelValue) { |
||||
m.Copy() |
||||
m.Metric[ln] = lv |
||||
} |
||||
|
||||
// Del deletes a given label name from the wrapped Metric and copies the
|
||||
// Metric initially, if it is not already a copy.
|
||||
func (m *Metric) Del(ln model.LabelName) { |
||||
m.Copy() |
||||
delete(m.Metric, ln) |
||||
} |
||||
|
||||
// Get the value for the given label name. An empty value is returned
|
||||
// if the label does not exist in the metric.
|
||||
func (m *Metric) Get(ln model.LabelName) model.LabelValue { |
||||
return m.Metric[ln] |
||||
} |
||||
|
||||
// Gets behaves as Get but the returned boolean is false iff the label
|
||||
// does not exist.
|
||||
func (m *Metric) Gets(ln model.LabelName) (model.LabelValue, bool) { |
||||
lv, ok := m.Metric[ln] |
||||
return lv, ok |
||||
} |
||||
|
||||
// Copy the underlying Metric if it is not already a copy.
|
||||
func (m *Metric) Copy() *Metric { |
||||
if !m.Copied { |
||||
m.Metric = m.Metric.Clone() |
||||
m.Copied = true |
||||
} |
||||
return m |
||||
} |
||||
|
||||
// String implements fmt.Stringer.
|
||||
func (m Metric) String() string { |
||||
return m.Metric.String() |
||||
} |
||||
@ -0,0 +1,73 @@ |
||||
// This file was taken from Prometheus (https://github.com/prometheus/prometheus).
|
||||
// The original license header is included below:
|
||||
//
|
||||
// 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 metric |
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
"github.com/prometheus/common/model" |
||||
) |
||||
|
||||
func TestMetric(t *testing.T) { |
||||
testMetric := model.Metric{ |
||||
"to_delete": "test1", |
||||
"to_change": "test2", |
||||
} |
||||
|
||||
scenarios := []struct { |
||||
fn func(*Metric) |
||||
out model.Metric |
||||
}{ |
||||
{ |
||||
fn: func(cm *Metric) { |
||||
cm.Del("to_delete") |
||||
}, |
||||
out: model.Metric{ |
||||
"to_change": "test2", |
||||
}, |
||||
}, |
||||
{ |
||||
fn: func(cm *Metric) { |
||||
cm.Set("to_change", "changed") |
||||
}, |
||||
out: model.Metric{ |
||||
"to_delete": "test1", |
||||
"to_change": "changed", |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
for i, s := range scenarios { |
||||
orig := testMetric.Clone() |
||||
cm := &Metric{ |
||||
Metric: orig, |
||||
Copied: false, |
||||
} |
||||
|
||||
s.fn(cm) |
||||
|
||||
// Test that the original metric was not modified.
|
||||
if !orig.Equal(testMetric) { |
||||
t.Fatalf("%d. original metric changed; expected %v, got %v", i, testMetric, orig) |
||||
} |
||||
|
||||
// Test that the new metric has the right changes.
|
||||
if !cm.Metric.Equal(s.out) { |
||||
t.Fatalf("%d. copied metric doesn't contain expected changes; expected %v, got %v", i, s.out, cm.Metric) |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,25 @@ |
||||
// This file was taken from Prometheus (https://github.com/prometheus/prometheus).
|
||||
// The original license header is included below:
|
||||
//
|
||||
// Copyright 2013 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 metric |
||||
|
||||
import "github.com/prometheus/common/model" |
||||
|
||||
// Interval describes the inclusive interval between two Timestamps.
|
||||
type Interval struct { |
||||
OldestInclusive model.Time |
||||
NewestInclusive model.Time |
||||
} |
||||
Loading…
Reference in new issue