mirror of
https://github.com/prometheus/prometheus.git
synced 2025-07-03 11:03:25 +00:00
Introduce copy-on-write for metrics in AST.
This depends on changes in: https://github.com/prometheus/client_golang/tree/cow-metrics. Change-Id: I80b94833a60ddf954c7cd92fd2cfbebd8dd46142
This commit is contained in:
parent
f2052c9c0d
commit
c9618d11e8
12 changed files with 206 additions and 231 deletions
|
@ -80,7 +80,7 @@ type Alert struct {
|
|||
}
|
||||
|
||||
// sample returns a Sample suitable for recording the alert.
|
||||
func (a Alert) sample(timestamp clientmodel.Timestamp, value clientmodel.SampleValue) *clientmodel.Sample {
|
||||
func (a Alert) sample(timestamp clientmodel.Timestamp, value clientmodel.SampleValue) *ast.Sample {
|
||||
recordedMetric := clientmodel.Metric{}
|
||||
for label, value := range a.Labels {
|
||||
recordedMetric[label] = value
|
||||
|
@ -90,8 +90,11 @@ func (a Alert) sample(timestamp clientmodel.Timestamp, value clientmodel.SampleV
|
|||
recordedMetric[AlertNameLabel] = clientmodel.LabelValue(a.Name)
|
||||
recordedMetric[AlertStateLabel] = clientmodel.LabelValue(a.State.String())
|
||||
|
||||
return &clientmodel.Sample{
|
||||
Metric: recordedMetric,
|
||||
return &ast.Sample{
|
||||
Metric: clientmodel.COWMetric{
|
||||
Metric: recordedMetric,
|
||||
Copied: true,
|
||||
},
|
||||
Value: value,
|
||||
Timestamp: timestamp,
|
||||
}
|
||||
|
@ -145,18 +148,17 @@ func (rule *AlertingRule) Eval(timestamp clientmodel.Timestamp, storage local.St
|
|||
// or update the expression value for existing elements.
|
||||
resultFingerprints := utility.Set{}
|
||||
for _, sample := range exprResult {
|
||||
fp := new(clientmodel.Fingerprint)
|
||||
fp.LoadFromMetric(sample.Metric)
|
||||
resultFingerprints.Add(*fp)
|
||||
fp := sample.Metric.Metric.Fingerprint()
|
||||
resultFingerprints.Add(fp)
|
||||
|
||||
if alert, ok := rule.activeAlerts[*fp]; !ok {
|
||||
if alert, ok := rule.activeAlerts[fp]; !ok {
|
||||
labels := clientmodel.LabelSet{}
|
||||
labels.MergeFromMetric(sample.Metric)
|
||||
labels.MergeFromMetric(sample.Metric.Metric)
|
||||
labels = labels.Merge(rule.Labels)
|
||||
if _, ok := labels[clientmodel.MetricNameLabel]; ok {
|
||||
delete(labels, clientmodel.MetricNameLabel)
|
||||
}
|
||||
rule.activeAlerts[*fp] = &Alert{
|
||||
rule.activeAlerts[fp] = &Alert{
|
||||
Name: rule.name,
|
||||
Labels: labels,
|
||||
State: Pending,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue