userver: components Namespace Reference
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
components Namespace Reference

Detailed Description

Contains functions and types to start a userver based service/tool.

Classes

class  AuthCheckerSettings
 Component that loads auth configuration settings from a components::Secdist component if the latter was registered in components::ComponentList. More...
 
class  CachingComponentBase
 Base class for caching components. More...
 
class  ClickHouse
 ClickHouse client component. More...
 
class  ComponentBase
 Base class for all application components, it depends on components::Logger and components::Tracer. More...
 
class  ComponentConfig
 
class  ComponentContext
 Class to retrieve other components. More...
 
class  ComponentList
 A list to keep a unique list of components to start with components::Run(), utils::DaemonMain() or components::RunOnce(). More...
 
class  ComponentsLoadCancelledException
 Exception that is thrown from components::ComponentContext::FindComponent() if a component load failed. More...
 
class  DefaultSecdistProvider
 Component that stores security related data (keys, passwords, ...). More...
 
class  DumpConfigurator
 Helper component that manages common configuration for userver dumps. More...
 
class  DynamicConfig
 Component that stores the dynamic config. More...
 
class  DynamicConfigClient
 Component that starts a clients::dynamic_config::Client client. More...
 
class  DynamicConfigClientUpdater
 Component that does a periodic update of runtime configs. More...
 
class  DynamicConfigUpdatesSinkBase
 Base class for components acting as dynamic config updates sinks. More...
 
class  FsCache
 Component for storing files in memory. More...
 
class  HttpClient
 Component that manages clients::http::Client. More...
 
struct  InMemoryConfig
 
class  Logging
 Logging component More...
 
class  LoggingConfigurator
 Helper component to configure logging. More...
 
class  ManagerControllerComponent
 Component that prepares the engine internals and starts all the other components. More...
 
class  Mongo
 MongoDB client component. More...
 
class  MongoCache
 Base class for all caches polling mongo collection More...
 
class  MultiMongo
 Dynamically configurable MongoDB client component. More...
 
class  PostgreCache
 Caching component for PostgreSQL. See Caching Component for PostgreSQL. More...
 
class  Postgres
 PosgreSQL client component. More...
 
class  ProcessStarter
 Component for getting the engine::subprocess::ProcessStarter. More...
 
class  RabbitMQ
 RabbitMQ (AMQP 0.9.1) client component. More...
 
class  RawComponentBase
 The base class for all components. Don't use it for application components, use ComponentBase instead. More...
 
class  Redis
 Valkey and Redis client component. More...
 
class  Secdist
 Component that stores security related data (keys, passwords, ...). More...
 
class  Server
 Component that listens for incoming requests, manages incoming connections and passes the requests to the appropriate handler. More...
 
class  SingleThreadedTaskProcessors
 Component that starts multiple single threaded task processors. More...
 
class  State
 
class  StatisticsStorage
 Component that keeps a utils::statistics::Storage storage for metrics. More...
 
class  SystemStatisticsCollector
 Component for system resource usage statistics collection. More...
 
class  TcpAcceptorBase
 Component for accepting incoming TCP connections. More...
 
class  TestsuiteSupport
 Testsuite support component. More...
 
class  Tracer
 Component that initializes the request tracing facilities. More...
 

Typedefs

using LoggableComponentBase = ComponentBase
 
using ComponentConfigMap = std::unordered_map<std::string, const ComponentConfig&>
 

Enumerations

enum class  ComponentHealth {
  kOk ,
  kFallback ,
  kFatal
}
 State of the component. More...
 
enum class  ConfigFileMode {
  kRequired ,
  kNotRequired
}
 
enum class  ValidationMode {
  kOnlyTurnedOn ,
  kAll
}
 
enum class  ServiceLifetimeStage {
  kLoading ,
  kOnAllComponentsLoadedIsRunning ,
  kRunning ,
  kGracefulShutdown ,
  kOnAllComponentsAreStoppingIsRunning ,
  kStopping
}
 All components pass through these stages during the service lifetime. More...
 

Functions

std::string_view GetCurrentComponentName (const ComponentContext &context)
 Equivalent to components::ComponentContext::GetComponentName, but works with forward declaration of the components::ComponentContext.
 
