diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-05-30 12:57:16 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-05-30 12:57:16 +0300 |
commit | 2a6ef4f51500091e535b2b47d709eee5cd52468c (patch) | |
tree | e3e28622c41b8b477acf1f2be6db9955b7ab4c6b /src/graph.c | |
parent | fbc8bdac6efb0c63a73c5105bbf4ecb304187e44 (diff) | |
download | tagr-2a6ef4f51500091e535b2b47d709eee5cd52468c.tar.gz tagr-2a6ef4f51500091e535b2b47d709eee5cd52468c.tar.bz2 |
* src/graph.c (default_monitor): New global.
(find_max): New function.
(draw_graph): Adjust max rate if requested.
* src/grid.c (ygrid_create): Use mon->ystep_absolute
to determine the type of grid.
* src/readconfig.c (cb_monitor): Handle `monitor default'.
(monitor_kw): New statements: max-adjust and y-step-absolute.
(tagr_kw): Remove rate-units kw.
* src/tagr.h (struct monitor): New members: max_adjust and
ystep_absolute.
(default_monitor): New extern.
Diffstat (limited to 'src/graph.c')
-rw-r--r-- | src/graph.c | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/src/graph.c b/src/graph.c index 80b2a97..89f02a1 100644 --- a/src/graph.c +++ b/src/graph.c @@ -54,8 +54,18 @@ int graph_ysize = 100; int graph_h_margin[2] = { 100, 14 }; int graph_v_margin[2] = { 14, 35 }; -/* FIXME: I18N?? */ -char *rate_unit = "Bytes per Second"; +struct monitor default_monitor = { + NULL, + NULL, + NULL, + "Bytes per Second", /* rate_unit, FIXME: I18N?? */ + 0, /* max_rate */ + 0, /* max_adjust */ + 1.0, /* scale */ + 0.1, /* ystep */ + 0, /* ystep_absolute */ + 0 /* swap */ +}; #define make_color_index(g, ar) \ gdImageColorAllocate (g, (ar)[0], (ar)[1], (ar)[2]) @@ -70,6 +80,24 @@ draw_vtext (gdImagePtr graph, int color, const char *text) (unsigned char *) text, color); } +static double +find_max (queue_t *dataq) +{ + int i, n = queue_count (dataq); + double mval = 0; + struct traffic_history *th; + + for (i = 0; i < n; i++) + { + th = queue_get_ptr (dataq, i); + if (mval < th->inrate) + mval = th->inrate; + if (mval < th->outrate) + mval = th->outrate; + } + return mval; +} + int draw_graph (FILE *fp, struct monitor *mon, @@ -89,13 +117,25 @@ draw_graph (FILE *fp, int full_xsize = graph_xsize + graph_h_margin[0] + graph_h_margin[1]; int full_ysize = graph_ysize + graph_v_margin[0] + graph_v_margin[1]; grid_t grid; - double ymax = mon->max_rate; + double ymax; + + if (mon->max_adjust) + { + double amax = find_max (dataq); + if (amax > mon->max_rate) + { + unsigned long n = (amax - mon->max_rate + mon->max_adjust - 1) / + mon->max_adjust; + mon->max_rate += n * mon->max_adjust; + } + } + ymax = mon->max_rate; yscale = (double) graph_ysize / ymax; xscale = (double) graph_xsize / xmax; #define ytr(y) \ - (unsigned long) ((ymax >= (y) ? (ymax - (y)) : ymax) * \ + (unsigned long) ((ymax >= (y) ? (ymax - (y)) : 0) * \ yscale + graph_h_margin[1]) #define xtr(x) \ (unsigned long) (growright ? \ @@ -213,8 +253,7 @@ draw_graph (FILE *fp, double d; char *str = NULL; - draw_vtext (graph, i_grid, - mon->rate_unit ? mon->rate_unit : rate_unit); + draw_vtext (graph, i_grid, mon->rate_unit); /* Draw vertical grid */ while ((d = grid_next (grid, &str, NULL)) < ymax) |