userver: userver/ugrpc/server/server_component.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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