mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-27 00:30:18 +00:00
b2ae48dc2d
Bumps the github-dependencies group with 5 updates: | Package | From | To | | --- | --- | --- | | [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | `1.49.0` | `1.49.13` | | [github.com/aws/aws-sdk-go-v2/service/sts](https://github.com/aws/aws-sdk-go-v2) | `1.26.5` | `1.26.6` | | [github.com/google/uuid](https://github.com/google/uuid) | `1.4.0` | `1.5.0` | | [github.com/kubernetes-csi/csi-lib-utils](https://github.com/kubernetes-csi/csi-lib-utils) | `0.14.0` | `0.17.0` | | [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) | `1.17.0` | `1.18.0` | Updates `github.com/aws/aws-sdk-go` from 1.49.0 to 1.49.13 - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.49.0...v1.49.13) Updates `github.com/aws/aws-sdk-go-v2/service/sts` from 1.26.5 to 1.26.6 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.26.5...service/s3/v1.26.6) Updates `github.com/google/uuid` from 1.4.0 to 1.5.0 - [Release notes](https://github.com/google/uuid/releases) - [Changelog](https://github.com/google/uuid/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/uuid/compare/v1.4.0...v1.5.0) Updates `github.com/kubernetes-csi/csi-lib-utils` from 0.14.0 to 0.17.0 - [Release notes](https://github.com/kubernetes-csi/csi-lib-utils/releases) - [Commits](https://github.com/kubernetes-csi/csi-lib-utils/compare/v0.14.0...v0.17.0) Updates `github.com/prometheus/client_golang` from 1.17.0 to 1.18.0 - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_golang/compare/v1.17.0...v1.18.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-dependencies - dependency-name: github.com/aws/aws-sdk-go-v2/service/sts dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-dependencies - dependency-name: github.com/google/uuid dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-dependencies - dependency-name: github.com/kubernetes-csi/csi-lib-utils dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-dependencies - dependency-name: github.com/prometheus/client_golang dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
166 lines
5.2 KiB
Go
166 lines
5.2 KiB
Go
// 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 expfmt
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/matttproud/golang_protobuf_extensions/v2/pbutil"
|
|
"github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg"
|
|
"google.golang.org/protobuf/encoding/prototext"
|
|
|
|
dto "github.com/prometheus/client_model/go"
|
|
)
|
|
|
|
// Encoder types encode metric families into an underlying wire protocol.
|
|
type Encoder interface {
|
|
Encode(*dto.MetricFamily) error
|
|
}
|
|
|
|
// Closer is implemented by Encoders that need to be closed to finalize
|
|
// encoding. (For example, OpenMetrics needs a final `# EOF` line.)
|
|
//
|
|
// Note that all Encoder implementations returned from this package implement
|
|
// Closer, too, even if the Close call is a no-op. This happens in preparation
|
|
// for adding a Close method to the Encoder interface directly in a (mildly
|
|
// breaking) release in the future.
|
|
type Closer interface {
|
|
Close() error
|
|
}
|
|
|
|
type encoderCloser struct {
|
|
encode func(*dto.MetricFamily) error
|
|
close func() error
|
|
}
|
|
|
|
func (ec encoderCloser) Encode(v *dto.MetricFamily) error {
|
|
return ec.encode(v)
|
|
}
|
|
|
|
func (ec encoderCloser) Close() error {
|
|
return ec.close()
|
|
}
|
|
|
|
// Negotiate returns the Content-Type based on the given Accept header. If no
|
|
// appropriate accepted type is found, FmtText is returned (which is the
|
|
// Prometheus text format). This function will never negotiate FmtOpenMetrics,
|
|
// as the support is still experimental. To include the option to negotiate
|
|
// FmtOpenMetrics, use NegotiateOpenMetrics.
|
|
func Negotiate(h http.Header) Format {
|
|
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
|
ver := ac.Params["version"]
|
|
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
|
switch ac.Params["encoding"] {
|
|
case "delimited":
|
|
return FmtProtoDelim
|
|
case "text":
|
|
return FmtProtoText
|
|
case "compact-text":
|
|
return FmtProtoCompact
|
|
}
|
|
}
|
|
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
|
return FmtText
|
|
}
|
|
}
|
|
return FmtText
|
|
}
|
|
|
|
// NegotiateIncludingOpenMetrics works like Negotiate but includes
|
|
// FmtOpenMetrics as an option for the result. Note that this function is
|
|
// temporary and will disappear once FmtOpenMetrics is fully supported and as
|
|
// such may be negotiated by the normal Negotiate function.
|
|
func NegotiateIncludingOpenMetrics(h http.Header) Format {
|
|
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
|
ver := ac.Params["version"]
|
|
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
|
switch ac.Params["encoding"] {
|
|
case "delimited":
|
|
return FmtProtoDelim
|
|
case "text":
|
|
return FmtProtoText
|
|
case "compact-text":
|
|
return FmtProtoCompact
|
|
}
|
|
}
|
|
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
|
return FmtText
|
|
}
|
|
if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion_0_0_1 || ver == OpenMetricsVersion_1_0_0 || ver == "") {
|
|
if ver == OpenMetricsVersion_1_0_0 {
|
|
return FmtOpenMetrics_1_0_0
|
|
}
|
|
return FmtOpenMetrics_0_0_1
|
|
}
|
|
}
|
|
return FmtText
|
|
}
|
|
|
|
// NewEncoder returns a new encoder based on content type negotiation. All
|
|
// Encoder implementations returned by NewEncoder also implement Closer, and
|
|
// callers should always call the Close method. It is currently only required
|
|
// for FmtOpenMetrics, but a future (breaking) release will add the Close method
|
|
// to the Encoder interface directly. The current version of the Encoder
|
|
// interface is kept for backwards compatibility.
|
|
func NewEncoder(w io.Writer, format Format) Encoder {
|
|
switch format {
|
|
case FmtProtoDelim:
|
|
return encoderCloser{
|
|
encode: func(v *dto.MetricFamily) error {
|
|
_, err := pbutil.WriteDelimited(w, v)
|
|
return err
|
|
},
|
|
close: func() error { return nil },
|
|
}
|
|
case FmtProtoCompact:
|
|
return encoderCloser{
|
|
encode: func(v *dto.MetricFamily) error {
|
|
_, err := fmt.Fprintln(w, v.String())
|
|
return err
|
|
},
|
|
close: func() error { return nil },
|
|
}
|
|
case FmtProtoText:
|
|
return encoderCloser{
|
|
encode: func(v *dto.MetricFamily) error {
|
|
_, err := fmt.Fprintln(w, prototext.Format(v))
|
|
return err
|
|
},
|
|
close: func() error { return nil },
|
|
}
|
|
case FmtText:
|
|
return encoderCloser{
|
|
encode: func(v *dto.MetricFamily) error {
|
|
_, err := MetricFamilyToText(w, v)
|
|
return err
|
|
},
|
|
close: func() error { return nil },
|
|
}
|
|
case FmtOpenMetrics_0_0_1, FmtOpenMetrics_1_0_0:
|
|
return encoderCloser{
|
|
encode: func(v *dto.MetricFamily) error {
|
|
_, err := MetricFamilyToOpenMetrics(w, v)
|
|
return err
|
|
},
|
|
close: func() error {
|
|
_, err := FinalizeOpenMetrics(w)
|
|
return err
|
|
},
|
|
}
|
|
}
|
|
panic(fmt.Errorf("expfmt.NewEncoder: unknown format %q", format))
|
|
}
|