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

Your opinion will help to improve our service

Leave a feedback >

Detailed Description

Base classes that simplify implementation of functionality.

Classes

class  components::ComponentBase
 Base class for all application components, it depends on components::Logger and components::Tracer. More...
 
class  utils::TracefulException
 Exception that remembers the backtrace at the point of its construction. More...
 
class  server::handlers::HttpHandlerBase
 Base class for all the Userver HTTP Handlers. More...
 
class  ugrpc::client::MiddlewareBase
 Base class for client gRPC middleware. More...
 
class  ugrpc::server::MiddlewareBase
 Base class for server gRPC middleware. More...
 
class  middlewares::MiddlewareFactoryComponentBase< MiddlewareBaseType, HandlerInfo >
 Base class for middleware factory component. More...
 
class  server::handlers::HttpHandlerJsonBase
 Convenient base for handlers that accept requests with body in JSON format and respond with body in JSON format. More...
 
class  ugrpc::server::ServiceComponentBase
 Base class for all the gRPC service components. More...
 
struct  s3api::authenticators::Authenticator
 Base class for all authenticators - classes that sign the request with auth data. More...
 
class  cache::CacheUpdateTrait
 Base class for periodically updated caches. More...
 
class  components::CachingComponentBase< T >
 Base class for caching components. More...
 
class  cache::LruCacheComponent< Key, Value, Hash, Equal >
 Base class for LRU-cache components. More...
 
class  components::TcpAcceptorBase
 Component for accepting incoming TCP connections. More...
 
class  dist_lock::DistLockStrategyBase
 Interface for distributed lock strategies. More...
 
class  components::DynamicConfigUpdatesSinkBase
 Base class for components acting as dynamic config updates sinks. More...
 
class  engine::io::ReadableBase
 
class  engine::io::WritableBase
 
class  engine::io::RwBase
 
class  server::handlers::auth::digest::AuthCheckerBase
 Base class for digest authentication checkers. Implements a digest-authentication logic. More...
 
class  server::handlers::auth::digest::AuthStandaloneCheckerBase
 Class for digest authentication checker. Implements a stand-alone digest-authentication logic. More...
 
class  server::handlers::HttpHandlerFlatbufBase< InputType, ReturnType >
 Convenient base for handlers that accept requests with body in Flatbuffer format and respond with body in Flatbuffer format. More...
 
class  server::middlewares::PipelineBuilder
 Base class to build a server-wide middleware pipeline. One may inherit from it and implement any custom logic, if desired. More...
 
class  server::middlewares::HandlerPipelineBuilder
 Base class to build a per-handler middleware pipeline. One may inherit from it and implement any custom logic, if desired. By default the behavior is to use the server-wide pipeline. More...
 
class  server::middlewares::HttpMiddlewareBase
 Base class for a http middleware. More...
 
class  server::middlewares::HttpMiddlewareFactoryBase
 Base class for a http middleware-factory. More...
 
class  server::websocket::WebsocketHandlerBase
 Base class for WebSocket handler. More...
 
class  tracing::TracingManagerBase
 Base class for propagating trace context information in headers. More...
 
class  storages::mongo::DistLockComponentBase
 Base class for mongo-based distlock worker components. More...
 
class  storages::postgres::DistLockComponentBase
 Base class for postgres-based distlock worker components. More...
 
class  ugrpc::server::middlewares::access_log::Component
 Component for gRPC server logging. More...
 
class  ugrpc::server::middlewares::congestion_control::Component
 Component for gRPC server logging. More...
 
class  ugrpc::server::middlewares::headers_propagator::Component
 Component for gRPC server headers_propagator. More...
 
class  ugrpc::server::middlewares::log::Component
 Component for gRPC server logging. More...
 
class  urabbitmq::ConsumerBase
 Base class for your consumers. You should derive from it and override Process method, which gets called when a new message arrives from the broker. More...
 
class  urabbitmq::ConsumerComponentBase
 Base component for your consumers. Basically a ConsumerBase but in a nice component-ish way. More...
 
class  ydb::DistLockComponentBase
 Base class for YDB-based distlock worker components. More...
 

Typedefs

using ugrpc::client::MiddlewareFactoryComponentBase
 Factory that creates specific client middlewares for clients.
 
using ugrpc::server::middlewares::deadline_propagation::Component = SimpleMiddlewareFactoryComponent<Middleware>
 Component for gRPC server deadline propagation.
 
using ugrpc::server::MiddlewareFactoryComponentBase
 Factory that creates specific server middlewares for services.
 
using ugrpc::server::middlewares::baggage::Component = SimpleMiddlewareFactoryComponent<Middleware>
 Component for gRPC server baggage.
 

Typedef Documentation

◆ Component [1/2]

Component for gRPC server baggage.

The component does not have any options for service config.

Static configuration example:

grpc-server-baggage:
# Nothing
See also
gRPC server middlewares

Definition at line 27 of file component.hpp.

◆ Component [2/2]

