From e2f30738703bbf2e122cb83be0b3f457805e0836 Mon Sep 17 00:00:00 2001 From: joana <uhfpm@student.kit.edu> Date: Mon, 22 Jan 2024 13:53:49 +0100 Subject: [PATCH] Make sure statistics for recording are saved if recording is interupted due to stopping the component --- source/RobotAPI/libraries/armem/server/ltm/Memory.h | 10 +++++----- .../libraries/armem/server/ltm/detail/MemoryBase.h | 4 ++-- .../RobotAPI/libraries/armem/server/plugins/Plugin.cpp | 10 ++++++++++ .../armem/server/test/ForgettingExperiments.cpp | 7 +++++++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/source/RobotAPI/libraries/armem/server/ltm/Memory.h b/source/RobotAPI/libraries/armem/server/ltm/Memory.h index b3cd24b8b..05d04551d 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 99839aab4..99df8e2e6 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 14b4f7dc1..da889f795 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 0025f3e20..9e84d09f9 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); } -- GitLab