@@ -170,17 +170,17 @@ func MetricFamilyToOpenMetrics20(out io.Writer, in *dto.MetricFamily, options ..
170170 if val < 0 {
171171 return written , fmt .Errorf ("counter value cannot be negative (%g) in metric %s" , val , name )
172172 }
173- n , err = writeOpenMetrics20Sample (w , name , metric , val , 0 , false , metric .Counter .Exemplar )
173+ n , err = writeOpenMetrics20Sample (w , name , metric , val , 0 , false , metric .Counter .CreatedTimestamp , metric . Counter . Exemplar )
174174 case dto .MetricType_GAUGE :
175175 if metric .Gauge == nil {
176176 return written , fmt .Errorf ("expected gauge in metric %s %s" , name , metric )
177177 }
178- n , err = writeOpenMetrics20Sample (w , name , metric , metric .Gauge .GetValue (), 0 , false , nil )
178+ n , err = writeOpenMetrics20Sample (w , name , metric , metric .Gauge .GetValue (), 0 , false , nil , nil )
179179 case dto .MetricType_UNTYPED :
180180 if metric .Untyped == nil {
181181 return written , fmt .Errorf ("expected untyped in metric %s %s" , name , metric )
182182 }
183- n , err = writeOpenMetrics20Sample (w , name , metric , metric .Untyped .GetValue (), 0 , false , nil )
183+ n , err = writeOpenMetrics20Sample (w , name , metric , metric .Untyped .GetValue (), 0 , false , nil , nil )
184184 case dto .MetricType_SUMMARY :
185185 if metric .Summary == nil {
186186 return written , fmt .Errorf ("expected summary in metric %s %s" , name , metric )
@@ -203,7 +203,7 @@ func MetricFamilyToOpenMetrics20(out io.Writer, in *dto.MetricFamily, options ..
203203}
204204
205205// writeOpenMetrics20Sample writes a single sample for simple types (Counter, Gauge, Untyped).
206- func writeOpenMetrics20Sample (w enhancedWriter , name string , metric * dto.Metric , floatValue float64 , intValue uint64 , useIntValue bool , exemplar * dto.Exemplar ) (int , error ) {
206+ func writeOpenMetrics20Sample (w enhancedWriter , name string , metric * dto.Metric , floatValue float64 , intValue uint64 , useIntValue bool , startTimestamp * timestamppb. Timestamp , exemplar * dto.Exemplar ) (int , error ) {
207207 if err := validateLabels20 (metric .Label ); err != nil {
208208 return 0 , err
209209 }
@@ -242,18 +242,17 @@ func writeOpenMetrics20Sample(w enhancedWriter, name string, metric *dto.Metric,
242242 }
243243 }
244244
245- // Start Timestamp for Counter
246- if metric .Counter != nil && metric .Counter .CreatedTimestamp != nil {
247- ts := metric .Counter .CreatedTimestamp
248- if err := ts .CheckValid (); err != nil {
245+ // Start Timestamp
246+ if startTimestamp != nil {
247+ if err := startTimestamp .CheckValid (); err != nil {
249248 return written , fmt .Errorf ("invalid created timestamp in metric %s: %w" , name , err )
250249 }
251250 n , err = w .WriteString (" st@" )
252251 written += n
253252 if err != nil {
254253 return written , err
255254 }
256- n , err = writeProtoTimestamp (w , ts )
255+ n , err = writeProtoTimestamp (w , startTimestamp )
257256 written += n
258257 if err != nil {
259258 return written , err
@@ -330,20 +329,11 @@ func writeExemplar20(w enhancedWriter, e *dto.Exemplar) (int, error) {
330329
331330// writeOpenMetrics20Timestamp writes a float64 as a timestamp without scientific notation.
332331func writeOpenMetrics20Timestamp (w enhancedWriter , f float64 ) (int , error ) {
333- switch {
334- case math .IsNaN (f ):
335- return w .WriteString ("NaN" )
336- case math .IsInf (f , + 1 ):
337- return w .WriteString ("+Inf" )
338- case math .IsInf (f , - 1 ):
339- return w .WriteString ("-Inf" )
340- default :
341- bp := numBufPool .Get ().(* []byte )
342- * bp = strconv .AppendFloat ((* bp )[:0 ], f , 'f' , - 1 , 64 )
343- written , err := w .Write (* bp )
344- numBufPool .Put (bp )
345- return written , err
346- }
332+ bp := numBufPool .Get ().(* []byte )
333+ * bp = strconv .AppendFloat ((* bp )[:0 ], f , 'f' , - 1 , 64 )
334+ written , err := w .Write (* bp )
335+ numBufPool .Put (bp )
336+ return written , err
347337}
348338
349339// Stubs for Summary and Histogram
0 commit comments