Component for gRPC server deadline propagation.

See also
Deadline propagation

The component does not have any options for service config.

Static configuration example:

grpc-server-deadline-propagation:
# Nothing
See also
gRPC server middlewares

Definition at line 32 of file component.hpp.

◆ MiddlewareFactoryComponentBase [1/2]

Initial value:

Factory that creates specific client middlewares for clients.

Override ugrpc::client::SimpleMiddlewareFactoryComponent::CreateMiddleware to create middleware for your gRPC client. If you declare a static config for a middleware, you must override ugrpc::client::SimpleMiddlewareFactoryComponent::GetMiddlewareConfigSchema.

If you are not going to use static config, ugrpc::client::ClientInfo and your middleware is default constructible, just use ugrpc::client::SimpleMiddlewareFactoryComponent.

Example:

class ChaosComponent final : public ugrpc::client::MiddlewareFactoryComponentBase {
public:
static constexpr std::string_view kName = "grpc-chaos-client";
ChaosComponent(const components::ComponentConfig& config, const components::ComponentContext& context);
// Needed to pass static config options to the middleware.
yaml_config::Schema GetMiddlewareConfigSchema() const override;
static yaml_config::Schema GetStaticConfigSchema();
std::shared_ptr<const MiddlewareBase>
CreateMiddleware(const ugrpc::client::ClientInfo&, const yaml_config::YamlConfig& middleware_config) const override;
};
ChaosComponent::ChaosComponent(const components::ComponentConfig& config, const components::ComponentContext& context)
: ugrpc::client::MiddlewareFactoryComponentBase(config, context) {}
std::shared_ptr<const ugrpc::client::MiddlewareBase> ChaosComponent::CreateMiddleware(
const yaml_config::YamlConfig& middleware_config
) const {
return std::make_shared<ChaosMiddleware>(middleware_config["x-my-experiments-enabled"].As<bool>(false));
}
yaml_config::Schema ChaosComponent::GetMiddlewareConfigSchema() const { return GetStaticConfigSchema(); }
yaml_config::Schema ChaosComponent::GetStaticConfigSchema() {
type: object
description: gRPC service logger component
additionalProperties: false
properties:
x-my-experiments-enabled:
type: boolean
description: enable or disable feature
)");
}

Definition at line 138 of file base.hpp.

◆ MiddlewareFactoryComponentBase [2/2]

Initial value:

Factory that creates specific server middlewares for services.

Override CreateMiddleware to create middleware for your gRPC service. If you declare a static config for a middleware, you must override GetMiddlewareConfigSchema.

Note
If you are not going to use a static config, ugrpc::server::ServiceInfo and your middleware is default constructible, just use ugrpc::server::SimpleMiddlewareFactoryComponent.

Example:

struct MiddlewareConfig final {
std::vector<std::string> headers{};
};
class MetaFilterComponent final : public ugrpc::server::MiddlewareFactoryComponentBase {
public:
static constexpr std::string_view kName = "grpc-server-meta-filter";
MetaFilterComponent(const components::ComponentConfig& config, const components::ComponentContext& context);
static yaml_config::Schema GetStaticConfigSchema();
// Needed to pass static config options to the middleware.
yaml_config::Schema GetMiddlewareConfigSchema() const override;
std::shared_ptr<const MiddlewareBase> CreateMiddleware(
const ugrpc::server::ServiceInfo&,
const yaml_config::YamlConfig& middleware_config
) const override;
};
MiddlewareConfig Parse(const yaml_config::YamlConfig& value, formats::parse::To<MiddlewareConfig>) {
MiddlewareConfig config;
config.headers = value["headers"].As<std::vector<std::string>>();
return config;
}
MetaFilterComponent::MetaFilterComponent(
)
config,
context,
middlewares::MiddlewareDependencyBuilder()
.InGroup<middlewares::groups::User>()
.After<ugrpc::server::middlewares::headers_propagator::Component>()
) {}
std::shared_ptr<const ugrpc::server::MiddlewareBase> MetaFilterComponent::CreateMiddleware(
const yaml_config::YamlConfig& middleware_config
) const {
return std::make_shared<MetaFilter>(middleware_config.As<MiddlewareConfig>());
}
yaml_config::Schema MetaFilterComponent::GetMiddlewareConfigSchema() const { return GetStaticConfigSchema(); }
yaml_config::Schema MetaFilterComponent::GetStaticConfigSchema() {
type: object
description: gRPC service logger component
additionalProperties: false
properties:
headers:
type: array
description: headers names to filter
items:
type: string
description: header name
)");
}

And there is a possibility to override the middleware config per service:

        greeter-service:
            task-processor: main-task-processor
            greeting-prefix: Hello
            middlewares:
                grpc-server-meta-filter:
                    # The middleware of this service will get this header instead of 'global-header'
                    headers:
                      - specific-header
Examples
samples/grpc_middleware_service/src/middlewares/server/meta_filter.cpp.

Definition at line 156 of file base.hpp.