Use Content-Type data for telemetry versioning

ProcessorForRequestHeader now looks first for a header like
`Content-Type: application/json; schema="prometheus/telemetry";
version="0.0.1"` before falling back to checking
`X-Prometheus-API-Version`.
This commit is contained in:
Bernerd Schaefer 2013-04-25 16:05:37 +02:00
parent 19fc094362
commit 76731c80c6
2 changed files with 32 additions and 3 deletions

View file

@ -15,6 +15,7 @@ package format
import (
"fmt"
"mime"
"net/http"
)
@ -39,7 +40,25 @@ func (r *registry) ProcessorForRequestHeader(header http.Header) (processor Proc
return
}
prometheusApiVersion := header.Get("X-Prometheus-API-Version")
mediatype, params, err := mime.ParseMediaType(header.Get("Content-Type"))
if err != nil {
err = fmt.Errorf("Invalid Content-Type header %q: %s", header.Get("Content-Type"), err)
return
}
if mediatype != "application/json" {
err = fmt.Errorf("Unsupported media type %q, expected %q", mediatype, "application/json")
return
}
var prometheusApiVersion string
if params["schema"] == "prometheus/telemetry" && params["version"] != "" {
prometheusApiVersion = params["version"]
} else {
prometheusApiVersion = header.Get("X-Prometheus-API-Version")
}
switch prometheusApiVersion {
case "0.0.1":

View file

@ -31,12 +31,22 @@ func testDiscriminatorHttpHeader(t test.Tester) {
err: fmt.Errorf("Received illegal and nil header."),
},
{
input: map[string]string{"X-Prometheus-API-Version": "0.0.0"},
input: map[string]string{"Content-Type": "application/json", "X-Prometheus-API-Version": "0.0.0"},
output: nil,
err: fmt.Errorf("Unrecognized API version 0.0.0"),
},
{
input: map[string]string{"X-Prometheus-API-Version": "0.0.1"},
input: map[string]string{"Content-Type": "application/json", "X-Prometheus-API-Version": "0.0.1"},
output: Processor001,
err: nil,
},
{
input: map[string]string{"Content-Type": `application/json; schema="prometheus/telemetry"; version=0.0.0`},
output: nil,
err: fmt.Errorf("Unrecognized API version 0.0.0"),
},
{
input: map[string]string{"Content-Type": `application/json; schema="prometheus/telemetry"; version=0.0.1`},
output: Processor001,
err: nil,
},