Line data Source code
1 : #include "source/extensions/stat_sinks/open_telemetry/config.h" 2 : 3 : #include "envoy/registry/registry.h" 4 : 5 : #include "source/extensions/stat_sinks/open_telemetry/open_telemetry_impl.h" 6 : #include "source/extensions/stat_sinks/open_telemetry/open_telemetry_proto_descriptors.h" 7 : 8 : namespace Envoy { 9 : namespace Extensions { 10 : namespace StatSinks { 11 : namespace OpenTelemetry { 12 : 13 : Stats::SinkPtr 14 : OpenTelemetrySinkFactory::createStatsSink(const Protobuf::Message& config, 15 0 : Server::Configuration::ServerFactoryContext& server) { 16 0 : validateProtoDescriptors(); 17 : 18 0 : const auto& sink_config = MessageUtil::downcastAndValidate<const SinkConfig&>( 19 0 : config, server.messageValidationContext().staticValidationVisitor()); 20 : 21 0 : auto otlp_options = std::make_shared<OtlpOptions>(sink_config); 22 0 : std::shared_ptr<OtlpMetricsFlusher> otlp_metrics_flusher = 23 0 : std::make_shared<OtlpMetricsFlusherImpl>(otlp_options); 24 : 25 0 : switch (sink_config.protocol_specifier_case()) { 26 0 : case SinkConfig::ProtocolSpecifierCase::kGrpcService: { 27 0 : const auto& grpc_service = sink_config.grpc_service(); 28 : 29 0 : std::shared_ptr<OpenTelemetryGrpcMetricsExporter> grpc_metrics_exporter = 30 0 : std::make_shared<OpenTelemetryGrpcMetricsExporterImpl>( 31 0 : otlp_options, 32 0 : server.clusterManager().grpcAsyncClientManager().getOrCreateRawAsyncClient( 33 0 : grpc_service, server.scope(), false)); 34 : 35 0 : return std::make_unique<OpenTelemetryGrpcSink>(otlp_metrics_flusher, grpc_metrics_exporter); 36 0 : } 37 : 38 0 : default: 39 0 : break; 40 0 : } 41 : 42 0 : throw EnvoyException("unexpected Open Telemetry protocol case num"); 43 0 : } 44 : 45 2 : ProtobufTypes::MessagePtr OpenTelemetrySinkFactory::createEmptyConfigProto() { 46 2 : return std::make_unique<SinkConfig>(); 47 2 : } 48 : 49 42 : std::string OpenTelemetrySinkFactory::name() const { return OpenTelemetryName; } 50 : 51 : /** 52 : * Static registration for the this sink factory. @see RegisterFactory. 53 : */ 54 : LEGACY_REGISTER_FACTORY(OpenTelemetrySinkFactory, Server::Configuration::StatsSinkFactory, 55 : "envoy.open_telemetry_stat_sink"); 56 : 57 : } // namespace OpenTelemetry 58 : } // namespace StatSinks 59 : } // namespace Extensions 60 : } // namespace Envoy