23#include <kcenon/common/interfaces/logger_interface.h>
24#include <kcenon/common/interfaces/global_logger_registry.h>
25#include <kcenon/common/interfaces/monitoring_interface.h>
43 using log_entry = kcenon::common::interfaces::log_entry;
47 std::cout <<
"[" <<
level_to_string(level) <<
"] " << message << std::endl;
48 return VoidResult::ok({});
52 std::string_view message,
55 << loc.file_name() <<
":" << loc.line() <<
" (" << loc.function_name() <<
") - "
56 << message << std::endl;
57 return VoidResult::ok({});
62 << entry.file <<
":" << entry.line <<
" (" << entry.function <<
") - "
63 << entry.message << std::endl;
64 return VoidResult::ok({});
73 return VoidResult::ok({});
82 return VoidResult::ok({});
87 return std::string(kcenon::common::interfaces::to_string(level));
103 std::cout <<
"[MONITORING] " << name <<
": " << value << std::endl;
105 return kcenon::common::ok();
109 const std::string& name,
111 const std::unordered_map<std::string, std::string>& tags)
override {
112 std::cout <<
"[MONITORING] " << name <<
": " << value;
116 for (
const auto& [k, v] : tags) {
117 if (!first) std::cout <<
", ";
118 std::cout << k <<
"=" << v;
123 std::cout << std::endl;
125 kcenon::common::interfaces::metric_value mv(name, value);
128 return kcenon::common::ok();
131 kcenon::common::Result<kcenon::common::interfaces::metrics_snapshot>
get_metrics()
override {
135 kcenon::common::Result<kcenon::common::interfaces::health_check_result>
check_health()
override {
136 kcenon::common::interfaces::health_check_result
result;
137 result.status = kcenon::common::interfaces::health_status::healthy;
138 result.message =
"Console monitoring active";
139 return kcenon::common::ok(
result);
144 return kcenon::common::ok();
155 std::cout <<
"\n=== Composition-Based Thread System Demo ===\n" << std::endl;
161 container.register_singleton<kcenon::common::interfaces::ILogger>(
162 std::make_shared<console_logger>());
165 container.register_singleton<kcenon::common::interfaces::IMonitor>(
166 std::make_shared<console_monitoring>());
170 auto pool = std::make_shared<thread_pool>(
"CompositionPool", context);
173 std::vector<std::unique_ptr<thread_worker>> workers;
174 for (
int i = 0; i < 4; ++i) {
175 workers.push_back(std::make_unique<thread_worker>());
178 auto r = pool->enqueue_batch(std::move(workers));
180 std::cerr <<
"enqueue_batch failed: " << r.error().message << std::endl;
187 auto r = pool->start();
189 std::cerr <<
"start failed: " << r.error().message << std::endl;
195 for (
int i = 0; i < 10; ++i) {
196 auto r = pool->enqueue(std::make_unique<callback_job>(
197 [i, &context]() -> kcenon::common::VoidResult {
198 context.log(log_level_v2::info,
199 "Processing job " + std::to_string(i));
202 std::this_thread::sleep_for(std::chrono::milliseconds(100));
204 return kcenon::common::ok();
208 std::cerr <<
"enqueue failed: " << r.error().message << std::endl;
213 std::this_thread::sleep_for(std::chrono::seconds(2));
217 auto r = pool->stop();
219 std::cerr <<
"stop failed: " << r.error().message << std::endl;
223 std::cout <<
"\n=== Basic Thread Pool Demo Complete ===\n" << std::endl;
307 std::cout <<
"\n=== Minimal Thread Pool (No Services) Demo ===\n" << std::endl;
313 auto pool = std::make_shared<thread_pool>(
"MinimalPool");
316 std::vector<std::unique_ptr<thread_worker>> workers;
317 for (
int i = 0; i < 2; ++i) {
318 workers.push_back(std::make_unique<thread_worker>());
321 auto r = pool->enqueue_batch(std::move(workers));
323 std::cerr <<
"enqueue_batch failed: " << r.error().message << std::endl;
329 auto r = pool->start();
331 std::cerr <<
"start failed: " << r.error().message << std::endl;
337 std::atomic<int> counter{0};
338 for (
int i = 0; i < 5; ++i) {
339 auto r = pool->enqueue(std::make_unique<callback_job>(
340 [&counter]() -> kcenon::common::VoidResult {
341 counter.fetch_add(1);
342 return kcenon::common::ok();
346 std::cerr <<
"enqueue failed: " << r.error().message << std::endl;
350 std::this_thread::sleep_for(std::chrono::milliseconds(500));
352 auto r = pool->stop();
354 std::cerr <<
"stop failed: " << r.error().message << std::endl;
358 std::cout <<
"Completed " << counter.load() <<
" jobs without any logging/monitoring" << std::endl;
359 std::cout <<
"\n=== Minimal Demo Complete ===\n" << std::endl;
372 std::cout <<
"\nAll demos completed successfully!" << std::endl;
374 }
catch (
const std::exception& e) {
375 std::cerr <<
"Error: " << e.what() << std::endl;
Specialized job class that encapsulates user-defined callbacks.
Simple console logger implementation using common_system ILogger.
common_log_level min_level_
kcenon::common::source_location source_location
VoidResult log(const log_entry &entry) override
kcenon::common::VoidResult VoidResult
VoidResult flush() override
VoidResult log(common_log_level level, std::string_view message, const source_location &loc=source_location::current()) override
VoidResult log(common_log_level level, const std::string &message) override
bool is_enabled(common_log_level) const override
common_log_level get_level() const override
kcenon::common::interfaces::log_entry log_entry
VoidResult set_level(common_log_level level) override
std::string level_to_string(common_log_level level) const
Simple monitoring implementation using common::interfaces::IMonitor.
kcenon::common::interfaces::metrics_snapshot snapshot_
kcenon::common::Result< kcenon::common::interfaces::metrics_snapshot > get_metrics() override
kcenon::common::VoidResult VoidResult
VoidResult reset() override
VoidResult record_metric(const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags) override
kcenon::common::Result< kcenon::common::interfaces::health_check_result > check_health() override
VoidResult record_metric(const std::string &name, double value) override
A template class representing either a value or an error.
void clear()
Clear all registered services.
static service_container & global()
Get the global service container instance.
Context object that provides access to optional services.
void demonstrate_composition()
Demonstrate composition-based design.
void demonstrate_minimal_usage()
Demonstrate using thread pool without any services.
kcenon::common::interfaces::log_level common_log_level
Core thread pool implementation with work stealing and auto-scaling.
Logging severity levels for the thread system.
Core threading foundation of the thread system library.
Service container for dependency injection within the thread system.
Context object providing access to optional thread system services.