]> granicus.if.org Git - vnstat/commitdiff
show sum of data instead of estimate in lists if end of time range has been specified
authorTeemu Toivola <git@humdi.net>
Fri, 4 May 2018 22:20:45 +0000 (01:20 +0300)
committerTeemu Toivola <git@humdi.net>
Fri, 4 May 2018 22:20:45 +0000 (01:20 +0300)
src/dbshow.c
src/dbsql.c
src/dbsql.h
src/image.c
tests/dbsql_tests.c

index d764d80047fb6f3a34566200acc684b4af193add..09e5d57e15f3472515030d5399595a768d7d927f 100644 (file)
@@ -500,10 +500,10 @@ void showlist(const interfaceinfo *interface, const char *listname, const char *
                }
                printf("\n");
        }
-       if (datainfo.count > 0 && listtype < 4) {
+       if ((strlen(dataend) == 0 && datainfo.count > 0 && listtype < 4) || (strlen(dataend) > 0 && datainfo.count > 1)) {
                /* use database update time for estimates */
                d = localtime(&interface->updated);
-               if ( datalist_i->rx==0 || datalist_i->tx==0 ) {
+               if ( datalist_i->rx==0 || datalist_i->tx==0 || strlen(dataend)>0 ) {
                        e_rx = e_tx = 0;
                } else {
                        div = 0;
@@ -528,9 +528,20 @@ void showlist(const interfaceinfo *interface, const char *listname, const char *
                if (cfg.ostyle == 3) {
                        printf("    ");
                }
-               printf(" estimated   %s", getvalue(e_rx, 11, 2));
-               printf(" | %s", getvalue(e_tx, 11, 2));
-               printf(" | %s", getvalue(e_rx + e_tx, 11, 2));
+               if (strlen(dataend) == 0) {
+                       printf(" estimated   %s", getvalue(e_rx, 11, 2));
+                       printf(" | %s", getvalue(e_tx, 11, 2));
+                       printf(" | %s", getvalue(e_rx + e_tx, 11, 2));
+               } else {
+                       if (datainfo.count < 100) {
+                               snprintf(datebuff, DATEBUFFLEN, "sum of %"PRIu32"", datainfo.count);
+                       } else {
+                               snprintf(datebuff, DATEBUFFLEN, "sum");
+                       }
+                       printf(" %9s   %s", datebuff, getvalue(datainfo.sumrx, 11, 2));
+                       printf(" | %s", getvalue(datainfo.sumtx, 11, 2));
+                       printf(" | %s", getvalue(datainfo.sumrx + datainfo.sumtx, 11, 2));
+               }
                if (cfg.ostyle == 3) {
                        printf(" |");
                }
index 41f196f89dde54ead75539d8444365cf13a47e97..00001d45f16500bc92cff8dc9bbfc4f446051650 100644 (file)
@@ -1119,6 +1119,8 @@ void updatelistinfo(dbdatalistinfo *listinfo, const uint64_t rx, const uint64_t
                listinfo->mintx = tx;
                listinfo->min = rx + tx;
                listinfo->max = rx + tx;
+               listinfo->sumrx = rx;
+               listinfo->sumtx = tx;
        } else {
                if (timestamp > listinfo->maxtime) {
                        listinfo->maxtime = timestamp;
@@ -1144,6 +1146,8 @@ void updatelistinfo(dbdatalistinfo *listinfo, const uint64_t rx, const uint64_t
                if (rx + tx < listinfo->min) {
                        listinfo->min = rx + tx;
                }
+               listinfo->sumrx += rx;
+               listinfo->sumtx += tx;
        }
        listinfo->count++;
 }
index dab1623abe0fbc91bc004f0958940df906c14b5b..fbaf309b20e9f9cd28668a8ced8927a9807ac75d 100644 (file)
@@ -21,6 +21,7 @@ typedef struct dbdatalistinfo {
        uint64_t minrx, mintx;
        uint64_t maxrx, maxtx;
        uint64_t min, max;
+       uint64_t sumrx, sumtx;
 } dbdatalistinfo;
 
 typedef struct interfaceinfo {
index e5f6a3018b7a529d6d3f6bb54a4cdff0f1e3374d..022181ce06837ed753cfaef6100b2b1da35464d6 100644 (file)
@@ -526,7 +526,7 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
        rowcount += datainfo.count;
 
        width = 500;
-       if (listtype >= 4) { // less space needed when no estimate is shown
+       if (listtype >= 4 && (datainfo.count < 2 || strlen(ic->dataend) == 0)) { // less space needed when no estimate or sum is shown
                height = 86;
                offsety = -16;
        } else {
@@ -685,10 +685,10 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
                gdImageLine(ic->im, textx+2, texty+5, textx+296+offsetx, texty+5, ic->cline);
        }
 
-       if (datainfo.count > 0 && listtype < 4) {
+       if ((strlen(ic->dataend) == 0 && datainfo.count > 0 && listtype < 4) || (strlen(ic->dataend) > 0 && datainfo.count > 1)) {
 
                d = localtime(&ic->interface.updated);
-               if ( datalist_i->rx==0 || datalist_i->tx==0 ) {
+               if ( datalist_i->rx==0 || datalist_i->tx==0 || strlen(ic->dataend)>0) {
                        e_rx = e_tx = 0;
                } else {
                        div = 0;
@@ -710,12 +710,26 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
                                e_rx = e_tx = 0;
                        }
                }
-               snprintf(buffer, 32, " estimated   ");
-               strncat(buffer, getvalue(e_rx, 10, 2), 32);
-               strcat(buffer, "   ");
-               strncat(buffer, getvalue(e_tx, 10, 2), 32);
-               strcat(buffer, "   ");
-               strncat(buffer, getvalue(e_rx+e_tx, 10, 2), 32);
+               if (strlen(ic->dataend) == 0) {
+                       snprintf(buffer, 32, " estimated   ");
+                       strncat(buffer, getvalue(e_rx, 10, 2), 32);
+                       strcat(buffer, "   ");
+                       strncat(buffer, getvalue(e_tx, 10, 2), 32);
+                       strcat(buffer, "   ");
+                       strncat(buffer, getvalue(e_rx+e_tx, 10, 2), 32);
+               } else {
+                       if (datainfo.count < 100) {
+                               snprintf(datebuff, 16, "sum of %"PRIu32"", datainfo.count);
+                       } else {
+                               snprintf(datebuff, 16, "sum");
+                       }
+                       snprintf(buffer, 32, " %9s   ", datebuff);
+                       strncat(buffer, getvalue(datainfo.sumrx, 10, 2), 32);
+                       strcat(buffer, "   ");
+                       strncat(buffer, getvalue(datainfo.sumtx, 10, 2), 32);
+                       strcat(buffer, "   ");
+                       strncat(buffer, getvalue(datainfo.sumrx + datainfo.sumtx, 10, 2), 32);
+               }
 
                gdImageString(ic->im, gdFontGetSmall(), textx, texty+8, (unsigned char*)buffer, ic->ctext);
        }
index 69e8af96b41162ca4916b772fda552a557f52215..d64ebe6413e956e88a2aa137ca57c584474bc097 100644 (file)
@@ -823,8 +823,10 @@ START_TEST(db_data_can_be_retrieved)
        ck_assert_int_eq(datainfo.count, 2);
        ck_assert_int_eq(datainfo.minrx, 1);
        ck_assert_int_eq(datainfo.maxrx, 10);
+       ck_assert_int_eq(datainfo.sumrx, 11);
        ck_assert_int_eq(datainfo.mintx, 2);
        ck_assert_int_eq(datainfo.maxtx, 20);
+       ck_assert_int_eq(datainfo.sumtx, 22);
        /* db_insertdata rounds the timestamps to full hours */
        ck_assert_int_eq((int)datainfo.maxtime, 7200);
        ck_assert_int_eq((int)datainfo.mintime, 0);