1 #include "config.h" 2 3 #include "ramoops_manager.hpp" 4 5 #include <fmt/core.h> 6 7 #include <sdbusplus/exception.hpp> 8 9 #include <filesystem> 10 11 namespace phosphor 12 { 13 namespace dump 14 { 15 namespace ramoops 16 { 17 18 Manager::Manager(const std::string& filePath) 19 { 20 namespace fs = std::filesystem; 21 22 fs::path dir(filePath); 23 if (!fs::exists(dir) || fs::is_empty(dir)) 24 { 25 return; 26 } 27 28 std::vector<std::string> files; 29 files.push_back(filePath); 30 31 createHelper(files); 32 } 33 34 void Manager::createHelper(const std::vector<std::string>& files) 35 { 36 constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper"; 37 constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper"; 38 constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper"; 39 constexpr auto IFACE_INTERNAL("xyz.openbmc_project.Dump.Internal.Create"); 40 constexpr auto RAMOOPS = 41 "xyz.openbmc_project.Dump.Internal.Create.Type.Ramoops"; 42 43 auto b = sdbusplus::bus::new_default(); 44 auto mapper = b.new_method_call(MAPPER_BUSNAME, MAPPER_PATH, 45 MAPPER_INTERFACE, "GetObject"); 46 mapper.append(OBJ_INTERNAL, std::set<std::string>({IFACE_INTERNAL})); 47 48 std::map<std::string, std::set<std::string>> mapperResponse; 49 try 50 { 51 auto mapperResponseMsg = b.call(mapper); 52 mapperResponseMsg.read(mapperResponse); 53 } 54 catch (const sdbusplus::exception_t& e) 55 { 56 log<level::ERR>( 57 fmt::format("Failed to parse dump create message, error({})", 58 e.what()) 59 .c_str()); 60 return; 61 } 62 if (mapperResponse.empty()) 63 { 64 log<level::ERR>("Error reading mapper response"); 65 return; 66 } 67 68 const auto& host = mapperResponse.cbegin()->first; 69 auto m = 70 b.new_method_call(host.c_str(), OBJ_INTERNAL, IFACE_INTERNAL, "Create"); 71 m.append(RAMOOPS, files); 72 try 73 { 74 b.call_noreply(m); 75 } 76 catch (const sdbusplus::exception_t& e) 77 { 78 log<level::ERR>( 79 fmt::format("Failed to create ramoops dump, errormsg({})", e.what()) 80 .c_str()); 81 } 82 } 83 84 } // namespace ramoops 85 } // namespace dump 86 } // namespace phosphor 87