internal static MeterProviderBuilder AddOtlpExporter( MeterProviderBuilder builder, OtlpExporterOptions exporterOptions, MetricReaderOptions metricReaderOptions, Action <OtlpExporterOptions> configureExporter, Action <OtlpExporterOptions, MetricReaderOptions> configureExporterAndMetricReader, IServiceProvider serviceProvider, Func <BaseExporter <Metric>, BaseExporter <Metric> > configureExporterInstance = null) { if (configureExporterAndMetricReader != null) { configureExporterAndMetricReader.Invoke(exporterOptions, metricReaderOptions); } else { configureExporter?.Invoke(exporterOptions); } exporterOptions.TryEnableIHttpClientFactoryIntegration(serviceProvider, "OtlpMetricExporter"); BaseExporter <Metric> metricExporter = new OtlpMetricExporter(exporterOptions); if (configureExporterInstance != null) { metricExporter = configureExporterInstance(metricExporter); } var metricReader = PeriodicExportingMetricReaderHelper.CreatePeriodicExportingMetricReader( metricExporter, metricReaderOptions, DefaultExportIntervalMilliseconds, DefaultExportTimeoutMilliseconds); return(builder.AddReader(metricReader)); }
private static MeterProviderBuilder AddOtlpExporter(MeterProviderBuilder builder, OtlpExporterOptions options, Action <OtlpExporterOptions> configure = null) { configure?.Invoke(options); var metricExporter = new OtlpMetricExporter(options); var metricReader = new PeriodicExportingMetricReader(metricExporter, options.MetricExportIntervalMilliseconds); metricReader.PreferredAggregationTemporality = options.AggregationTemporality; return(builder.AddReader(metricReader)); }
private static MeterProviderBuilder AddOtlpExporter(MeterProviderBuilder builder, OtlpExporterOptions options, Action <OtlpExporterOptions> configure = null) { var initialEndpoint = options.Endpoint; configure?.Invoke(options); options.AppendExportPath(initialEndpoint, OtlpExporterOptions.MetricsExportPath); var metricExporter = new OtlpMetricExporter(options); var metricReader = options.MetricReaderType == MetricReaderType.Manual ? new BaseExportingMetricReader(metricExporter) : new PeriodicExportingMetricReader(metricExporter, options.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds); metricReader.Temporality = options.AggregationTemporality; return(builder.AddReader(metricReader)); }
public void UserHttpFactoryCalled() { OtlpExporterOptions options = new OtlpExporterOptions(); var defaultFactory = options.HttpClientFactory; int invocations = 0; options.Protocol = OtlpExportProtocol.HttpProtobuf; options.HttpClientFactory = () => { invocations++; return(defaultFactory()); }; using (var exporter = new OtlpMetricExporter(options)) { Assert.Equal(1, invocations); } using (var provider = Sdk.CreateMeterProviderBuilder() .AddOtlpExporter(o => { o.Protocol = OtlpExportProtocol.HttpProtobuf; o.HttpClientFactory = options.HttpClientFactory; }) .Build()) { Assert.Equal(2, invocations); } options.HttpClientFactory = null; Assert.Throws <InvalidOperationException>(() => { using var exporter = new OtlpMetricExporter(options); }); options.HttpClientFactory = () => null; Assert.Throws <InvalidOperationException>(() => { using var exporter = new OtlpMetricExporter(options); }); }