CPUSegment.cpp
Go to the documentation of this file.
1 // BaseClass
2 #include "CPUSegment.h"
3 
4 // ArmarX
7 
12 
14 {
17  Base(iceMemory, "LightweightSystemMonitor", "CPUUsage", nullptr, nullptr, 1000)
18  {
19  }
20 
21  void
23  const std::string& prefix)
24  {
25  defs->optional(pollFrequencyHz, prefix + "pollFrequencyHz", "The poll frequency in Hz");
26  }
27 
28  void
30  {
31  Base::init();
32 
33  pollFrequencyHz = std::clamp(pollFrequencyHz, 0.1f, 100.f);
34  cpuMonitoring->initCpuUsage();
35 
36  float sleepTime = (1000.f / pollFrequencyHz);
37 
39  this, &LightweightCpuMonitorProviderSegment::loop, sleepTime);
40  runningTask->start();
41  }
42 
43  void
44  LightweightCpuMonitorProviderSegment::loop()
45  {
47 
48  MemoryID providerId = segmentPtr->id();
49 
50  double usage = cpuMonitoring->getCurrentCpuUsage();
51  std::string model = cpuMonitoring->getCPUName();
52  std::vector<double> cores = cpuMonitoring->getCurrentMultiCoreUsage();
53 
54  auto data = std::make_shared<aron::data::Dict>();
55  data->addElement("model",
56  std::make_shared<aron::data::String>(model)); // TODO in seperate segment?
57  data->addElement("load", std::make_shared<aron::data::Double>(usage));
58 
59  auto list = std::make_shared<aron::data::List>();
60  for (const auto core : cores)
61  {
62  list->addElement(std::make_shared<aron::data::Double>(core));
63  }
64  data->addElement("coresLoad", list);
65 
66  ARMARX_DEBUG << "Current CPU load: " << usage << " (of model: " << model << ")";
67 
69  update.entityID = providerId.withEntityName("CurrentCpuLoad");
70  update.confidence = 1.0;
71  update.referencedTime = armem::Time::Now();
72  update.instancesData = {data};
73 
75  }
76 } // namespace armarx::armem::server::systemstate::segment
MotionFinder.h
armarx::armem::server::systemstate::segment::LightweightCpuMonitorProviderSegment::LightweightCpuMonitorProviderSegment
LightweightCpuMonitorProviderSegment(armem::server::MemoryToIceAdapter &iceMemory)
Definition: CPUSegment.cpp:15
armarx::armem::server::MemoryToIceAdapter
Helps connecting a Memory server to the Ice interface.
Definition: MemoryToIceAdapter.h:19
CPUSegment.h
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:51
list
list(APPEND SOURCES ${QT_RESOURCES}) set(COMPONENT_LIBS ArmarXGui ArmarXCoreObservers ArmarXCoreEigen3Variants PlotterController $
Definition: CMakeLists.txt:49
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
clamp
double clamp(double x, double a, double b)
Definition: point.hpp:136
memory_definitions.h
armarx::armem::server::segment::detail::SegmentBase< server::wm::ProviderSegment >::segmentPtr
server::wm::ProviderSegment * segmentPtr
Definition: SpecializedSegment.h:53
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::server::segment::detail::SegmentBase< server::wm::ProviderSegment >
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:184
armarx::armem::EntityUpdate
An update of an entity for a specific point in time.
Definition: Commit.h:25
All.h
armarx::armem::server::systemstate::segment::LightweightCpuMonitorProviderSegment::init
void init() override
Definition: CPUSegment.cpp:29
armarx::armem::base::detail::MemoryItem::id
MemoryID & id()
Definition: MemoryItem.h:25
armarx::armem::server::segment::SpecializedProviderSegment::init
virtual void init() override
Definition: SpecializedProviderSegment.cpp:56
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:68
memory_definitions.h
armarx::armem::MemoryID::withEntityName
MemoryID withEntityName(const std::string &name) const
Definition: MemoryID.cpp:425
PropertyDefinitionContainer.h
armarx::armem::server::systemstate::segment::LightweightCpuMonitorProviderSegment::defineProperties
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="") override
Definition: CPUSegment.cpp:22
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::PeriodicTask
Definition: ArmarXManager.h:70
ProxyPropertyDefinition.h
armarx::armem::base::ProviderSegmentBase::update
UpdateResult update(const EntityUpdate &update)
Updates an entity's history.
Definition: ProviderSegmentBase.h:252
armarx::armem::server::systemstate::segment
Definition: CPUSegment.cpp:13