[changes from birch] birch
authorbirch <birch>
Thu, 10 Jun 2010 08:22:09 +0000 (01:22 -0700)
committerEmil Mikulic <emikulic@gmail.com>
Tue, 19 Jul 2011 01:11:36 +0000 (11:11 +1000)
Added   : support for fixed connection speed to scale graph against via command line
Added   : flip in/out bar display order as needed to ensure both are always visible
Changed : increased graph contrast in css
Changed : altered mouseover tags

configure.ac
darkstat.c
graph_db.c
graph_db.h
static/graph.js
static/style.css

index 44f3e7c..a3fb8fb 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT(darkstat, 3.0.0-git)
+AC_INIT(darkstat, 3.0.712)
 AC_CONFIG_SRCDIR([darkstat.c])
 AC_CONFIG_HEADER([config.h])
 
index b654da9..a84da1a 100644 (file)
@@ -152,6 +152,10 @@ unsigned int hosts_max = 1000;
 static void cb_hosts_max(const char *arg)
 { hosts_max = parsenum(arg, 0); }
 
+unsigned long connection_speed = 0;
+static void cb_connection_speed(const char *arg)
+{ connection_speed = parsenum(arg, 0); }
+
 unsigned int hosts_keep = 500;
 static void cb_hosts_keep(const char *arg)
 { hosts_keep = parsenum(arg, 0); }
@@ -200,6 +204,7 @@ static struct cmdline_arg cmdline_args[] = {
    {"--ports-max",    "count",           cb_ports_max,    0},
    {"--ports-keep",   "count",           cb_ports_keep,   0},
    {"--highest-port", "port",            cb_highest_port, 0},
+   {"--connection-speed", "speed in KB/s",       cb_connection_speed, 0},
    {NULL,             NULL,              NULL,            0}
 };
 
