45 return "ProfilerObserver";
51 usingTopic(armarx::Profiler::PROFILER_TOPIC_NAME);
58 "Channel reporting the currently active state of statecharts with EnableProfiling "
63 "Name of the currently active state");
74 const std::string& protocol,
87 id, protocol +
"_inBytes",
Variant(inBytes),
"Incoming network traffic");
89 id, protocol +
"_outBytes",
Variant(outBytes),
"Outgoing network traffic");
101 std::string stateIdentifier =
event.parentName;
104 createStateChannelIfRequired(stateIdentifier);
106 int microsecondsModifier = 0;
107 if (event.timestampUnit ==
"ms")
109 microsecondsModifier = 1000;
111 else if (event.timestampUnit ==
"us")
113 microsecondsModifier = 1;
117 if (event.functionName ==
134 ARMARX_INFO <<
"Updating function info channel " << stateIdentifier;
146 std::string
id = process.processName + std::to_string(process.processId);
150 createResourceChannelIfRequired(
id);
165 std::string
id = memoryUsage.processName + std::to_string(memoryUsage.processId);
169 createResourceChannelIfRequired(
id);
186 Variant activeSubstate(transition.targetStateIdentifier);
187 setDataField(
"activeStateChanged",
"activeState", activeSubstate);
190 std::string stateIdentifier = transition.parentStateIdentifier;
191 createStateChannelIfRequired(stateIdentifier);
193 setDataField(stateIdentifier,
"activeSubstate", activeSubstate);
195 stateIdentifier,
"previousSubstate",
Variant(transition.sourceStateIdentifier));
198 ARMARX_INFO <<
"Updating Transition info channel " << stateIdentifier;
207armarx::ProfilerObserver::StateParameterToVariantMap(
const armarx::StateParameterMap& parameterMap,
210 for (
auto& entry : parameterMap)
212 variantMap.
addElement(entry.first, entry.second->value);
218 const ProfilerStatechartParameters& inputParameters,
223 createStateChannelIfRequired(inputParameters.stateIdentifier);
226 StateParameterToVariantMap(inputParameters.parameterMap, parameters);
227 setDataField(inputParameters.stateIdentifier,
"inputParameters", parameters);
239 const ProfilerStatechartParameters& localParameters,
244 createStateChannelIfRequired(localParameters.stateIdentifier);
247 StateParameterToVariantMap(localParameters.parameterMap, parameters);
248 setDataField(localParameters.stateIdentifier,
"localParameters", parameters);
260 const ProfilerStatechartParameters& outputParameters,
265 createStateChannelIfRequired(outputParameters.stateIdentifier);
268 StateParameterToVariantMap(outputParameters.parameterMap, parameters);
269 setDataField(outputParameters.stateIdentifier,
"outputParameters", parameters);
280 const armarx::ProfilerStatechartTransitionWithParameters& outputParameters,
287armarx::ProfilerObserver::createStateChannelIfRequired(
const std::string& channelName)
289 std::unique_lock lock(channelCheckMutex);
290 if (existsChannel(channelName))
295 offerChannel(channelName,
"Statechart State Channel");
297 offerDataField(channelName,
"activeSubstate",
VariantType::String,
"Currently Active Substate");
298 offerDataField(channelName,
"previousSubstate",
VariantType::String,
"Last Active Substate");
299 offerDataField(channelName,
"lastEventName",
VariantType::String,
"Last Event/Transition Name");
306 offerDataField(channelName,
307 "lastEnterTimestamp",
309 "Timestamp of when onEnter() of the state was last called");
310 offerDataField(channelName,
313 "Timestamp of when onExit() or onBreak() of the state was last called");
317armarx::ProfilerObserver::createResourceChannelIfRequired(
const std::string& channelName)
319 std::unique_lock lock(channelCheckMutex);
320 if (existsChannel(channelName))
325 offerChannel(channelName,
"Resource Information");
327 offerDataField(channelName,
330 "Cpu Usage of process specified by the channelname");
331 offerDataField(channelName,
334 "Memory Usage of process specified by the channelname");
346 const armarx::ProfilerStatechartTransitionList& transitions,
349 armarx::ProfilerStatechartTransition lastTransition = transitions.back();
351 "activeStateChanged",
"activeState",
Variant(lastTransition.targetStateIdentifier));
357 const ProfilerStatechartParametersList& inputParametersList,
361 auto compareFunction =
362 [](
const ProfilerStatechartParameters& lhs,
const ProfilerStatechartParameters& rhs)
363 {
return lhs.stateIdentifier < rhs.stateIdentifier; };
364 std::set<ProfilerStatechartParameters,
decltype(compareFunction)> latestElements(
365 inputParametersList.rbegin(), inputParametersList.rend(), compareFunction);
367 for (
const auto& element : latestElements)
375 const ProfilerStatechartParametersList& localParametersList,
379 auto compareFunction =
380 [](
const ProfilerStatechartParameters& lhs,
const ProfilerStatechartParameters& rhs)
381 {
return lhs.stateIdentifier < rhs.stateIdentifier; };
382 std::set<ProfilerStatechartParameters,
decltype(compareFunction)> latestElements(
383 localParametersList.rbegin(), localParametersList.rend(), compareFunction);
385 for (
const auto& element : latestElements)
393 const ProfilerStatechartParametersList& outputParametersList,
397 auto compareFunction =
398 [](
const ProfilerStatechartParameters& lhs,
const ProfilerStatechartParameters& rhs)
399 {
return lhs.stateIdentifier < rhs.stateIdentifier; };
400 std::set<ProfilerStatechartParameters,
decltype(compareFunction)> latestElements(
401 outputParametersList.rbegin(), outputParametersList.rend(), compareFunction);
403 for (
const auto& element : latestElements)
411 const armarx::ProfilerStatechartTransitionWithParametersList& outputParameters,
422 auto compareFunction =
423 [](
const ProfilerProcessCpuUsage& lhs,
const ProfilerProcessCpuUsage& rhs)
424 {
return lhs.processId < rhs.processId; };
425 std::set<ProfilerProcessCpuUsage,
decltype(compareFunction)> latestElements(
426 processes.rbegin(), processes.rend(), compareFunction);
428 for (
const auto& element : latestElements)
436 const ProfilerProcessMemoryUsageList& memoryUsages,
440 auto compareFunction =
441 [](
const ProfilerProcessMemoryUsage& lhs,
const ProfilerProcessMemoryUsage& rhs)
442 {
return lhs.processId < rhs.processId; };
443 std::set<ProfilerProcessMemoryUsage,
decltype(compareFunction)> latestElements(
444 memoryUsages.rbegin(), memoryUsages.rend(), compareFunction);
446 for (
const auto& element : latestElements)
Checks if the relevant data fields have been updated since the installation of this condition.
Checks if the numbers published in the relevant data fields equal a reference value.
Checks if the relevant data fields have been updated since the installation of this condition.
Checks if the relevant data fields contain valid values.
DataFieldIdentifier provide the basis to identify data field within a distributed ArmarX scenario.
void usingTopic(const std::string &name, bool orderedPublishing=false)
Registers a proxy for subscription after initialization.
std::string getName() const
Retrieve name of object.
bool existsChannel(const std::string &channelName) const
void offerChannel(std::string channelName, std::string description)
Offer a channel.
void offerDataField(std::string channelName, std::string datafieldName, VariantTypeId type, std::string description)
Offer a datafield without default value.
void offerConditionCheck(std::string checkName, ConditionCheck *conditionCheck)
Offer a condition check.
void updateChannel(const std::string &channelName, const std::set< std::string > &updatedDatafields=std::set< std::string >())
Update all conditions for a channel.
TimedVariantBasePtr getDataField(const DataFieldIdentifierBasePtr &identifier, const Ice::Current &c=Ice::emptyCurrent) const
Retrieve data field from observer.
void setDataField(const std::string &channelName, const std::string &datafieldName, const Variant &value, bool triggerFilterUpdate=true)
set datafield with datafieldName and in channel channelName
void setDataFieldFlatCopy(const std::string &channelName, const std::string &datafieldName, const VariantPtr &value, bool triggerFilterUpdate=true)
bool offerOrUpdateDataField(std::string channelName, std::string datafieldName, const Variant &value, const std::string &description)
void reportStatechartInputParametersList(const ProfilerStatechartParametersList &inputParametersList, const ::Ice::Current &=Ice::emptyCurrent) override
void onConnectObserver() override
Framework hook.
void reportNetworkTraffic(const std::string &id, const std::string &protocol, Ice::Int inBytes, Ice::Int outBytes, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartTransition(const ProfilerStatechartTransition &transition, const Ice::Current &=Ice::emptyCurrent) override
void reportEventList(const ProfilerEventList &events, const Ice::Current &=Ice::emptyCurrent) override
void reportProcessMemoryUsage(const ProfilerProcessMemoryUsage &memoryUsage, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartTransitionList(const ProfilerStatechartTransitionList &transitions, const Ice::Current &=Ice::emptyCurrent) override
void reportProcessCpuUsageList(const ProfilerProcessCpuUsageList &processes, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartTransitionWithParametersList(const ProfilerStatechartTransitionWithParametersList &outputParameters, const Ice::Current &=Ice::emptyCurrent) override
void reportProcessCpuUsage(const ProfilerProcessCpuUsage &process, const Ice::Current &=Ice::emptyCurrent) override
void reportEvent(const ProfilerEvent &event, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartLocalParametersList(const ProfilerStatechartParametersList &localParametersList, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartOutputParametersList(const ProfilerStatechartParametersList &outputParametersList, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartInputParameters(const ProfilerStatechartParameters &inputParametes, const Ice::Current &=Ice::emptyCurrent) override
~ProfilerObserver() override
void onInitObserver() override
Framework hook.
void reportStatechartTransitionWithParameters(const ProfilerStatechartTransitionWithParameters &outputParameters, const Ice::Current &=Ice::emptyCurrent) override
void reportProcessMemoryUsageList(const ProfilerProcessMemoryUsageList &memoryUsages, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartLocalParameters(const ProfilerStatechartParameters &localParameters, const Ice::Current &=Ice::emptyCurrent) override
void reportStatechartOutputParameters(const ProfilerStatechartParameters &outputParameters, const Ice::Current &=Ice::emptyCurrent) override
std::string getDefaultName() const override
Retrieve default name of component.
static std::string GetEventName(Profiler::EventType eventType)
getEventName maps enum values from armarx::Profiler::Profiler::EventType to strings
The StringValueMap class is a subclass of VariantContainer and is comparable to a std::map<std::strin...
void addElement(const std::string &key, const VariantContainerBasePtr &variantContainer, const Ice::Current &c=Ice::emptyCurrent) override
Implements a Variant type for timestamps.
The Variant class is described here: Variants.
#define ARMARX_INFO
The normal logging level.
const VariantTypeId Timestamp
const VariantTypeId VariantContainer
const VariantTypeId String
const VariantTypeId Float
IceInternal::Handle< Variant > VariantPtr