in health_metric_collector/src/cpu_metric_collector.cpp [43:63]
void CPUMetricCollector::CollectCpuUsage(const std::vector<CPUData> & entries1,
const std::vector<CPUData> & entries2)
{
const size_t num_of_entries = std::min(entries1.size(), entries2.size());
for (size_t i = 0; i < num_of_entries; ++i) {
const CPUData & e1 = entries1[i];
const CPUData & e2 = entries2[i];
const auto active_time = static_cast<float>(e2.GetActiveTime() - e1.GetActiveTime());
const auto idle_time = static_cast<float>(e2.GetIdleTime() - e1.GetIdleTime());
const float total_time = active_time + idle_time;
const float usage = 100.f * active_time / total_time;
ros_monitoring_msgs::MetricData md = mgr_.CreateMetric();
md.metric_name = BASE_METRIC_NAME + entries1[i].cpu;
md.unit = MetricData::UNIT_PERCENTAGE;
md.value = usage;
mgr_.AddMetric(md);
}
}