// Copyright 2015 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 collector import ( "io/ioutil" "regexp" "strconv" "strings" ) func readUintFromFile(path string) (uint64, error) { data, err := ioutil.ReadFile(path) if err != nil { return 0, err } value, err := strconv.ParseUint(strings.TrimSpace(string(data)), 10, 64) if err != nil { return 0, err } return value, nil } var metricNameRegex = regexp.MustCompile(`_*[^0-9A-Za-z_]+_*`) // SanitizeMetricName sanitize the given metric name by replacing invalid characters by underscores. // // OpenMetrics and the Prometheus exposition format require the metric name // to consist only of alphanumericals and "_", ":" and they must not start // with digits. Since colons in MetricFamily are reserved to signal that the // MetricFamily is the result of a calculation or aggregation of a general // purpose monitoring system, colons will be replaced as well. // // Note: If not subsequently prepending a namespace and/or subsystem (e.g., // with prometheus.BuildFQName), the caller must ensure that the supplied // metricName does not begin with a digit. func SanitizeMetricName(metricName string) string { return metricNameRegex.ReplaceAllString(metricName, "_") }