From 36ab642eaaa3a27e346659bef7fff07b3733ca30 Mon Sep 17 00:00:00 2001 From: Tobi Oetiker Date: Thu, 6 Sep 2007 15:42:52 +0000 Subject: fixed timezone issues in zoomer --- CHANGES | 3 +++ htdocs/cropper/smokeping-zoom.js | 46 ++++++++++++++++++++++++++++++++-------- lib/Smokeping.pm | 16 +++++++------- lib/Smokeping/Graphs.pm | 2 +- 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/CHANGES b/CHANGES index 5557fc7..e0e2ae8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2007/9/06 -- released version 2.2.3 +* alter ajax grapher mode to use seconds timestamps and not iso dates + this prevents timezone problems with the browser -- tobi * 1.2 is required now ... -- tobi * make sure start is before end in the cropper zoom -- tobi * better documentation on multihost syntax added -- tobi diff --git a/htdocs/cropper/smokeping-zoom.js b/htdocs/cropper/smokeping-zoom.js index 90fcd3f..a02ad56 100644 --- a/htdocs/cropper/smokeping-zoom.js +++ b/htdocs/cropper/smokeping-zoom.js @@ -1,9 +1,29 @@ +/*++ from bonsai.js ++ urlObj +++++++++++++++++++++++++++++++++++++++++*/ +function urlObj(url) { + var urlBaseAndParameters; + + urlBaseAndParameters = url.split("?"); + this.urlBase = urlBaseAndParameters[0]; + this.urlParameters = urlBaseAndParameters[1].split(/[;&]/); + + this.getUrlBase = urlObjGetUrlBase; +} + +/*++ from bonsai.js ++ urlObjGetUrlBase +++++++++++++++++++++++++++++++*/ + +function urlObjGetUrlBase() { + return this.urlBase; +} + + // example with minimum dimensions var myCropper; var StartEpoch = 0; var EndEpoch = 0; + + function changeRRDImage(coords,dimensions){ var SelectLeft = Math.min(coords.x1,coords.x2); @@ -17,23 +37,31 @@ function changeRRDImage(coords,dimensions){ var RRDRight = 26; // difference between right border of RRD image and content var RRDImgWidth = $('zoom').getDimensions().width; // Width of the Smokeping RRD Graphik var RRDImgUsable = RRDImgWidth - RRDRight - RRDLeft; - - if (StartEpoch == 0) - StartEpoch = $('epoch_start').value; + var form = $('range_form'); + + if (StartEpoch == 0) + StartEpoch = +$F('epoch_start'); + if (EndEpoch == 0) - EndEpoch = $('epoch_end').value; + EndEpoch = +$F('epoch_end'); + var DivEpoch = EndEpoch - StartEpoch; - var Target = $('target').value; + var Target = $F('target'); + + // construct Image URL + var myURLObj = new urlObj(document.URL); + + var myURL = myURLObj.getUrlBase(); // Generate Selected Range in Unix Timestamps - StartEpoch = Math.floor(StartEpoch + (((SelectLeft - RRDLeft) / RRDImgUsable ) * DivEpoch)); - EndEpoch = Math.ceil(StartEpoch + (((SelectRight - RRDLeft) / RRDImgUsable ) * DivEpoch)); + var NewStartEpoch = Math.floor(StartEpoch + (SelectLeft - RRDLeft) * DivEpoch / RRDImgUsable ); + EndEpoch = Math.ceil(StartEpoch + (SelectRight - RRDLeft) * DivEpoch / RRDImgUsable ); + StartEpoch = NewStartEpoch; - // construct Image URL + $('zoom').src = myURL + '?displaymode=a;start=' + StartEpoch + ';end=' + EndEpoch + ';target=' + Target; - $('zoom').src = myURL + "?displaymode=a;start=" + genStart+ ";end=" + genEnd + ";target=" + Target; myCropper.setParams(); }; diff --git a/lib/Smokeping.pm b/lib/Smokeping.pm index 3da04f2..40beeb6 100644 --- a/lib/Smokeping.pm +++ b/lib/Smokeping.pm @@ -836,6 +836,7 @@ sub smokecol ($) { sub parse_datetime($){ my $in = shift; for ($in){ + /^(\d+)$/ && do { my $value = $1; $value = time if $value > 2**32; return $value}; /^\s*(\d{4})-(\d{1,2})-(\d{1,2})(?:\s+(\d{1,2}):(\d{2})(?::(\d{2}))?)?\s*$/ && return POSIX::mktime($6||0,$5||0,$4||0,$3,$2-1,$1-1900,0,0,-1); /([ -:a-z0-9]+)/ && return $1; @@ -941,13 +942,12 @@ sub get_detail ($$$$;$){ $imgbase =$cfg->{General}{imgcache}."/__navcache/".time()."$$"; $imghref =$cfg->{General}{imgurl}."/__navcache/".time()."$$"; } else { - my $serial = rand(); + my $serial = int(rand(2000)); $imgbase =$cfg->{General}{imgcache}."/__navcache/".$serial; $imghref =$cfg->{General}{imgurl}."/__navcache/".$serial; } @tasks = (["Navigator Graph".$name, parse_datetime($q->param('start')),parse_datetime($q->param('end'))]); - my ($graphret,$xs,$ys) = RRDs::graph ("dummy", '--start', $tasks[0][1], @@ -1198,7 +1198,7 @@ sub get_detail ($$$$;$){ my $graphret; ($graphret,$xs{$s},$ys{$s}) = RRDs::graph @task; - # print "
INFO:".join("
",@task)."
"; + # die "
INFO:".join("
",@task)."
"; my $ERROR = RRDs::error(); if ($ERROR) { return "
ERROR: $ERROR
".join("
",@task)."
"; @@ -1206,7 +1206,7 @@ sub get_detail ($$$$;$){ } if ($mode eq 'a'){ # ajax mode - open my $img, "${imgbase}_${end}_${start}.png"; + open my $img, "${imgbase}_${end}_${start}.png" or die "${imgbase}_${end}_${start}.png: $!"; binmode $img; print "Content-Type: image/png\n"; my $data; @@ -1222,11 +1222,11 @@ sub get_detail ($$$$;$){ $page .= qq|| ; # $page .= ""; - $page .= $q->start_form(-method=>'GET') + $page .= $q->start_form(-method=>'GET', -id=>'range_form') . "

