summaryrefslogtreecommitdiffstats
path: root/extensions/openpower-pels
diff options
context:
space:
mode:
authorAatir <aatrapps@gmail.com>2019-11-18 13:44:51 -0600
committerMatt Spinler <spinler@us.ibm.com>2019-12-09 18:52:48 +0000
commitc92b4eb4f00c5b6516476eda7965f8fecd6fbe35 (patch)
treea710b0ef5ff9adc2259990ed6a74a6c1ed0c09c3 /extensions/openpower-pels
parentb7f392a23e05a76a1dcba6d1a417715ebec4f257 (diff)
downloadphosphor-logging-c92b4eb4f00c5b6516476eda7965f8fecd6fbe35.tar.gz
phosphor-logging-c92b4eb4f00c5b6516476eda7965f8fecd6fbe35.zip
PEL: private header in JSON
The PELTool application is able to convert sections to JSON. This commit takes care of converting the private header section to JSON. private header section in JSON sample: "Private Header":[ {"Section Version": "1"}, {"Sub-section type": "0"}, {"Log Committed by": "0x1000"}, {"Entry Creation": "10/24/2019 15:50:08"}, {"Entry Commit": "10/24/2019 15:50:08"}, {"Creator ID": "BMC"}, {"Creator Implementation": ""}, {"Platform Log ID": "0x50000004"}, {"Log Entry ID": "0x50000004"} ] Signed-off-by: Aatir <aatrapps@gmail.com> Change-Id: I8b0d7dc7b70cd2a03f67f7c9a48755803634005d
Diffstat (limited to 'extensions/openpower-pels')
-rw-r--r--extensions/openpower-pels/pel_values.cpp9
-rw-r--r--extensions/openpower-pels/pel_values.hpp5
-rw-r--r--extensions/openpower-pels/private_header.cpp49
-rw-r--r--extensions/openpower-pels/private_header.hpp6
4 files changed, 68 insertions, 1 deletions
diff --git a/extensions/openpower-pels/pel_values.cpp b/extensions/openpower-pels/pel_values.cpp
index abf4653..775c0f5 100644
--- a/extensions/openpower-pels/pel_values.cpp
+++ b/extensions/openpower-pels/pel_values.cpp
@@ -230,6 +230,15 @@ const std::map<std::string, std::string> sectionTitles = {
{"ED", "Extended User Data"},
};
+/**
+ * @brief Map for creator IDs
+ */
+const std::map<std::string, std::string> creatorIDs = {
+
+ {"O", "BMC"}, {"C", "HMC"}, {"H", "PHYP"}, {"L", "Partition FW"},
+ {"S", "SLIC"}, {"B", "Hostboot"}, {"T", "OCC"}, {"M", "I/O Drawer"},
+ {"K", "Sapphire"}, {"P", "PowerNV"}};
+
} // namespace pel_values
} // namespace pels
} // namespace openpower
diff --git a/extensions/openpower-pels/pel_values.hpp b/extensions/openpower-pels/pel_values.hpp
index 49aa374..9d49dbe 100644
--- a/extensions/openpower-pels/pel_values.hpp
+++ b/extensions/openpower-pels/pel_values.hpp
@@ -82,6 +82,11 @@ extern const PELValues calloutPriorityValues;
*/
extern const std::map<std::string, std::string> sectionTitles;
+/**
+ * @brief Map for creator IDs
+ */
+extern const std::map<std::string, std::string> creatorIDs;
+
} // namespace pel_values
} // namespace pels
} // namespace openpower
diff --git a/extensions/openpower-pels/private_header.cpp b/extensions/openpower-pels/private_header.cpp
index 7ec87f3..2c1a860 100644
--- a/extensions/openpower-pels/private_header.cpp
+++ b/extensions/openpower-pels/private_header.cpp
@@ -17,6 +17,7 @@
#include "log_id.hpp"
#include "pel_types.hpp"
+#include "pel_values.hpp"
#include <phosphor-logging/log.hpp>
@@ -25,6 +26,7 @@ namespace openpower
namespace pels
{
+namespace pv = openpower::pels::pel_values;
using namespace phosphor::logging;
PrivateHeader::PrivateHeader(uint16_t componentID, uint32_t obmcLogID,
@@ -79,7 +81,52 @@ PrivateHeader::PrivateHeader(Stream& pel) :
_valid = false;
}
}
-
+std::optional<std::string> PrivateHeader::getJSON() const
+{
+ char tmpPhVal[50];
+ sprintf(tmpPhVal, "%02X/%02X/%02X%02X %02X:%02X:%02X",
+ _createTimestamp.month, _createTimestamp.day,
+ _createTimestamp.yearMSB, _createTimestamp.yearLSB,
+ _createTimestamp.hour, _createTimestamp.minutes,
+ _createTimestamp.seconds);
+ std::string phCreateTStr(tmpPhVal);
+ sprintf(tmpPhVal, "%02X/%02X/%02X%02X %02X:%02X:%02X",
+ _commitTimestamp.month, _commitTimestamp.day,
+ _createTimestamp.yearMSB, _commitTimestamp.yearLSB,
+ _commitTimestamp.hour, _commitTimestamp.minutes,
+ _commitTimestamp.seconds);
+ std::string phCommitTStr(tmpPhVal);
+ sprintf(tmpPhVal, "%c", _creatorID);
+ std::string creator(tmpPhVal);
+ creator = pv::creatorIDs.count(creator) ? pv::creatorIDs.at(creator)
+ : "Unknown CreatorID";
+ std::string phCreatorVersionStr =
+ std::string(reinterpret_cast<const char*>(_creatorVersion.version));
+
+ sprintf(tmpPhVal, "0x%X", _header.componentID);
+ std::string phCbStr(tmpPhVal);
+ sprintf(tmpPhVal, "%d", _header.subType);
+ std::string phStStr(tmpPhVal);
+ sprintf(tmpPhVal, "%d", privateHeaderVersion);
+ std::string phVerStr(tmpPhVal);
+ sprintf(tmpPhVal, "0x%X", _plid);
+ std::string phPlatformIDStr(tmpPhVal);
+ sprintf(tmpPhVal, "0x%X", _id);
+ std::string phLogEntryIDStr(tmpPhVal);
+ std::string ph = "{\"Section Version\": \"" + phVerStr +
+ "\"}, \n {\"Sub-section type\": \"" + phStStr +
+ "\"}, \n "
+ "{\"Log Committed by\": \"" +
+ phCbStr + "\"}, \n {\"Entry Creation\": \"" +
+ phCreateTStr + "\"}, \n {\"Entry Commit\": \"" +
+ phCommitTStr + "\"}, \n {\"Creator ID\": \"" + creator +
+ "\"}, \n {\"Creator Implementation\": \"" +
+ phCreatorVersionStr + "\"},\n {\"Platform Log ID\": \"" +
+ phPlatformIDStr + "\"},\n {\"Log Entry ID\": \"" +
+ phLogEntryIDStr + "\"}";
+
+ return ph;
+}
void PrivateHeader::validate()
{
bool failed = false;
diff --git a/extensions/openpower-pels/private_header.hpp b/extensions/openpower-pels/private_header.hpp
index 1302182..dd0d504 100644
--- a/extensions/openpower-pels/private_header.hpp
+++ b/extensions/openpower-pels/private_header.hpp
@@ -219,6 +219,12 @@ class PrivateHeader : public Section
sizeof(_creatorVersion) + sizeof(_plid) + sizeof(_id);
}
+ /**
+ * @brief Get section in JSON.
+ * @return std::optional<std::string> - Private header section's JSON
+ */
+ std::optional<std::string> getJSON() const override;
+
private:
/**
* @brief Fills in the object from the stream data
OpenPOWER on IntegriCloud