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