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

Function NewEncoder

expfmt/encode.go:147–196  ·  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

145//
146// Extra options are ignored for all other formats.
147func NewEncoder(w io.Writer, format Format, options ...EncoderOption) Encoder {
148 escapingScheme := format.ToEscapingScheme()
149
150 switch format.FormatType() {
151 case TypeProtoDelim:
152 return encoderCloser{
153 encode: func(v *dto.MetricFamily) error {
154 _, err := protodelim.MarshalTo(w, model.EscapeMetricFamily(v, escapingScheme))
155 return err
156 },
157 close: func() error { return nil },
158 }
159 case TypeProtoCompact:
160 return encoderCloser{
161 encode: func(v *dto.MetricFamily) error {
162 _, err := fmt.Fprintln(w, model.EscapeMetricFamily(v, escapingScheme).String())
163 return err
164 },
165 close: func() error { return nil },
166 }
167 case TypeProtoText:
168 return encoderCloser{
169 encode: func(v *dto.MetricFamily) error {
170 _, err := fmt.Fprintln(w, prototext.Format(model.EscapeMetricFamily(v, escapingScheme)))
171 return err
172 },
173 close: func() error { return nil },
174 }
175 case TypeTextPlain:
176 return encoderCloser{
177 encode: func(v *dto.MetricFamily) error {
178 _, err := MetricFamilyToText(w, model.EscapeMetricFamily(v, escapingScheme))
179 return err
180 },
181 close: func() error { return nil },
182 }
183 case TypeOpenMetrics:
184 return encoderCloser{
185 encode: func(v *dto.MetricFamily) error {
186 _, err := MetricFamilyToOpenMetrics(w, model.EscapeMetricFamily(v, escapingScheme), options...)
187 return err
188 },
189 close: func() error {
190 _, err := FinalizeOpenMetrics(w)
191 return err
192 },
193 }
194 }
195 panic(fmt.Errorf("expfmt.NewEncoder: unknown format %q", format))
196}

Callers 3

TestEncodeFunction · 0.85
TestEscapedEncodeFunction · 0.85
TestDottedEncodeFunction · 0.85

Calls 7

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

Tested by 3

TestEncodeFunction · 0.68
TestEscapedEncodeFunction · 0.68
TestDottedEncodeFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…