VMI sensors: Add JSON changes to support VMI sensors

The handling for state sensor events for VMI network status sensors
were hardcoded. This patch makes the sensor handling for VMI sensors
data driven and also to handle for host sensors which are standard and
OEM. The OCC sensors handling is moved to openpower-occ-control app
so removing it from event_state_sensor.json file.

Tested:

By using pldmtool, the PlatformEventMessage is generated for VMI
sensors and verified the D-Bus propert in settings manager.

Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
Change-Id: I851573e54e2c1984bed142fdc1c2d40f37e544a9
diff --git a/configurations/events/event_state_sensor.json b/configurations/events/event_state_sensor.json
deleted file mode 100755
index aecb474..0000000
--- a/configurations/events/event_state_sensor.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{

-    "entries": [

-        {

-            "containerID": 0,

-            "entityType": 67,

-            "entityInstance": 1,

-            "sensorOffset": 0,

-            "event_states": [

-                3,

-                4

-            ],

-            "dbus": {

-                "object_path": "/org/open_power/control/occ0",

-                "interface": "org.open_power.OCC.Status",

-                "property_name": "OccActive",

-                "property_type": "bool",

-                "property_values": [

-                    false,

-                    true

-                ]

-            }

-        },

-        {

-            "containerID": 0,

-            "entityType": 67,

-            "entityInstance": 2,

-            "sensorOffset": 0,

-            "event_states": [

-                3,

-                4

-            ],

-            "dbus": {

-                "object_path": "/org/open_power/control/occ1",

-                "interface": "org.open_power.OCC.Status",

-                "property_name": "OccActive",

-                "property_type": "bool",

-                "property_values": [

-                    false,

-                    true

-                ]

-            }

-        }

-     ]

-}
\ No newline at end of file
diff --git a/configurations/meson.build b/configurations/meson.build
index 10ec58d..79550d8 100644
--- a/configurations/meson.build
+++ b/configurations/meson.build
@@ -9,15 +9,18 @@
 )
 
 install_subdir('fru', install_dir: packagedir)
-if get_option('oem-ibm').enabled()
-    install_subdir('../oem/ibm/configurations/fru', install_dir: packagedir)
-    install_data('../oem/ibm/configurations/fileTable.json',
-        install_dir: packagedir)
-    install_data('../oem/ibm/configurations/host_eid', install_dir: packagedir)
-endif
 
 install_subdir('pdr', install_dir: packagedir)
 
 install_subdir('host', install_dir: packagedir)
 
 install_subdir('events', install_dir: packagedir)
+
+if get_option('oem-ibm').enabled()
+    install_subdir('../oem/ibm/configurations/fru', install_dir: packagedir)
+    install_subdir('../oem/ibm/configurations/events', install_dir: packagedir)
+    install_data('../oem/ibm/configurations/fileTable.json',
+        install_dir: packagedir)
+    install_data('../oem/ibm/configurations/host_eid', install_dir: packagedir)
+endif
+
diff --git a/libpldmresponder/event_parser.cpp b/libpldmresponder/event_parser.cpp
index 894c0aa..e38102c 100644
--- a/libpldmresponder/event_parser.cpp
+++ b/libpldmresponder/event_parser.cpp
@@ -18,8 +18,6 @@
 const std::vector<Json> emptyJsonList{};

 const std::vector<std::string> emptyStringVec{};

 

-constexpr auto eventStateSensorJson = "event_state_sensor.json";

-

 const std::set<std::string_view> supportedDbusPropertyTypes = {

     "bool",     "uint8_t", "int16_t",  "uint16_t", "int32_t",

     "uint32_t", "int64_t", "uint64_t", "double",   "string"};

@@ -34,74 +32,69 @@
         return;

     }

 

-    fs::path filePath = dir / eventStateSensorJson;

-    if (!fs::exists(filePath))

+    for (auto& file : fs::directory_iterator(dirPath))

     {

-        std::cerr << "Event state sensor JSON does not exist, PATH=" << filePath

-                  << "\n";

-        throw InternalFailure();

-    }

+        std::ifstream jsonFile(file.path());

 

-    std::ifstream jsonFile(filePath);

-

-    auto data = Json::parse(jsonFile, nullptr, false);

-    if (data.is_discarded())

-    {

-        std::cerr << "Parsing Event state sensor JSON file failed, FILE="

-                  << filePath;

-        throw InternalFailure();

-    }

-

-    auto entries = data.value("entries", emptyJsonList);

-    for (const auto& entry : entries)

