PEL: user header in JSON

The PELTool application is able to convert sections to JSON. This commit
takes care of converting the user header section to JSON.

user header section in JSON sample:

"User Header":[
 {"Section Version": "1"},
 {"Sub-section type": "0"},
 {"Log Committed by": "0x2000"},
 {"Subsystem": "bmc_firmware"},
 {"Event Scope": "entire_platform"},
 {"Event Severity":"unrecoverable"},
 {"Event Type": "na"}
]

Signed-off-by: Aatir Manzur <aatrapps@gmail.com>
Change-Id: I0dca1d87019b9e62d711ee6d034f2e8bc0574c2e
diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index 0014b57..c52d4b5 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -18,6 +18,7 @@
 #include "pel_types.hpp"
 #include "severity.hpp"
 
+#include <iostream>
 #include <phosphor-logging/log.hpp>
 
 namespace openpower
@@ -126,5 +127,48 @@
     _valid = (failed) ? false : true;
 }
 
+std::string UserHeader::getValue(const uint8_t field,
+                                 const pel_values::PELValues& values) const
+{
+
+    auto tmp = pel_values::findByValue(field, values);
+    if (tmp != values.end())
+    {
+        return std::get<pel_values::registryNamePos>(*tmp);
+    }
+    else
+    {
+        return "invalid";
+    }
+}
+std::optional<std::string> UserHeader::getJSON() const
+{
+    std::string severity;
+    std::string subsystem;
+    std::string eventScope;
+    std::string eventType;
+    severity = getValue(_eventSeverity, pel_values::severityValues);
+    subsystem = getValue(_eventSubsystem, pel_values::subsystemValues);
+    eventScope = getValue(_eventScope, pel_values::eventScopeValues);
+    eventType = getValue(_eventType, pel_values::eventTypeValues);
+    char tmpUhVal[8];
+    sprintf(tmpUhVal, "%d", userHeaderVersion);
+    std::string uhVerStr(tmpUhVal);
+    sprintf(tmpUhVal, "0x%X", _header.componentID);
+    std::string uhCbStr(tmpUhVal);
+    sprintf(tmpUhVal, "%d", _header.subType);
+    std::string uhStStr(tmpUhVal);
+
+    std::string uh = "{\"Section Version\": \"" + uhVerStr +
+                     "\"}, \n {\"Sub-section type\": \"" + uhStStr +
+                     "\"}, \n "
+                     "{\"Log Committed by\": \"" +
+                     uhCbStr + "\"}, \n {\"Subsystem\": \"" + subsystem +
+                     "\"},\n "
+                     "{\"Event Scope\": \"" +
+                     eventScope + "\"}, \n {\"Event Severity\":\"" + severity +
+                     "\"},\n {\"Event Type\": \"" + eventType + "\"}";
+    return uh;
+}
 } // namespace pels
 } // namespace openpower