EntitySnapshot.cpp
Go to the documentation of this file.
1 // Header
2 #include "EntitySnapshot.h"
3 
4 // ArmarX
7 
9 
11 {
14 
15  const std::string& exportName,
16  const armem::MemoryID& id /* UNESCAPED */,
17  const std::shared_ptr<Processors>& filters) :
18  EntitySnapshotBase(exportName, id, filters),
19  DiskMemoryItemMixin(p, exportName, id),
20  MongoDBStorageMixin(s, exportName, id)
21  {
22  //start();
23  }
24 
25  bool
26  EntitySnapshot::forEachInstance(std::function<void(EntityInstance&)> func) const
27  {
28  std::lock_guard l(ltm_mutex);
29 
30  /*if (connected() && collectionExists())
31  {
32  if (auto d = documentExists(); d)
33  {
34  nlohmann::json doc = *d;
35  std::vector<nlohmann::json> instances = doc[DATA];
36  for (unsigned int i = 0; i < instances.size(); ++i)
37  {
38  EntityInstance c(getMemoryBasePath(),
39  getSettings(),
40  getExportName(),
41  id().withInstanceIndex(i),
42  processors);
43  func(c);
44  }
45  }
46  } else */
47 
48  if (fullPathExists())
49  {
50  for (const auto& i : getAllDirectories())
51  {
53  getSettings(),
54  getExportName(),
55  id().withInstanceIndex(std::stoi(i.filename())).cleanID(),
56  processors);
57  func(c);
58  }
59  }
60  return true;
61  }
62 
63  bool
65  {
66  std::lock_guard l(ltm_mutex);
67 
68  /*if (connected() && collectionExists())
69  {
70  if (auto d = documentExists(); d)
71  {
72  nlohmann::json doc = *d;
73  std::vector<nlohmann::json> instances = doc[DATA];
74  return (size_t)index < instances.size();
75  }
76  }*/
77 
78  if (fullPathExists())
79  {
81  getSettings(),
82  getExportName(),
83  id().withInstanceIndex(index),
84  processors);
85  return c.fullPathExists();
86  }
87 
88  return false;
89  }
90 
91  std::shared_ptr<EntityInstance>
93  {
94  std::lock_guard l(ltm_mutex);
95 
96  if (!hasInstance(index))
97  {
98  return nullptr;
99  }
100  return std::make_shared<EntityInstance>(getMemoryBasePath(),
101  getSettings(),
102  getExportName(),
103  id().withInstanceIndex(index),
104  processors);
105  }
106 
107  void
109  {
110  std::lock_guard l(ltm_mutex);
111 
112  e.id() = id().getEntitySnapshotID().cleanID();
113 
115  }
116 
117  void
119  {
120  std::lock_guard l(ltm_mutex);
121 
122  if (/*(connected() && collectionExists() && documentExists()) ||*/ fullPathExists())
123  {
124  p.forEachInstance(
125  [&](auto& e)
126  {
128  getSettings(),
129  getExportName(),
130  id().withInstanceIndex(e.id().instanceIndex),
131  processors);
132  c.resolve(e);
133  });
134  }
135  }
136 
137  void
139  {
140 
141  std::lock_guard l(ltm_mutex);
142 
143  if (id().timestamp.isInvalid())
144  {
146  << "During storage of segment '" << p.id().str()
147  << "' I noticed that the corresponding LTM has no id set. "
148  << "I set the id of the LTM to the same name, however this should not happen!";
149  id().timestamp = p.id().timestamp;
150  }
151 
152  /*if (!connected())
153  {
154  ARMARX_WARNING << "LTM ENTITY SNAPSHOT NOT CONNECTED ALTHOUGH ENABLED " << id().str();
155  return;
156  }*/
157 
158  //nlohmann::json data;
159  //data[DATA] = std::vector<nlohmann::json>();
160 
161  p.forEachInstance(
162  [&](const auto& e)
163  {
165  getSettings(),
166  getExportName(),
167  id().withInstanceIndex(e.id().instanceIndex),
168  processors);
169  c.store(e);
170 
171  //data[DATA].push_back(c.store(e));
172  statistics.recordedInstances++;
173  });
174 
175  //writeDataToDocument(data);
176  }
177 } // namespace armarx::armem::server::ltm
armarx::armem::MemoryID::timestamp
Time timestamp
Definition: MemoryID.h:54
armarx::armem::server::wm::EntityInstance
armem::wm::EntityInstance EntityInstance
Definition: forward_declarations.h:65
armarx::armem::server::ltm::EntitySnapshot::hasInstance
bool hasInstance(const int) const override
check if Instance segment exists
Definition: EntitySnapshot.cpp:64
armarx::armem::server::ltm::detail::MemoryItem::processors
std::shared_ptr< Processors > processors
Definition: MemoryItem.h:54
armarx::armem::server::ltm::EntitySnapshot::forEachInstance
bool forEachInstance(std::function< void(EntityInstance &)> func) const override
iterate over all Instance segments of this ltm
Definition: EntitySnapshot.cpp:26
index
uint8_t index
Definition: EtherCATFrame.h:59
armarx::armem::server::ltm::detail::mixin::DiskMemoryItemMixin::getMemoryBasePath
Path getMemoryBasePath() const
Definition: DiskStorageMixin.cpp:71
armarx::armem::base::EntitySnapshotBase::forEachInstance
bool forEachInstance(InstanceFunctionT &&func)
Definition: EntitySnapshotBase.h:178
armarx::armem::MemoryID::str
std::string str(bool escapeDelimiters=true) const
Get a string representation of this memory ID.
Definition: MemoryID.cpp:102
armarx::armem::server::ltm::EntitySnapshot::EntitySnapshot
EntitySnapshot(const detail::mixin::Path &, const detail::mixin::MongoDBSettings &, const std::string &, const MemoryID &id, const std::shared_ptr< Processors > &p)
Definition: EntitySnapshot.cpp:12
armarx::armem::server::ltm::EntitySnapshot::findInstance
std::shared_ptr< EntityInstance > findInstance(const int) const override
find Instance segment
Definition: EntitySnapshot.cpp:92
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
Dict.h
armarx::armem::server::ltm::detail::mixin::DiskMemoryItemMixin::getAllDirectories
std::vector< Path > getAllDirectories() const
Definition: DiskStorageMixin.cpp:222
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::MemoryID::getEntitySnapshotID
MemoryID getEntitySnapshotID() const
Definition: MemoryID.cpp:318
armarx::armem::server::ltm::detail::mixin::MongoDBStorageMixin::getSettings
MongoDBSettings getSettings() const
Definition: MongoDBStorageMixin.cpp:436
armarx::armem::server::ltm::detail::EntitySnapshotBase< EntityInstance >::statistics
Statistics statistics
Definition: EntitySnapshotBase.h:86
armarx::armem::server::ltm::detail::MemoryItem::getExportName
virtual std::string getExportName() const
Definition: MemoryItem.h:27
armarx::armem::wm::EntitySnapshot
Client-side working memory entity snapshot.
Definition: memory_definitions.h:80
armarx::armem::base::detail::MemoryItem::id
MemoryID & id()
Definition: MemoryItem.h:25
armarx::armem::server::ltm::detail::EntitySnapshotBase< EntityInstance >::ltm_mutex
std::recursive_mutex ltm_mutex
Definition: EntitySnapshotBase.h:84
EntitySnapshot.h
armarx::armem::server::ltm
Definition: forward_declarations.h:20
armarx::armem::server::ltm::EntityInstance
Definition: EntityInstance.h:13
armarx::armem::server::ltm::detail::MemoryItem::id
MemoryID id() const
Definition: MemoryItem.cpp:37
armarx::armem::MemoryID::cleanID
MemoryID cleanID() const
Definition: MemoryID.cpp:133
TimeUtil.h
armarx::armem::server::ltm::EntitySnapshot::_store
void _store(const armem::wm::EntitySnapshot &) override
Definition: EntitySnapshot.cpp:138
armarx::armem::server::ltm::detail::mixin::DiskMemoryItemMixin::fullPathExists
bool fullPathExists() const
Definition: DiskStorageMixin.cpp:113
armarx::armem::server::ltm::detail::mixin::MongoDBSettings
Definition: MongoDBStorageMixin.h:15
armarx::armem::server::ltm::detail::mixin::Path
std::filesystem::path Path
Definition: DiskStorageMixin.h:17
armarx::armem::server::ltm::EntitySnapshot::_loadAllReferences
void _loadAllReferences(armem::wm::EntitySnapshot &) const override
Definition: EntitySnapshot.cpp:108
armarx::armem::server::ltm::EntitySnapshot::_resolve
void _resolve(armem::wm::EntitySnapshot &) const override
Definition: EntitySnapshot.cpp:118
Logging.h
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:193
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx::armem::server::ltm::detail::EntityInstanceBase::loadAllReferences
void loadAllReferences(armem::wm::EntitySnapshot &e) const
return the full sub-ltm as a wm::EntitySnapshot with only references the ltm may be huge,...
Definition: EntityInstanceBase.h:30