]> granicus.if.org Git - vnstat/commitdiff
add time range query support to top lists, uses daily data instead of separate top...
authorTeemu Toivola <git@humdi.net>
Thu, 6 Sep 2018 18:57:46 +0000 (21:57 +0300)
committerTeemu Toivola <git@humdi.net>
Thu, 6 Sep 2018 18:57:46 +0000 (21:57 +0300)
man/vnstat.1
man/vnstati.1
src/dbshow.c
src/dbsql.c
src/image.c

index a30040bb3194b754bc8e4359c8a2eeabccb95cd4..23ff5f97115db1e51d96daff9858812934c1806e 100644 (file)
@@ -111,7 +111,7 @@ This option can only be used with
 .B "--json"
 ,
 .B "--xml"
-and list outputs excluding top list.
+and list outputs.
 
 .TP
 .BI "--config " file
@@ -153,7 +153,9 @@ This option can only be used with
 .B "--json"
 ,
 .B "--xml"
-and list outputs excluding top list.
+and list outputs. The top list also requires
+.B "--begin"
+to be used at the same time with this option.
 
 .TP
 .BI "-5, --fiveminutes " [count]
@@ -304,7 +306,13 @@ will default to 10 entries unless configured otherwise or unless the optional
 .I count
 parameter is used. All entries stored in the database will be shown if
 .I count
-is set to 0.
+is set to 0. When used with
+.B "--begin"
+and optionally with
+.BR "--end" ,
+the list will be generated using the daily data instead of separate top entries.
+The availability of daily data defines the boundaries the date specific query
+can access.
 
 .TP
 .BI "-tr " [time]
index 982f569086a98fc96824b7597569acdee6900d89..f3c13c86bb09c3ea0f67fbe7a36a1257db2b4e28 100644 (file)
@@ -87,7 +87,7 @@ If
 isn't available in the database then the closest later date will be used.
 .I date
 supports the following formats: YYYY-MM-DD HH:MM and YYYY-MM-DD.
-This option can only be used with list outputs excluding top list.
+This option can only be used with list outputs.
 
 .TP
 .BI "-c, --cache " time
@@ -128,7 +128,9 @@ instead of the latest date / time in the database. If
 isn't available in the database then the closest earlier date will be used.
 .I date
 supports the following formats: YYYY-MM-DD HH:MM and YYYY-MM-DD.
-This option can only be used with list outputs excluding top list.
+This option can only be used with list outputs. The top list also requires
+.B "--begin"
+to be used at the same time with this option.
 
 .TP
 .BI "-5, --fiveminutes " [count]
@@ -229,7 +231,13 @@ will default to 10 entries unless configured otherwise or unless the optional
 .I count
 parameter is used. All entries stored in the database will be shown if
 .I count
-is set to 0.
+is set to 0. When used with
+.B "--begin"
+and optionally with
+.BR "--end" ,
+the list will be generated using the daily data instead of separate top entries.
+The availability of daily data defines the boundaries the date specific query
+can access.
 
 .TP
 .BI "--transparent " [enabled]
index 09e5d57e15f3472515030d5399595a768d7d927f..5e928c2ade6a64065aed987721d80fb2f96cb826 100644 (file)
@@ -362,7 +362,17 @@ void showlist(const interfaceinfo *interface, const char *listname, const char *
        if (interface->active == 0) {
                printf(" [disabled]");
        }
-       printf("  /  %s\n\n", titlename);
+       printf("  /  %s", titlename);
+
+       if (listtype == 4 && (strlen(databegin))) {
+               printf("  (%s -", databegin);
+               if (strlen(dataend)) {
+                       printf(" %s)", dataend);
+               } else {
+                       printf(">)");
+               }
+       }
+       printf("\n\n");
 
        if (cfg.ostyle == 3) {
                if (listtype == 4) {
@@ -500,7 +510,7 @@ void showlist(const interfaceinfo *interface, const char *listname, const char *
                }
                printf("\n");
        }
-       if ((strlen(dataend) == 0 && datainfo.count > 0 && listtype < 4) || (strlen(dataend) > 0 && datainfo.count > 1)) {
+       if ((strlen(dataend) == 0 && datainfo.count > 0 && listtype < 4) || (strlen(dataend) > 0 && datainfo.count > 1 && listtype != 4)) {
                /* use database update time for estimates */
                d = localtime(&interface->updated);
                if ( datalist_i->rx==0 || datalist_i->tx==0 || strlen(dataend)>0 ) {
index beabb8fc221454e8e7d28bbb27d8d92320ec0dc8..cdc404e076cf94d5bc1e3ef685e91c42c717551c 100644 (file)
@@ -1057,8 +1057,14 @@ int db_getdata_range(dbdatalist **dbdata, dbdatalistinfo *listinfo, const char *
        /* note that using the linked list reverses the order */
        /* most recent last in the linked list is considered the normal order */
        if (strcmp(table, "top") == 0) {
-               /* TODO: should data range selection be supported here? */
-               sqlite3_snprintf(512, sql, "select * from (select id, strftime('%%s', date, 'utc'), rx, tx from %s where interface=%"PRId64" order by rx+tx desc %s) order by rx+tx asc;", table, (int64_t)ifaceid, limit);
+               if (strlen(dbegin)) {
+                       if (resultlimit > 0) {
+                               snprintf(limit, 64, "limit %"PRIu32"", resultlimit);
+                       }
+                       sqlite3_snprintf(512, sql, "select * from (select id, strftime('%%s', date, 'utc'), rx, tx from day where interface=%"PRId64" %s %s order by rx+tx desc %s) order by rx+tx asc;", (int64_t)ifaceid, dbegin, dend, limit);
+               } else {
+                       sqlite3_snprintf(512, sql, "select * from (select id, strftime('%%s', date, 'utc'), rx, tx from top where interface=%"PRId64" order by rx+tx desc %s) order by rx+tx asc;", (int64_t)ifaceid, limit);
+               }
        } else {
                if (strlen(dbegin) && strlen(limit)) {
                        sqlite3_snprintf(512, sql, "select * from (select id, strftime('%%s', date, 'utc') as date, rx, tx from %s where interface=%"PRId64" %s %s order by date asc %s) order by date desc;", table, (int64_t)ifaceid, dbegin, dend, limit);
index 022181ce06837ed753cfaef6100b2b1da35464d6..a615ab858453dc168a24fc29a045d8784b168471 100644 (file)
@@ -526,7 +526,7 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
        rowcount += datainfo.count;
 
        width = 500;
-       if (listtype >= 4 && (datainfo.count < 2 || strlen(ic->dataend) == 0)) { // less space needed when no estimate or sum is shown
+       if (listtype >= 4 && (datainfo.count < 2 || strlen(ic->dataend) == 0 || listtype == 4)) { // less space needed when no estimate or sum is shown
                height = 86;
                offsety = -16;
        } else {
@@ -685,7 +685,7 @@ void drawlist(IMAGECONTENT *ic, const char *listname)
                gdImageLine(ic->im, textx+2, texty+5, textx+296+offsetx, texty+5, ic->cline);
        }
 
-       if ((strlen(ic->dataend) == 0 && datainfo.count > 0 && listtype < 4) || (strlen(ic->dataend) > 0 && datainfo.count > 1)) {
+       if ((strlen(ic->dataend) == 0 && datainfo.count > 0 && listtype < 4) || (strlen(ic->dataend) > 0 && datainfo.count > 1 && listtype != 4)) {
 
                d = localtime(&ic->interface.updated);
                if ( datalist_i->rx==0 || datalist_i->tx==0 || strlen(ic->dataend)>0) {