Fix things commented on in past code review.

Change-Id: I4dafd098eefa99bc37fdbfebeb4c61a7251ad0be
This commit is contained in:
Bjoern Rabenstein 2014-04-29 12:44:31 +02:00
parent 84dc53148d
commit 3dfae09d30
3 changed files with 26 additions and 18 deletions

View File

@ -23,7 +23,6 @@ import (
dto "github.com/prometheus/client_model/go" dto "github.com/prometheus/client_model/go"
"code.google.com/p/goprotobuf/proto" "code.google.com/p/goprotobuf/proto"
"github.com/matttproud/golang_protobuf_extensions/ext"
"github.com/prometheus/client_golang/model" "github.com/prometheus/client_golang/model"
"github.com/prometheus/client_golang/text" "github.com/prometheus/client_golang/text"
@ -43,11 +42,11 @@ const (
jsonContentType = "application/json" jsonContentType = "application/json"
) )
// encoder is a function that writes a proto.Message to an io.Writer in a // encoder is a function that writes a dto.MetricFamily to an io.Writer in a
// certain encoding. It returns the number of bytes written and any error // certain encoding. It returns the number of bytes written and any error
// encountered. Note that ext.WriteDelimited and text.MetricFamilyToText are // encountered. Note that ext.WriteDelimited and text.MetricFamilyToText are
// encoders. // encoders.
type encoder func(io.Writer, proto.Message) (int, error) type encoder func(io.Writer, *dto.MetricFamily) (int, error)
// container represents a top-level registered metric that encompasses its // container represents a top-level registered metric that encompasses its
// static metadata. // static metadata.
@ -341,7 +340,7 @@ func (r *registry) Handler() http.HandlerFunc {
switch accept.Params["encoding"] { switch accept.Params["encoding"] {
case "delimited": case "delimited":
header.Set(contentTypeHeader, DelimitedTelemetryContentType) header.Set(contentTypeHeader, DelimitedTelemetryContentType)
enc = ext.WriteDelimited enc = text.WriteProtoDelimited
case "text": case "text":
header.Set(contentTypeHeader, ProtoTextTelemetryContentType) header.Set(contentTypeHeader, ProtoTextTelemetryContentType)
enc = text.WriteProtoText enc = text.WriteProtoText

View File

@ -25,7 +25,6 @@ import (
"fmt" "fmt"
"io" "io"
"strings" "strings"
"code.google.com/p/goprotobuf/proto"
dto "github.com/prometheus/client_model/go" dto "github.com/prometheus/client_model/go"
) )
@ -35,33 +34,33 @@ import (
// and any error encountered. This function does not perform checks on the // and any error encountered. This function does not perform checks on the
// content of the metric and label names, i.e. invalid metric or label names // content of the metric and label names, i.e. invalid metric or label names
// will result in invalid text format output. // will result in invalid text format output.
func MetricFamilyToText(out io.Writer, in proto.Message) (int, error) { // This method fulfills the type 'prometheus.encoder'.
mf := in.(*dto.MetricFamily) func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) {
var written int var written int
// Fail-fast checks. // Fail-fast checks.
if len(mf.Metric) == 0 { if len(in.Metric) == 0 {
return written, fmt.Errorf("MetricFamily has no metrics: %s", in) return written, fmt.Errorf("MetricFamily has no metrics: %s", in)
} }
name := mf.GetName() name := in.GetName()
if name == "" { if name == "" {
return written, fmt.Errorf("MetricFamily has no name: %s", in) return written, fmt.Errorf("MetricFamily has no name: %s", in)
} }
if mf.Type == nil { if in.Type == nil {
return written, fmt.Errorf("MetricFamily has no type: %s", in) return written, fmt.Errorf("MetricFamily has no type: %s", in)
} }
// Comments, first HELP, then TYPE. // Comments, first HELP, then TYPE.
if mf.Help != nil { if in.Help != nil {
n, err := fmt.Fprintf( n, err := fmt.Fprintf(
out, "# HELP %s %s\n", out, "# HELP %s %s\n",
name, strings.Replace(*mf.Help, "\n", `\n`, -1)) name, strings.Replace(*in.Help, "\n", `\n`, -1))
written += n written += n
if err != nil { if err != nil {
return written, err return written, err
} }
} }
metricType := mf.GetType() metricType := in.GetType()
n, err := fmt.Fprintf( n, err := fmt.Fprintf(
out, "# TYPE %s %s\n", out, "# TYPE %s %s\n",
name, strings.ToLower(metricType.String()), name, strings.ToLower(metricType.String()),
@ -72,7 +71,7 @@ func MetricFamilyToText(out io.Writer, in proto.Message) (int, error) {
} }
// Finally the samples, one line for each. // Finally the samples, one line for each.
for _, metric := range mf.Metric { for _, metric := range in.Metric {
switch metricType { switch metricType {
case dto.MetricType_COUNTER: case dto.MetricType_COUNTER:
if metric.Counter == nil { if metric.Counter == nil {

View File

@ -18,16 +18,26 @@ import (
"io" "io"
"code.google.com/p/goprotobuf/proto" "code.google.com/p/goprotobuf/proto"
"github.com/matttproud/golang_protobuf_extensions/ext"
dto "github.com/prometheus/client_model/go"
) )
// WriteProtoText writes the proto.Message to the writer in text format and // WriteProtoDelimited writes the MetricFamily to the writer in delimited
// protobuf format and returns the number of bytes written and any error
// encountered.
func WriteProtoDelimited(w io.Writer, p *dto.MetricFamily) (int, error) {
return ext.WriteDelimited(w, p)
}
// WriteProtoText writes the MetricFamily to the writer in text format and
// returns the number of bytes written and any error encountered. // returns the number of bytes written and any error encountered.
func WriteProtoText(w io.Writer, p proto.Message) (int, error) { func WriteProtoText(w io.Writer, p *dto.MetricFamily) (int, error) {
return fmt.Fprintf(w, "%s\n", proto.MarshalTextString(p)) return fmt.Fprintf(w, "%s\n", proto.MarshalTextString(p))
} }
// WriteProtoCompactText writes the proto.Message to the writer in compact text // WriteProtoCompactText writes the MetricFamily to the writer in compact text
// format and returns the number of bytes written and any error encountered. // format and returns the number of bytes written and any error encountered.
func WriteProtoCompactText(w io.Writer, p proto.Message) (int, error) { func WriteProtoCompactText(w io.Writer, p *dto.MetricFamily) (int, error) {
return fmt.Fprintf(w, "%s\n", p) return fmt.Fprintf(w, "%s\n", p)
} }