summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--htdocs/cropper/smokeping-zoom.js46
-rw-r--r--lib/Smokeping.pm16
-rw-r--r--lib/Smokeping/Graphs.pm2
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 "<div>INFO:".join("<br/>",@task)."</div>";
+ # die "<div>INFO:".join("<br/>",@task)."</div>";
my $ERROR = RRDs::error();
if ($ERROR) {
return "<div>ERROR: $ERROR</div><div>".join("<br/>",@task)."</div>";
@@ -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|<IMG id="zoom" BORDER="0" width="$xs{''}" height="$ys{''}" SRC="${imghref}_${end}_${start}.png">| ;
# $page .= "</div>";
- $page .= $q->start_form(-method=>'GET')
+ $page .= $q->start_form(-method=>'GET', -id=>'range_form')
. "<p>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)
. "&nbsp;&nbsp;to&nbsp;&nbsp;".$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;
}