ValidationMode Parse (const yaml_config::YamlConfig &value, formats::parse::To< ValidationMode >)
 
ComponentConfig Parse (const yaml_config::YamlConfig &value, formats::parse::To< ComponentConfig >)
 
ComponentList MinimalServerComponentList ()
 Returns a list of components to start a basic HTTP server.
 
void Run (const std::string &config_path, const std::optional< std::string > &config_vars_path, const std::optional< std::string > &config_vars_override_path, const ComponentList &component_list)
 
void Run (const InMemoryConfig &config, const ComponentList &component_list)
 
void RunOnce (const std::string &config_path, const std::optional< std::string > &config_vars_path, const std::optional< std::string > &config_vars_override_path, const ComponentList &component_list)
 
void RunOnce (const InMemoryConfig &config, const ComponentList &component_list)
 
void RequestStop ()
 
ComponentList CommonComponentList ()
 Returns the most common list of components with runtime config updates and HTTP client.
 
ComponentList CommonServerComponentList ()
 Returns the most common list of components to start a fully functional server.
 
ComponentList MinimalComponentList ()
 Returns a list of components to do basic logging, component initialization and configuration.
 
std::string_view ToString (ServiceLifetimeStage)
 Converts a components::ServiceLifetimeStage to debug string for logging.
 

Variables

template<typename Component>
constexpr bool kHasValidate = false
 
template<typename Component>
constexpr bool kForceNoValidation = false
 
template<typename Component>
constexpr auto kConfigFileMode = ConfigFileMode::kRequired
 
template<>
constexpr bool kHasValidate< HttpClient > = true
 
template<>
constexpr bool kHasValidate< Postgres > = true
 
template<>
constexpr bool kHasValidate< TestsuiteSupport > = true
 
template<>
constexpr bool kHasValidate< Secdist > = true
 
template<>
constexpr auto kConfigFileMode< Secdist > = ConfigFileMode::kNotRequired
 
template<>
constexpr bool kHasValidate< DefaultSecdistProvider > = true
 
template<>
constexpr bool kHasValidate< DumpConfigurator > = true
 
template<>
constexpr bool kHasValidate< FsCache > = true
 
template<>
constexpr bool kHasValidate< LoggingConfigurator > = true
 }@
 
template<>
constexpr auto kConfigFileMode< ManagerControllerComponent > = ConfigFileMode::kNotRequired
 
template<>
constexpr bool kHasValidate< ProcessStarter > = true
 
template<>
constexpr bool kHasValidate< SingleThreadedTaskProcessors > = true
 
template<>
constexpr bool kHasValidate< StatisticsStorage > = true
 
template<>
constexpr auto kConfigFileMode< StatisticsStorage > = ConfigFileMode::kNotRequired
 
template<>
constexpr bool kHasValidate< DynamicConfigClient > = true
 
template<>
constexpr bool kHasValidate< DynamicConfig > = true
 
template<>
constexpr auto kConfigFileMode< DynamicConfig > = ConfigFileMode::kNotRequired
 
template<>
constexpr bool kHasValidate< DynamicConfigClientUpdater > = true
 
template<>
constexpr bool kHasValidate< Logging > = true
 
template<>
constexpr bool kHasValidate< Server > = true
 
template<>
constexpr bool kHasValidate< AuthCheckerSettings > = true
 
template<>
constexpr auto kConfigFileMode< AuthCheckerSettings > = ConfigFileMode::kNotRequired
 
template<>
constexpr bool kHasValidate< Tracer > = true
 
template<>
constexpr auto kConfigFileMode< Tracer > = ConfigFileMode::kNotRequired
 
template<>
constexpr bool kHasValidate< SystemStatisticsCollector > = true
 
const std::string kFetchAndParseStage = "fetch_and_parse"
 
constexpr std::chrono::milliseconds kCpuRelaxThreshold {10}
 
constexpr std::chrono::milliseconds kCpuRelaxInterval {2}
 
template<class MongoCacheTraits>
constexpr bool kHasValidate< MongoCache< MongoCacheTraits > > = true
 
template<>
constexpr bool kHasValidate< Mongo > = true
 
template<>
constexpr bool kHasValidate< MultiMongo > = true
 
