xref: /openbmc/entity-manager/src/entity_manager/log_device_inventory.cpp (revision e665185bc9ea2a453a254756073891c0819f6375)
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