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"
"code.google.com/p/goprotobuf/proto"
"github.com/matttproud/golang_protobuf_extensions/ext"
"github.com/prometheus/client_golang/model"
"github.com/prometheus/client_golang/text"
@ -43,11 +42,11 @@ const (
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
// encountered. Note that ext.WriteDelimited and text.MetricFamilyToText are
// 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
// static metadata.
@ -341,7 +340,7 @@ func (r *registry) Handler() http.HandlerFunc {
switch accept.Params["encoding"] {
case "delimited":
header.Set(contentTypeHeader, DelimitedTelemetryContentType)
enc = ext.WriteDelimited
enc = text.WriteProtoDelimited
case "text":
header.Set(contentTypeHeader, ProtoTextTelemetryContentType)
enc = text.WriteProtoText

View File

@ -25,7 +25,6 @@ import (
"fmt"
"io"
"strings"
"code.google.com/p/goprotobuf/proto"
dto "github.com/prometheus/client_model/go"
)
@ -35,33 +34,33 @@ import (
// 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
// will result in invalid text format output.
func MetricFamilyToText(out io.Writer, in proto.Message) (int, error) {
mf := in.(*dto.MetricFamily)
// This method fulfills the type 'prometheus.encoder'.
func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) {
var written int
// Fail-fast checks.
if len(mf.Metric) == 0 {
if len(in.Metric) == 0 {
return written, fmt.Errorf("MetricFamily has no metrics: %s", in)
}
name := mf.GetName()
name := in.GetName()
if name == "" {
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)
}
// Comments, first HELP, then TYPE.
if mf.Help != nil {
if in.Help != nil {
n, err := fmt.Fprintf(
out, "# HELP %s %s\n",
name, strings.Replace(*mf.Help, "\n", `\n`, -1))
name, strings.Replace(*in.Help, "\n", `\n`, -1))
written += n
if err != nil {
return written, err
}
}
metricType := mf.GetType()
metricType := in.GetType()
n, err := fmt.Fprintf(
out, "# TYPE %s %s\n",
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.
for _, metric := range mf.Metric {
for _, metric := range in.Metric {
switch metricType {
case dto.MetricType_COUNTER:
if metric.Counter == nil {

View File

@ -18,16 +18,26 @@ import (
"io"
"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.
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))
}
// 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.
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)
}