lm: Flush manager output on core shutdown
This commit is contained in:
		| @@ -250,6 +250,8 @@ struct System::Impl { | |||||||
|         telemetry_session->AddField(Telemetry::FieldType::Performance, "Mean_Frametime_MS", |         telemetry_session->AddField(Telemetry::FieldType::Performance, "Mean_Frametime_MS", | ||||||
|                                     perf_stats->GetMeanFrametime()); |                                     perf_stats->GetMeanFrametime()); | ||||||
|  |  | ||||||
|  |         lm_manager.Flush(); | ||||||
|  |  | ||||||
|         is_powered_on = false; |         is_powered_on = false; | ||||||
|         exit_lock = false; |         exit_lock = false; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ namespace Service::LM { | |||||||
| std::ostream& operator<<(std::ostream& os, DestinationFlag dest) { | std::ostream& operator<<(std::ostream& os, DestinationFlag dest) { | ||||||
|     std::vector<std::string> array; |     std::vector<std::string> array; | ||||||
|     const auto check_single_flag = [dest, &array](DestinationFlag check, std::string name) { |     const auto check_single_flag = [dest, &array](DestinationFlag check, std::string name) { | ||||||
|         if ((static_cast<u32>(check) & static_cast<u32>(dest)) > 0) { |         if ((static_cast<u32>(check) & static_cast<u32>(dest)) != 0) { | ||||||
|             array.emplace_back(std::move(name)); |             array.emplace_back(std::move(name)); | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| @@ -75,7 +75,7 @@ std::string FormatField(Field type, const std::vector<u8>& data) { | |||||||
|         if (data.size() >= sizeof(u32)) { |         if (data.size() >= sizeof(u32)) { | ||||||
|             u32 line; |             u32 line; | ||||||
|             std::memcpy(&line, data.data(), sizeof(u32)); |             std::memcpy(&line, data.data(), sizeof(u32)); | ||||||
|             return fmt::format("{:08X}", line); |             return fmt::format("{}", line); | ||||||
|         } |         } | ||||||
|         return "[ERROR DECODING LINE NUMBER]"; |         return "[ERROR DECODING LINE NUMBER]"; | ||||||
|     case Field::Message: |     case Field::Message: | ||||||
| @@ -114,16 +114,20 @@ void Manager::Log(LogMessage message) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void Manager::Flush() { | ||||||
|  |     FinalizeLog(); | ||||||
|  | } | ||||||
|  |  | ||||||
| void Manager::InitializeLog() { | void Manager::InitializeLog() { | ||||||
|     current_log.clear(); |     current_log.clear(); | ||||||
|  |  | ||||||
|     LOG_INFO(Service_LM, "Initialized new log session!"); |     LOG_INFO(Service_LM, "Initialized new log session"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void Manager::FinalizeLog() { | void Manager::FinalizeLog() { | ||||||
|     reporter.SaveLogReport(static_cast<u32>(destination), std::move(current_log)); |     reporter.SaveLogReport(static_cast<u32>(destination), std::move(current_log)); | ||||||
|  |  | ||||||
|     LOG_INFO(Service_LM, "Finalized current log session!"); |     LOG_INFO(Service_LM, "Finalized current log session"); | ||||||
| } | } | ||||||
|  |  | ||||||
| } // namespace Service::LM | } // namespace Service::LM | ||||||
|   | |||||||
| @@ -81,7 +81,7 @@ std::string FormatField(Field type, const std::vector<u8>& data); | |||||||
|  |  | ||||||
| class Manager { | class Manager { | ||||||
| public: | public: | ||||||
|     Manager(Core::Reporter& reporter); |     explicit Manager(Core::Reporter& reporter); | ||||||
|     ~Manager(); |     ~Manager(); | ||||||
|  |  | ||||||
|     void SetEnabled(bool enabled); |     void SetEnabled(bool enabled); | ||||||
| @@ -89,6 +89,8 @@ public: | |||||||
|  |  | ||||||
|     void Log(LogMessage message); |     void Log(LogMessage message); | ||||||
|  |  | ||||||
|  |     void Flush(); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     void InitializeLog(); |     void InitializeLog(); | ||||||
|     void FinalizeLog(); |     void FinalizeLog(); | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ | |||||||
| #include <fmt/chrono.h> | #include <fmt/chrono.h> | ||||||
| #include <fmt/format.h> | #include <fmt/format.h> | ||||||
| #include <fmt/ostream.h> | #include <fmt/ostream.h> | ||||||
| #include <fmt/time.h> |  | ||||||
| #include <json.hpp> | #include <json.hpp> | ||||||
|  |  | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| @@ -393,11 +392,11 @@ void Reporter::SaveLogReport(u32 destination, std::vector<Service::LM::LogMessag | |||||||
|                                           out["type"] = fmt::format("{}", kv.first); |                                           out["type"] = fmt::format("{}", kv.first); | ||||||
|                                           out["data"] = |                                           out["data"] = | ||||||
|                                               Service::LM::FormatField(kv.first, kv.second); |                                               Service::LM::FormatField(kv.first, kv.second); | ||||||
|                                           return std::move(out); |                                           return out; | ||||||
|                                       }); |                                       }); | ||||||
|  |  | ||||||
|                        out["fields"] = std::move(fields); |                        out["fields"] = std::move(fields); | ||||||
|                        return std::move(out); |                        return out; | ||||||
|                    }); |                    }); | ||||||
|  |  | ||||||
|     out["log_messages"] = std::move(json_messages); |     out["log_messages"] = std::move(json_messages); | ||||||
|   | |||||||
| @@ -59,9 +59,6 @@ public: | |||||||
|         New, |         New, | ||||||
|         System, |         System, | ||||||
|     }; |     }; | ||||||
|     // Used by prepo services |  | ||||||
|     void SavePlayReport(u64 title_id, u64 process_id, std::vector<std::vector<u8>> data, |  | ||||||
|                         std::optional<u128> user_id = {}) const; |  | ||||||
|  |  | ||||||
|     void SavePlayReport(PlayReportType type, u64 title_id, std::vector<std::vector<u8>> data, |     void SavePlayReport(PlayReportType type, u64 title_id, std::vector<std::vector<u8>> data, | ||||||
|                         std::optional<u64> process_id = {}, std::optional<u128> user_id = {}) const; |                         std::optional<u64> process_id = {}, std::optional<u128> user_id = {}) const; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user