Browse Source

makes instrumentation more accurate

tristangurtler 3 years ago
parent
commit
af3553c129
4 changed files with 75 additions and 48 deletions
  1. 5 1
      prsona/inc/networking.hpp
  2. 14 14
      prsona/src/networkClient.cpp
  3. 32 32
      prsona/src/networkServer.cpp
  4. 24 1
      prsona/src/networking.cpp

+ 5 - 1
prsona/inc/networking.hpp

@@ -183,9 +183,13 @@ void load_single_instance_config(
     const char *filename);
 
 // Extracts relevant log data from server
-std::vector<size_t> get_log_data(
+std::vector<size_t> get_server_log_data(
     const struct mg_context *ctx);
 
+std::vector<size_t> get_conn_log_data(
+    const struct mg_context *ctx,
+    bool receivedData);
+
 // Write log data to file
 void write_log_data(
     std::mutex& outputMtx,

+ 14 - 14
prsona/src/networkClient.cpp

@@ -79,7 +79,7 @@ void make_vote(
     }
     shuffle(replaces.begin(), replaces.end(), rng);
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(civetServer.getContext());
+    std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer.getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -109,7 +109,7 @@ void make_vote(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> bandwidthDataAfter = get_log_data(civetServer.getContext());
+    std::vector<size_t> bandwidthDataAfter = get_server_log_data(civetServer.getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -135,7 +135,7 @@ bool make_reputation_proof(
 {
     std::vector<size_t> bandwidthData(2);
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(civetServer.getContext());
+    std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer.getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -175,7 +175,7 @@ bool make_reputation_proof(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> bandwidthDataAfter = get_log_data(civetServer.getContext());
+    std::vector<size_t> bandwidthDataAfter = get_server_log_data(civetServer.getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -326,7 +326,7 @@ Twistpoint get_generator(
             std::cerr << "Couldn't connect to servers to get generator" << std::endl;
     }
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+    std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), true);
 
     // Establish a file to receive generator at
     filename = set_temp_filename(rng, conn);    
@@ -338,7 +338,7 @@ Twistpoint get_generator(
     while (!sync.val)
         sync.cv.wait(lck);
 
-    std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+    std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), true);
 
     bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
     bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -472,7 +472,7 @@ T get_first_committed_val(
             std::cerr << "Trouble getting encrypted score from server at " << serverIP << ":" << serverPort << std::endl;
     }
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+    std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), true);
 
     // Establish a file to receive committed-to value at
     filename = set_temp_filename(rng, conn);
@@ -485,7 +485,7 @@ T get_first_committed_val(
     while (!sync.val)
         sync.cv.wait(lck);
 
-    std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+    std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), true);
 
     bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
     bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -544,7 +544,7 @@ void get_additional_commitment(
                 std::cerr << "Trouble getting commitment from server at " << serverIPs[i] << ":" << serverPorts[i] << std::endl;
         }
 
-        std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), true);
 
         // Establish a file to receive hash at
         commitmentFilenames.push_back(set_temp_filename(rng, conn));
@@ -557,7 +557,7 @@ void get_additional_commitment(
         while (!currSync->val)
             currSync->cv.wait(lck);
 
-        std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), true);
 
         bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
         bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -796,7 +796,7 @@ char *send_item(
                 std::cerr << "Couldn't connect to server for purposes of sending item." << std::endl;
         }
 
-        std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), false);
 
         // Set up a file to receive a response at (if it's expected)
         if (responseExpected)
