Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::state_validator Class Reference

State validator for validating system state. More...

#include <data_consistency.h>

Collaboration diagram for kcenon::monitoring::state_validator:
Collaboration graph

Classes

struct  validation_rule
 

Public Types

using validation_func_t = std::function<validation_result()>
 
using repair_func_t = std::function<common::VoidResult()>
 

Public Member Functions

 state_validator (const std::string &name, const validation_config &config)
 
 ~state_validator ()
 
 state_validator (const state_validator &)=delete
 
state_validatoroperator= (const state_validator &)=delete
 
 state_validator (state_validator &&)=delete
 
state_validatoroperator= (state_validator &&)=delete
 
std::string get_name () const
 
bool add_validation_rule (const std::string &name, validation_func_t validation_func, repair_func_t repair_func=nullptr)
 
common::Result< std::unordered_map< std::string, validation_result > > validate ()
 
common::VoidResult start ()
 
common::VoidResult stop ()
 
common::Result< bool > is_healthy () const
 
validation_metricsget_metrics ()
 
const validation_metricsget_metrics () const
 

Private Attributes

std::string name_
 
validation_config config_
 
std::mutex mutex_
 
std::unordered_map< std::string, validation_rulevalidation_rules_
 
validation_metrics metrics_
 
std::atomic< bool > running_
 
std::thread validation_thread_
 
std::mutex cv_mutex_
 
std::condition_variable cv_
 

Detailed Description

State validator for validating system state.

Definition at line 350 of file data_consistency.h.

Member Typedef Documentation

◆ repair_func_t

using kcenon::monitoring::state_validator::repair_func_t = std::function<common::VoidResult()>

Definition at line 353 of file data_consistency.h.

◆ validation_func_t

Constructor & Destructor Documentation

◆ state_validator() [1/3]

kcenon::monitoring::state_validator::state_validator ( const std::string & name,
const validation_config & config )
inline

Definition at line 355 of file data_consistency.h.

356 : name_(name)
357 , config_(config)
358 , running_(false) {}

◆ ~state_validator()

kcenon::monitoring::state_validator::~state_validator ( )
inline

Definition at line 360 of file data_consistency.h.

360 {
361 stop();
362 }

References stop().

Here is the call graph for this function:

◆ state_validator() [2/3]

kcenon::monitoring::state_validator::state_validator ( const state_validator & )
delete

◆ state_validator() [3/3]

kcenon::monitoring::state_validator::state_validator ( state_validator && )
delete

Member Function Documentation

◆ add_validation_rule()

bool kcenon::monitoring::state_validator::add_validation_rule ( const std::string & name,
validation_func_t validation_func,
repair_func_t repair_func = nullptr )
inline

Definition at line 372 of file data_consistency.h.

374 {
375 std::unique_lock<std::mutex> lock(mutex_);
376 validation_rules_[name] = {std::move(validation_func), std::move(repair_func)};
377 return true;
378 }
std::unordered_map< std::string, validation_rule > validation_rules_

References mutex_, and validation_rules_.

