PEL: Msg registry sev now based on sys type

The PEL severity field in the UserHeader section can now be defined in
the message registry to be based on system type.

When the UserHeader object is being created from the message registry,
it will now query the system type and use that to find the correct
severity value.

The Registry class was updated to handle the new JSON format, which
is an array of system type/severity value objects.

The original severity format of a simple string is still valid.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I0fe0ada7193c57adc42e82afdc30e687eea63eb9
diff --git a/extensions/openpower-pels/registry.cpp b/extensions/openpower-pels/registry.cpp
index a02bebb..9b2262d 100644
--- a/extensions/openpower-pels/registry.cpp
+++ b/extensions/openpower-pels/registry.cpp
@@ -68,6 +68,41 @@
     return std::get<pv::fieldValuePos>(*s);
 }
 
+std::vector<RegistrySeverity> getSeverities(const nlohmann::json& severity)
+{
+    std::vector<RegistrySeverity> severities;
+
+    // The plain string value, like "unrecoverable"
+    if (severity.is_string())
+    {
+        RegistrySeverity s;
+        s.severity = getSeverity(severity.get<std::string>());
+        severities.push_back(std::move(s));
+    }
+    else
+    {
+        // An array, with an element like:
+        // {
+        //    "SevValue": "unrecoverable",
+        //    "System", "systemA"
+        // }
+        for (const auto& sev : severity)
+        {
+            RegistrySeverity s;
+            s.severity = getSeverity(sev["SevValue"].get<std::string>());
+
+            if (sev.contains("System"))
+            {
+                s.system = sev["System"].get<std::string>();
+            }
+
+            severities.push_back(std::move(s));
+        }
+    }
+
+    return severities;
+}
+
 uint16_t getActionFlags(const std::vector<std::string>& flags)
 {
     uint16_t actionFlags = 0;
@@ -573,12 +608,12 @@
 
             if (e->contains("Severity"))
             {
-                entry.severity = helper::getSeverity((*e)["Severity"]);
+                entry.severity = helper::getSeverities((*e)["Severity"]);
             }
 
             if (e->contains("MfgSeverity"))
             {
-                entry.mfgSeverity = helper::getSeverity((*e)["MfgSeverity"]);
+                entry.mfgSeverity = helper::getSeverities((*e)["MfgSeverity"]);
             }
 
             if (e->contains("EventType"))