From 447f5002231c1c43598680ea1dceffcad7ccedd0 Mon Sep 17 00:00:00 2001
From: armatusmiles <akurotych@gmail.com>
Date: Thu, 30 Aug 2018 13:33:39 +0300
Subject: [PATCH] [*] Change calculate speed to mbits

---
 dap_server.c        |  4 ++--
 dap_server_client.h | 16 ++++++++--------
 dap_traffic_track.c | 36 ++++++++++++++++++------------------
 3 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/dap_server.c b/dap_server.c
index 99e1a33..1b7084f 100644
--- a/dap_server.c
+++ b/dap_server.c
@@ -153,7 +153,7 @@ static void read_write_cb (struct ev_loop* loop, struct ev_io* watcher, int reve
                                   0);
             if(bytes_read > 0)
             {
-                dap_cur->buf_in_size_total += bytes_read;
+                dap_cur->upload_stat.buf_size_total += bytes_read;
                 dap_cur->buf_in_size += bytes_read;
                 sh->client_read_callback(dap_cur, NULL);
             }
@@ -192,7 +192,7 @@ static void read_write_cb (struct ev_loop* loop, struct ev_io* watcher, int reve
                 }
                 total_sent += bytes_sent;
             }
-            dap_cur->buf_out_size_total += dap_cur->buf_out_size;
+            dap_cur->download_stat.buf_size_total += dap_cur->buf_out_size;
             dap_cur->buf_out_size = 0;
         }
     }
diff --git a/dap_server_client.h b/dap_server_client.h
index 9a0e7a9..4fabf61 100644
--- a/dap_server_client.h
+++ b/dap_server_client.h
@@ -35,6 +35,12 @@ typedef void (*dap_client_remote_callback_t) (struct dap_server_client *,void *
 
 #define DAP_CLIENT_REMOTE_BUF 10000
 
+typedef struct traffic_stats {
+    size_t buf_size_total;
+    size_t buf_size_total_old; // for calculate speed
+    double speed_mbs; // MegaBits per second
+} traffic_stats_t;
+
 typedef struct dap_server_client{
     int socket;
     bool signal_close;
@@ -47,9 +53,8 @@ typedef struct dap_server_client{
 
     size_t buf_in_size; // size of data that is in the input buffer
 
-    size_t buf_in_size_total_old;
-    size_t buf_in_size_total;
-    double upload_speed_bytes; // fills if module dap_traffic_track initialized
+    traffic_stats_t upload_stat;
+    traffic_stats_t download_stat;
 
     char buf_out[DAP_CLIENT_REMOTE_BUF+1]; // Internal buffer for output data
 
@@ -58,11 +63,6 @@ typedef struct dap_server_client{
 
 
     size_t buf_out_size; // size of data that is in the output buffer
-
-    size_t buf_out_size_total_old;
-    size_t buf_out_size_total;
-    double download_speed_bytes; // fills if module dap_traffic_track initialized
-
     ev_io* watcher_client;
 
     struct dap_server * server;
diff --git a/dap_traffic_track.c b/dap_traffic_track.c
index 0cc5f1c..144d545 100644
--- a/dap_traffic_track.c
+++ b/dap_traffic_track.c
@@ -2,7 +2,7 @@
 #include "dap_common.h"
 
 #define LOG_TAG "dap_traffic_track"
-#define BYTES_IN_MB 1048576.0
+#define BITS_IN_BYTE 8
 
 static dap_traffic_callback_t callback = NULL;
 static dap_server_t * _dap_server;
@@ -10,16 +10,16 @@ static ev_timer _timeout_watcher;
 static struct ev_loop *loop;
 
 /**
- * @brief calculate_mbs_speed
+ * @brief calculate_mbits_speed
  * @param count_bytes
  * @details timeout we gots from _timeout_watcher.repeat
- * @return mbs speed
+ * @return mbit/second speed
  */
-static double calculate_mbs_speed(size_t count_bytes) {
-    size_t bytes_per_timeout = count_bytes / (size_t)_timeout_watcher.repeat;
-//    log_it(L_DEBUG, "TIMEOUT: %d, bytes_per_timeout: %d",
-//           (size_t)_timeout_watcher.repeat, bytes_per_timeout);
-    return bytes_per_timeout / BYTES_IN_MB;
+static double calculate_mbits_speed(size_t count_bytes) {
+    size_t bits_per_second = (count_bytes / (size_t)_timeout_watcher.repeat) * BITS_IN_BYTE;
+//    log_it(L_DEBUG, "TIMEOUT: %d, bits_per_second: %d mbits: %f",
+//           (size_t)_timeout_watcher.repeat, bits_per_second, bits_per_second / 1000000.0);
+    return bits_per_second / 1000000.0; // convert to mbits
 }
 
 static void timeout_cb()
@@ -28,18 +28,18 @@ static void timeout_cb()
 
     dap_server_client_t *dap_cur, *tmp;
     HASH_ITER(hh,_dap_server->clients,dap_cur,tmp) {
-//        log_it(L_DEBUG, "hash iter socket: %d buf_in_total_new: %d, buf_in_total_old: %d",
-//               dap_cur->socket, dap_cur->buf_in_size_total, dap_cur->buf_in_size_total_old);
+        dap_cur->upload_stat.speed_mbs =
+                calculate_mbits_speed(dap_cur->upload_stat.buf_size_total -
+                                      dap_cur->upload_stat.buf_size_total_old);
+        dap_cur->upload_stat.buf_size_total_old = dap_cur->upload_stat.buf_size_total;
 
-        dap_cur->upload_speed_bytes =
-                calculate_mbs_speed(dap_cur->buf_in_size_total - dap_cur->buf_in_size_total_old);
-        dap_cur->buf_in_size_total_old = dap_cur->buf_in_size_total;
+        dap_cur->download_stat.speed_mbs =
+                calculate_mbits_speed(dap_cur->download_stat.buf_size_total -
+                                      dap_cur->download_stat.buf_size_total_old);
+        dap_cur->download_stat.buf_size_total_old = dap_cur->download_stat.buf_size_total;
 
-        dap_cur->download_speed_bytes =
-                calculate_mbs_speed(dap_cur->buf_out_size_total - dap_cur->buf_out_size_total_old);
-        dap_cur->buf_out_size_total_old = dap_cur->buf_out_size_total;
-
-        // log_it(L_DEBUG, "upload_mbs: %f, download_mbs: %f", dap_cur->upload_speed_bytes, dap_cur->download_speed_bytes);
+//        log_it(L_DEBUG, "upload_mbs: %f download_mbs: %f", dap_cur->upload_stat.speed_mbs,
+//               dap_cur->download_stat.speed_mbs);
     }
 
     pthread_mutex_unlock(&_dap_server->mutex_on_hash);
-- 
GitLab