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