123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package model
- import (
- "fmt"
- "regexp"
- "sort"
- "strings"
- )
- var (
-
-
-
- MetricNameRE = regexp.MustCompile(`^[a-zA-Z_:][a-zA-Z0-9_:]*$`)
- )
- type Metric LabelSet
- func (m Metric) Equal(o Metric) bool {
- return LabelSet(m).Equal(LabelSet(o))
- }
- func (m Metric) Before(o Metric) bool {
- return LabelSet(m).Before(LabelSet(o))
- }
- func (m Metric) Clone() Metric {
- clone := make(Metric, len(m))
- for k, v := range m {
- clone[k] = v
- }
- return clone
- }
- func (m Metric) String() string {
- metricName, hasName := m[MetricNameLabel]
- numLabels := len(m) - 1
- if !hasName {
- numLabels = len(m)
- }
- labelStrings := make([]string, 0, numLabels)
- for label, value := range m {
- if label != MetricNameLabel {
- labelStrings = append(labelStrings, fmt.Sprintf("%s=%q", label, value))
- }
- }
- switch numLabels {
- case 0:
- if hasName {
- return string(metricName)
- }
- return "{}"
- default:
- sort.Strings(labelStrings)
- return fmt.Sprintf("%s{%s}", metricName, strings.Join(labelStrings, ", "))
- }
- }
- func (m Metric) Fingerprint() Fingerprint {
- return LabelSet(m).Fingerprint()
- }
- func (m Metric) FastFingerprint() Fingerprint {
- return LabelSet(m).FastFingerprint()
- }
- func IsValidMetricName(n LabelValue) bool {
- if len(n) == 0 {
- return false
- }
- for i, b := range n {
- if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || b == ':' || (b >= '0' && b <= '9' && i > 0)) {
- return false
- }
- }
- return true
- }
|