Line data Source code
1 : #include "source/extensions/stat_sinks/metrics_service/config.h" 2 : 3 : #include "envoy/config/metrics/v3/metrics_service.pb.h" 4 : #include "envoy/config/metrics/v3/metrics_service.pb.validate.h" 5 : #include "envoy/registry/registry.h" 6 : 7 : #include "source/common/common/assert.h" 8 : #include "source/common/config/utility.h" 9 : #include "source/common/grpc/async_client_impl.h" 10 : #include "source/common/network/resolver_impl.h" 11 : #include "source/extensions/stat_sinks/metrics_service/grpc_metrics_proto_descriptors.h" 12 : #include "source/extensions/stat_sinks/metrics_service/grpc_metrics_service_impl.h" 13 : 14 : namespace Envoy { 15 : namespace Extensions { 16 : namespace StatSinks { 17 : namespace MetricsService { 18 : 19 : Stats::SinkPtr 20 : MetricsServiceSinkFactory::createStatsSink(const Protobuf::Message& config, 21 0 : Server::Configuration::ServerFactoryContext& server) { 22 0 : validateProtoDescriptors(); 23 : 24 0 : const auto& sink_config = 25 0 : MessageUtil::downcastAndValidate<const envoy::config::metrics::v3::MetricsServiceConfig&>( 26 0 : config, server.messageValidationContext().staticValidationVisitor()); 27 0 : const auto& grpc_service = sink_config.grpc_service(); 28 0 : THROW_IF_NOT_OK(Config::Utility::checkTransportVersion(sink_config)); 29 0 : ENVOY_LOG(debug, "Metrics Service gRPC service configuration: {}", grpc_service.DebugString()); 30 : 31 0 : std::shared_ptr<GrpcMetricsStreamer<envoy::service::metrics::v3::StreamMetricsMessage, 32 0 : envoy::service::metrics::v3::StreamMetricsResponse>> 33 0 : grpc_metrics_streamer = std::make_shared<GrpcMetricsStreamerImpl>( 34 0 : server.clusterManager().grpcAsyncClientManager().getOrCreateRawAsyncClient( 35 0 : grpc_service, server.scope(), false), 36 0 : server.localInfo()); 37 : 38 0 : return std::make_unique<MetricsServiceSink<envoy::service::metrics::v3::StreamMetricsMessage, 39 0 : envoy::service::metrics::v3::StreamMetricsResponse>>( 40 0 : grpc_metrics_streamer, 41 0 : PROTOBUF_GET_WRAPPED_OR_DEFAULT(sink_config, report_counters_as_deltas, false), 42 0 : sink_config.emit_tags_as_labels(), sink_config.histogram_emit_mode()); 43 0 : } 44 : 45 2 : ProtobufTypes::MessagePtr MetricsServiceSinkFactory::createEmptyConfigProto() { 46 2 : return std::unique_ptr<envoy::config::metrics::v3::MetricsServiceConfig>( 47 2 : std::make_unique<envoy::config::metrics::v3::MetricsServiceConfig>()); 48 2 : } 49 : 50 42 : std::string MetricsServiceSinkFactory::name() const { return MetricsServiceName; } 51 : 52 : /** 53 : * Static registration for the this sink factory. @see RegisterFactory. 54 : */ 55 : LEGACY_REGISTER_FACTORY(MetricsServiceSinkFactory, Server::Configuration::StatsSinkFactory, 56 : "envoy.metrics_service"); 57 : 58 : } // namespace MetricsService 59 : } // namespace StatSinks 60 : } // namespace Extensions 61 : } // namespace Envoy