Line data Source code
1 : // Licensed under the Apache License, Version 2.0
2 : // Copyright 2025, Michael Bushe, All rights reserved.
3 :
4 : import '../../otel.dart';
5 : import '../../resource/resource.dart';
6 : import '../meter_provider.dart';
7 : import '../metric_exporter.dart';
8 : import '../metric_reader.dart';
9 : import 'composite_metric_exporter.dart';
10 : import 'otlp/otlp_grpc_metric_exporter.dart';
11 : import 'otlp/otlp_grpc_metric_exporter_config.dart';
12 :
13 : /// Configuration for metrics exporters and readers.
14 : class MetricsConfiguration {
15 : /// Configures a MeterProvider with given settings.
16 : ///
17 : /// This configures everything needed for metrics pipeline:
18 : /// - An exporter (defaults to OtlpGrpcMetricExporter if none provided)
19 : /// - A reader (defaults to PeriodicExportingMetricReader if none provided)
20 : /// - Sets up resources on the MeterProvider
21 69 : static MeterProvider configureMeterProvider({
22 : String endpoint = 'http://localhost:4317',
23 : bool secure = false,
24 : MetricExporter? metricExporter,
25 : MetricReader? metricReader,
26 : Resource? resource,
27 : }) {
28 : // If no exporter is provided, create a default one
29 69 : metricExporter ??= _createDefaultExporter(endpoint, secure);
30 :
31 : // If no reader is provided, create a periodic exporting metric reader
32 58 : metricReader ??= PeriodicExportingMetricReader(
33 : metricExporter,
34 : interval: const Duration(seconds: 15),
35 : );
36 :
37 : // Get meter provider
38 69 : final meterProvider = OTel.meterProvider();
39 :
40 : // Set resource if provided
41 : if (resource != null) {
42 69 : meterProvider.resource = resource;
43 : }
44 :
45 : // Add the metric reader
46 69 : meterProvider.addMetricReader(metricReader);
47 :
48 : return meterProvider;
49 : }
50 :
51 : /// Creates the default metric exporter.
52 69 : static MetricExporter _createDefaultExporter(String endpoint, bool secure) {
53 : // Configure the OTLP gRPC exporter
54 69 : final otlpExporter = OtlpGrpcMetricExporter(
55 69 : OtlpGrpcMetricExporterConfig(
56 : endpoint: endpoint,
57 : insecure: !secure,
58 : timeoutMillis: 10000,
59 : ),
60 : );
61 :
62 : // Use a composite exporter for both OTLP and Console output
63 138 : return CompositeMetricExporter([
64 : otlpExporter,
65 69 : ConsoleMetricExporter(),
66 : ]);
67 : }
68 : }
|