#include <iostream>
kcenon::common::Result<double>
divide(
double a,
double b) {
if (b == 0) {
return kcenon::common::Result<double>::err(
error_info(monitoring_error_code::invalid_configuration,
"Division by zero").to_common_error());
}
return kcenon::common::ok(a / b);
}
kcenon::common::VoidResult
validate_range(
double value,
double min,
double max) {
if (value < min || value > max) {
error_info err(monitoring_error_code::invalid_configuration,
"Value out of range [" + std::to_string(min) + ", " + std::to_string(max) + "]");
return kcenon::common::VoidResult::err(err.to_common_error());
}
return kcenon::common::ok();
}
.map([](double x) { return x * 2; })
.and_then([](double x) {
if (x > 50) {
return kcenon::common::ok("High value: " + std::to_string(x));
}
return kcenon::common::ok("Normal value: " + std::to_string(x));
});
}
std::cout << "=== Result Pattern Example ===" << std::endl << std::endl;
std::cout << "Example 1: Successful division" << std::endl;
auto result1 =
divide(10.0, 2.0);
if (result1.is_ok()) {
std::cout << " Result: " << result1.value() << std::endl;
} else {
std::cout << " Error: " << result1.error().message << std::endl;
}
std::cout << std::endl;
std::cout << "Example 2: Division by zero" << std::endl;
auto result2 =
divide(10.0, 0.0);
if (result2.is_ok()) {
std::cout << " Result: " << result2.value() << std::endl;
} else {
std::cout << " Error: " << result2.error().message << std::endl;
}
std::cout << std::endl;
std::cout << "Example 3: Using value_or with default" << std::endl;
auto result3 =
divide(5.0, 0.0);
double value = result3.value_or(-1.0);
std::cout << " Value (with default): " << value << std::endl;
std::cout << std::endl;
std::cout << "Example 4: Validation with kcenon::common::VoidResult" << std::endl;
if (validation1.is_ok()) {
std::cout << " Validation passed" << std::endl;
} else {
std::cout << " Validation failed: " << validation1.error().message << std::endl;
}
if (validation2.is_ok()) {
std::cout << " Validation passed" << std::endl;
} else {
std::cout << " Validation failed: " << validation2.error().message << std::endl;
}
std::cout << std::endl;
std::cout << "Example 5: Chaining operations" << std::endl;
if (result4.is_ok()) {
std::cout << " " << result4.value() << std::endl;
} else {
std::cout << " Error: " << result4.error().message << std::endl;
}
if (result5.is_ok()) {
std::cout << " " << result5.value() << std::endl;
} else {
std::cout << " Error: " << result5.error().message << std::endl;
}
std::cout << std::endl;
std::cout << "Example 6: Metrics snapshot" << std::endl;
std::cout <<
" Metrics collected: " << snapshot.
metrics.size() << std::endl;
if (
auto cpu = snapshot.
get_metric(
"cpu_usage")) {
std::cout <<
" CPU Usage: " <<
cpu.value() <<
"%" << std::endl;
}
if (
auto mem = snapshot.
get_metric(
"memory_usage")) {
std::cout << " Memory Usage: " << mem.value() << " MB" << std::endl;
}
std::cout << std::endl;
std::cout << "Example 7: Configuration validation" << std::endl;
if (config_result.is_ok()) {
std::cout << " Configuration is valid" << std::endl;
std::cout <<
" - History size: " << config.
history_size << std::endl;
std::cout <<
" - Collection interval: " << config.
collection_interval.count() <<
"ms" << std::endl;
std::cout <<
" - Buffer size: " << config.
buffer_size << std::endl;
} else {
std::cout << " Configuration error: " << config_result.error().message << std::endl;
}
return 0;
}
Monitoring system specific error codes.
Core monitoring system interface definitions.
@ cpu
CPU power domain (RAPL)
kcenon::common::Result< double > divide(double a, double b)
kcenon::common::VoidResult validate_range(double value, double min, double max)
kcenon::common::Result< std::string > process_metric(double value)
Result pattern type definitions for monitoring system.
Extended error information with context.
Complete snapshot of metrics at a point in time.
std::optional< double > get_metric(const std::string &name) const
Get a specific metric value.
std::vector< metric_value > metrics
void add_metric(const std::string &name, double value)
Add a metric to the snapshot.
Configuration for the monitoring system.
std::chrono::milliseconds collection_interval
common::VoidResult validate() const
Validate configuration parameters.