// 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 graphite import ( "bytes" "fmt" "math" "net" "sort" "time" "github.com/prometheus/common/log" "github.com/prometheus/common/model" ) // Client allows sending batches of Prometheus samples to Graphite. type Client struct { address string transport string timeout time.Duration prefix string } // NewClient creates a new Client. func NewClient(address string, transport string, timeout time.Duration, prefix string) *Client { return &Client{ address: address, transport: transport, timeout: timeout, prefix: prefix, } } func pathFromMetric(m model.Metric, prefix string) string { var buffer bytes.Buffer buffer.WriteString(prefix) buffer.WriteString(escape(m[model.MetricNameLabel])) // We want to sort the labels. labels := make(model.LabelNames, 0, len(m)) for l := range m { labels = append(labels, l) } sort.Sort(labels) // For each label, in order, add ".