Skip to content

Commit 3584c9d

Browse files
[OTLP] Move code to own method
Move new code to its own method.
1 parent 56d22c3 commit 3584c9d

File tree

1 file changed

+52
-45
lines changed

1 file changed

+52
-45
lines changed

src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufOtlpMetricSerializer.cs

Lines changed: 52 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -292,51 +292,7 @@ private static int WriteMetric(byte[] buffer, int writePosition, Metric metric)
292292
writePosition = ProtobufSerializer.WriteDoubleWithTag(buffer, writePosition, ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Max, max);
293293
}
294294

295-
// Collect all counts (assuming GetHistogramBuckets() returns in order)
296-
var bucketCounts = new List<ulong>();
297-
298-
foreach (var x in metricPoint.GetHistogramBuckets())
299-
{
300-
bucketCounts.Add((ulong)x.BucketCount);
301-
}
302-
303-
// Write packed repeated fixed64 bucket_counts
304-
var fieldNumber = ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts;
305-
var tag2 = (fieldNumber << 3) | 2; // wire type 2 for length-delimited
306-
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)tag2);
307-
308-
int length = bucketCounts.Count * 8;
309-
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)length);
310-
311-
foreach (var bucketCount in bucketCounts)
312-
{
313-
writePosition = ProtobufSerializer.WriteFixed64LittleEndianFormat(buffer, writePosition, bucketCount);
314-
}
315-
316-
var explicitBounds = new List<double>();
317-
318-
foreach (var x in metricPoint.GetHistogramBuckets())
319-
{
320-
if (x.ExplicitBound != double.PositiveInfinity)
321-
{
322-
explicitBounds.Add(x.ExplicitBound);
323-
}
324-
}
325-
326-
if (explicitBounds.Count > 0)
327-
{
328-
var boundsFieldNumber = ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Explicit_Bounds;
329-
var boundsTag = (boundsFieldNumber << 3) | 2; // wire type 2
330-
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)boundsTag);
331-
332-
int boundsLength = explicitBounds.Count * 8;
333-
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)boundsLength);
334-
335-
foreach (var bound in explicitBounds)
336-
{
337-
writePosition = ProtobufSerializer.WriteDouble(buffer, writePosition, bound);
338-
}
339-
}
295+
writePosition = WriteHistogramBuckets(buffer, writePosition, metricPoint.GetHistogramBuckets());
340296

341297
writePosition = WriteDoubleExemplars(buffer, writePosition, ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Exemplars, in metricPoint);
342298

@@ -548,4 +504,55 @@ private static int WriteExemplar(byte[] buffer, int writePosition, in Exemplar e
548504
ProtobufSerializer.WriteReservedLength(buffer, exemplarLengthPosition, writePosition - (exemplarLengthPosition + ReserveSizeForLength));
549505
return writePosition;
550506
}
507+
508+
private static int WriteHistogramBuckets(byte[] buffer, int writePosition, HistogramBuckets buckets)
509+
{
510+
// Collect all counts (assuming GetHistogramBuckets() returns in order)
511+
var bucketCounts = new List<ulong>();
512+
513+
foreach (var x in buckets)
514+
{
515+
bucketCounts.Add((ulong)x.BucketCount);
516+
}
517+
518+
// Write packed repeated fixed64 bucket_counts
519+
var fieldNumber = ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts;
520+
var tag2 = (fieldNumber << 3) | 2; // wire type 2 for length-delimited
521+
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)tag2);
522+
523+
int length = bucketCounts.Count * 8;
524+
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)length);
525+
526+
foreach (var bucketCount in bucketCounts)
527+
{
528+
writePosition = ProtobufSerializer.WriteFixed64LittleEndianFormat(buffer, writePosition, bucketCount);
529+
}
530+
531+
var explicitBounds = new List<double>();
532+
533+
foreach (var x in buckets)
534+
{
535+
if (x.ExplicitBound != double.PositiveInfinity)
536+
{
537+
explicitBounds.Add(x.ExplicitBound);
538+
}
539+
}
540+
541+
if (explicitBounds.Count > 0)
542+
{
543+
var boundsFieldNumber = ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Explicit_Bounds;
544+
var boundsTag = (boundsFieldNumber << 3) | 2; // wire type 2
545+
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)boundsTag);
546+
547+
int boundsLength = explicitBounds.Count * 8;
548+
writePosition = ProtobufSerializer.WriteVarInt32(buffer, writePosition, (uint)boundsLength);
549+
550+
foreach (var bound in explicitBounds)
551+
{
552+
writePosition = ProtobufSerializer.WriteDouble(buffer, writePosition, bound);
553+
}
554+
}
555+
556+
return writePosition;
557+
}
551558
}

0 commit comments

Comments
 (0)