From 1eafa415709ecd7731c5a6d9d0221db93c1a35c3 Mon Sep 17 00:00:00 2001
From: William F Godoy <wfg@pc0098504.ornl.gov>
Date: Mon, 10 Apr 2017 16:30:35 -0400
Subject: [PATCH] Fixing aggregation formatting in .bp/profiling.log

Now meets the python dictionary format
---
 source/utilities/format/bp1/BP1Aggregator.cpp | 26 ++++++++++++----
 source/utilities/format/bp1/BP1Writer.cpp     | 30 ++++++++++++++-----
 2 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/source/utilities/format/bp1/BP1Aggregator.cpp b/source/utilities/format/bp1/BP1Aggregator.cpp
index b4468c036..1ad2d00e7 100644
--- a/source/utilities/format/bp1/BP1Aggregator.cpp
+++ b/source/utilities/format/bp1/BP1Aggregator.cpp
@@ -43,8 +43,10 @@ void BP1Aggregator::WriteProfilingLog(const std::string fileName,
 
         // first receive sizes
         for (unsigned int i = 1; i < sizeMPI; ++i)
+        {
             MPI_Irecv(&rankLogsSizes[i - 1], 1, MPI_INT, i, 0, m_MPIComm,
                       &requests[i]);
+        }
 
         for (unsigned int i = 1; i < sizeMPI; ++i)
         {
@@ -62,23 +64,37 @@ void BP1Aggregator::WriteProfilingLog(const std::string fileName,
 
         // receive rankLog from other ranks
         for (unsigned int i = 1; i < sizeMPI; ++i)
+        {
             MPI_Irecv(rankLogs[i - 1].data(), rankLogsSizes[i - 1], MPI_CHAR, i,
                       1, m_MPIComm, &requests[i]);
+        }
 
         for (unsigned int i = 1; i < sizeMPI; ++i)
+        {
             MPI_Wait(&requests[i], &statuses[i]);
+        }
 
         // write file
-        std::string logFile("log = { \n");
+        std::string logFile("{\n");
         logFile += rankLog + "\n";
         for (unsigned int i = 1; i < sizeMPI; ++i)
         {
-            const std::string rankLogStr(rankLogs[i - 1].data(),
-                                         rankLogs[i - 1].size());
-            logFile += rankLogStr + "\n";
+            if (i == sizeMPI - 1) // last one, eliminate trailing comma
+            {
+                const std::string rankLogStr(rankLogs[i - 1].data(),
+                                             rankLogs[i - 1].size() - 1);
+                logFile += rankLogStr + "\n";
+            }
+            else
+            {
+                const std::string rankLogStr(rankLogs[i - 1].data(),
+                                             rankLogs[i - 1].size());
+                logFile += rankLogStr + "\n";
+            }
         }
-        logFile += " }\n";
+        logFile += "}\n";
 
+        // write to file
         std::ofstream logStream(fileName);
         logStream.write(logFile.c_str(), logFile.size());
         logStream.close();
diff --git a/source/utilities/format/bp1/BP1Writer.cpp b/source/utilities/format/bp1/BP1Writer.cpp
index 30d393e9f..8cef9fce9 100644
--- a/source/utilities/format/bp1/BP1Writer.cpp
+++ b/source/utilities/format/bp1/BP1Writer.cpp
@@ -161,7 +161,7 @@ std::string BP1Writer::GetRankProfilingLog(
     auto lf_WriterTimer = [](std::string &rankLog,
                              const profiling::Timer &timer) {
         rankLog += "'" + timer.m_Process + "_" + timer.GetUnits() + "': " +
-                   std::to_string(timer.m_ProcessTime) + ", ";
+                   std::to_string(timer.m_ProcessTime);
     };
 
     // prepare string dictionary per rank
@@ -170,20 +170,36 @@ std::string BP1Writer::GetRankProfilingLog(
     auto &profiler = metadataSet.Log;
     rankLog += "'bytes': " + std::to_string(profiler.TotalBytes[0]) + ", ";
     lf_WriterTimer(rankLog, profiler.Timers[0]);
+    rankLog += ", ";
 
     for (unsigned int t = 0; t < transports.size(); ++t)
     {
-        auto &timers = transports[t]->m_Profiler.Timers;
-
         rankLog += "'transport_" + std::to_string(t) + "': { ";
-        rankLog += "'lib': " + transports[t]->m_Type + ", ";
+        rankLog += "'lib': '" + transports[t]->m_Type + "', ";
 
         for (unsigned int i = 0; i < 3; ++i)
-            lf_WriterTimer(rankLog, timers[i]);
+        {
+            lf_WriterTimer(rankLog, transports[t]->m_Profiler.Timers[i]);
+            if (i < 2)
+            {
+                rankLog += ", ";
+            }
+            else
+            {
+                rankLog += " ";
+            }
+        }
 
-        rankLog += "}, ";
+        if (t == transports.size() - 1) // last element
+        {
+            rankLog += "}";
+        }
+        else
+        {
+            rankLog += "},";
+        }
     }
-    rankLog += "}, ";
+    rankLog += " },";
 
     return rankLog;
 }
-- 
GitLab