@@ -309,7 +314,7 @@ parse_cmdline(const int argc, char * const *argv)
 static void
 run_from_capfile(void)
 {
-   graph_init();
+   graph_init(connection_speed);
    hosts_db_init();
    cap_from_file(capfile, filter);
    cap_stop();
@@ -357,7 +362,7 @@ main(int argc, char **argv)
    /* Don't need root privs for these: */
    now = time(NULL);
    if (daylog_fn != NULL) daylog_init(daylog_fn);
-   graph_init();
+   graph_init(connection_speed);
    hosts_db_init();
    if (import_fn != NULL) db_import(import_fn);
    localip_init(interface);
index 580f8ba..af93a7c 100644 (file)
@@ -36,6 +36,7 @@ struct graph {
    unsigned int pos, num_bars;
    const char *unit;
    unsigned int bar_secs; /* one bar represents <n> seconds */
+   uint64_t max_val; /* if non-zero forces graph to command line speed */
 };
 
 static struct graph
@@ -53,12 +54,13 @@ static unsigned int graph_db_size = sizeof(graph_db)/sizeof(*graph_db);
 static time_t start_time, last_time;
 
 void
-graph_init(void)
+graph_init(unsigned long graph_max_val)
 {
    unsigned int i;
    for (i=0; i<graph_db_size; i++) {
       graph_db[i]->in  = xmalloc(sizeof(uint64_t) * graph_db[i]->num_bars);
       graph_db[i]->out = xmalloc(sizeof(uint64_t) * graph_db[i]->num_bars);
+      graph_db[i]->max_val = (uint64_t) graph_max_val;
    }
    start_time = time(NULL);
    graph_reset();
@@ -361,10 +363,11 @@ html_front_page(void)
          " { id:\"g%u\", "
             "name:\"%s\", "
             "title:\"last %u %s\", "
-            "bar_secs:%u"
+            "bar_secs:%u, "
+            "max_val:%qu"
          " }%s\n",
          i, graph_db[i]->unit, graph_db[i]->num_bars, graph_db[i]->unit,
-         graph_db[i]->bar_secs, (i < graph_db_size-1) ? "," : "");
+         graph_db[i]->bar_secs, (graph_db[i]->max_val * (uint64_t)graph_db[i]->bar_secs), (i < graph_db_size-1) ? "," : "");
       /* trailing comma breaks on IE, makes the array one element longer */
 
    str_append(buf,
index 0315680..5fe4bdb 100644 (file)
@@ -13,7 +13,7 @@ enum graph_dir {
    MAX_GRAPH_DIR = 2
 };
 
-void graph_init(void);
+void graph_init(unsigned long graph_max_val);
 void graph_reset(void);
 void graph_free(void);
 void graph_acct(uint64_t amount, enum graph_dir dir);
index 6a90bdc..adafd62 100644 (file)
@@ -151,7 +151,7 @@ function poll() {
   {
    g = xh.responseXML.getElementsByTagName(graphs[i].name);
    buildGraph(graphs[i].graph, graphs[i].title, graphs[i].bar_secs,
-    g[0].getElementsByTagName("e"));
+    g[0].getElementsByTagName("e"),graphs[i].max_val);
   }
   document.getElementById("graph_reload").innerHTML = "reload graphs";
   killChildren(graphs.msg);
@@ -175,9 +175,11 @@ function addBar(graph, title, barclass, width, height, left, bottom) {
  graph.appendChild(bar);
 }
 
-function buildGraph(graph, title, bar_secs, elems) {
+function buildGraph(graph, title, bar_secs, elems, max_val) {
  var total_max = 0;
  var data = []; /* list of [in, out] */
+ if (max_val > total_max)
+   total_max = max_val;  // use max bandwidth override if present
  for (var i=0; i<elems.length; i++) {
    var elem = elems.item(i);
    var b_pos = Number( elem.getAttribute("p") );
@@ -185,8 +187,13 @@ function buildGraph(graph, title, bar_secs, elems) {
    var b_out = Number( elem.getAttribute("o") );
    var b_total = b_in + b_out;
 /* FIXME: what happens when a bar's value is >4G? */
-   if (b_total > total_max)
-    total_max = b_total;
+   if (max_val == 0)
+   {
+     if (b_in > total_max)
+      total_max = b_in;
+     if (b_out > total_max)
+      total_max = b_out;
+   }
    data.push( [b_pos, b_in, b_out] );
  }
 
@@ -225,14 +232,22 @@ function buildGraph(graph, title, bar_secs, elems) {
   var h_i = Math.round( b_i * graph_height / total_max );
   var h_o = Math.round( b_o * graph_height / total_max );
 
-  var label = b_p+": "+
-   thousands(b_i)+" bytes in, "+
-   thousands(b_o)+" bytes out | "+
-   kbps(b_i/bar_secs)+" KB/s in, "+
-   kbps(b_o/bar_secs)+" KB/s out";
+  var label = b_p+":     "+
+   kbps(b_i/bar_secs * 8)+"Kb/s in  --  "+
+   kbps(b_o/bar_secs * 8)+"Kb/s out    |    "+
+   thousands(b_i)+"bytes in  --  "+
+   thousands(b_o)+"bytes out";
 
-  addBar(igraph, label, "bar_in", curr_w, h_i, xofs, 0);
-  addBar(igraph, label, "bar_out", curr_w, h_o, xofs, h_i);
+  if (h_i > h_o)
+  {
+    addBar(igraph, label, "bar_in", curr_w, h_i, xofs, 0);
+    addBar(igraph, label, "bar_out", curr_w, h_o, xofs, 0);
+  }
+  else
+  {
+    addBar(igraph, label, "bar_out", curr_w, h_o, xofs, 0);
+    addBar(igraph, label, "bar_in", curr_w, h_i, xofs, 0);
+  }
  }
 
  function legendRow(dir_str, minb, avgb, maxb) {
@@ -243,7 +258,7 @@ function buildGraph(graph, title, bar_secs, elems) {
   }
   function addToRow(row, type_str, bytes, trail) {
    row.appendChild( makeTD("type", type_str) );
-   row.appendChild( makeTD("rate", fkbps(bytes/bar_secs)+" KB/s"+trail) );
+   row.appendChild( makeTD("rate", fkbps(bytes/bar_secs * 8)+" Kb/s"+trail) );
   }
   var row = document.createElement("tr");
   row.appendChild( makeTD("dir", dir_str) );
index 691adb2..98a3962 100644 (file)
@@ -49,8 +49,8 @@ a              { text-decoration: none; color: #666; }
 div.outergraph { float:left; margin-right:10px; margin-bottom:20px; }
 div.graph      { border: 1px solid black; }
 div.graphtitle { text-align:center; font-weight:bold; }
-div.bar_in     { background: #678; }
-div.bar_out    { background: #abc; }
+div.bar_in     { background: #00BCFF; }
+div.bar_out    { background: #000000; }
 
 #graph_reload,#graph_autoreload { border:1px solid black;
  padding:2px 10px 2px 10px; margin-left:5px; color:black; }