diff --git a/examples/AspNet/Global.asax.cs b/examples/AspNet/Global.asax.cs index 7096ca266..3d08c198b 100644 --- a/examples/AspNet/Global.asax.cs +++ b/examples/AspNet/Global.asax.cs @@ -93,7 +93,6 @@ namespace Examples.AspNet // The ConsoleMetricExporter defaults to a manual collect cycle. // This configuration causes metrics to be exported to stdout on a 10s interval. - metricReaderOptions.MetricReaderType = MetricReaderType.Periodic; metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 10000; }); break; diff --git a/examples/AspNetCore/Program.cs b/examples/AspNetCore/Program.cs index e0bf8bac9..853e8e42f 100644 --- a/examples/AspNetCore/Program.cs +++ b/examples/AspNetCore/Program.cs @@ -135,7 +135,6 @@ builder.Services.AddOpenTelemetryMetrics(options => { // The ConsoleMetricExporter defaults to a manual collect cycle. // This configuration causes metrics to be exported to stdout on a 10s interval. - metricReaderOptions.MetricReaderType = MetricReaderType.Periodic; metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 10000; }); break; diff --git a/examples/Console/TestMetrics.cs b/examples/Console/TestMetrics.cs index 9a6cd75a6..b9864e817 100644 --- a/examples/Console/TestMetrics.cs +++ b/examples/Console/TestMetrics.cs @@ -70,7 +70,6 @@ namespace Examples.Console { exporterOptions.Protocol = options.UseGrpc ? OtlpExportProtocol.Grpc : OtlpExportProtocol.HttpProtobuf; - metricReaderOptions.MetricReaderType = MetricReaderType.Periodic; metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = options.DefaultCollectionPeriodMilliseconds; metricReaderOptions.Temporality = options.IsDelta ? AggregationTemporality.Delta : AggregationTemporality.Cumulative; }); @@ -82,7 +81,6 @@ namespace Examples.Console { exporterOptions.Targets = ConsoleExporterOutputTargets.Console; - metricReaderOptions.MetricReaderType = MetricReaderType.Periodic; metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = options.DefaultCollectionPeriodMilliseconds; metricReaderOptions.Temporality = options.IsDelta ? AggregationTemporality.Delta : AggregationTemporality.Cumulative; }); diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleExporterMetricsExtensions.cs b/src/OpenTelemetry.Exporter.Console/ConsoleExporterMetricsExtensions.cs index fad30a688..6d7766b3b 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleExporterMetricsExtensions.cs +++ b/src/OpenTelemetry.Exporter.Console/ConsoleExporterMetricsExtensions.cs @@ -15,6 +15,7 @@ // using System; +using System.Threading; using OpenTelemetry.Exporter; using OpenTelemetry.Internal; @@ -25,6 +26,9 @@ namespace OpenTelemetry.Metrics /// public static class ConsoleExporterMetricsExtensions { + private const int DefaultExportIntervalMilliseconds = Timeout.Infinite; + private const int DefaultExportTimeoutMilliseconds = Timeout.Infinite; + /// /// Adds to the using default options. /// @@ -97,13 +101,12 @@ namespace OpenTelemetry.Metrics var metricExporter = new ConsoleMetricExporter(exporterOptions); - var metricReader = metricReaderOptions.MetricReaderType == MetricReaderType.Manual - ? new BaseExportingMetricReader(metricExporter) - : new PeriodicExportingMetricReader( - metricExporter, - metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds ?? -1); + var metricReader = PeriodicExportingMetricReaderHelper.CreatePeriodicExportingMetricReader( + metricExporter, + metricReaderOptions, + DefaultExportIntervalMilliseconds, + DefaultExportTimeoutMilliseconds); - metricReader.Temporality = metricReaderOptions.Temporality; return builder.AddReader(metricReader); } } diff --git a/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj b/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj index 53a3bd54c..56e58bbb2 100644 --- a/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj +++ b/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj @@ -17,6 +17,7 @@ + diff --git a/src/OpenTelemetry.Exporter.InMemory/InMemoryExporterMetricsExtensions.cs b/src/OpenTelemetry.Exporter.InMemory/InMemoryExporterMetricsExtensions.cs index 7f5c44650..9809b0955 100644 --- a/src/OpenTelemetry.Exporter.InMemory/InMemoryExporterMetricsExtensions.cs +++ b/src/OpenTelemetry.Exporter.InMemory/InMemoryExporterMetricsExtensions.cs @@ -16,6 +16,7 @@ using System; using System.Collections.Generic; +using System.Threading; using OpenTelemetry.Exporter; using OpenTelemetry.Internal; @@ -26,6 +27,9 @@ namespace OpenTelemetry.Metrics /// public static class InMemoryExporterMetricsExtensions { + private const int DefaultExportIntervalMilliseconds = Timeout.Infinite; + private const int DefaultExportTimeoutMilliseconds = Timeout.Infinite; + /// /// Adds InMemory metric exporter to the using default options. /// @@ -81,13 +85,12 @@ namespace OpenTelemetry.Metrics var metricExporter = new InMemoryExporter(exportedItems); - var metricReader = metricReaderOptions.MetricReaderType == MetricReaderType.Manual - ? new BaseExportingMetricReader(metricExporter) - : new PeriodicExportingMetricReader( - metricExporter, - metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds ?? -1); + var metricReader = PeriodicExportingMetricReaderHelper.CreatePeriodicExportingMetricReader( + metricExporter, + metricReaderOptions, + DefaultExportIntervalMilliseconds, + DefaultExportTimeoutMilliseconds); - metricReader.Temporality = metricReaderOptions.Temporality; return builder.AddReader(metricReader); } } diff --git a/src/OpenTelemetry.Exporter.InMemory/OpenTelemetry.Exporter.InMemory.csproj b/src/OpenTelemetry.Exporter.InMemory/OpenTelemetry.Exporter.InMemory.csproj index aacbab5f9..308038dc4 100644 --- a/src/OpenTelemetry.Exporter.InMemory/OpenTelemetry.Exporter.InMemory.csproj +++ b/src/OpenTelemetry.Exporter.InMemory/OpenTelemetry.Exporter.InMemory.csproj @@ -17,6 +17,7 @@ + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj index 36398e596..dbdcc132b 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj @@ -46,6 +46,7 @@ + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs index 89bf04a8d..496c60a18 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs @@ -26,6 +26,7 @@ namespace OpenTelemetry.Metrics public static class OtlpMetricExporterExtensions { private const int DefaultExportIntervalMilliseconds = 60000; + private const int DefaultExportTimeoutMilliseconds = 30000; /// /// Adds to the using default options. @@ -104,13 +105,12 @@ namespace OpenTelemetry.Metrics var metricExporter = new OtlpMetricExporter(exporterOptions); - var metricReader = metricReaderOptions.MetricReaderType == MetricReaderType.Manual - ? new BaseExportingMetricReader(metricExporter) - : new PeriodicExportingMetricReader( - metricExporter, - metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds ?? DefaultExportIntervalMilliseconds); + var metricReader = PeriodicExportingMetricReaderHelper.CreatePeriodicExportingMetricReader( + metricExporter, + metricReaderOptions, + DefaultExportIntervalMilliseconds, + DefaultExportTimeoutMilliseconds); - metricReader.Temporality = metricReaderOptions.Temporality; return builder.AddReader(metricReader); } } diff --git a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt index 91d679d8b..59c1a0fbb 100644 --- a/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/net461/PublicAPI.Unshipped.txt @@ -3,10 +3,7 @@ OpenTelemetry.Batch.Batch(T[] items, int count) -> void OpenTelemetry.Batch.Count.get -> long OpenTelemetry.Metrics.MetricReaderOptions OpenTelemetry.Metrics.MetricReaderOptions.MetricReaderOptions() -> void -OpenTelemetry.Metrics.MetricReaderOptions.MetricReaderType.get -> OpenTelemetry.Metrics.MetricReaderType -OpenTelemetry.Metrics.MetricReaderOptions.MetricReaderType.set -> void OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.get -> OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions -OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.set -> void OpenTelemetry.Metrics.MetricReaderOptions.Temporality.get -> OpenTelemetry.Metrics.AggregationTemporality OpenTelemetry.Metrics.MetricReaderOptions.Temporality.set -> void OpenTelemetry.Metrics.AggregationTemporality @@ -81,9 +78,6 @@ OpenTelemetry.Metrics.MetricReader.MetricReader() -> void OpenTelemetry.Metrics.MetricReader.Shutdown(int timeoutMilliseconds = -1) -> bool OpenTelemetry.Metrics.MetricReader.Temporality.get -> OpenTelemetry.Metrics.AggregationTemporality OpenTelemetry.Metrics.MetricReader.Temporality.set -> void -OpenTelemetry.Metrics.MetricReaderType -OpenTelemetry.Metrics.MetricReaderType.Manual = 0 -> OpenTelemetry.Metrics.MetricReaderType -OpenTelemetry.Metrics.MetricReaderType.Periodic = 1 -> OpenTelemetry.Metrics.MetricReaderType OpenTelemetry.Metrics.MetricStreamConfiguration OpenTelemetry.Metrics.MetricStreamConfiguration.Description.get -> string OpenTelemetry.Metrics.MetricStreamConfiguration.Description.set -> void @@ -105,6 +99,8 @@ OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.PeriodicExportingMetricReaderOptions() -> void OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds.get -> int? OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds.set -> void +OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds.get -> int? +OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds.set -> void OpenTelemetry.ReadOnlyTagCollection OpenTelemetry.ReadOnlyTagCollection.Count.get -> int OpenTelemetry.ReadOnlyTagCollection.Enumerator diff --git a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt index 91d679d8b..59c1a0fbb 100644 --- a/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -3,10 +3,7 @@ OpenTelemetry.Batch.Batch(T[] items, int count) -> void OpenTelemetry.Batch.Count.get -> long OpenTelemetry.Metrics.MetricReaderOptions OpenTelemetry.Metrics.MetricReaderOptions.MetricReaderOptions() -> void -OpenTelemetry.Metrics.MetricReaderOptions.MetricReaderType.get -> OpenTelemetry.Metrics.MetricReaderType -OpenTelemetry.Metrics.MetricReaderOptions.MetricReaderType.set -> void OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.get -> OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions -OpenTelemetry.Metrics.MetricReaderOptions.PeriodicExportingMetricReaderOptions.set -> void OpenTelemetry.Metrics.MetricReaderOptions.Temporality.get -> OpenTelemetry.Metrics.AggregationTemporality OpenTelemetry.Metrics.MetricReaderOptions.Temporality.set -> void OpenTelemetry.Metrics.AggregationTemporality @@ -81,9 +78,6 @@ OpenTelemetry.Metrics.MetricReader.MetricReader() -> void OpenTelemetry.Metrics.MetricReader.Shutdown(int timeoutMilliseconds = -1) -> bool OpenTelemetry.Metrics.MetricReader.Temporality.get -> OpenTelemetry.Metrics.AggregationTemporality OpenTelemetry.Metrics.MetricReader.Temporality.set -> void -OpenTelemetry.Metrics.MetricReaderType -OpenTelemetry.Metrics.MetricReaderType.Manual = 0 -> OpenTelemetry.Metrics.MetricReaderType -OpenTelemetry.Metrics.MetricReaderType.Periodic = 1 -> OpenTelemetry.Metrics.MetricReaderType OpenTelemetry.Metrics.MetricStreamConfiguration OpenTelemetry.Metrics.MetricStreamConfiguration.Description.get -> string OpenTelemetry.Metrics.MetricStreamConfiguration.Description.set -> void @@ -105,6 +99,8 @@ OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.PeriodicExportingMetricReaderOptions() -> void OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds.get -> int? OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds.set -> void +OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds.get -> int? +OpenTelemetry.Metrics.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds.set -> void OpenTelemetry.ReadOnlyTagCollection OpenTelemetry.ReadOnlyTagCollection.Count.get -> int OpenTelemetry.ReadOnlyTagCollection.Enumerator diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index 5cfd6d278..99271b782 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -7,6 +7,19 @@ period. ([#2982](https://github.com/open-telemetry/opentelemetry-dotnet/pull/2982)) +* Added the `PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds` + option. + ([#3038](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3038)) + +* Removed `MetricReaderType`. This enumeration was previously used when + configuing a metric reader with an exporter to configure whether the export + cycle would be periodic or manual (i.e., requiring a explicit call to flush + metrics). This change affects the push-based metric exporters: OTLP, Console, + and InMemory. For these exporters, a manual export cycle can now be achieved + by setting `PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds` + to `-1`. + ([#3038](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3038)) + ## 1.2.0-rc3 Released 2022-Mar-04 diff --git a/src/OpenTelemetry/Internal/PeriodicExportingMetricReaderHelper.cs b/src/OpenTelemetry/Internal/PeriodicExportingMetricReaderHelper.cs new file mode 100644 index 000000000..940846a51 --- /dev/null +++ b/src/OpenTelemetry/Internal/PeriodicExportingMetricReaderHelper.cs @@ -0,0 +1,40 @@ +// +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +namespace OpenTelemetry.Metrics; + +internal static class PeriodicExportingMetricReaderHelper +{ + internal static PeriodicExportingMetricReader CreatePeriodicExportingMetricReader( + BaseExporter exporter, + MetricReaderOptions options, + int defaultExportIntervalMilliseconds, + int defaultExportTimeoutMilliseconds) + { + var exportInterval = + options.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds + ?? defaultExportIntervalMilliseconds; + + var exportTimeout = + options.PeriodicExportingMetricReaderOptions.ExportTimeoutMilliseconds + ?? defaultExportTimeoutMilliseconds; + + var metricReader = new PeriodicExportingMetricReader(exporter, exportInterval, exportTimeout); + metricReader.Temporality = options.Temporality; + + return metricReader; + } +} diff --git a/src/OpenTelemetry/Metrics/MetricReaderOptions.cs b/src/OpenTelemetry/Metrics/MetricReaderOptions.cs index 0ca01e8b2..335f71bca 100644 --- a/src/OpenTelemetry/Metrics/MetricReaderOptions.cs +++ b/src/OpenTelemetry/Metrics/MetricReaderOptions.cs @@ -28,12 +28,7 @@ public class MetricReaderOptions public AggregationTemporality Temporality { get; set; } = AggregationTemporality.Cumulative; /// - /// Gets or sets the to use. Defaults to MetricReaderType.Periodic. + /// Gets the options. /// - public MetricReaderType MetricReaderType { get; set; } = MetricReaderType.Periodic; - - /// - /// Gets or sets the options. Ignored unless MetricReaderType is Periodic. - /// - public PeriodicExportingMetricReaderOptions PeriodicExportingMetricReaderOptions { get; set; } = new PeriodicExportingMetricReaderOptions(); + public PeriodicExportingMetricReaderOptions PeriodicExportingMetricReaderOptions { get; private set; } = new PeriodicExportingMetricReaderOptions(); } diff --git a/src/OpenTelemetry/Metrics/MetricReaderType.cs b/src/OpenTelemetry/Metrics/MetricReaderType.cs deleted file mode 100644 index 2e8524b6a..000000000 --- a/src/OpenTelemetry/Metrics/MetricReaderType.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright The OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -namespace OpenTelemetry.Metrics -{ - /// - /// Type of to be used. - /// - public enum MetricReaderType - { - /// - /// Use the . - /// This requires manually invoking MetricReader.Collect() to export metrics. - /// - Manual, - - /// - /// Uses the . - /// MetricReader.Collect() will be invoked on a defined interval. - /// - Periodic, - } -} diff --git a/src/OpenTelemetry/Metrics/PeriodicExportingMetricReader.cs b/src/OpenTelemetry/Metrics/PeriodicExportingMetricReader.cs index 40300d001..554c86cc9 100644 --- a/src/OpenTelemetry/Metrics/PeriodicExportingMetricReader.cs +++ b/src/OpenTelemetry/Metrics/PeriodicExportingMetricReader.cs @@ -52,7 +52,7 @@ namespace OpenTelemetry.Metrics { Guard.ThrowIfInvalidTimeout(exportIntervalMilliseconds); Guard.ThrowIfZero(exportIntervalMilliseconds); - Guard.ThrowIfOutOfRange(exportTimeoutMilliseconds, min: 0); + Guard.ThrowIfInvalidTimeout(exportTimeoutMilliseconds); if ((this.SupportedExportModes & ExportModes.Push) != ExportModes.Push) { diff --git a/src/OpenTelemetry/Metrics/PeriodicExportingMetricReaderOptions.cs b/src/OpenTelemetry/Metrics/PeriodicExportingMetricReaderOptions.cs index 1a2efa19b..a8072a0e4 100644 --- a/src/OpenTelemetry/Metrics/PeriodicExportingMetricReaderOptions.cs +++ b/src/OpenTelemetry/Metrics/PeriodicExportingMetricReaderOptions.cs @@ -20,7 +20,16 @@ namespace OpenTelemetry.Metrics { /// /// Gets or sets the metric export interval in milliseconds. + /// If not set, the default value depends on the type of metric exporter + /// associated with the metric reader. /// public int? ExportIntervalMilliseconds { get; set; } + + /// + /// Gets or sets the metric export timeout in milliseconds. + /// If not set, the default value depends on the type of metric exporter + /// associated with the metric reader. + /// + public int? ExportTimeoutMilliseconds { get; set; } } } diff --git a/test/Benchmarks/Metrics/HistogramBenchmarks.cs b/test/Benchmarks/Metrics/HistogramBenchmarks.cs index b4148433c..bb036558d 100644 --- a/test/Benchmarks/Metrics/HistogramBenchmarks.cs +++ b/test/Benchmarks/Metrics/HistogramBenchmarks.cs @@ -90,7 +90,6 @@ namespace Benchmarks.Metrics .AddMeter(this.meter.Name) .AddInMemoryExporter(exportedItems, metricReaderOptions => { - metricReaderOptions.MetricReaderType = MetricReaderType.Periodic; metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000; }) .AddView(this.histogram.Name, new ExplicitBucketHistogramConfiguration() { Boundaries = this.bounds }) diff --git a/test/Benchmarks/Metrics/MetricsBenchmarks.cs b/test/Benchmarks/Metrics/MetricsBenchmarks.cs index 9f61fe543..03063bbcb 100644 --- a/test/Benchmarks/Metrics/MetricsBenchmarks.cs +++ b/test/Benchmarks/Metrics/MetricsBenchmarks.cs @@ -74,7 +74,6 @@ namespace Benchmarks.Metrics .AddMeter(this.meter.Name) // All instruments from this meter are enabled. .AddInMemoryExporter(exportedItems, metricReaderOptions => { - metricReaderOptions.MetricReaderType = MetricReaderType.Periodic; metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000; metricReaderOptions.Temporality = this.AggregationTemporality; })