Referenced by TEST_F(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

◆ get_metrics() [1/2]

validation_metrics & kcenon::monitoring::state_validator::get_metrics ( )
inline

Definition at line 453 of file data_consistency.h.

453{ return metrics_; }

References metrics_.

Referenced by TEST_F().

Here is the caller graph for this function:

◆ get_metrics() [2/2]

const validation_metrics & kcenon::monitoring::state_validator::get_metrics ( ) const
inline

Definition at line 454 of file data_consistency.h.

454{ return metrics_; }

References metrics_.

◆ get_name()

std::string kcenon::monitoring::state_validator::get_name ( ) const
inline

Definition at line 370 of file data_consistency.h.

370{ return name_; }

References name_.

◆ is_healthy()

common::Result< bool > kcenon::monitoring::state_validator::is_healthy ( ) const
inline

Definition at line 448 of file data_consistency.h.

448 {
449 // Simple health check - all validation rules should pass
450 return common::ok(true);
451 }

Referenced by TEST_F().

Here is the caller graph for this function:

◆ operator=() [1/2]

state_validator & kcenon::monitoring::state_validator::operator= ( const state_validator & )
delete

◆ operator=() [2/2]

state_validator & kcenon::monitoring::state_validator::operator= ( state_validator && )
delete

◆ start()

common::VoidResult kcenon::monitoring::state_validator::start ( )
inline

Definition at line 406 of file data_consistency.h.

406 {
407 if (running_.exchange(true)) {
408 return common::VoidResult::err(error_info(monitoring_error_code::already_started, "Validator already running").to_common_error());
409 }
410
411 validation_thread_ = std::thread([this]() {
412 while (running_) {
413 {
414 std::unique_lock<std::mutex> lock(cv_mutex_);
415 cv_.wait_for(lock, config_.validation_interval, [this]() {
416 return !running_.load();
417 });
418 }
419
420 if (!running_) {
421 break;
422 }
423
424 validate();
425 }
426 });
427
428 return common::ok();
429 }
common::Result< std::unordered_map< std::string, validation_result > > validate()
std::chrono::milliseconds validation_interval

References kcenon::monitoring::already_started, config_, cv_, cv_mutex_, running_, validate(), kcenon::monitoring::validation_config::validation_interval, and validation_thread_.

Referenced by TEST_F().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stop()

common::VoidResult kcenon::monitoring::state_validator::stop ( )
inline

Definition at line 431 of file data_consistency.h.

431 {
432 if (!running_.exchange(false)) {
433 return common::ok();
434 }
435
436 {
437 std::unique_lock<std::mutex> lock(cv_mutex_);
438 cv_.notify_all();
439 }
440
441 if (validation_thread_.joinable()) {
442 validation_thread_.join();
443 }
444
445 return common::ok();
446 }

References cv_, cv_mutex_, running_, and validation_thread_.

Referenced by TEST_F(), and ~state_validator().

Here is the caller graph for this function:

◆ validate()

common::Result< std::unordered_map< std::string, validation_result > > kcenon::monitoring::state_validator::validate ( )
inline

Definition at line 380 of file data_consistency.h.

380 {
381 std::unique_lock<std::mutex> lock(mutex_);
382
383 std::unordered_map<std::string, validation_result> results;
385
386 for (const auto& [name, rule] : validation_rules_) {
387 auto validation_result_value = rule.validation_func();
388 results[name] = validation_result_value;
389
390 // If validation failed and auto-repair is enabled
391 if (validation_result_value == validation_result::invalid &&
392 config_.enable_auto_repair && rule.repair_func) {
393 auto repair_result = rule.repair_func();
394 if (repair_result.is_ok()) {
396 // Re-validate after repair
397 auto after_repair = rule.validation_func();
398 results[name + "_after_repair"] = after_repair;
399 }
400 }
401 }
402
403 return common::ok(results);
404 }

References config_, kcenon::monitoring::validation_config::enable_auto_repair, kcenon::monitoring::invalid, metrics_, mutex_, kcenon::monitoring::validation_metrics::repair_operations, validation_rules_, and kcenon::monitoring::validation_metrics::validation_runs.

Referenced by start(), TEST_F(), and TEST_F().

Here is the caller graph for this function:

Member Data Documentation

◆ config_

validation_config kcenon::monitoring::state_validator::config_
private

Definition at line 463 of file data_consistency.h.

Referenced by start(), and validate().

◆ cv_

std::condition_variable kcenon::monitoring::state_validator::cv_
private

Definition at line 471 of file data_consistency.h.

Referenced by start(), and stop().

◆ cv_mutex_

std::mutex kcenon::monitoring::state_validator::cv_mutex_
private

Definition at line 470 of file data_consistency.h.

Referenced by start(), and stop().

◆ metrics_

validation_metrics kcenon::monitoring::state_validator::metrics_
private

Definition at line 466 of file data_consistency.h.

Referenced by get_metrics(), get_metrics(), and validate().

◆ mutex_

std::mutex kcenon::monitoring::state_validator::mutex_
private

Definition at line 464 of file data_consistency.h.

Referenced by add_validation_rule(), and validate().

◆ name_

std::string kcenon::monitoring::state_validator::name_
private

Definition at line 462 of file data_consistency.h.

Referenced by get_name().

◆ running_

std::atomic<bool> kcenon::monitoring::state_validator::running_
private

Definition at line 468 of file data_consistency.h.

Referenced by start(), and stop().

◆ validation_rules_

std::unordered_map<std::string, validation_rule> kcenon::monitoring::state_validator::validation_rules_
private

Definition at line 465 of file data_consistency.h.

Referenced by add_validation_rule(), and validate().

◆ validation_thread_

std::thread kcenon::monitoring::state_validator::validation_thread_
private

Definition at line 469 of file data_consistency.h.

Referenced by start(), and stop().


The documentation for this class was generated from the following file: