PEL: Print Failing MTMS section into JSON

Remove any trailing whitespace for serial number.

"Failing MTMS": {
    "Section Version":          "1",
    "Sub-section type":         "0",
    "Created by":               "0x4552",
    "Machine Type Model":       "OPWR-131",
    "Serial Number":            "1318ABA"
},

Testing: Manually run peltool and verified output. All unit tests
passed.
Signed-off-by: Harisuddin Mohamed Isa <harisuddin@gmail.com>
Change-Id: I7a05790bdf406ef6d7946ffae831a45ee6dd5cda
diff --git a/extensions/openpower-pels/failing_mtms.cpp b/extensions/openpower-pels/failing_mtms.cpp
index d4cdf37..b45c05d 100644
--- a/extensions/openpower-pels/failing_mtms.cpp
+++ b/extensions/openpower-pels/failing_mtms.cpp
@@ -15,6 +15,7 @@
  */
 #include "failing_mtms.hpp"
 
+#include "json_utils.hpp"
 #include "pel_types.hpp"
 
 #include <phosphor-logging/log.hpp>
@@ -85,5 +86,19 @@
     stream >> _header >> _mtms;
 }
 
+std::optional<std::string> FailingMTMS::getJSON() const
+{
+    std::string json;
+    jsonInsert(json, "Section Version", getNumberString("%d", _header.version),
+               1);
+    jsonInsert(json, "Sub-section type", getNumberString("%d", _header.subType),
+               1);
+    jsonInsert(json, "Created by", getNumberString("0x%X", _header.componentID),
+               1);
+    jsonInsert(json, "Machine Type Model", _mtms.machineTypeAndModel(), 1);
+    jsonInsert(json, "Serial Number", trimEnd(_mtms.machineSerialNumber()), 1);
+    json.erase(json.size() - 2);
+    return json;
+}
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/failing_mtms.hpp b/extensions/openpower-pels/failing_mtms.hpp
index 65186eb..8f5cd44 100644
--- a/extensions/openpower-pels/failing_mtms.hpp
+++ b/extensions/openpower-pels/failing_mtms.hpp
@@ -81,6 +81,12 @@
         return _mtms.machineSerialNumber();
     }
 
+    /**
+     * @brief Get section in JSON.
+     * @return std::optional<std::string> - Failing MTMS section in JSON
+     */
+    std::optional<std::string> getJSON() const override;
+
   private:
     /**
      * @brief Validates the section contents
diff --git a/extensions/openpower-pels/json_utils.cpp b/extensions/openpower-pels/json_utils.cpp
index cd41804..871bd32 100644
--- a/extensions/openpower-pels/json_utils.cpp
+++ b/extensions/openpower-pels/json_utils.cpp
@@ -193,5 +193,15 @@
         jsonStr.append("[],\n");
     }
 }
+
+std::string trimEnd(std::string s)
+{
+    const char* t = " \t\n\r\f\v";
+    if (s.find_last_not_of(t) != std::string::npos)
+    {
+        s.erase(s.find_last_not_of(t) + 1);
+    }
+    return s;
+}
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/json_utils.hpp b/extensions/openpower-pels/json_utils.hpp
index f3fb767..e122f47 100644
--- a/extensions/openpower-pels/json_utils.hpp
+++ b/extensions/openpower-pels/json_utils.hpp
@@ -76,5 +76,12 @@
     return numString;
 }
 
+/**
+ * @brief helper function to trim trailing whitespaces
+ * @return std::string - trimmed string
+ * @param[in] std::string - string to trim
+ */
+std::string trimEnd(std::string s);
+
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/tools/peltool.cpp b/extensions/openpower-pels/tools/peltool.cpp
index f1d5f59..ed6daa2 100644
--- a/extensions/openpower-pels/tools/peltool.cpp
+++ b/extensions/openpower-pels/tools/peltool.cpp
@@ -182,21 +182,6 @@
     }
 }
 
-/**
- * @brief helper function to trim trailing whitespaces
- * @return std::string - trimmed string
- * @param[in] std::string - string to trim
- */
-const char* ws = " \t\n\r\f\v";
-std::string trim(std::string s, const char* t = ws)
-{
-    if (s.find_last_not_of(t) != std::string::npos)
-    {
-        s.erase(s.find_last_not_of(t) + 1);
-    }
-    return s;
-}
-
 template <typename T>
 std::string genPELJSON(T itr, bool hidden, message::Registry& registry)
 {