MCPcopy Create free account
hub / github.com/prometheus/common / NewEncoder

Function NewEncoder

expfmt/encode.go:188–250  ·  view source on GitHub ↗

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 t

(w io.Writer, format Format, options ...EncoderOption)

Source from the content-addressed store, hash-verified

186//
187// Extra options are ignored for all other formats.
188func NewEncoder(w io.Writer, format Format, options ...EncoderOption) Encoder {
189 escapingScheme := format.ToEscapingScheme()
190
191 switch format.FormatType() {
192 case TypeProtoDelim:
193 return encoderCloser{
194 encode: func(v *dto.MetricFamily) error {
195 _, err := protodelim.MarshalTo(w, model.EscapeMetricFamily(v, escapingScheme))
196 return err
197 },
198 close: func() error { return nil },
199 }
200 case TypeProtoCompact:
201 return encoderCloser{
202 encode: func(v *dto.MetricFamily) error {
203 _, err := fmt.Fprintln(w, model.EscapeMetricFamily(v, escapingScheme).String())
204 return err
205 },
206 close: func() error { return nil },
207 }
208 case TypeProtoText:
209 return encoderCloser{
210 encode: func(v *dto.MetricFamily) error {
211 _, err := fmt.Fprintln(w, prototext.Format(model.EscapeMetricFamily(v, escapingScheme)))
212 return err
213 },
214 close: func() error { return nil },
215 }
216 case TypeTextPlain:
217 return encoderCloser{
218 encode: func(v *dto.MetricFamily) error {
219 _, err := MetricFamilyToText(w, model.EscapeMetricFamily(v, escapingScheme))
220 return err
221 },
222 close: func() error { return nil },
223 }
224 case TypeOpenMetrics:
225 _, params, err := mime.ParseMediaType(string(format))
226 if err == nil && params["version"] == OpenMetricsVersion_2_0_0 {
227 return encoderCloser{
228 encode: func(v *dto.MetricFamily) error {
229 _, err := MetricFamilyToOpenMetrics20(w, model.EscapeMetricFamily(v, escapingScheme), options...)
230 return err
231 },
232 close: func() error {
233 _, err := FinalizeOpenMetrics(w)
234 return err
235 },
236 }
237 }
238 return encoderCloser{
239 encode: func(v *dto.MetricFamily) error {
240 _, err := MetricFamilyToOpenMetrics(w, model.EscapeMetricFamily(v, escapingScheme), options...)
241 return err
242 },
243 close: func() error {
244 _, err := FinalizeOpenMetrics(w)
245 return err

Callers 4

TestEncodeFunction · 0.85
TestEscapedEncodeFunction · 0.85
TestDottedEncodeFunction · 0.85

Calls 8

EscapeMetricFamilyFunction · 0.92
MetricFamilyToTextFunction · 0.85
FinalizeOpenMetricsFunction · 0.85
ToEscapingSchemeMethod · 0.80
FormatTypeMethod · 0.80
StringMethod · 0.65

Tested by 4

TestEncodeFunction · 0.68
TestEscapedEncodeFunction · 0.68
TestDottedEncodeFunction · 0.68