Common
common packages for kyubic
 
Loading...
Searching...
No Matches
system_check_base.hpp
Go to the documentation of this file.
1
10#ifndef _SYSTEM_CHECK_BASE_HPP
11#define _SYSTEM_CHECK_BASE_HPP
12
13#include <rclcpp/rclcpp.hpp>
14
16{
17
24{
25public:
26 virtual ~SystemCheckBase() {}
27
36 bool check(rclcpp::Node::SharedPtr node)
37 {
38 prepare_check(node);
39
40 // 1. Generate unique ID for this check instance
41 std::string id = get_unique_id();
42
43 // If ID is empty, disable caching and run normally
44 if (id.empty()) {
45 return check_impl(node);
46 }
47
48 // 2. Check Cache
49 {
50 std::lock_guard<std::mutex> lock(cache_mutex_);
51 if (results_cache_.count(id)) {
52 cache_msg_ = " (Cached) " + reports_cache_[id];
53 return results_cache_[id];
54 }
55 }
56
57 // 3. Execute the actual check logic (implemented in derived classes)
58 bool result = check_impl(node);
59
60 // 4. Save result to Cache
61 {
62 std::lock_guard<std::mutex> lock(cache_mutex_);
63 results_cache_[id] = result;
64 reports_cache_[id] = report(node);
65 }
66
67 return result;
68 }
69
75 std::string report(rclcpp::Node::SharedPtr node) { return report_impl(node) + cache_msg_; }
76
77protected:
83 virtual std::string get_unique_id() const { return ""; }
84
90 virtual void prepare_check([[maybe_unused]] rclcpp::Node::SharedPtr node) {};
91
98 virtual bool check_impl(rclcpp::Node::SharedPtr node) = 0;
99
106 virtual std::string report_impl(rclcpp::Node::SharedPtr node) = 0;
107
108private:
109 std::string cache_msg_ = "";
110
111 // Static members to share results across different plugin instances
112 inline static std::unordered_map<std::string, bool> results_cache_;
113 inline static std::unordered_map<std::string, std::string> reports_cache_;
114 inline static std::mutex cache_mutex_;
115}; // namespace system_health_check
116
117} // namespace system_health_check::base
118
119#endif // !_SYSTEM_CHECK_BASE_HPP
Abstract base class for all system check plugins.
Definition: system_check_base.hpp:24
std::string report(rclcpp::Node::SharedPtr node)
Generates a human-readable report of the check.
Definition: system_check_base.hpp:75
virtual std::string report_impl(rclcpp::Node::SharedPtr node)=0
Generates a detailed report of the check.
virtual bool check_impl(rclcpp::Node::SharedPtr node)=0
Actual implementation of the check logic.
virtual void prepare_check(rclcpp::Node::SharedPtr node)
Prepares the check before execution.
Definition: system_check_base.hpp:90
virtual std::string get_unique_id() const
Generates a unique identifier for the check instance.
Definition: system_check_base.hpp:83
virtual ~SystemCheckBase()
Definition: system_check_base.hpp:26
bool check(rclcpp::Node::SharedPtr node)
Executes the system check with caching support.
Definition: system_check_base.hpp:36
Definition: action_server_check_base.hpp:25