Plugin.cpp
Go to the documentation of this file.
1 #include "Plugin.h"
2 
3 #include <chrono>
4 
8 
12 
14 {
15 
16  Plugin::~Plugin() = default;
17 
18  Plugin::Plugin(ManagedIceObject& parent, std::string prefix) :
19  armarx::ComponentPlugin(parent, prefix)
20  {
22  addPlugin(clientPlugin);
23  ARMARX_CHECK_NOT_NULL(clientPlugin);
24  addPluginDependency(clientPlugin);
25  }
26 
27  void
29  {
30  const std::string prefix = "mem.";
31 
32  // set Memory name if not already set
33  if (workingMemory.name().empty())
34  {
35  Component& parent = this->parent<Component>();
37  }
38 
39  // also add scenario param to overwrite the chosen name
40  if (not properties->hasDefinition(prefix + "MemoryName"))
41  {
42  properties->optional(
43  workingMemory.name(), prefix + "MemoryName", "Name of this memory server.");
44  }
45 
46  longtermMemory.createPropertyDefinitions(properties, prefix + "ltm.");
47  }
48 
49  void
51  {
56  }
57 
58  void
60  {
61  Component& parent = this->parent<Component>();
62 
63  // activate LTM
65  if (not workingMemory.id().memoryName.empty())
66  {
68  }
69  else
70  {
72  }
74 
75  initialized = true;
76  }
77 
78  void
80  {
81  Component& parent = this->parent<Component>();
82 
83  // register to MNS
84  if (clientPlugin->isMemoryNameSystemEnabled() and clientPlugin->getMemoryNameSystemClient())
85  {
87  }
90 
91  connected = true;
92  }
93 
94  void
96  {
97  /*
98  ARMARX_INFO << "Preparing to save statistics for " << this->workingMemory.name();
99  try
100  {
101  auto first_stats = longtermMemory.getFilterStatistics();
102  std::map<std::string,
103  std::map<std::string, ltm::processor::SnapshotFilter::FilterStatistics>>
104  information;
105  std::map<std::string, armarx::core::time::DateTime> times;
106 
107  try
108  {
109  times["Started LTM1"] = longtermMemory.getStatistics().firstStarted;
110  times["Stopped LTM1"] = longtermMemory.getStatistics().firstStopped;
111  information["LTM"] = first_stats;
112  }
113  catch (...)
114  {
115  ARMARX_INFO << "Something went wrong after getting the statistics";
116  }
117  auto exportPath = longtermMemory.getMemoryBasePath();
118  auto exportName = longtermMemory.getExportName();
119  auto recording_started = longtermMemory.getStatistics().firstStarted;
120  auto recording_stopped = longtermMemory.getStatistics().firstStopped;
121  test::save_statistics(information,
122  times,
123  recording_started,
124  recording_stopped,
125  exportPath,
126  exportName,
127  longtermMemory.name());
128  }
129  catch (...)
130  {
131  ARMARX_INFO << "Something went wrong with the statistics saving process";
132  }
133 
134  statistics_saved = true;
135  */
136  try{
138  ARMARX_INFO << "Recording still in progress, stopping component anyways. "
139  "Saving statistics...";
141  }
142  } catch(...){
143  ARMARX_WARNING << "Statistics could not be saved for recording that was interrupted by "
144  "disconnecting the component";
145  }
146 
147  if (clientPlugin->isMemoryNameSystemEnabled() and clientPlugin->getMemoryNameSystemClient())
148  {
149  removeServer();
150  }
151  }
152 
153  void
154  Plugin::setMemoryName(const std::string& memoryName)
155  {
156  if (initialized)
157  {
158  ARMARX_WARNING << "Please set the memory name before initializing the component. "
159  "Otherwise the WM and LTM may have different names";
160  }
161 
163  }
164 
165  mns::dto::RegisterServerResult
167  {
168  ARMARX_INFO << "Registering server for " << workingMemory.name();
169  ARMARX_TRACE;
170 
172  mns::dto::MemoryServerInterfaces server;
173  server.reading = ReadingMemoryInterfacePrx::uncheckedCast(parent.getProxy());
174  server.writing = WritingMemoryInterfacePrx::uncheckedCast(parent.getProxy());
175  server.prediction = PredictingMemoryInterfacePrx::uncheckedCast(parent.getProxy());
176  server.actions = actions::ActionsInterfacePrx::uncheckedCast(parent.getProxy());
177 
178  mns::dto::RegisterServerResult result;
179  try
180  {
181  clientPlugin->getMemoryNameSystemClient().registerServer(id, server);
182  result.success = true;
183  ARMARX_DEBUG << "Registered memory server for " << id
184  << " in the Memory Name System (MNS).";
185  }
187  {
188  result.success = false;
189  result.errorMessage = e.what();
190  ARMARX_WARNING << e.what();
191  }
192 
193 
194  return result;
195  }
196 
197  mns::dto::RemoveServerResult
199  {
201 
202  mns::dto::RemoveServerResult result;
203  try
204  {
205  clientPlugin->getMemoryNameSystemClient().removeServer(id);
206  result.success = true;
207  ARMARX_DEBUG << "Removed memory server for " << id
208  << " from the Memory Name System (MNS).";
209  }
211  {
212  result.success = false;
213  result.errorMessage = e.what();
214  ARMARX_WARNING << e.what();
215  }
216  catch (const Ice::NotRegisteredException&)
217  {
218  // It's ok, the MNS is gone.
219  result.success = false;
220  result.errorMessage = "Memory Name System is gone.";
221  }
222  return result;
223  }
224 
225 } // namespace armarx::armem::server::plugins
Plugin.h
armarx::armem::server::ltm::detail::MemoryBase::isRecording
bool isRecording() const
Definition: MemoryBase.h:225
armarx::armem::client::MemoryNameSystem::removeServer
void removeServer(const MemoryID &memoryID)
Remove a memory server from the MNS.
Definition: MemoryNameSystem.cpp:414
armarx::armem::server::plugins::Plugin::postOnConnectComponent
virtual void postOnConnectComponent() override
Definition: Plugin.cpp:79
armarx::armem::server::plugins::Plugin::iceAdapter
MemoryToIceAdapter iceAdapter
Helps connecting memory to ice. Used to handle Ice callbacks.
Definition: Plugin.h:66
armarx::ManagedIceObjectPlugin::addPluginDependency
void addPluginDependency(ManagedIceObjectPlugin *dependedOn)
Definition: ManagedIceObjectPlugin.cpp:42
armarx::armem::client::plugins::Plugin::isMemoryNameSystemEnabled
bool isMemoryNameSystemEnabled()
Indicate whether the Memory Name System (MNS) is enabled.
Definition: Plugin.cpp:69
armarx::ManagedIceObjectPlugin::prefix
const std::string & prefix() const
Definition: ManagedIceObjectPlugin.cpp:63
armarx::armem::MemoryID::withMemoryName
MemoryID withMemoryName(const std::string &name) const
Definition: MemoryID.cpp:396
armarx::armem::client::plugins::Plugin::getMemoryNameSystemClient
MemoryNameSystem & getMemoryNameSystemClient()
Get the MNS client.
Definition: Plugin.cpp:92
armarx::ManagedIceObjectPlugin::parent
ManagedIceObject & parent()
Definition: ManagedIceObjectPlugin.cpp:69
armarx::armem::server::ltm::Memory::getAndSaveStatistics
void getAndSaveStatistics()
getAndSaveStatistics generates and saves statistics for a LTM recording
Definition: Memory.cpp:256
armarx::armem::server::plugins::Plugin::~Plugin
virtual ~Plugin() override
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
armarx::armem::server::ltm::Memory::createPropertyDefinitions
void createPropertyDefinitions(PropertyDefinitionsPtr &defs, const std::string &prefix) override
default parameters. Implementation should use the configuration to configure
Definition: Memory.cpp:163
trace.h
armarx::armem::client::MemoryNameSystem::registerServer
void registerServer(const MemoryID &memoryID, mns::dto::MemoryServerInterfaces server)
Register a memory server in the MNS.
Definition: MemoryNameSystem.cpp:398
armarx::armem::base::MemoryBase::name
std::string & name()
Definition: MemoryBase.h:92
armarx::ManagedIceObjectPlugin::addPlugin
PluginT * addPlugin(const std::string prefix="", ParamsT &&...params)
Definition: ManagedIceObjectPlugin.h:104
armarx::armem::client::util::MemoryListener::MakeMemoryTopicName
static std::string MakeMemoryTopicName(const MemoryID &memoryID)
Definition: MemoryListener.cpp:17
ARMARX_TRACE
#define ARMARX_TRACE
Definition: trace.h:69
armarx::armem::server::MemoryToIceAdapter::setMemoryListener
void setMemoryListener(client::MemoryListenerInterfacePrx memoryListenerTopic)
Definition: MemoryToIceAdapter.cpp:31
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::server::ltm::detail::MemoryItem::setMemoryID
void setMemoryID(const MemoryID &)
Definition: MemoryItem.cpp:30
armarx::armem::server::plugins::Plugin::registerServer
mns::dto::RegisterServerResult registerServer(armarx::Component &parent)
Register the parent component in the MNS.
Definition: Plugin.cpp:166
armarx::ComponentPlugin
Definition: ComponentPlugin.h:38
armarx::armem::server::plugins::Plugin::longtermMemory
server::ltm::Memory longtermMemory
A manager class for the ltm. It internally holds a normal wm instance as a cache.
Definition: Plugin.h:80
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:177
error.h
armarx::armem::server::plugins::Plugin::Plugin
Plugin(ManagedIceObject &parent, std::string prefix)
Definition: Plugin.cpp:18
armarx::armem::server::plugins::Plugin::memoryTopicName
std::string memoryTopicName
Available at onInit().
Definition: Plugin.h:72
armarx::armem::base::detail::MemoryItem::id
MemoryID & id()
Definition: MemoryItem.h:27
Component.h
armarx::Component
Baseclass for all ArmarX ManagedIceObjects requiring properties.
Definition: Component.h:95
armarx::armem::MemoryID::memoryName
std::string memoryName
Definition: MemoryID.h:50
armarx::ManagedIceObject::getDefaultName
virtual std::string getDefaultName() const =0
Retrieve default name of component.
armarx::armem::server::plugins::Plugin::postCreatePropertyDefinitions
virtual void postCreatePropertyDefinitions(PropertyDefinitionsPtr &properties) override
Definition: Plugin.cpp:28
ExpressionException.h
armarx::ManagedIceObject
The ManagedIceObject is the base class for all ArmarX objects.
Definition: ManagedIceObject.h:163
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
armarx::ManagedIceObject::getTopic
TopicProxyType getTopic(const std::string &name)
Returns a proxy of the specified topic.
Definition: ManagedIceObject.h:451
armarx::ManagedIceObject::offeringTopic
void offeringTopic(const std::string &name)
Registers a topic for retrival after initialization.
Definition: ManagedIceObject.cpp:290
armarx::armem::laser_scans::constants::memoryName
const std::string memoryName
Definition: constants.h:28
armarx::armem::error::ServerRegistrationOrRemovalFailed
Indicates that a query to the Memory Name System failed.
Definition: mns.h:40
armarx::armem::server::plugins::Plugin::setMemoryName
void setMemoryName(const std::string &memoryName)
Set the name of the wm and the ltm.
Definition: Plugin.cpp:154
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::armem::server::plugins::Plugin::postOnInitComponent
virtual void postOnInitComponent() override
Definition: Plugin.cpp:59
armarx::armem::server::plugins::Plugin::preOnDisconnectComponent
virtual void preOnDisconnectComponent() override
Definition: Plugin.cpp:95
armarx::armem::server::plugins::Plugin::memoryTopic
client::MemoryListenerInterfacePrx memoryTopic
Available after onConnect().
Definition: Plugin.h:74
armarx::ManagedIceObject::getName
std::string getName() const
Retrieve name of object.
Definition: ManagedIceObject.cpp:107
armarx::armem::server::plugins::Plugin::preOnInitComponent
virtual void preOnInitComponent() override
Definition: Plugin.cpp:50
armarx::armem::server::plugins::Plugin::workingMemory
server::wm::Memory workingMemory
The actual memory.
Definition: Plugin.h:63
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:186
armarx::armem::server::plugins
Definition: Plugin.cpp:13
armarx::ManagedIceObject::getProxy
Ice::ObjectPrx getProxy(long timeoutMs=0, bool waitForScheduler=true) const
Returns the proxy of this object (optionally it waits for the proxy)
Definition: ManagedIceObject.cpp:393
MemoryListener.h
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::armem::server::ltm::detail::MemoryBase::configure
void configure()
initialize config
Definition: MemoryBase.h:52
armarx::armem::server::plugins::Plugin::removeServer
mns::dto::RemoveServerResult removeServer()
Remove the parent component from the MNS.
Definition: Plugin.cpp:198
armarx::human::MemoryID
const armem::MemoryID MemoryID
Definition: memory_ids.cpp:29