144 std::lock_guard<std::mutex> lock(
mutex_);
151 std::lock_guard<std::mutex> lock(
mutex_);
156 auto now = std::chrono::steady_clock::now();
157 auto age = std::chrono::duration_cast<std::chrono::seconds>(now -
cache_time_);
216 template<
typename Func>
217 auto execute(Func&& func) -> common::Result<T> {
221 auto op_result = func();
223 if (op_result.is_ok()) {
232 }
catch (
const std::exception& e) {
246 template<
typename Func,
typename FallbackFunc>
251 auto op_result = func();
253 if (op_result.is_ok()) {
263 }
catch (
const std::exception& e) {
341 return common::Result<T>::err(err);
351 return common::Result<T>::err(err);
355 return common::Result<T>::err(err);
373 if (current < max_level) {
Alternative service fallback strategy.
alternative_service_strategy(alternative_func func)
alternative_func alternative_func_
common::Result< T > get_fallback(const error_info &, degradation_level) override
std::function< common::Result< T >()> alternative_func
Cached value fallback strategy.
std::chrono::steady_clock::time_point cache_time_
void update_cache(const T &value)
std::chrono::seconds ttl_
cached_value_strategy(std::chrono::seconds ttl=std::chrono::seconds(60))
common::Result< T > get_fallback(const error_info &, degradation_level) override
Default value fallback strategy.
default_value_strategy(T default_val)
common::Result< T > get_fallback(const error_info &, degradation_level) override
Error boundary implementation for resilient operations.
void force_degradation(degradation_level level)
Force degradation to a specific level.
degradation_level current_degradation_level_
void downgrade_degradation()
void upgrade_degradation()
auto execute(Func &&func, FallbackFunc &&fallback) -> common::Result< T >
Execute with custom fallback function.
const std::string & get_name() const
Get boundary name.
error_boundary_metrics metrics_
void set_error_handler(std::function< void(const error_info &, degradation_level)> handler)
Set error handler callback.
auto execute(Func &&func) -> common::Result< T >
Execute a function within the error boundary.
degradation_level get_degradation_level() const
Get current degradation level.
error_boundary(const std::string &name, const config &cfg)
std::function< void(const error_info &, degradation_level)> error_handler_
error_boundary_metrics get_metrics() const
Get metrics.
size_t consecutive_failures_
std::shared_ptr< fallback_strategy_interface< T > > fallback_strategy_
void set_fallback_strategy(std::shared_ptr< fallback_strategy_interface< T > > strategy)
Set fallback strategy.
error_boundary(const std::string &name)
common::Result< T > handle_failure(const common::error_info &err)
common::Result< bool > is_healthy() const
Check if the boundary is healthy.
Base interface for fallback strategies.
virtual common::Result< T > get_fallback(const error_info &err, degradation_level level)=0
virtual ~fallback_strategy_interface()=default
error_boundary_policy
Error boundary policies.
degradation_level
Degradation levels for error boundary.
@ emergency
Emergency condition, system-wide impact.
Result pattern type definitions for monitoring system.
Error boundary configuration.
bool enable_automatic_recovery
error_boundary_policy policy
std::chrono::milliseconds recovery_timeout
bool enable_fallback_logging
degradation_level max_degradation
std::chrono::seconds error_window
Error boundary metrics with atomic counters.
std::atomic< size_t > successful_operations
error_boundary_metrics(const error_boundary_metrics &other)
std::atomic< size_t > recovery_attempts
error_boundary_metrics()=default
error_boundary_metrics & operator=(const error_boundary_metrics &other)
double get_success_rate() const
std::atomic< size_t > recovered_operations
std::atomic< size_t > failed_operations
std::atomic< size_t > total_operations
Extended error information with context.
static error_info from_common_error(const common::error_info &common_err)
Create from common_system error_info.
common::error_info to_common_error() const
Convert to common_system error_info.