make stats timezone-aware

3.3
Christian Veigl 14 years ago
parent 699a08d954
commit 233d00ff25

@ -60,6 +60,7 @@ sub system : Local {
$c->stash->{ctx} = "system";
$c->stash->{plotdata} = \@plotdata;
$c->stash->{tz_offset} = admin::Utils::tz_offset();
return 1;
}
@ -80,6 +81,7 @@ sub voip : Local {
$c->stash->{ctx} = "voip";
$c->stash->{plotdata} = \@plotdata;
$c->stash->{tz_offset} = admin::Utils::tz_offset();
return 1;
}

@ -544,4 +544,9 @@ sub addel_iplist {
return 1;
}
# returns the offset in localhost's timezone to GMT
sub tz_offset {
return strftime ("%z", localtime(time));
}
1;

@ -26,11 +26,18 @@ function suffixFormatter(val, axis) {
return val.toFixed(axis.tickDecimals) + " B";
}
function rrdFlot(html_id, rrd_file, graph_options, ds_graph_options, si_suffix) {
function rrdFlot(html_id, rrd_file, graph_options, ds_graph_options, si_suffix, tz_offset) {
if(si_suffix==null)
this.si_suffix = false;
this.si_suffix = false;
else
this.si_suffix = si_suffix;
this.si_suffix = si_suffix;
// tz_offset: offset of timezone in hours
if(tz_offset==null)
this.tz_offset = 0;
else
this.tz_offset = tz_offset;
this.html_id=html_id;
this.rrd_file=rrd_file;
this.graph_options=graph_options;
@ -182,7 +189,8 @@ rrdFlot.prototype.drawFlotGraph = function() {
}
var flot_obj=rrdRRAStackFlotObj(this.rrd_file,rra_idx,
ds_positive_stack_list,ds_negative_stack_list,ds_single_list);
ds_positive_stack_list,ds_negative_stack_list,ds_single_list,
this.tz_offset);
for (var i=0; i<flot_obj.data.length; i++) {
var name=flot_obj.data[i].label;

@ -99,7 +99,10 @@ function rrdRRA2FlotObj(rrd_file,rra_idx,ds_list,want_ds_labels,want_rounding) {
// of the stack is invalid
function rrdRRAStackFlotObj(rrd_file,rra_idx,
ds_positive_stack_list,ds_negative_stack_list,ds_single_list,
want_ds_labels,want_rounding,one_undefined_enough) {
want_ds_labels,want_rounding,one_undefined_enough,tz_offset)
var timestamp_shift = 3600 * tz_offset;
var rra=rrd_file.getRRA(rra_idx);
var rra_rows=rra.getNrRows();
var last_update=rrd_file.getLastUpdate();
@ -114,8 +117,7 @@ function rrdRRAStackFlotObj(rrd_file,rra_idx,
}
var first_el=last_update-(rra_rows-1)*step;
var out_el={data:[], min:first_el*1000.0, max:last_update*1000.0};
var out_el={data:[], min:(first_el+timestamp_shift)*1000.0, max:(last_update+timestamp_shift)*1000.0};
// first the stacks stack
var stack_els=[ds_positive_stack_list,ds_negative_stack_list];
@ -164,7 +166,7 @@ function rrdRRAStackFlotObj(rrd_file,rra_idx,
}
// fill the flot data
for (var id=0; id<tmp_nr_ids; id++) {
tmp_flot_els[id].data.push([timestamp*1000.0,ds_vals[id]]);
tmp_flot_els[id].data.push([(timestamp+timestamp_shift)*1000.0,ds_vals[id]]);
}
}
} // end if
@ -190,7 +192,7 @@ function rrdRRAStackFlotObj(rrd_file,rra_idx,
for (var i=0;i<rra_rows;i++) {
var el=rra.getEl(i,ds_idx);
if (el!=undefined) {
flot_series.push([timestamp*1000.0,el]);
flot_series.push([(timestamp+timestamp_shift)*1000.0,el]);
}
timestamp+=step;
} // end for

@ -30,14 +30,15 @@
<script type="text/javascript">
function update_fname(rrd_data_arr, args) {
var graph_opts={};
var ds_graph_opts={};
if (rrd_data_arr.length == 1)
var f=new rrdFlot(args['plot_id'],rrd_data_arr[0],graph_opts,ds_graph_opts, args['si_suffix']);
else {
var t = new RRDFileSum(rrd_data_arr, false);
var f=new rrdFlot(args['plot_id'],t,graph_opts,ds_graph_opts, args['si_suffix']);
}
var graph_opts = {};
var ds_graph_opts = {};
var tz_offset = [% tz_offset %];
if (rrd_data_arr.length == 1)
var f = new rrdFlot(args['plot_id'],rrd_data_arr[0],graph_opts,ds_graph_opts,args['si_suffix'],tz_offset);
else {
var t = new RRDFileSum(rrd_data_arr, false);
var f = new rrdFlot(args['plot_id'],t,graph_opts,ds_graph_opts,args['si_suffix'],tz_offset);
}
}
function update_fname_handler(bf, args) {
@ -50,7 +51,7 @@
alert("File "+fname+" is not a valid RRD archive!");
}
if (rrd_data!=undefined) {
output.push(rrd_data);
output.push(rrd_data);
if (output.length >= args['rrd_count']) {
update_fname(output, args);
}
@ -58,7 +59,7 @@
}
function fname_update(fname, plot_id, si_suffix) {
var o = new Array();
var o = new Array();
for (var i = 0; i < fname.length; i++) {
try {
FetchBinaryURLAsync(fname[i], update_fname_handler, {plot_id: plot_id,

Loading…
Cancel
Save