PEL: Support user supplied flag to indicate a fatal/terminating

User can supply SEVERITY_DETAIL=SYSTEM_TERM as part
of AdditionalData entry in the event log to set the
severity level in User Header of PEL

Tested: I ran unit test using docker. Also tested manually
by setting D-bus event log

Change-Id: I9205c084c32576734c2b5b4c79c273f8defde9d4
Signed-off-by: Vijay Lobo <vijaylobo@gmail.com>
diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index 276c506..a7d8023 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -47,6 +47,7 @@
 
 UserHeader::UserHeader(const message::Entry& entry,
                        phosphor::logging::Entry::Level severity,
+                       const AdditionalData& additionalData,
                        const DataInterfaceBase& dataIface)
 {
     _header.id = static_cast<uint16_t>(SectionID::userHeader);
@@ -88,6 +89,18 @@
         }
     }
 
+    // Convert Critical error (0x50) to Critical Error-System Termination
+    // (0x51), if the AdditionalData is set to SYSTEM_TERM
+    auto sevLevel = additionalData.getValue("SEVERITY_DETAIL");
+    if ((_eventSeverity & 0xF0) == 0x50)
+    {
+        if (sevLevel.value_or("") == "SYSTEM_TERM")
+        {
+            // Change to Critical Error, System Termination
+            _eventSeverity = 0x51;
+        }
+    }
+
     // TODO: ibm-dev/dev/#1144 Handle manufacturing sev & action flags
 
     if (entry.eventType)
@@ -99,7 +112,6 @@
         // There are different default event types for info errors
         // vs non info ones.
         auto sevType = static_cast<SeverityType>(_eventSeverity & 0xF0);
-
         _eventType = (sevType == SeverityType::nonError)
                          ? static_cast<uint8_t>(EventType::miscInformational)
                          : static_cast<uint8_t>(EventType::notApplicable);