template<typename PostgreCachePolicy>
constexpr bool kHasValidate< PostgreCache< PostgreCachePolicy > > = true
 
template<>
constexpr bool kHasValidate< Redis > = true
 
template<>
constexpr bool kHasValidate< ClickHouse > = true
 
template<typename Client>
constexpr bool kHasValidate< ugrpc::client::SimpleClientComponent< Client > > = true
 
template<>
constexpr bool kHasValidate< RabbitMQ > = true
 
template<>
constexpr bool kHasValidate< urabbitmq::ConsumerComponentBase > = true
 

Typedef Documentation

◆ ComponentConfigMap

using components::ComponentConfigMap = std::unordered_map<std::string, const ComponentConfig&>

Definition at line 29 of file component_config.hpp.

◆ LoggableComponentBase

Enumeration Type Documentation

◆ ComponentHealth

enum class components::ComponentHealth
strong

State of the component.

Enumerator
kOk 

component is alive and fine

kFallback 

component in fallback state, but the service keeps working

kFatal 

component is sick, service can not work without it

Definition at line 17 of file raw_component_base.hpp.

◆ ConfigFileMode

enum class components::ConfigFileMode
strong

Whether the static config for the component must always be present, or can be missing

Enumerator
kRequired 

component must be setup in config

kNotRequired 

component must be not setup in config

Definition at line 28 of file raw_component_base.hpp.

◆ ServiceLifetimeStage

All components pass through these stages during the service lifetime.

See also
Component system
Enumerator
kLoading 

Constructors are running for all registered components. Components can depend on each other at this stage by calling components::ComponentContext::FindComponent and friends.

If any component throws an exception, then the service transitions into ServiceLifetimeStage::kOnAllComponentsAreStoppingIsRunning stage.

kOnAllComponentsLoadedIsRunning 

components::ComponentBase::OnAllComponentsLoaded (noop by default) is running for all components. This stage starts after constructors for all components have completed without an exception.

The order of OnAllComponentsLoaded hooks invocations respects the order of components defined at ServiceLifetimeStage::kComponentsLoading stage.

kRunning 

This stage marks that all OnAllComponentsLoaded hooks (as described in ServiceLifetimeStage::kOnAllComponentsLoadedIsRunning) have completed successfully (without an exception). At this point the service is fully running.

This stage ends once the service receives a shutdown signal (SIGINT or SIGTERM).

kGracefulShutdown 

The service waits for graceful_shutdown_interval (0 by default) before continuing with the actual service shutdown in ServiceLifetimeStage::kOnAllComponentsAreStoppingIsRunning.

See also
components::ManagerControllerComponent

Example:

components_manager:
graceful_shutdown_interval: 10s
kOnAllComponentsAreStoppingIsRunning 

components::ComponentBase::OnAllComponentsAreStopping (noop by default) is running for all components. This stage starts once the service has received a shutdown signal (see ServiceLifetimeStage::kRunning) and ServiceLifetimeStage::kGracefulShutdown stage (if any) has completed.

If an error occurs during service startup, then OnAllComponentsAreStopping runs after components::ComponentBase::OnLoadingCancelled for all constructed components.

The order of OnAllComponentsAreStopping hooks invocations respects the order of components defined at ServiceLifetimeStage::kComponentsLoading stage (they run in the reverse-dependency order).

kStopping 

Destructors are running for all components. This stage starts once ServiceLifetimeStage::kOnAllComponentsAreStoppingIsRunning stage.

If an error occurs during service startup, then destructors run after ServiceLifetimeStage::kOnAllComponentsAreStoppingIsRunning for all constructed components.

The order of destructor invocations respects the order of components defined at ServiceLifetimeStage::kComponentsLoading stage (they run in the reverse-dependency order).

Definition at line 44 of file state.hpp.

◆ ValidationMode

enum class components::ValidationMode
strong

Definition at line 12 of file static_config_validator.hpp.

Function Documentation

◆ RequestStop()

void components::RequestStop ( )

Requests stop of the component system. The service will be eventually stopped.

◆ Run() [1/2]

void components::Run ( const InMemoryConfig & config,
const ComponentList & component_list )

Starts a server with the provided component list and config. Reopens the logging files on SIGUSR1.

See also
utils::DaemonMain

◆ Run() [2/2]

