]> git.ipfire.org Git - fireperf.git/commitdiff
server: Show bandwidth in bit/s instead of bytes/s
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 29 Jan 2021 17:20:57 +0000 (17:20 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 29 Jan 2021 17:20:57 +0000 (17:20 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/server.c

index e4bbac9990fa18922264432b251b84caf6411936..33ad3130a0a0895a7d01dfb175e52aece2ae1a68 100644 (file)
@@ -44,8 +44,33 @@ struct fireperf_server_stats {
        size_t total_bytes_received;
 };
 
-static char* format_size(ssize_t size) {
-       const char* suffixes[] = { "B", "KiB", "MiB", "GiB", "TiB", NULL };
+enum {
+       FIREPERF_FORMAT_BYTES,
+       FIREPERF_FORMAT_BITS,
+};
+
+const char* suffixes_bytes[] = { "B", "KiB", "MiB", "GiB", "TiB", NULL };
+const char* suffixes_bits[]  = { "b", "Kb", "Mb", "Gb", "Tb", NULL };
+
+static char* format_size(ssize_t size, int unit) {
+       const char** suffixes;
+       unsigned int divisor;
+
+       switch (unit) {
+               case FIREPERF_FORMAT_BYTES:
+                       suffixes = suffixes_bytes;
+                       divisor = 1024;
+                       break;
+
+               case FIREPERF_FORMAT_BITS:
+                       suffixes = suffixes_bits;
+                       divisor = 1000;
+                       break;
+
+               // Invalid input
+               default:
+                       return NULL;
+       }
 
        const char** suffix;
        char* retval = NULL;
@@ -54,10 +79,10 @@ static char* format_size(ssize_t size) {
        double s = size;
 
        for (suffix = suffixes; *suffix; suffix++) {
-               if (abs(s) < 1024)
+               if (abs(s) < divisor)
                        break;
 
-               s /= 1024;
+               s /= divisor;
        }
 
        if (!*suffix)
@@ -110,10 +135,10 @@ static int dump_stats(struct fireperf_config* conf, struct fireperf_server_stats
        const char* timestamp = format_timespec(&now);
 
        // Format total bytes received
-       char* total_bytes_received = format_size(stats->total_bytes_received);
+       char* total_bytes_received = format_size(stats->total_bytes_received, FIREPERF_FORMAT_BYTES);
 
        // Calculate bandwidth
-       char* bps = format_size(stats->bytes_received / delta);
+       char* bps = format_size(stats->bytes_received * 8 / delta, FIREPERF_FORMAT_BITS);
 
        INFO( conf, "--- %s --------------------\n", timestamp);
        DEBUG(conf, "  %-20s: %19.4fs\n", "Delta", delta);