blob: 9662c9730091f527d35a128fb6c6b5ef8c576fc7 [file] [log] [blame]
Alexander Hansenf57a2592025-06-27 15:07:07 +02001#include "../utils.hpp"
2
3#include <systemd/sd-journal.h>
4
5#include <boost/container/flat_map.hpp>
6#include <nlohmann/json.hpp>
Alexander Hansenc58af0b2025-09-12 15:47:19 +02007#include <xyz/openbmc_project/Inventory/Decorator/Asset/common.hpp>
Alexander Hansenf57a2592025-06-27 15:07:07 +02008
9#include <string>
10
Alexander Hansen71fbff72025-10-09 18:06:12 +020011struct InvAddRemoveInfo
12{
13 std::string model = "Unknown";
14 std::string type = "Unknown";
15 std::string sn = "Unknown";
16 std::string name = "Unknown";
17};
18
19static InvAddRemoveInfo queryInvInfo(const nlohmann::json& record)
20{
21 auto findType = record.find("Type");
Alexander Hansenc58af0b2025-09-12 15:47:19 +020022 auto findAsset = record.find(sdbusplus::common::xyz::openbmc_project::
23 inventory::decorator::Asset::interface);
Alexander Hansen71fbff72025-10-09 18:06:12 +020024
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 Hansenf57a2592025-06-27 15:07:07 +020065void logDeviceAdded(const nlohmann::json& record)
66{
Alexander Hansene6651852025-01-21 16:22:05 +010067 if (!EM_CACHE_CONFIGURATION)
68 {
69 return;
70 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020071 if (!deviceHasLogging(record))
72 {
73 return;
74 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020075
Alexander Hansen71fbff72025-10-09 18:06:12 +020076 const auto info = queryInvInfo(record);
Alexander Hansenf57a2592025-06-27 15:07:07 +020077
Alexander Hansen71fbff72025-10-09 18:06:12 +020078 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 Hansenf57a2592025-06-27 15:07:07 +020083}
84
85void logDeviceRemoved(const nlohmann::json& record)
86{
87 if (!deviceHasLogging(record))
88 {
89 return;
90 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020091
Alexander Hansen71fbff72025-10-09 18:06:12 +020092 const auto info = queryInvInfo(record);
Alexander Hansenf57a2592025-06-27 15:07:07 +020093
Alexander Hansen71fbff72025-10-09 18:06:12 +020094 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 Hansenf57a2592025-06-27 15:07:07 +020099}