StatechartListenerSegment.cpp
Go to the documentation of this file.
2 
3 #include <RobotAPI/libraries/armem_skills/aron/Statechart.aron.generated.h>
5 
7 {
10  Base(iceMemory,
11  "StatechartListener",
12  "Transitions",
13  arondto::Statechart::Transition::ToAronType())
14  {
15  }
16 
17  void
19  const std::string& prefix)
20  {
21  // Statechart Logging
22  defs->optional(p.statechartCoreSegmentName,
23  "StatechartCoreSegmentName",
24  "Name of the core segment for statecharts.");
25  defs->optional(p.statechartTransitionsProviderSegmentName,
26  "TransitionsProviderSegmentName",
27  "Name of the provider segment for statechart transitions.");
28  defs->optional(p.statechartTransitionsTopicName,
29  "tpc.sub.ProfilerListener",
30  "Name of the ProfilerListenerInterface topics to subscribe.");
31 
32  this->setDefaultMaxHistorySize(10);
34  Base::defineProperties(defs, prefix);
35  }
36 
37  void
39  {
40  Base::init();
41  }
42 
43  void
45  const ProfilerStatechartTransitionWithParameters& t)
46  {
47  const std::string& entityName = getStatechartName(t.targetStateIdentifier);
48  armem::Time transitionTime = armem::Time(armem::Duration::MicroSeconds(t.timestamp));
49 
51  update.entityID = segmentPtr->id().withEntityName(entityName);
52 
53  update.referencedTime = transitionTime;
54  skills::arondto::Statechart::Transition data;
55  armem::toAron(data, t);
56  update.instancesData.push_back(data.toAron());
57 
58  try
59  {
61  }
62  catch (const armem::error::ArMemError& e)
63  {
64  ARMARX_WARNING << e.what();
65  }
66  }
67 
68  void
70  const ProfilerStatechartTransitionWithParametersList& transitions)
71  {
72  for (const auto& t : transitions)
73  {
75  }
76  }
77 
78  std::string
79  StatechartListenerProviderSegment::getStatechartName(std::string stateName)
80  {
81  const std::string delimiter = "->";
82  const int maxLevels = 2;
83 
84  size_t pos;
85  int levels = 0;
86  std::string statechartName;
87  while ((pos = stateName.find(delimiter)) != std::string::npos && levels < maxLevels)
88  {
89  if (levels != 0)
90  {
91  statechartName += delimiter;
92  }
93  statechartName += stateName.substr(0, pos);
94  stateName.erase(0, pos + delimiter.length());
95  levels++;
96  }
97 
98  return statechartName;
99  }
100 } // namespace armarx::skills::segment
armarx::skills::segment::StatechartListenerProviderSegment::defineProperties
void defineProperties(PropertyDefinitionsPtr defs, const std::string &prefix)
Definition: StatechartListenerSegment.cpp:18
armarx::armem::server::segment::SpecializedProviderSegment::coreSegment
SpecializedCoreSegment coreSegment
Definition: SpecializedProviderSegment.h:52
armarx::armem::server::MemoryToIceAdapter
Helps connecting a Memory server to the Ice interface.
Definition: MemoryToIceAdapter.h:19
armarx::armem::toAron
void toAron(arondto::MemoryID &dto, const MemoryID &bo)
Definition: aron_conversions.cpp:19
armarx::skills::segment::StatechartListenerProviderSegment::init
void init()
Definition: StatechartListenerSegment.cpp:38
armarx::armem::error::ArMemError
Base class for all exceptions thrown by the armem library.
Definition: ArMemError.h:18
armarx::armem::server::segment::SpecializedProviderSegment::setDefaultMaxHistorySize
void setDefaultMaxHistorySize(int64_t maxHistorySize)
Definition: SpecializedProviderSegment.cpp:87
armarx::skills::segment::StatechartListenerProviderSegment::reportStatechartTransitionWithParametersList
void reportStatechartTransitionWithParametersList(const ProfilerStatechartTransitionWithParametersList &)
Definition: StatechartListenerSegment.cpp:69
armarx::armem::server::segment::detail::SegmentBase< server::wm::ProviderSegment >::segmentPtr
server::wm::ProviderSegment * segmentPtr
Definition: SpecializedSegment.h:53
aron_conversions.h
armarx::skills::segment
Definition: ComposedSkillLibrarySegment.cpp:20
armarx::armem::server::segment::detail::SegmentBase< server::wm::ProviderSegment >
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::armem::EntityUpdate
An update of an entity for a specific point in time.
Definition: Commit.h:25
armarx::Transition
Definition: Transition.h:36
armarx::armem::base::detail::MemoryItem::id
MemoryID & id()
Definition: MemoryItem.h:25
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::armem::server::segment::SpecializedProviderSegment::init
virtual void init() override
Definition: SpecializedProviderSegment.cpp:56
armarx::skills::segment::StatechartListenerProviderSegment::reportStatechartTransitionWithParameters
void reportStatechartTransitionWithParameters(const ProfilerStatechartTransitionWithParameters &)
Definition: StatechartListenerSegment.cpp:44
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
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
armarx::armem::MemoryID::withEntityName
MemoryID withEntityName(const std::string &name) const
Definition: MemoryID.cpp:425
armarx::armem::server::segment::SpecializedCoreSegment::setDefaultMaxHistorySize
void setDefaultMaxHistorySize(int64_t maxHistorySize)
Definition: SpecializedCoreSegment.cpp:74
IceUtil::Handle< class PropertyDefinitionContainer >
StatechartListenerSegment.h
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:193
armarx::core::time::Duration::MicroSeconds
static Duration MicroSeconds(std::int64_t microSeconds)
Constructs a duration in microseconds.
Definition: Duration.cpp:24
armarx::armem::base::ProviderSegmentBase::update
UpdateResult update(const EntityUpdate &update)
Updates an entity's history.
Definition: ProviderSegmentBase.h:252
armarx::skills::segment::StatechartListenerProviderSegment::StatechartListenerProviderSegment
StatechartListenerProviderSegment(armem::server::MemoryToIceAdapter &iceMemory)
Definition: StatechartListenerSegment.cpp:8
armarx::armem::server::segment::SpecializedProviderSegment::defineProperties
virtual void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="") override
Definition: SpecializedProviderSegment.cpp:38