PEL: Print SRC section into JSON
For BMC created errors, look up the reason code in
the message registry for error description and also
meaning of data stored in hexwords 6-9 (if any).
Added registry message field in peltool list output.
"Primary SRC": {
"Section Version": "1",
"Sub-section type": "1",
"Created by": "0x1000",
"SRC Version": "0x02",
"SRC Format": "0x55",
"Power Control Net Fault": "False",
"Error Details": {
"Message": "PS 0x64 had a PGOOD Fault",
"PS_NUM": "0x64"
},
"Valid Word Count": "0x09",
"Reference Code": "BD8D1001",
"Hex Word 2": "00000055",
"Hex Word 3": "00000010",
"Hex Word 4": "00000000",
"Hex Word 5": "00000000",
"Hex Word 6": "00000064",
"Hex Word 7": "00000000",
"Hex Word 8": "00000000",
"Hex Word 9": "00000000"
}
"Primary SRC": {
"Section Version": "1",
"Sub-section type": "0",
"Created by": "0x4552",
"SRC Version": "0x02",
"SRC Format": "0x2008000",
"Power Control Net Fault": "False",
"Valid Word Count": "0x04",
"Reference Code": "B2001020",
"Hex Word 2": "02008000",
"Hex Word 3": "00000000",
"Hex Word 4": "00000012",
"Callout Section": {
"Callout Count": "1",
"Callouts": [{
"FRU Type": "Symbolic FRU",
"Priority": "Medium Priority",
"Part Number": "NEXTLVL"
}]
}
}
Testing: Manually run peltool and verified out. All unit tests passed.
Signed-off-by: Harisuddin Mohamed Isa <harisuddin@gmail.com>
Change-Id: I124627ba785413ebda02305b7d9f95431922e714
diff --git a/extensions/openpower-pels/json_utils.hpp b/extensions/openpower-pels/json_utils.hpp
index 14c2ce4..f3fb767 100644
--- a/extensions/openpower-pels/json_utils.hpp
+++ b/extensions/openpower-pels/json_utils.hpp
@@ -39,7 +39,7 @@
* @param[in] indentCount - Indent count for the line
*/
void jsonInsert(std::string& jsonStr, const std::string& fieldName,
- std::string& fieldValue, uint8_t indentCount);
+ std::string fieldValue, uint8_t indentCount);
/**
* @brief Inserts key-value array into a JSON string
@@ -51,5 +51,30 @@
*/
void jsonInsertArray(std::string& jsonStr, const std::string& fieldName,
std::vector<std::string>& values, uint8_t indentCount);
+
+/**
+ * @brief Converts an integer to a formatted string
+ * @param[in] format - the format of output string
+ * @param[in] number - the integer to convert
+ * @return std::string - the formatted string
+ */
+template <typename T>
+std::string getNumberString(const char* format, T number)
+{
+ char* value = nullptr;
+ std::string numString;
+
+ static_assert(std::is_integral<T>::value, "Integral required.");
+
+ int len = asprintf(&value, format, number);
+ if (len)
+ {
+ numString = value;
+ }
+ free(value);
+
+ return numString;
+}
+
} // namespace pels
} // namespace openpower