-    {

-        StateSensorEntry stateSensorEntry{};

-        stateSensorEntry.containerId =

-            static_cast<uint16_t>(entry.value("containerID", 0));

-        stateSensorEntry.entityType =

-            static_cast<uint16_t>(entry.value("entityType", 0));

-        stateSensorEntry.entityInstance =

-            static_cast<uint16_t>(entry.value("entityInstance", 0));

-        stateSensorEntry.sensorOffset =

-            static_cast<uint8_t>(entry.value("sensorOffset", 0));

-

-        pldm::utils::DBusMapping dbusInfo{};

-

-        auto dbus = entry.value("dbus", emptyJson);

-        dbusInfo.objectPath = dbus.value("object_path", "");

-        dbusInfo.interface = dbus.value("interface", "");

-        dbusInfo.propertyName = dbus.value("property_name", "");

-        dbusInfo.propertyType = dbus.value("property_type", "");

-        if (dbusInfo.objectPath.empty() || dbusInfo.interface.empty() ||

-            dbusInfo.propertyName.empty() ||

-            (supportedDbusPropertyTypes.find(dbusInfo.propertyType) ==

-             supportedDbusPropertyTypes.end()))

+        auto data = Json::parse(jsonFile, nullptr, false);

+        if (data.is_discarded())

         {

-            std::cerr << "Invalid dbus config,"

-                      << " OBJPATH=" << dbusInfo.objectPath << " INTERFACE="

-                      << dbusInfo.interface << " PROPERTY_NAME="

-                      << dbusInfo.propertyName

-                      << " PROPERTY_TYPE=" << dbusInfo.propertyType << "\n";

+            std::cerr << "Parsing Event state sensor JSON file failed, FILE="

+                      << file.path();

             continue;

         }

 

-        auto eventStates = entry.value("event_states", emptyJsonList);

-        auto propertyValues = dbus.value("property_values", emptyJsonList);

-        if ((eventStates.size() == 0) || (propertyValues.size() == 0) ||

-            (eventStates.size() != propertyValues.size()))

+        auto entries = data.value("entries", emptyJsonList);

+        for (const auto& entry : entries)

         {

-            std::cerr << "Invalid event state JSON config,"

-                      << " EVENT_STATE_SIZE=" << eventStates.size()

-                      << " PROPERTY_VALUE_SIZE=" << propertyValues.size()

-                      << "\n";

-            continue;

-        }

+            StateSensorEntry stateSensorEntry{};

+            stateSensorEntry.containerId =

+                static_cast<uint16_t>(entry.value("containerID", 0));

+            stateSensorEntry.entityType =

+                static_cast<uint16_t>(entry.value("entityType", 0));

+            stateSensorEntry.entityInstance =

+                static_cast<uint16_t>(entry.value("entityInstance", 0));

+            stateSensorEntry.sensorOffset =

+                static_cast<uint8_t>(entry.value("sensorOffset", 0));

 

-        auto eventStateMap = mapStateToDBusVal(eventStates, propertyValues,

-                                               dbusInfo.propertyType);

-        eventMap.emplace(

-            stateSensorEntry,

-            std::make_tuple(std::move(dbusInfo), std::move(eventStateMap)));

+            pldm::utils::DBusMapping dbusInfo{};

+

+            auto dbus = entry.value("dbus", emptyJson);

+            dbusInfo.objectPath = dbus.value("object_path", "");

+            dbusInfo.interface = dbus.value("interface", "");

+            dbusInfo.propertyName = dbus.value("property_name", "");

+            dbusInfo.propertyType = dbus.value("property_type", "");

+            if (dbusInfo.objectPath.empty() || dbusInfo.interface.empty() ||

+                dbusInfo.propertyName.empty() ||

+                (supportedDbusPropertyTypes.find(dbusInfo.propertyType) ==

+                 supportedDbusPropertyTypes.end()))

+            {

+                std::cerr << "Invalid dbus config,"

+                          << " OBJPATH=" << dbusInfo.objectPath << " INTERFACE="

+                          << dbusInfo.interface << " PROPERTY_NAME="

+                          << dbusInfo.propertyName

+                          << " PROPERTY_TYPE=" << dbusInfo.propertyType << "\n";

+                continue;

+            }

+

+            auto eventStates = entry.value("event_states", emptyJsonList);

+            auto propertyValues = dbus.value("property_values", emptyJsonList);

+            if ((eventStates.size() == 0) || (propertyValues.size() == 0) ||

+                (eventStates.size() != propertyValues.size()))

+            {

+                std::cerr << "Invalid event state JSON config,"

+                          << " EVENT_STATE_SIZE=" << eventStates.size()

+                          << " PROPERTY_VALUE_SIZE=" << propertyValues.size()

+                          << "\n";

+                continue;

+            }

+

+            auto eventStateMap = mapStateToDBusVal(eventStates, propertyValues,

+                                                   dbusInfo.propertyType);

+            eventMap.emplace(

+                stateSensorEntry,

+                std::make_tuple(std::move(dbusInfo), std::move(eventStateMap)));

+        }

     }

 }

 

