Skip to content

Commit 8484c52

Browse files
[OTLP] More WriteHistogramBuckets refactoring
Refactor into local methods to avoid duplication.
1 parent f11cc02 commit 8484c52

File tree

1 file changed

+50
-30
lines changed

1 file changed

+50
-30
lines changed

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

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -507,54 +507,74 @@ private static int WriteExemplar(byte[] buffer, int writePosition, in Exemplar e
507507

508508
private static int WriteHistogramBuckets(byte[] buffer, int writePosition, HistogramBuckets buckets)
509509
{
510-
const int Fixed64Size = 8;
510+
writePosition = WriteBucketCounts(buffer, writePosition, buckets.BucketCounts);
511511

512-
int length = buckets.BucketCounts.Length;
512+
writePosition = WriteExplicitBounds(buffer, writePosition, buckets.ExplicitBounds!);
513513

514-
writePosition = ProtobufSerializer.WriteTagAndLength(
515-
buffer,
516-
writePosition,
517-
length * Fixed64Size,
518-
ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts,
519-
ProtobufWireType.LEN);
514+
return writePosition;
520515

521-
for (int i = 0; i < length; i++)
516+
static int WriteBucketCounts(byte[] buffer, int writePosition, HistogramBuckets.HistogramBucketValues[] values)
522517
{
523-
writePosition = ProtobufSerializer.WriteFixed64LittleEndianFormat(
518+
int length = values.Length;
519+
520+
writePosition = WritePackedLength(
524521
buffer,
525522
writePosition,
526-
(ulong)buckets.BucketCounts[i].SnapshotValue);
527-
}
528-
529-
length = 0;
523+
length,
524+
ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts);
530525

531-
for (int i = 0; i < buckets.ExplicitBounds!.Length; i++)
532-
{
533-
if (buckets.ExplicitBounds[i] != double.PositiveInfinity)
526+
for (int i = 0; i < length; i++)
534527
{
535-
length++;
528+
writePosition = ProtobufSerializer.WriteFixed64LittleEndianFormat(
529+
buffer,
530+
writePosition,
531+
(ulong)values[i].SnapshotValue);
536532
}
533+
534+
return writePosition;
537535
}
538536

539-
if (length > 0)
537+
static int WriteExplicitBounds(byte[] buffer, int writePosition, double[] values)
540538
{
541-
writePosition = ProtobufSerializer.WriteTagAndLength(
542-
buffer,
543-
writePosition,
544-
length * Fixed64Size,
545-
ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Explicit_Bounds,
546-
ProtobufWireType.LEN);
539+
int length = 0;
540+
541+
for (int i = 0; i < values.Length; i++)
542+
{
543+
if (values[i] != double.PositiveInfinity)
544+
{
545+
length++;
546+
}
547+
}
547548

548-
for (int i = 0; i < buckets.ExplicitBounds!.Length; i++)
549+
if (length > 0)
549550
{
550-
var value = buckets.ExplicitBounds[i];
551-
if (value != double.PositiveInfinity)
551+
writePosition = WritePackedLength(
552+
buffer,
553+
writePosition,
554+
length,
555+
ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Explicit_Bounds);
556+
557+
for (int i = 0; i < values.Length; i++)
552558
{
553-
writePosition = ProtobufSerializer.WriteDouble(buffer, writePosition, value);
559+
var value = values[i];
560+
if (value != double.PositiveInfinity)
561+
{
562+
writePosition = ProtobufSerializer.WriteDouble(buffer, writePosition, value);
563+
}
554564
}
555565
}
566+
567+
return writePosition;
556568
}
557569

558-
return writePosition;
570+
static int WritePackedLength(byte[] buffer, int writePosition, int length, int fieldNumber)
571+
{
572+
return ProtobufSerializer.WriteTagAndLength(
573+
buffer,
574+
writePosition,
575+
length * 8,
576+
ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts,
577+
ProtobufWireType.LEN);
578+
}
559579
}
560580
}

0 commit comments

Comments
 (0)