void components::Run ( const std::string & config_path,
const std::optional< std::string > & config_vars_path,
const std::optional< std::string > & config_vars_override_path,
const ComponentList & component_list )

Starts a server with the provided component list and config loaded from file. Reopens the logging files on SIGUSR1.

See also
utils::DaemonMain

◆ RunOnce() [1/2]

void components::RunOnce ( const InMemoryConfig & config,
const ComponentList & component_list )

Runs the component list once with the config.

See also
utils::DaemonMain

◆ RunOnce() [2/2]

void components::RunOnce ( const std::string & config_path,
const std::optional< std::string > & config_vars_path,
const std::optional< std::string > & config_vars_override_path,
const ComponentList & component_list )

Runs the component list once with the config loaded from file.

See also
utils::DaemonMain

Variable Documentation

◆ kConfigFileMode

template<typename Component>
auto components::kConfigFileMode< server::middlewares::SimpleHttpMiddlewareFactory< Middleware > > = ConfigFileMode::kRequired
inlineconstexpr

Specialize this to customize the loading of component settings

See also
Setup config file mode

Definition at line 78 of file raw_component_base.hpp.

◆ kConfigFileMode< AuthCheckerSettings >

◆ kConfigFileMode< DynamicConfig >

Definition at line 121 of file component.hpp.

◆ kConfigFileMode< ManagerControllerComponent >

◆ kConfigFileMode< Secdist >

Definition at line 61 of file component.hpp.

◆ kConfigFileMode< StatisticsStorage >

Definition at line 62 of file statistics_storage.hpp.

◆ kConfigFileMode< Tracer >

template<>
auto components::kConfigFileMode< Tracer > = ConfigFileMode::kNotRequired
inlineconstexpr

Definition at line 49 of file component.hpp.

◆ kCpuRelaxInterval

std::chrono::milliseconds components::kCpuRelaxInterval {2}
inlineconstexpr

Definition at line 31 of file base_mongo_cache.hpp.

◆ kCpuRelaxThreshold

std::chrono::milliseconds components::kCpuRelaxThreshold {10}
inlineconstexpr

Definition at line 30 of file base_mongo_cache.hpp.

◆ kFetchAndParseStage

const std::string components::kFetchAndParseStage = "fetch_and_parse"
inline

Definition at line 28 of file base_mongo_cache.hpp.

◆ kForceNoValidation

template<typename Component>
bool components::kForceNoValidation = false
inlineconstexpr

Specialize it for typename Component to skip validation of static config against schema from Component::GetStaticConfigSchema

See also
Static configs validation

Definition at line 72 of file raw_component_base.hpp.

◆ kHasValidate

template<typename Component>
bool components::kHasValidate< server::middlewares::SimpleHttpMiddlewareFactory< Middleware > > = false
inlineconstexpr

Specialize it for typename Component to validate static config against schema from Component::GetStaticConfigSchema

See also
Static configs validation

Definition at line 65 of file raw_component_base.hpp.

◆ kHasValidate< AuthCheckerSettings >

template<>
bool components::kHasValidate< AuthCheckerSettings > = true
inlineconstexpr

Definition at line 44 of file auth_checker_settings_component.hpp.

◆ kHasValidate< ClickHouse >

template<>
bool components::kHasValidate< ClickHouse > = true
inlineconstexpr

Definition at line 77 of file component.hpp.

◆ kHasValidate< DefaultSecdistProvider >

template<>
bool components::kHasValidate< DefaultSecdistProvider > = true
inlineconstexpr

Definition at line 75 of file provider_component.hpp.

◆ kHasValidate< DumpConfigurator >

template<>
bool components::kHasValidate< DumpConfigurator > = true
inlineconstexpr

Definition at line 47 of file dump_configurator.hpp.

◆ kHasValidate< DynamicConfig >

template<>
bool components::kHasValidate< DynamicConfig > = true
inlineconstexpr

Definition at line 118 of file component.hpp.

◆ kHasValidate< DynamicConfigClient >

template<>
bool components::kHasValidate< DynamicConfigClient > = true
inlineconstexpr

Definition at line 60 of file component.hpp.

◆ kHasValidate< DynamicConfigClientUpdater >