diff --git a/oem/ibm/configurations/events/oem_ibm_event_state_sensor.json b/oem/ibm/configurations/events/oem_ibm_event_state_sensor.json
new file mode 100644
index 0000000..1eb8c8a
--- /dev/null
+++ b/oem/ibm/configurations/events/oem_ibm_event_state_sensor.json
@@ -0,0 +1,44 @@
+{

+    "entries": [

+        {

+            "containerID": 0,

+            "entityType": 57346,

+            "entityInstance": 0,

+            "sensorOffset": 1,

+            "event_states": [

+                1,

+                2

+            ],

+            "dbus": {

+                "object_path": "/xyz/openbmc_project/network/hypervisor/eth0/ipv4/addr0",

+                "interface": "xyz.openbmc_project.Object.Enable",

+                "property_name": "Enabled",

+                "property_type": "bool",

+                "property_values": [

+                    true,

+                    false

+                ]

+            }

+        },

+        {

+            "containerID": 0,

+            "entityType": 57346,

+            "entityInstance": 1,

+            "sensorOffset": 1,

+            "event_states": [

+                1,

+                2

+            ],

+            "dbus": {

+                "object_path": "/xyz/openbmc_project/network/hypervisor/eth1/ipv4/addr0",

+                "interface": "xyz.openbmc_project.Object.Enable",

+                "property_name": "Enabled",

+                "property_type": "bool",

+                "property_values": [

+                    true,

+                    false

+                ]

+            }

+        }

+     ]

+}
\ No newline at end of file
diff --git a/test/event_jsons/malformed1/event_state.json b/test/event_jsons/malformed1/event_state.json
deleted file mode 100644
index 29f9b04..0000000
--- a/test/event_jsons/malformed1/event_state.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{

-    "entries": [

-        {

-            "containerID": 1,

-            "entityType": 64,

-            "entityInstance": 1,

-            "sensorOffset": 1,

-            "event_states": [

-                0,

-                1,

-                2

-            ],

-            "dbus": {

-                "object_path": "/xyz/abc/def",

-                "interface": "xyz.openbmc_project.example1.value",

-                "property_name": "value1",

-                "property_type": "string",

-                "property_values": [

-                    "xyz.openbmc_project.State.Normal",

-                    "xyz.openbmc_project.State.Critical",

-                    "xyz.openbmc_project.State.Fatal"

-                ]

-            }

-        }

-    ]

-}

diff --git a/test/event_jsons/malformed2/event_state_sensor.json b/test/event_jsons/malformed2/event_state_sensor.json
deleted file mode 100644
index f7de057..0000000
--- a/test/event_jsons/malformed2/event_state_sensor.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{

-    "entries": [

-        {

-            "containerID": 1,

-            "entityType": 64,

-            "entityInstance": 1,

-            "sensorOffset": 1,

-            "event_states": [

-                0,

-                1,

-                2

-            ],

-            "dbus": {

-                "object_path": "/xyz/abc/def",

-                "interface": "xyz.openbmc_project.example1.value",

-                "property_name": "value1",

-                "property_type": "string",

-                "property_values": [

-                    "xyz.openbmc_project.State.Normal",

-                    "xyz.openbmc_project.State.Critical"

-                    "xyz.openbmc_project.State.Fatal"

-                ]

-            }

-        }

-    ]

-}

diff --git a/test/libpldmresponder_platform_test.cpp b/test/libpldmresponder_platform_test.cpp
index 28dd1e0..1c561ea 100644
--- a/test/libpldmresponder_platform_test.cpp
+++ b/test/libpldmresponder_platform_test.cpp
@@ -459,11 +459,6 @@
 {
     using namespace pldm::responder::events;
 
-    ASSERT_THROW(StateSensorHandler("./event_jsons/malformed1"),
-                 std::exception);
-    ASSERT_THROW(StateSensorHandler("./event_jsons/malformed2"),
-                 std::exception);
-
     StateSensorHandler handler{"./event_jsons/good"};
     constexpr uint8_t eventState0 = 0;
     constexpr uint8_t eventState1 = 1;