blob: 5a8a918cc2e49de438097d84794cd99abb52e009 [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>
7
8#include <string>
9
10void logDeviceAdded(const nlohmann::json& record)
11{
Alexander Hansene6651852025-01-21 16:22:05 +010012 if (!EM_CACHE_CONFIGURATION)
13 {
14 return;
15 }
Alexander Hansenf57a2592025-06-27 15:07:07 +020016 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
68void 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}