userver: userver/ugrpc/server/server_component.hpp Source File
Loading...
Searching...
No Matches
server_component.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/ugrpc/server/server_component.hpp
4/// @brief @copybrief ugrpc::server::ServerComponent
5
6#include <userver/components/loggable_component_base.hpp>
7
8#include <userver/ugrpc/server/server.hpp>
9
10USERVER_NAMESPACE_BEGIN
11
12namespace ugrpc::server {
13
14namespace impl {
15struct ServiceDefaults;
16} // namespace impl
17
18// clang-format off
19
20/// @ingroup userver_components
21///
22/// @brief Component that configures and manages the gRPC server.
23///
24/// ## Static options:
25/// The component name for static config is `"grpc-server"`.
26///
27/// Name | Description | Default value
28/// ---- | ----------- | -------------
29/// access-tskv-logger | logger name for access-tskv.log | -
30/// port | the port to use for all gRPC services, or 0 to pick any available | -
31/// channel-args | a map of channel arguments, see gRPC Core docs | {}
32/// native-log-level | min log level for the native gRPC library | 'error'
33/// enable-channelz | initialize service with runtime info about gRPC connections | false
34/// service-defaults | default config values for gRPC services, see config schema | {}
35///
36/// @see https://grpc.github.io/grpc/core/group__grpc__arg__keys.html
37
38// clang-format on
39class ServerComponent final : public components::LoggableComponentBase {
40 public:
41 static constexpr std::string_view kName = "grpc-server";
42
43 ServerComponent(const components::ComponentConfig& config,
44 const components::ComponentContext& context);
45
46 ~ServerComponent() override;
47
48 /// @returns The contained Server instance
49 /// @note All configuration must be performed at the components loading stage
50 Server& GetServer() noexcept;
51
52 /// @cond
53 ServiceConfig ParseServiceConfig(const components::ComponentConfig& config,
54 const components::ComponentContext& context);
55 /// @endcond
56
57 static yaml_config::Schema GetStaticConfigSchema();
58
59 private:
60 void OnAllComponentsLoaded() override;
61
62 void OnAllComponentsAreStopping() override;
63
64 Server server_;
65 std::unique_ptr<impl::ServiceDefaults> service_defaults_;
66};
67
68} // namespace ugrpc::server
69
70template <>
71inline constexpr bool components::kHasValidate<ugrpc::server::ServerComponent> =
72 true;
73
74USERVER_NAMESPACE_END