Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 3
0
        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);
            });
        }