diff --git a/source/RobotAPI/libraries/armem/server/ltm/Memory.h b/source/RobotAPI/libraries/armem/server/ltm/Memory.h index b3cd24b8b32a36895b18288fd45797277c09da19..05d04551d683cb3fb3fb773ca97ebb6cee8c3b6e 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/Memory.h +++ b/source/RobotAPI/libraries/armem/server/ltm/Memory.h @@ -49,6 +49,11 @@ namespace armarx::armem::server::ltm void createPropertyDefinitions(PropertyDefinitionsPtr& defs, const std::string& prefix) override; + /** + * @brief getAndSaveStatistics generates and saves statistics for a LTM recording + */ + void getAndSaveStatistics(); + protected: void _loadAllReferences(armem::wm::Memory&) final; void _resolve(armem::wm::Memory&) final; @@ -56,11 +61,6 @@ namespace armarx::armem::server::ltm void _directlyStore(const armem::wm::Memory&) final; private: - /** - * @brief getAndSaveStatistics generates and saves statistics for a LTM recording - */ - void getAndSaveStatistics(); - std::time_t current_date; }; } // namespace armarx::armem::server::ltm diff --git a/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h b/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h index 99839aab44c5db5988f6fc0e25939fbbe5cdd555..99df8e2e6177be8f39f019342352762724fa7bf1 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h +++ b/source/RobotAPI/libraries/armem/server/ltm/detail/MemoryBase.h @@ -303,8 +303,8 @@ namespace armarx::armem::server::ltm::detail { bool enabled_on_startup = false; std::string configuration_on_startup = - "{ \"SnapshotFrequencyFilter\": {\"WaitingTimeInMsForFilter\" : 500}, " - "\"PngConverter\": {}, \"ExrConverter\": {}}"; + "{ \"SnapshotFrequencyFilter\": {\"WaitingTimeInMsForFilter\" : 50}, " + "\"PngConverter\": {}, \"ExrConverter\": {}}"; //record with 20 fps as standard std::string export_name = "MemoryExport"; std::string export_path = "/tmp/ltm"; } p; diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp index 14b4f7dc1e1e39cb949995c3e8c6b305282da3d9..da889f795e6f8773dfbecbe5c9497b63d60dd215 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp +++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp @@ -133,6 +133,16 @@ namespace armarx::armem::server::plugins statistics_saved = true; */ + try{ + if(longtermMemory.isRecording()){ + ARMARX_INFO << "Recording still in progress, stopping component anyways. " + "Saving statistics..."; + longtermMemory.getAndSaveStatistics(); + } + } catch(...){ + ARMARX_WARNING << "Statistics could not be saved for recording that was interrupted by " + "disconnecting the component"; + } if (clientPlugin->isMemoryNameSystemEnabled() and clientPlugin->getMemoryNameSystemClient()) { diff --git a/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp b/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp index 0025f3e20582dea2ab6891cf11ec9b8b5584a989..9e84d09f91b32491f72f709521c1bbc0c283acfc 100644 --- a/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp +++ b/source/RobotAPI/libraries/armem/server/test/ForgettingExperiments.cpp @@ -84,6 +84,7 @@ void save_statistics( //get current date: auto now = std::chrono::high_resolution_clock::now(); + auto now_ax_datetime = DateTime::Now(); auto now_time = std::chrono::high_resolution_clock::to_time_t(now); auto time = localtime(&now_time); @@ -97,6 +98,12 @@ void save_statistics( bool ended_without_recording = false; + if(firstStoppedRecording.toMilliSecondsSinceEpoch() < firstStartedRecording.toMilliSecondsSinceEpoch()){ + //this can happen if the recording is not propperly stopped but interrupted by stopping + //the component + firstStoppedRecording = now_ax_datetime; + } + for(const auto& filter: stats){ filter_statistics(filter.second, memoryName,firstStartedRecording, firstStoppedRecording, &jsonData); }