Skip to content

Commit

Permalink
Update exporters
Browse files Browse the repository at this point in the history
  • Loading branch information
joegoldman2 committed May 15, 2024
1 parent 503f6ac commit 7580dde
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/OpenTelemetry.Exporter.Console/ConsoleMetricExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,17 @@ public override ExportResult Export(in Batch<Metric> batch)
valueDisplay = metricPoint.GetGaugeLastValueLong().ToString(CultureInfo.InvariantCulture);
}
}
else if (metricType.IsDecimal())
{
if (metricType.IsSum())
{
valueDisplay = metricPoint.GetSumDecimal().ToString(CultureInfo.InvariantCulture);
}
else
{
valueDisplay = metricPoint.GetGaugeLastValueDecimal().ToString(CultureInfo.InvariantCulture);
}
}

var exemplarString = new StringBuilder();
if (metricPoint.TryGetExemplars(out var exemplars))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,43 @@ internal static OtlpMetrics.Metric ToOtlpMetric(this Metric metric)
break;
}

case MetricType.DecimalSum:
case MetricType.DecimalSumNonMonotonic:
{
var sum = new Sum
{
IsMonotonic = metric.MetricType == MetricType.DecimalSum,
AggregationTemporality = temporality,
};

foreach (ref readonly var metricPoint in metric.GetMetricPoints())
{
var dataPoint = new NumberDataPoint
{
StartTimeUnixNano = (ulong)metricPoint.StartTime.ToUnixTimeNanoseconds(),
TimeUnixNano = (ulong)metricPoint.EndTime.ToUnixTimeNanoseconds(),
};

AddAttributes(metricPoint.Tags, dataPoint.Attributes);

dataPoint.AsDouble = (double)metricPoint.GetSumDecimal();

if (metricPoint.TryGetExemplars(out var exemplars))
{
foreach (ref readonly var exemplar in exemplars)
{
dataPoint.Exemplars.Add(
ToOtlpExemplar(exemplar.DoubleValue, in exemplar));
}
}

sum.DataPoints.Add(dataPoint);
}

otlpMetric.Sum = sum;
break;
}

case MetricType.LongGauge:
{
var gauge = new Gauge();
Expand Down Expand Up @@ -274,6 +311,37 @@ internal static OtlpMetrics.Metric ToOtlpMetric(this Metric metric)
break;
}

case MetricType.DecimalGauge:
{
var gauge = new Gauge();
foreach (ref readonly var metricPoint in metric.GetMetricPoints())
{
var dataPoint = new NumberDataPoint
{
StartTimeUnixNano = (ulong)metricPoint.StartTime.ToUnixTimeNanoseconds(),
TimeUnixNano = (ulong)metricPoint.EndTime.ToUnixTimeNanoseconds(),
};

AddAttributes(metricPoint.Tags, dataPoint.Attributes);

dataPoint.AsDouble = (double)metricPoint.GetGaugeLastValueDecimal();

if (metricPoint.TryGetExemplars(out var exemplars))
{
foreach (ref readonly var exemplar in exemplars)
{
dataPoint.Exemplars.Add(
ToOtlpExemplar(exemplar.DoubleValue, in exemplar));
}
}

gauge.DataPoints.Add(dataPoint);
}

otlpMetric.Gauge = gauge;
break;
}

case MetricType.Histogram:
{
var histogram = new Histogram
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ OpenTelemetry.ReadOnlyFilteredTagCollection.Enumerator.MoveNext() -> bool
OpenTelemetry.ReadOnlyFilteredTagCollection.GetEnumerator() -> OpenTelemetry.ReadOnlyFilteredTagCollection.Enumerator
OpenTelemetry.ReadOnlyFilteredTagCollection.ReadOnlyFilteredTagCollection() -> void
static OpenTelemetry.Metrics.MeterProviderBuilderExtensions.SetExemplarFilter(this OpenTelemetry.Metrics.MeterProviderBuilder! meterProviderBuilder, OpenTelemetry.Metrics.ExemplarFilterType exemplarFilter) -> OpenTelemetry.Metrics.MeterProviderBuilder!
static OpenTelemetry.Metrics.MetricTypeExtensions.IsDecimal(this OpenTelemetry.Metrics.MetricType self) -> bool
13 changes: 13 additions & 0 deletions src/OpenTelemetry/Metrics/MetricTypeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,17 @@ public static bool IsLong(this MetricType self)
{
return (self & POINT_KIND_MASK) == POINT_KIND_I8;
}

/// <summary>
/// Determines if the supplied <see cref="MetricType"/> is a decimal definition.
/// </summary>
/// <param name="self"><see cref="MetricType"/>.</param>
/// <returns><see langword="true"/> if the supplied <see cref="MetricType"/>
/// is a decimal definition.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsDecimal(this MetricType self)
{
MetricType mask = MetricType.DecimalSum | MetricType.DecimalSumNonMonotonic | MetricType.DecimalGauge;
return (self & POINT_KIND_MASK) == (mask & POINT_KIND_MASK);
}
}

0 comments on commit 7580dde

Please sign in to comment.