1 #include "../utils.hpp" 2 3 #include <systemd/sd-journal.h> 4 5 #include <boost/container/flat_map.hpp> 6 #include <nlohmann/json.hpp> 7 8 #include <string> 9 10 void logDeviceAdded(const nlohmann::json& record) 11 { 12 if (!EM_CACHE_CONFIGURATION) 13 { 14 return; 15 } 16 if (!deviceHasLogging(record)) 17 { 18 return; 19 } 20 auto findType = record.find("Type"); 21 auto findAsset = 22 record.find("xyz.openbmc_project.Inventory.Decorator.Asset"); 23 24 std::string model = "Unknown"; 25 std::string type = "Unknown"; 26 std::string sn = "Unknown"; 27 std::string name = "Unknown"; 28 29 if (findType != record.end()) 30 { 31 type = findType->get<std::string>(); 32 } 33 if (findAsset != record.end()) 34 { 35 auto findModel = findAsset->find("Model"); 36 auto findSn = findAsset->find("SerialNumber"); 37 if (findModel != findAsset->end()) 38 { 39 model = findModel->get<std::string>(); 40 } 41 if (findSn != findAsset->end()) 42 { 43 const std::string* getSn = findSn->get_ptr<const std::string*>(); 44 if (getSn != nullptr) 45 { 46 sn = *getSn; 47 } 48 else 49 { 50 sn = findSn->dump(); 51 } 52 } 53 } 54 55 auto findName = record.find("Name"); 56 if (findName != record.end()) 57 { 58 name = findName->get<std::string>(); 59 } 60 61 sd_journal_send("MESSAGE=Inventory Added: %s", name.c_str(), "PRIORITY=%i", 62 LOG_INFO, "REDFISH_MESSAGE_ID=%s", 63 "OpenBMC.0.1.InventoryAdded", 64 "REDFISH_MESSAGE_ARGS=%s,%s,%s", model.c_str(), 65 type.c_str(), sn.c_str(), "NAME=%s", name.c_str(), NULL); 66 } 67 68 void logDeviceRemoved(const nlohmann::json& record) 69 { 70 if (!deviceHasLogging(record)) 71 { 72 return; 73 } 74 auto findType = record.find("Type"); 75 auto findAsset = 76 record.find("xyz.openbmc_project.Inventory.Decorator.Asset"); 77 78 std::string model = "Unknown"; 79 std::string type = "Unknown"; 80 std::string sn = "Unknown"; 81 std::string name = "Unknown"; 82 83 if (findType != record.end()) 84 { 85 type = findType->get<std::string>(); 86 } 87 if (findAsset != record.end()) 88 { 89 auto findModel = findAsset->find("Model"); 90 auto findSn = findAsset->find("SerialNumber"); 91 if (findModel != findAsset->end()) 92 { 93 model = findModel->get<std::string>(); 94 } 95 if (findSn != findAsset->end()) 96 { 97 const std::string* getSn = findSn->get_ptr<const std::string*>(); 98 if (getSn != nullptr) 99 { 100 sn = *getSn; 101 } 102 else 103 { 104 sn = findSn->dump(); 105 } 106 } 107 } 108 109 auto findName = record.find("Name"); 110 if (findName != record.end()) 111 { 112 name = findName->get<std::string>(); 113 } 114 115 sd_journal_send("MESSAGE=Inventory Removed: %s", name.c_str(), 116 "PRIORITY=%i", LOG_INFO, "REDFISH_MESSAGE_ID=%s", 117 "OpenBMC.0.1.InventoryRemoved", 118 "REDFISH_MESSAGE_ARGS=%s,%s,%s", model.c_str(), 119 type.c_str(), sn.c_str(), "NAME=%s", name.c_str(), NULL); 120 } 121