template<>
bool components::kHasValidate< DynamicConfigClientUpdater > = true
inlineconstexpr

Definition at line 135 of file component.hpp.

◆ kHasValidate< FsCache >

template<>
bool components::kHasValidate< FsCache > = true
inlineconstexpr

Definition at line 44 of file fs_cache.hpp.

◆ kHasValidate< HttpClient >

template<>
bool components::kHasValidate< HttpClient > = true
inlineconstexpr

Definition at line 86 of file component.hpp.

◆ kHasValidate< Logging >

template<>
bool components::kHasValidate< Logging > = true
inlineconstexpr

Definition at line 137 of file component.hpp.

◆ kHasValidate< LoggingConfigurator >

template<>
bool components::kHasValidate< LoggingConfigurator > = true
inlineconstexpr

}@

Definition at line 68 of file logging_configurator.hpp.

◆ kHasValidate< Mongo >

template<>
bool components::kHasValidate< Mongo > = true
inlineconstexpr

Definition at line 122 of file component.hpp.

◆ kHasValidate< MongoCache< MongoCacheTraits > >

template<class MongoCacheTraits>
bool components::kHasValidate< MongoCache< MongoCacheTraits > > = true
inlineconstexpr

Definition at line 160 of file base_mongo_cache.hpp.

◆ kHasValidate< MultiMongo >

template<>
bool components::kHasValidate< MultiMongo > = true
inlineconstexpr

Definition at line 224 of file component.hpp.

◆ kHasValidate< PostgreCache< PostgreCachePolicy > >

template<typename PostgreCachePolicy>
bool components::kHasValidate< PostgreCache< PostgreCachePolicy > > = true
inlineconstexpr

Definition at line 457 of file base_postgres_cache.hpp.

◆ kHasValidate< Postgres >

template<>
bool components::kHasValidate< Postgres > = true
inlineconstexpr

Definition at line 195 of file component.hpp.

◆ kHasValidate< ProcessStarter >

template<>
bool components::kHasValidate< ProcessStarter > = true
inlineconstexpr

Definition at line 43 of file process_starter.hpp.

◆ kHasValidate< RabbitMQ >

template<>
bool components::kHasValidate< RabbitMQ > = true
inlineconstexpr

Definition at line 77 of file component.hpp.

◆ kHasValidate< Redis >

template<>
bool components::kHasValidate< Redis > = true
inlineconstexpr

Definition at line 181 of file component.hpp.

◆ kHasValidate< Secdist >

template<>
bool components::kHasValidate< Secdist > = true
inlineconstexpr

Definition at line 58 of file component.hpp.

◆ kHasValidate< Server >

template<>
bool components::kHasValidate< Server > = true
inlineconstexpr

Definition at line 122 of file component.hpp.

◆ kHasValidate< SingleThreadedTaskProcessors >

template<>
bool components::kHasValidate< SingleThreadedTaskProcessors > = true
inlineconstexpr

Definition at line 51 of file single_threaded_task_processors.hpp.

◆ kHasValidate< StatisticsStorage >

template<>
bool components::kHasValidate< StatisticsStorage > = true
inlineconstexpr

Definition at line 59 of file statistics_storage.hpp.

◆ kHasValidate< SystemStatisticsCollector >

template<>
bool components::kHasValidate< SystemStatisticsCollector > = true
inlineconstexpr

Definition at line 70 of file system_statistics_collector.hpp.

◆ kHasValidate< TestsuiteSupport >

template<>
bool components::kHasValidate< TestsuiteSupport > = true
inlineconstexpr

Definition at line 97 of file testsuite_support.hpp.

◆ kHasValidate< Tracer >

template<>
bool components::kHasValidate< Tracer > = true
inlineconstexpr

Definition at line 46 of file component.hpp.

◆ kHasValidate< ugrpc::client::SimpleClientComponent< Client > >

template<typename Client>
bool components::kHasValidate< ugrpc::client::SimpleClientComponent< Client > > = true
inlineconstexpr

Definition at line 101 of file simple_client_component.hpp.

◆ kHasValidate< urabbitmq::ConsumerComponentBase >

template<>
bool components::kHasValidate< urabbitmq::ConsumerComponentBase > = true
inlineconstexpr

Definition at line 86 of file consumer_component_base.hpp.