Time range: " - . $q->hidden(-name=>'epoc_start',-id=>'epoc_start',-default=>$start) - . $q->hidden(-name=>'epoc_end',-id=>'epoc_end',-default=>$end) - . $q->hidden(-name=>'target' -id=>'target' ) + . $q->hidden(-name=>'epoch_start',-id=>'epoch_start',-default=>$start) + . $q->hidden(-name=>'epoch_end',-id=>'epoch_end',-default=>time()) + . $q->hidden(-name=>'target',-id=>'target' ) . $q->hidden(-name=>'displaymode',-default=>$mode ) . $q->textfield(-name=>'start',-default=>$startstr) . "  to  ".$q->textfield(-name=>'end',-default=>$endstr) diff --git a/lib/Smokeping/Graphs.pm b/lib/Smokeping/Graphs.pm index bb7002d..f0d7bf7 100644 --- a/lib/Smokeping/Graphs.pm +++ b/lib/Smokeping/Graphs.pm @@ -109,7 +109,7 @@ sub get_multi_detail ($$$$;$){ $imgbase =$cfg->{General}{imgcache}."/__navcache/".time()."$$"; $imghref =$cfg->{General}{imgurl}."/__navcache/".time()."$$"; } else { - my $serial = $q->param('serial'); + my $serial = int(rand(2000)); $imgbase =$cfg->{General}{imgcache}."/__navcache/".$serial; $imghref =$cfg->{General}{imgurl}."/__navcache/".$serial; } -- cgit v1.2.3-24-g4f1b