xref: /openbmc/phosphor-debug-collector/bmc_dump_entry.cpp (revision 93f064102cc060d913e7492f32d60757b6f100a4)
14a98e8feSDhruvaraj Subhashchandran #include "bmc_dump_entry.hpp"
24a98e8feSDhruvaraj Subhashchandran 
34a98e8feSDhruvaraj Subhashchandran #include "dump_manager.hpp"
4580d91ddSDhruvaraj Subhashchandran #include "dump_offload.hpp"
5*93f06410SDhruvaraj Subhashchandran #include "dump_utils.hpp"
64a98e8feSDhruvaraj Subhashchandran 
7d1f670feSDhruvaraj Subhashchandran #include <phosphor-logging/lg2.hpp>
84a98e8feSDhruvaraj Subhashchandran 
94a98e8feSDhruvaraj Subhashchandran namespace phosphor
104a98e8feSDhruvaraj Subhashchandran {
114a98e8feSDhruvaraj Subhashchandran namespace dump
124a98e8feSDhruvaraj Subhashchandran {
134a98e8feSDhruvaraj Subhashchandran namespace bmc
144a98e8feSDhruvaraj Subhashchandran {
154a98e8feSDhruvaraj Subhashchandran 
delete_()164a98e8feSDhruvaraj Subhashchandran void Entry::delete_()
174a98e8feSDhruvaraj Subhashchandran {
184a98e8feSDhruvaraj Subhashchandran     // Delete Dump file from Permanent location
194a98e8feSDhruvaraj Subhashchandran     try
204a98e8feSDhruvaraj Subhashchandran     {
213fc6df48SJayanth Othayoth         std::filesystem::remove_all(file.parent_path());
224a98e8feSDhruvaraj Subhashchandran     }
239d2d7226SPatrick Williams     catch (const std::filesystem::filesystem_error& e)
244a98e8feSDhruvaraj Subhashchandran     {
254a98e8feSDhruvaraj Subhashchandran         // Log Error message and continue
26d1f670feSDhruvaraj Subhashchandran         lg2::error("Failed to delete dump file, errormsg: {ERROR}", "ERROR", e);
274a98e8feSDhruvaraj Subhashchandran     }
284a98e8feSDhruvaraj Subhashchandran 
294a98e8feSDhruvaraj Subhashchandran     // Remove Dump entry D-bus object
304a98e8feSDhruvaraj Subhashchandran     phosphor::dump::Entry::delete_();
314a98e8feSDhruvaraj Subhashchandran }
324a98e8feSDhruvaraj Subhashchandran 
initiateOffload(std::string uri)33580d91ddSDhruvaraj Subhashchandran void Entry::initiateOffload(std::string uri)
34580d91ddSDhruvaraj Subhashchandran {
35580d91ddSDhruvaraj Subhashchandran     phosphor::dump::offload::requestOffload(file, id, uri);
36580d91ddSDhruvaraj Subhashchandran     offloaded(true);
37580d91ddSDhruvaraj Subhashchandran }
38580d91ddSDhruvaraj Subhashchandran 
updateFromFile(const std::filesystem::path & dumpPath)39*93f06410SDhruvaraj Subhashchandran void Entry::updateFromFile(const std::filesystem::path& dumpPath)
40*93f06410SDhruvaraj Subhashchandran {
41*93f06410SDhruvaraj Subhashchandran     // Extract dump details from the file name
42*93f06410SDhruvaraj Subhashchandran     auto dumpDetails = phosphor::dump::extractDumpDetails(dumpPath);
43*93f06410SDhruvaraj Subhashchandran     if (!dumpDetails)
44*93f06410SDhruvaraj Subhashchandran     {
45*93f06410SDhruvaraj Subhashchandran         lg2::error("Failed to extract dump details from file name: {PATH}",
46*93f06410SDhruvaraj Subhashchandran                    "PATH", dumpPath);
47*93f06410SDhruvaraj Subhashchandran         throw std::logic_error("Invalid dump file name format");
48*93f06410SDhruvaraj Subhashchandran     }
49*93f06410SDhruvaraj Subhashchandran 
50*93f06410SDhruvaraj Subhashchandran     auto [extractedId, extractedTimestamp, extractedSize] = *dumpDetails;
51*93f06410SDhruvaraj Subhashchandran 
52*93f06410SDhruvaraj Subhashchandran     if (id != extractedId)
53*93f06410SDhruvaraj Subhashchandran     {
54*93f06410SDhruvaraj Subhashchandran         lg2::error("Id({ID}) is not matching with id on filename"
55*93f06410SDhruvaraj Subhashchandran                    "({ID_FILENAME})",
56*93f06410SDhruvaraj Subhashchandran                    "ID", id, "ID_FILENAME", extractedId);
57*93f06410SDhruvaraj Subhashchandran         throw std::logic_error("Invalid dump id in filename");
58*93f06410SDhruvaraj Subhashchandran     }
59*93f06410SDhruvaraj Subhashchandran 
60*93f06410SDhruvaraj Subhashchandran     // Update the entry with extracted details
61*93f06410SDhruvaraj Subhashchandran     startTime(extractedTimestamp);
62*93f06410SDhruvaraj Subhashchandran     elapsed(extractedTimestamp);
63*93f06410SDhruvaraj Subhashchandran     completedTime(extractedTimestamp);
64*93f06410SDhruvaraj Subhashchandran     size(extractedSize);
65*93f06410SDhruvaraj Subhashchandran     status(OperationStatus::Completed);
66*93f06410SDhruvaraj Subhashchandran }
67*93f06410SDhruvaraj Subhashchandran 
684a98e8feSDhruvaraj Subhashchandran } // namespace bmc
694a98e8feSDhruvaraj Subhashchandran } // namespace dump
704a98e8feSDhruvaraj Subhashchandran } // namespace phosphor
71