| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 1 | #include "../utils.hpp" | 
 | 2 |  | 
 | 3 | #include <systemd/sd-journal.h> | 
 | 4 |  | 
 | 5 | #include <boost/container/flat_map.hpp> | 
 | 6 | #include <nlohmann/json.hpp> | 
| Alexander Hansen | c58af0b | 2025-09-12 15:47:19 +0200 | [diff] [blame] | 7 | #include <xyz/openbmc_project/Inventory/Decorator/Asset/common.hpp> | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 8 |  | 
 | 9 | #include <string> | 
 | 10 |  | 
| Alexander Hansen | 71fbff7 | 2025-10-09 18:06:12 +0200 | [diff] [blame] | 11 | struct InvAddRemoveInfo | 
 | 12 | { | 
 | 13 |     std::string model = "Unknown"; | 
 | 14 |     std::string type = "Unknown"; | 
 | 15 |     std::string sn = "Unknown"; | 
 | 16 |     std::string name = "Unknown"; | 
 | 17 | }; | 
 | 18 |  | 
 | 19 | static InvAddRemoveInfo queryInvInfo(const nlohmann::json& record) | 
 | 20 | { | 
 | 21 |     auto findType = record.find("Type"); | 
| Alexander Hansen | c58af0b | 2025-09-12 15:47:19 +0200 | [diff] [blame] | 22 |     auto findAsset = record.find(sdbusplus::common::xyz::openbmc_project:: | 
 | 23 |                                      inventory::decorator::Asset::interface); | 
| Alexander Hansen | 71fbff7 | 2025-10-09 18:06:12 +0200 | [diff] [blame] | 24 |  | 
 | 25 |     std::string model = "Unknown"; | 
 | 26 |     std::string type = "Unknown"; | 
 | 27 |     std::string sn = "Unknown"; | 
 | 28 |     std::string name = "Unknown"; | 
 | 29 |  | 
 | 30 |     if (findType != record.end()) | 
 | 31 |     { | 
 | 32 |         type = findType->get<std::string>(); | 
 | 33 |     } | 
 | 34 |     if (findAsset != record.end()) | 
 | 35 |     { | 
 | 36 |         auto findModel = findAsset->find("Model"); | 
 | 37 |         auto findSn = findAsset->find("SerialNumber"); | 
 | 38 |         if (findModel != findAsset->end()) | 
 | 39 |         { | 
 | 40 |             model = findModel->get<std::string>(); | 
 | 41 |         } | 
 | 42 |         if (findSn != findAsset->end()) | 
 | 43 |         { | 
 | 44 |             const std::string* getSn = findSn->get_ptr<const std::string*>(); | 
 | 45 |             if (getSn != nullptr) | 
 | 46 |             { | 
 | 47 |                 sn = *getSn; | 
 | 48 |             } | 
 | 49 |             else | 
 | 50 |             { | 
 | 51 |                 sn = findSn->dump(); | 
 | 52 |             } | 
 | 53 |         } | 
 | 54 |     } | 
 | 55 |  | 
 | 56 |     auto findName = record.find("Name"); | 
 | 57 |     if (findName != record.end()) | 
 | 58 |     { | 
 | 59 |         name = findName->get<std::string>(); | 
 | 60 |     } | 
 | 61 |  | 
 | 62 |     return {model, type, sn, name}; | 
 | 63 | } | 
 | 64 |  | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 65 | void logDeviceAdded(const nlohmann::json& record) | 
 | 66 | { | 
| Alexander Hansen | e665185 | 2025-01-21 16:22:05 +0100 | [diff] [blame] | 67 |     if (!EM_CACHE_CONFIGURATION) | 
 | 68 |     { | 
 | 69 |         return; | 
 | 70 |     } | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 71 |     if (!deviceHasLogging(record)) | 
 | 72 |     { | 
 | 73 |         return; | 
 | 74 |     } | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 75 |  | 
| Alexander Hansen | 71fbff7 | 2025-10-09 18:06:12 +0200 | [diff] [blame] | 76 |     const auto info = queryInvInfo(record); | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 77 |  | 
| Alexander Hansen | 71fbff7 | 2025-10-09 18:06:12 +0200 | [diff] [blame] | 78 |     sd_journal_send( | 
 | 79 |         "MESSAGE=Inventory Added: %s", info.name.c_str(), "PRIORITY=%i", | 
 | 80 |         LOG_INFO, "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryAdded", | 
 | 81 |         "REDFISH_MESSAGE_ARGS=%s,%s,%s", info.model.c_str(), info.type.c_str(), | 
 | 82 |         info.sn.c_str(), "NAME=%s", info.name.c_str(), NULL); | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 83 | } | 
 | 84 |  | 
 | 85 | void logDeviceRemoved(const nlohmann::json& record) | 
 | 86 | { | 
 | 87 |     if (!deviceHasLogging(record)) | 
 | 88 |     { | 
 | 89 |         return; | 
 | 90 |     } | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 91 |  | 
| Alexander Hansen | 71fbff7 | 2025-10-09 18:06:12 +0200 | [diff] [blame] | 92 |     const auto info = queryInvInfo(record); | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 93 |  | 
| Alexander Hansen | 71fbff7 | 2025-10-09 18:06:12 +0200 | [diff] [blame] | 94 |     sd_journal_send( | 
 | 95 |         "MESSAGE=Inventory Removed: %s", info.name.c_str(), "PRIORITY=%i", | 
 | 96 |         LOG_INFO, "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryRemoved", | 
 | 97 |         "REDFISH_MESSAGE_ARGS=%s,%s,%s", info.model.c_str(), info.type.c_str(), | 
 | 98 |         info.sn.c_str(), "NAME=%s", info.name.c_str(), NULL); | 
| Alexander Hansen | f57a259 | 2025-06-27 15:07:07 +0200 | [diff] [blame] | 99 | } |