mirror of https://github.com/prometheus/prometheus
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
3.0 KiB
131 lines
3.0 KiB
// Copyright 2013 Prometheus Team |
|
// 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 model |
|
|
|
import ( |
|
"code.google.com/p/goprotobuf/proto" |
|
dto "github.com/prometheus/prometheus/model/generated" |
|
"sort" |
|
"time" |
|
) |
|
|
|
func SampleToMetricDTO(s *Sample) *dto.Metric { |
|
labelLength := len(s.Metric) |
|
labelNames := make([]string, 0, labelLength) |
|
|
|
for labelName := range s.Metric { |
|
labelNames = append(labelNames, string(labelName)) |
|
} |
|
|
|
sort.Strings(labelNames) |
|
|
|
labelSets := make([]*dto.LabelPair, 0, labelLength) |
|
|
|
for _, labelName := range labelNames { |
|
labelValue := s.Metric[LabelName(labelName)] |
|
labelPair := &dto.LabelPair{ |
|
Name: proto.String(string(labelName)), |
|
Value: proto.String(string(labelValue)), |
|
} |
|
|
|
labelSets = append(labelSets, labelPair) |
|
} |
|
|
|
return &dto.Metric{ |
|
LabelPair: labelSets, |
|
} |
|
} |
|
|
|
func MetricToDTO(m Metric) *dto.Metric { |
|
metricLength := len(m) |
|
labelNames := make([]string, 0, metricLength) |
|
|
|
for labelName := range m { |
|
labelNames = append(labelNames, string(labelName)) |
|
} |
|
|
|
sort.Strings(labelNames) |
|
|
|
labelSets := make([]*dto.LabelPair, 0, metricLength) |
|
|
|
for _, labelName := range labelNames { |
|
l := LabelName(labelName) |
|
labelValue := m[l] |
|
labelPair := &dto.LabelPair{ |
|
Name: proto.String(string(labelName)), |
|
Value: proto.String(string(labelValue)), |
|
} |
|
|
|
labelSets = append(labelSets, labelPair) |
|
} |
|
|
|
return &dto.Metric{ |
|
LabelPair: labelSets, |
|
} |
|
} |
|
|
|
func LabelSetToDTOs(s *LabelSet) []*dto.LabelPair { |
|
metricLength := len(*s) |
|
labelNames := make([]string, 0, metricLength) |
|
|
|
for labelName := range *s { |
|
labelNames = append(labelNames, string(labelName)) |
|
} |
|
|
|
sort.Strings(labelNames) |
|
|
|
labelSets := make([]*dto.LabelPair, 0, metricLength) |
|
|
|
for _, labelName := range labelNames { |
|
l := LabelName(labelName) |
|
labelValue := (*s)[l] |
|
labelPair := &dto.LabelPair{ |
|
Name: proto.String(string(labelName)), |
|
Value: proto.String(string(labelValue)), |
|
} |
|
|
|
labelSets = append(labelSets, labelPair) |
|
} |
|
|
|
return labelSets |
|
} |
|
|
|
func LabelSetToDTO(s *LabelSet) *dto.LabelSet { |
|
return &dto.LabelSet{ |
|
Member: LabelSetToDTOs(s), |
|
} |
|
} |
|
|
|
func LabelNameToDTO(l *LabelName) *dto.LabelName { |
|
return &dto.LabelName{ |
|
Name: proto.String(string(*l)), |
|
} |
|
} |
|
|
|
func FingerprintToDTO(f Fingerprint) *dto.Fingerprint { |
|
return &dto.Fingerprint{ |
|
Signature: proto.String(f.ToRowKey()), |
|
} |
|
} |
|
|
|
func SampleFromDTO(m *Metric, t *time.Time, v *dto.SampleValueSeries) *Sample { |
|
s := &Sample{ |
|
Value: SampleValue(*v.Value[0].Value), |
|
Timestamp: *t, |
|
} |
|
|
|
s.Metric = *m |
|
|
|
return s |
|
}
|
|
|