@@ -810,7 +810,7 @@ char *send_item(
         while (!sync.val2)
             sync.cv.wait(lck);
 
-        std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), false);
 
         bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
         bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -1035,7 +1035,7 @@ void PrsonaClientWebSocketHandler::verify_reputation_proof(
     file >> shortTermPublicKey;
     file >> threshold;
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(civetServer->getContext());
+    std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer->getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -1055,7 +1055,7 @@ void PrsonaClientWebSocketHandler::verify_reputation_proof(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> bandwidthDataAfter = get_log_data(civetServer->getContext());
+    std::vector<size_t> bandwidthDataAfter = get_server_log_data(civetServer->getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();

+ 32 - 32
prsona/src/networkServer.cpp

@@ -112,7 +112,7 @@ void make_epoch(
 
     std::unique_lock<std::mutex> updateLock(updateMtx, std::defer_lock);
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(civetServer.getContext());
+    std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer.getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -141,7 +141,7 @@ void make_epoch(
     
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> bandwidthDataAfter = get_log_data(civetServer.getContext());
+    std::vector<size_t> bandwidthDataAfter = get_server_log_data(civetServer.getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -198,7 +198,7 @@ void obtain_update_locks(
                 std::cerr << "Couldn't connect to server " << i << " to obtain its lock" << std::endl;
         }
 
-        std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), true);
 
         // Ask for its lock
         mg_websocket_client_write(conn, MG_WEBSOCKET_OPCODE_DATACOMPLETE, "", 0);
@@ -207,7 +207,7 @@ void obtain_update_locks(
         while (!sync.val2)
             sync.cv.wait(lck);
 
-        std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), true);
 
         bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
         bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -256,7 +256,7 @@ void release_update_locks(
                 std::cerr << "Couldn't connect to server " << i << " to release its lock" << std::endl;
         }
 
-        std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), true);
 
         // Return its lock
         mg_websocket_client_write(conn, MG_WEBSOCKET_OPCODE_DATACOMPLETE, "", 0);
@@ -265,7 +265,7 @@ void release_update_locks(
         while (!sync.val2)
             sync.cv.wait(lck);
 
-        std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), true);
 
         bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
         bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -508,7 +508,7 @@ std::vector<Proof> epoch_build_up(
             std::vector<size_t> bandwidthData(2);
             std::vector<std::vector<size_t>> otherBandwidthDataBefore;
 
-            std::vector<size_t> serverBandwidthDataBefore = get_log_data(civetServer.getContext());
+            std::vector<size_t> serverBandwidthDataBefore = get_server_log_data(civetServer.getContext());
             std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
             clock_t cpuTimeBefore = clock();
             
@@ -537,7 +537,7 @@ std::vector<Proof> epoch_build_up(
                 // Send that data
                 struct mg_connection *currConn = distribute_epoch_updates(serverIPs[j], serverPorts[j], data, &sync);
 
-                otherBandwidthDataBefore.push_back(get_log_data(mg_get_context(currConn)));
+                otherBandwidthDataBefore.push_back(get_conn_log_data(mg_get_context(currConn), false));
 
                 // But keep track of that connection, as we can't close it until we know the server's gotten its data
                 conns.push_back(currConn);
@@ -549,7 +549,7 @@ std::vector<Proof> epoch_build_up(
 
             for (size_t j = 0; j < conns.size(); j++)
             {
-                std::vector<size_t> currBandwidthDataAfter = get_log_data(mg_get_context(conns[j]));
+                std::vector<size_t> currBandwidthDataAfter = get_conn_log_data(mg_get_context(conns[j]), false);
 
                 bandwidthData[0] += currBandwidthDataAfter[0] - otherBandwidthDataBefore[j][0];
                 bandwidthData[1] += currBandwidthDataAfter[1] - otherBandwidthDataBefore[j][1];
@@ -561,7 +561,7 @@ std::vector<Proof> epoch_build_up(
 
             clock_t cpuTimeAfter = clock();
             std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-            std::vector<size_t> serverBandwidthDataAfter = get_log_data(civetServer.getContext());
+            std::vector<size_t> serverBandwidthDataAfter = get_server_log_data(civetServer.getContext());
 
             std::vector<double> timingData(2);
             timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -633,7 +633,7 @@ void epoch_break_down(
             std::vector<size_t> bandwidthData(2);
             std::vector<std::vector<size_t>> otherBandwidthDataBefore;
 
-            std::vector<size_t> serverBandwidthDataBefore = get_log_data(civetServer.getContext());
+            std::vector<size_t> serverBandwidthDataBefore = get_server_log_data(civetServer.getContext());
             std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
             clock_t cpuTimeBefore = clock();
 
@@ -658,7 +658,7 @@ void epoch_break_down(
                 // Send that data
                 struct mg_connection *currConn = distribute_epoch_updates(serverIPs[j], serverPorts[j], data, &sync);
 
-                otherBandwidthDataBefore.push_back(get_log_data(mg_get_context(currConn)));
+                otherBandwidthDataBefore.push_back(get_conn_log_data(mg_get_context(currConn), false));
 
                 // But keep track of that connection, as we can't close it until we know the server's gotten its data
                 conns.push_back(currConn);
@@ -670,7 +670,7 @@ void epoch_break_down(
 
             for (size_t j = 0; j < conns.size(); j++)
             {
-                std::vector<size_t> currBandwidthDataAfter = get_log_data(mg_get_context(conns[j]));
+                std::vector<size_t> currBandwidthDataAfter = get_conn_log_data(mg_get_context(conns[j]), false);
 
                 bandwidthData[0] += currBandwidthDataAfter[0] - otherBandwidthDataBefore[j][0];
                 bandwidthData[1] += currBandwidthDataAfter[1] - otherBandwidthDataBefore[j][1];
@@ -682,7 +682,7 @@ void epoch_break_down(
 
             clock_t cpuTimeAfter = clock();
             std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-            std::vector<size_t> serverBandwidthDataAfter = get_log_data(civetServer.getContext());
+            std::vector<size_t> serverBandwidthDataAfter = get_server_log_data(civetServer.getContext());
 
             std::vector<double> timingData(2);
             timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -834,7 +834,7 @@ void tally_scores(
                 std::cerr << "Trouble getting partial decryption from server at " << serverIPs[i] << ":" << serverPorts[i] << std::endl;
         }
 
-        allBandwidthDataBefore.push_back(get_log_data(mg_get_context(currConn)));
+        allBandwidthDataBefore.push_back(get_conn_log_data(mg_get_context(currConn), true));
 
         // Ping server for simulated distributed BGN
         mg_websocket_client_write(currConn, MG_WEBSOCKET_OPCODE_DATACOMPLETE, "", 0);
@@ -849,7 +849,7 @@ void tally_scores(
     // Close connections
     for (size_t i = 0; i < conns.size(); i++)
     {
-        std::vector<size_t> currBandwidthDataAfter = get_log_data(mg_get_context(conns[i]));
+        std::vector<size_t> currBandwidthDataAfter = get_conn_log_data(mg_get_context(conns[i]), true);
 
         bandwidthData[0] += currBandwidthDataAfter[0] - allBandwidthDataBefore[i][0];
         bandwidthData[1] += currBandwidthDataAfter[1] - allBandwidthDataBefore[i][1];
@@ -937,7 +937,7 @@ void distribute_tallied_scores(
                 std::cerr << "Trouble giving full re-encryption to server at " << serverIPs[i] << ":" << serverPorts[i] << std::endl;
         }
 
-        allBandwidthDataBefore.push_back(get_log_data(mg_get_context(currConn)));
+        allBandwidthDataBefore.push_back(get_conn_log_data(mg_get_context(currConn), false));
 
         // Send the relevant data
         mg_websocket_client_write(currConn, MG_WEBSOCKET_OPCODE_BINARY, data.c_str(), data.length());
@@ -953,7 +953,7 @@ void distribute_tallied_scores(
     // Close connections
     for (size_t i = 0; i < conns.size(); i++)
     {
-        std::vector<size_t> currBandwidthDataAfter = get_log_data(mg_get_context(conns[i]));
+        std::vector<size_t> currBandwidthDataAfter = get_conn_log_data(mg_get_context(conns[i]), false);
 
         bandwidthData[0] += currBandwidthDataAfter[0] - allBandwidthDataBefore[i][0];
         bandwidthData[1] += currBandwidthDataAfter[1] - allBandwidthDataBefore[i][1];
@@ -2200,7 +2200,7 @@ void PrsonaServerWebSocketHandler::receive_vote(
 
     std::vector<size_t> bandwidthData(2);
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(civetServer->getContext());
+    std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer->getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -2221,7 +2221,7 @@ void PrsonaServerWebSocketHandler::receive_vote(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> bandwidthDataAfter = get_log_data(civetServer->getContext());
+    std::vector<size_t> bandwidthDataAfter = get_server_log_data(civetServer->getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -2375,7 +2375,7 @@ void PrsonaServerWebSocketHandler::distribute_new_vote(
                 std::cerr << "Couldn't give server " << i << " new vote data" << std::endl;
         }
 
-        std::vector<size_t> bandwidthDataBefore = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataBefore = get_conn_log_data(mg_get_context(conn), false);
         
         // Send the server the new vote data
         mg_websocket_client_write(conn, MG_WEBSOCKET_OPCODE_BINARY, data.c_str(), data.length());
@@ -2385,7 +2385,7 @@ void PrsonaServerWebSocketHandler::distribute_new_vote(
         while (!sync.val2)
             sync.cv.wait(syncLock);
 
-        std::vector<size_t> bandwidthDataAfter = get_log_data(mg_get_context(conn));
+        std::vector<size_t> bandwidthDataAfter = get_conn_log_data(mg_get_context(conn), false);
 
         bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
         bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
@@ -2575,7 +2575,7 @@ void PrsonaServerWebSocketHandler::build_up_midway_pseudonyms(
     std::vector<size_t> bandwidthData(2);
     std::vector<std::vector<size_t>> otherBandwidthDataBefore;
 
-    std::vector<size_t> serverBandwidthDataBefore = get_log_data(civetServer->getContext());
+    std::vector<size_t> serverBandwidthDataBefore = get_server_log_data(civetServer->getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -2602,7 +2602,7 @@ void PrsonaServerWebSocketHandler::build_up_midway_pseudonyms(
         struct mg_connection *currConn = distribute_epoch_updates(serverIPs[i], serverPorts[i], data, &sync);
 
         conns.push_back(currConn);
-        otherBandwidthDataBefore.push_back(get_log_data(mg_get_context(currConn)));
+        otherBandwidthDataBefore.push_back(get_conn_log_data(mg_get_context(currConn), false));
     }
 
     // Wait for all to acknowledge receipt of the update data
@@ -2612,7 +2612,7 @@ void PrsonaServerWebSocketHandler::build_up_midway_pseudonyms(
     // Close connections
     for (size_t i = 0; i < conns.size(); i++)
     {
-        std::vector<size_t> currBandwidthDataAfter = get_log_data(mg_get_context(conns[i]));
+        std::vector<size_t> currBandwidthDataAfter = get_conn_log_data(mg_get_context(conns[i]), false);
 
         bandwidthData[0] += currBandwidthDataAfter[0] - otherBandwidthDataBefore[i][0];
         bandwidthData[1] += currBandwidthDataAfter[1] - otherBandwidthDataBefore[i][1];
@@ -2622,7 +2622,7 @@ void PrsonaServerWebSocketHandler::build_up_midway_pseudonyms(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> serverBandwidthDataAfter = get_log_data(civetServer->getContext());
+    std::vector<size_t> serverBandwidthDataAfter = get_server_log_data(civetServer->getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -2665,7 +2665,7 @@ void PrsonaServerWebSocketHandler::break_down_midway_pseudonyms(
     std::vector<size_t> bandwidthData(2);
     std::vector<std::vector<size_t>> otherBandwidthDataBefore;
 
-    std::vector<size_t> serverBandwidthDataBefore = get_log_data(civetServer->getContext());
+    std::vector<size_t> serverBandwidthDataBefore = get_server_log_data(civetServer->getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -2690,7 +2690,7 @@ void PrsonaServerWebSocketHandler::break_down_midway_pseudonyms(
         struct mg_connection *currConn = distribute_epoch_updates(serverIPs[i], serverPorts[i], data, &sync);
 
         conns.push_back(currConn);
-        otherBandwidthDataBefore.push_back(get_log_data(mg_get_context(currConn)));
+        otherBandwidthDataBefore.push_back(get_conn_log_data(mg_get_context(currConn), false));
     }
 
     // Wait for all to acknowledge receipt of the update data
@@ -2700,7 +2700,7 @@ void PrsonaServerWebSocketHandler::break_down_midway_pseudonyms(
     // Close connections
     for (size_t i = 0; i < conns.size(); i++)
     {
-        std::vector<size_t> currBandwidthDataAfter = get_log_data(mg_get_context(conns[i]));
+        std::vector<size_t> currBandwidthDataAfter = get_conn_log_data(mg_get_context(conns[i]), false);
 
         bandwidthData[0] += currBandwidthDataAfter[0] - otherBandwidthDataBefore[i][0];
         bandwidthData[1] += currBandwidthDataAfter[1] - otherBandwidthDataBefore[i][1];
@@ -2710,7 +2710,7 @@ void PrsonaServerWebSocketHandler::break_down_midway_pseudonyms(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> serverBandwidthDataAfter = get_log_data(civetServer->getContext());
+    std::vector<size_t> serverBandwidthDataAfter = get_server_log_data(civetServer->getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
@@ -2749,7 +2749,7 @@ void PrsonaServerWebSocketHandler::accept_epoch_updates(
     // Un-serialize request
     ssize_t bandwidthRcv = read_epoch_update_string(filename, pi, permutationCommits, freshPseudonymCommits, freshPseudonymSeedCommits, serverTallyCommits, partwayVoteMatrixCommits, finalVoteMatrixCommits, userTallyMaskCommits, userTallyMessageCommits, userTallySeedCommits, nextGenerator, doUserTallies);
 
-    std::vector<size_t> bandwidthDataBefore = get_log_data(civetServer->getContext());
+    std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer->getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
     clock_t cpuTimeBefore = clock();
 
@@ -2758,7 +2758,7 @@ void PrsonaServerWebSocketHandler::accept_epoch_updates(
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
-    std::vector<size_t> bandwidthDataAfter = get_log_data(civetServer->getContext());
+    std::vector<size_t> bandwidthDataAfter = get_server_log_data(civetServer->getContext());
 
     std::vector<double> timingData(2);
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();

+ 24 - 1
prsona/src/networking.cpp

@@ -108,7 +108,7 @@ void load_single_instance_config(
     }
 }
 
-std::vector<size_t> get_log_data(
+std::vector<size_t> get_server_log_data(
     const struct mg_context *ctx)
 {
     std::vector<size_t> retval;
@@ -122,6 +122,29 @@ std::vector<size_t> get_log_data(
     return retval;
 }
 
+std::vector<size_t> get_conn_log_data(
+    const struct mg_context *ctx,
+    bool receivedData)
+{
+    std::vector<size_t> retval;
+    char buffer[4096];
+
+    mg_get_context_info(ctx, buffer, 4096);
+
+    if (receivedData)
+    {
+        retval.push_back(parse_log_for_data(buffer, "maxUsed"));
+        retval.push_back(0);
+    }
+    else
+    {
+        retval.push_back(0);
+        retval.push_back(parse_log_for_data(buffer, "maxUsed"));
+    }
+
+    return retval;
+}
+
 void write_log_data(
     std::mutex& outputMtx,
     const std::string& outputFilename,