]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Add Prev/Next (display only 1000 lines) button to Job Log view
authorEric Bollengier <eric@eb.homelinux.org>
Thu, 8 Nov 2007 20:17:29 +0000 (20:17 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Thu, 8 Nov 2007 20:17:29 +0000 (20:17 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5878 91ce42f0-d328-0410-95d8-f526ca767f89

gui/bweb/ReleaseNotes
gui/bweb/lang/es/tpl/display_client_job.tpl [deleted file]
gui/bweb/lang/es/tpl/display_log.tpl
gui/bweb/lang/fr/tpl/display_client_job.tpl [deleted file]
gui/bweb/lang/fr/tpl/display_log.tpl
gui/bweb/lib/Bweb.pm
gui/bweb/script/bweb-postgresql.sql
gui/bweb/script/upgrade-2.2_3.0_postgresql.sql
gui/bweb/tpl/display_client_job.tpl [deleted file]
gui/bweb/tpl/display_log.tpl
gui/debian/changelog

index 1ecd637ad1ea44c596bb3b42958cd8d8c37b4434..fe08902b62bedf6aee01adb4bb512ba29a6a9e8a 100644 (file)
@@ -1,4 +1,6 @@
           Release Notes for bweb 2.2
+2007/11/08
+ - Add Prev/Next on job log output
 
 2007/10/31
  - Add a error filter to Job zoom view
diff --git a/gui/bweb/lang/es/tpl/display_client_job.tpl b/gui/bweb/lang/es/tpl/display_client_job.tpl
deleted file mode 100644 (file)
index ba62845..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<br/>
- <div class='titlediv'>
-  <h1 class='newstitle'> ültimos jobs de <TMPL_VAR clientname> (<TMPL_VAR Filter>)
-  </h1>
- </div>
- <div class='bodydiv'>
-
-   <table id='id<TMPL_VAR ID>'></table>
-
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_size;status=T">
-    <img src="/bweb/chart.png" alt="backup size" title="backup size evolution"/>
-    </a>
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_duration;status=T">
-    <img src="/bweb/chart.png" alt="backup duration" title="backup time evolution"/>
-    </a>
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_rate;status=T">
-    <img src="/bweb/chart.png" alt="backup rate" title="backup rate evolution"/>
-    </a>                               
- </div>
-
-
-<script type="text/javascript" language="JavaScript">
-var header = new Array("IdJob", "Nombre Job", "File Set", "Nivel", "Tiempo Inicio", 
-                  "Archivos Job", "Bytes Job", "Errors");
-
-var data = new Array();
-
-<TMPL_LOOP Jobs>
-data.push( new Array(
-"<TMPL_VAR JobId>",
-"<TMPL_VAR JobName>",    
-"<TMPL_VAR FileSet>",
-"<TMPL_VAR Level>",
-"<TMPL_VAR StartTime>",
-"<TMPL_VAR JobFiles>",   
-human_size(<TMPL_VAR JobBytes>),
-"<TMPL_VAR JobErrors>"   
- )
-);
-</TMPL_LOOP>
-
-nrsTable.setup(
-{
- table_name:     "id<TMPL_VAR ID>",
- table_header: header,
- table_data: data,
- up_icon: up_icon,
- down_icon: down_icon,
- prev_icon: prev_icon,
- next_icon: next_icon,
- rew_icon:  rew_icon,
- fwd_icon:  fwd_icon,
-// natural_compare: true,
- even_cell_color: even_cell_color,
- odd_cell_color: odd_cell_color, 
- header_color: header_color,
- page_nav: true,
- rows_per_page: rows_per_page,
- disable_sorting: new Array(5,6)
-}
-);
-
-// get newest job first
-nrsTables['id<TMPL_VAR ID>'].fieldSort(0);
-</script>
index f71f2098c915c245e39b8f4c922983237d8acb79..22164090c0d0c244455af027c165588d86eee5db 100644 (file)
@@ -6,4 +6,75 @@
   <pre id='log'>
 <TMPL_VAR lines>
   </pre>
+
+<a id='prev'><img border='0' src='/bweb/prev.png'></a>
+<a id='next'><img border='0' src='/bweb/next.png'></a>
  </div>
+<script type="text/javascript" language='JavaScript'>
+
+var url='<TMPL_VAR thisurl>';
+var urlprev=url;
+var urlnext=url;
+
+var reoff = new RegExp('offset=[0-9]+', "");
+var relim = new RegExp('limit=[0-9]+', "");
+
+var offset=0;
+var limit=1000;
+var nbline=0;
+<TMPL_IF offset>
+offset = <TMPL_VAR offset>;
+</TMPL_IF>
+<TMPL_IF limit>
+limit = <TMPL_VAR limit>;
+</TMPL_IF>
+<TMPL_IF nbline>
+nbline=<TMPL_VAR nbline>;
+</TMPL_IF>
+
+if (nbline == limit) {
+   var offset_next = offset + limit;
+   
+   if (url.match(reoff)) {
+       urlnext = urlnext.replace(reoff, 'offset=' + offset_next);
+   } else {
+       urlnext = urlnext + ';offset=' + offset_next;
+   }
+   
+   if (url.match(relim)) {
+       urlnext = urlnext.replace(relim, 'limit=' + limit);
+   } else {
+       urlnext = urlnext + ';limit=' + limit;
+   }
+   
+   document.getElementById('next').href = urlnext;
+
+} else {
+   document.getElementById('next').style.visibility="hidden";
+}
+
+if (offset > 0) {
+   var offset_prev = offset - limit;
+   if (offset_prev < 0) {
+        offset_prev=0;
+   }
+   if (url.match(reoff)) {
+       urlprev = urlprev.replace(reoff, 'offset=' + offset_prev);
+   } else {
+       urlprev = urlprev + ';offset=' + offset_prev ;
+   }
+   if (url.match(relim)) {
+       urlprev = urlprev.replace(relim, 'limit=' + limit);
+   } else {
+       urlprev = urlprev + ';limit=' + limit;
+   }
+
+   if (offset_prev >= 0) {
+       document.getElementById('prev').href = urlprev;
+   } else {
+       document.getElementById('prev').style.visibility="hidden";
+   }
+} else {
+   document.getElementById('prev').style.visibility="hidden";
+}   
+</script>
diff --git a/gui/bweb/lang/fr/tpl/display_client_job.tpl b/gui/bweb/lang/fr/tpl/display_client_job.tpl
deleted file mode 100644 (file)
index 0440f55..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<br/>
- <div class='titlediv'>
-  <h1 class='newstitle'> Historique de <TMPL_VAR clientname> (<TMPL_VAR Filter>)
-  </h1>
- </div>
- <div class='bodydiv'>
-
-   <table id='id<TMPL_VAR ID>'></table>
-
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_size;status=T">
-    <img src="/bweb/chart.png" alt="taille des sauvegardes" title="évolution de la taille des sauvegardes"/>
-    </a>
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_duration;status=T">
-    <img src="/bweb/chart.png" alt="durée des sauvegardes" title="évolution de la durée des sauvegardes"/>
-    </a>
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_rate;status=T">
-    <img src="/bweb/chart.png" alt="vitesse des sauvegardes" title="évolution de la vitesse des sauvegardes"/>
-    </a>                               
- </div>
-
-
-<script type="text/javascript" language="JavaScript">
-var header = new Array("JobId", "Nom du Job", "File Set", "Niveau", "Début", 
-                  "Nb fichiers", "Taille", "Erreurs");
-
-var data = new Array();
-
-<TMPL_LOOP Jobs>
-data.push( new Array(
-"<TMPL_VAR JobId>",
-"<TMPL_VAR JobName>",    
-"<TMPL_VAR FileSet>",
-"<TMPL_VAR Level>",
-"<TMPL_VAR StartTime>",
-"<TMPL_VAR JobFiles>",   
-human_size(<TMPL_VAR JobBytes>),
-"<TMPL_VAR JobErrors>"   
- )
-);
-</TMPL_LOOP>
-
-nrsTable.setup(
-{
- table_name:     "id<TMPL_VAR ID>",
- table_header: header,
- table_data: data,
- up_icon: up_icon,
- down_icon: down_icon,
- prev_icon: prev_icon,
- next_icon: next_icon,
- rew_icon:  rew_icon,
- fwd_icon:  fwd_icon,
-// natural_compare: true,
- even_cell_color: even_cell_color,
- odd_cell_color: odd_cell_color, 
- header_color: header_color,
- page_nav: true,
- rows_per_page: rows_per_page,
- disable_sorting: new Array(5,6)
-}
-);
-
-// get newest job first
-nrsTables['id<TMPL_VAR ID>'].fieldSort(0);
-</script>
index d093f58a3858c2a32e5ad3fdb5e2ec96b6c3b563..d4ffea3f3e14d61f56366e345f24818737857a1c 100644 (file)
@@ -6,4 +6,75 @@
   <pre id='log'>
 <TMPL_VAR lines>
   </pre>
+
+<a id='prev'><img border='0' src='/bweb/prev.png'></a>
+<a id='next'><img border='0' src='/bweb/next.png'></a>
  </div>
+<script type="text/javascript" language='JavaScript'>
+
+var url='<TMPL_VAR thisurl>';
+var urlprev=url;
+var urlnext=url;
+
+var reoff = new RegExp('offset=[0-9]+', "");
+var relim = new RegExp('limit=[0-9]+', "");
+
+var offset=0;
+var limit=1000;
+var nbline=0;
+<TMPL_IF offset>
+offset = <TMPL_VAR offset>;
+</TMPL_IF>
+<TMPL_IF limit>
+limit = <TMPL_VAR limit>;
+</TMPL_IF>
+<TMPL_IF nbline>
+nbline=<TMPL_VAR nbline>;
+</TMPL_IF>
+
+if (nbline == limit) {
+   var offset_next = offset + limit;
+   
+   if (url.match(reoff)) {
+       urlnext = urlnext.replace(reoff, 'offset=' + offset_next);
+   } else {
+       urlnext = urlnext + ';offset=' + offset_next;
+   }
+   
+   if (url.match(relim)) {
+       urlnext = urlnext.replace(relim, 'limit=' + limit);
+   } else {
+       urlnext = urlnext + ';limit=' + limit;
+   }
+   
+   document.getElementById('next').href = urlnext;
+
+} else {
+   document.getElementById('next').style.visibility="hidden";
+}
+
+if (offset > 0) {
+   var offset_prev = offset - limit;
+   if (offset_prev < 0) {
+        offset_prev=0;
+   }
+   if (url.match(reoff)) {
+       urlprev = urlprev.replace(reoff, 'offset=' + offset_prev);
+   } else {
+       urlprev = urlprev + ';offset=' + offset_prev ;
+   }
+   if (url.match(relim)) {
+       urlprev = urlprev.replace(relim, 'limit=' + limit);
+   } else {
+       urlprev = urlprev + ';limit=' + limit;
+   }
+
+   if (offset_prev >= 0) {
+       document.getElementById('prev').href = urlprev;
+   } else {
+       document.getElementById('prev').style.visibility="hidden";
+   }
+} else {
+   document.getElementById('prev').style.visibility="hidden";
+}   
+</script>
index 2df26caabd8e7867108550c32d8f561f98f434fe..40a54f93e2ea29f57500a3552d3120662fa8eed2 100644 (file)
@@ -3736,17 +3736,8 @@ sub get_job_log
     if ($arg->{limit} == 100) {
         $arg->{limit} = 1000;
     }
-
-    my $t = CGI::param('time') || $self->{info}->{display_log_time} || '';
-
-    # display only Error and Warning messages
-    my $filter = '';
-    if (CGI::param('error')) {
-       $filter = " AND LogText $self->{sql}->{MATCH} 'Error|Warning' ";
-    }
-
     # get security filter
-    $filter .= $self->get_client_filter();
+    my $filter = $self->get_client_filter();
 
     my $query = "
 SELECT Job.Name as name, Client.Name as clientname
@@ -3760,33 +3751,44 @@ SELECT Job.Name as name, Client.Name as clientname
        return $self->error("Can't find $arg->{jobid} in catalog");
     }
 
+    # display only Error and Warning messages
+    $filter = '';
+    if (CGI::param('error')) {
+       $filter = " AND LogText $self->{sql}->{MATCH} 'Error|Warning' ";
+    }
+
+    my $logtext;
+    if (CGI::param('time') || $self->{info}->{display_log_time}) {
+       $logtext = 'LogText';
+    } else {
+       $logtext = $self->dbh_strcat('Time', ' ', 'LogText')
+    }
+
     $query = "
-SELECT Time AS time, LogText AS log 
-  FROM  Log 
- WHERE ( Log.JobId = $arg->{jobid} 
-    OR (Log.JobId = 0 AND Time >= (SELECT StartTime FROM Job WHERE JobId=$arg->{jobid}) 
+SELECT count(1) AS nbline, JobId AS jobid, group_concat($logtext) AS lines
+  FROM  (
+    SELECT JobId, Time, LogText
+    FROM Log 
+   WHERE ( Log.JobId = $arg->{jobid} 
+      OR (Log.JobId = 0 AND Time >= (SELECT StartTime FROM Job WHERE JobId=$arg->{jobid}) 
                       AND Time <= (SELECT COALESCE(EndTime,NOW()) FROM Job WHERE JobId=$arg->{jobid})
        )
        ) $filter
  ORDER BY LogId
  LIMIT $arg->{limit}
  OFFSET $arg->{offset}
+ ) AS temp
+ GROUP BY JobId
+
 ";
 
-    my $log = $self->dbh_selectall_arrayref($query);
+    my $log = $self->dbh_selectrow_hashref($query);
     unless ($log) {
        return $self->error("Can't get log for jobid $arg->{jobid}");
     }
 
-    my $logtxt;
-    if ($t) {
-       # log contains \n
-       $logtxt = join("", map { ($_->[0] . ' ' . $_->[1]) } @$log ) ; 
-    } else {
-       $logtxt = join("", map { $_->[1] } @$log ) ; 
-    }
-    
-    $self->display({ lines=> $logtxt,
+    $self->display({ lines=> $log->{lines},
+                    nbline => $log->{nbline},
                     jobid => $arg->{jobid},
                     name  => $row->{name},
                     client => $row->{clientname},
index ecd20e50a50514f6a4962fb47156bb4dfb2d12b1..3170cae44979e1d098a7ae87b66e43fb934cb55c 100644 (file)
@@ -2,6 +2,26 @@
 -- --------------------------------------------------
 -- Upgrade from 2.2
 -- --------------------------------------------------
+
+CREATE FUNCTION concat (text, text) RETURNS text AS '
+DECLARE
+result text;
+BEGIN
+IF $1 is not null THEN
+result := $1 || $2;
+END IF;
+
+RETURN result;
+END;
+' LANGUAGE plpgsql;
+
+CREATE AGGREGATE group_concat(
+sfunc = concat,
+basetype = text,
+stype = text,
+initcond = ''
+);
+
 BEGIN;
 CREATE TABLE bweb_user
 (
index 5c7decee12978e73833755f7ec35cbf2fcb34ad6..f9eccb752f2692beaa170f61fa8dc74b431f73ac 100644 (file)
@@ -2,6 +2,25 @@
 -- Upgrade from 2.2
 -- --------------------------------------------------
 
+CREATE FUNCTION concat (text, text) RETURNS text AS '
+DECLARE
+result text;
+BEGIN
+IF $1 is not null THEN
+result := $1 || $2;
+END IF;
+
+RETURN result;
+END;
+' LANGUAGE plpgsql;
+
+CREATE AGGREGATE group_concat(
+sfunc = concat,
+basetype = text,
+stype = text,
+initcond = ''
+);
+
 BEGIN;
 CREATE TABLE bweb_user
 (
diff --git a/gui/bweb/tpl/display_client_job.tpl b/gui/bweb/tpl/display_client_job.tpl
deleted file mode 100644 (file)
index 33199f2..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<br/>
- <div class='titlediv'>
-  <h1 class='newstitle'> Last jobs for <TMPL_VAR clientname> (<TMPL_VAR Filter>)
-  </h1>
- </div>
- <div class='bodydiv'>
-
-   <table id='id<TMPL_VAR ID>'></table>
-
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_size;status=T">
-    <img src="/bweb/chart.png" alt="backup size" title="backup size evolution"/>
-    </a>
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_duration;status=T">
-    <img src="/bweb/chart.png" alt="backup duration" title="backup time evolution"/>
-    </a>
-<a href="bgraph.pl?client=<TMPL_VAR clientname>;action=job_rate;status=T">
-    <img src="/bweb/chart.png" alt="backup rate" title="backup rate evolution"/>
-    </a>                               
- </div>
-
-
-<script type="text/javascript" language="JavaScript">
-var header = new Array("JobId", "Job Name", "File Set", "Level", "Start Time", 
-                  "Job Files", "Job Bytes", "Errors");
-
-var data = new Array();
-
-<TMPL_LOOP Jobs>
-data.push( new Array(
-"<TMPL_VAR JobId>",
-"<TMPL_VAR JobName>",    
-"<TMPL_VAR FileSet>",
-"<TMPL_VAR Level>",
-"<TMPL_VAR StartTime>",
-"<TMPL_VAR JobFiles>",   
-human_size(<TMPL_VAR JobBytes>),
-"<TMPL_VAR JobErrors>"   
- )
-);
-</TMPL_LOOP>
-
-nrsTable.setup(
-{
- table_name:     "id<TMPL_VAR ID>",
- table_header: header,
- table_data: data,
- up_icon: up_icon,
- down_icon: down_icon,
- prev_icon: prev_icon,
- next_icon: next_icon,
- rew_icon:  rew_icon,
- fwd_icon:  fwd_icon,
-// natural_compare: true,
- even_cell_color: even_cell_color,
- odd_cell_color: odd_cell_color, 
- header_color: header_color,
- page_nav: true,
- rows_per_page: rows_per_page,
- disable_sorting: new Array(5,6)
-}
-);
-
-// get newest job first
-nrsTables['id<TMPL_VAR ID>'].fieldSort(0);
-</script>
index 251a7b094aee665fb92a179e9b5aabfad4f244d1..28ec41acdf7f261ebceb142a9a4318644fa55a64 100644 (file)
@@ -6,4 +6,75 @@
   <pre id='log'>
 <TMPL_VAR lines>
   </pre>
+
+<a id='prev'><img border='0' src='/bweb/prev.png'></a>
+<a id='next'><img border='0' src='/bweb/next.png'></a>
  </div>
+<script type="text/javascript" language='JavaScript'>
+
+var url='<TMPL_VAR thisurl>';
+var urlprev=url;
+var urlnext=url;
+
+var reoff = new RegExp('offset=[0-9]+', "");
+var relim = new RegExp('limit=[0-9]+', "");
+
+var offset=0;
+var limit=1000;
+var nbline=0;
+<TMPL_IF offset>
+offset = <TMPL_VAR offset>;
+</TMPL_IF>
+<TMPL_IF limit>
+limit = <TMPL_VAR limit>;
+</TMPL_IF>
+<TMPL_IF nbline>
+nbline=<TMPL_VAR nbline>;
+</TMPL_IF>
+
+if (nbline == limit) {
+   var offset_next = offset + limit;
+   
+   if (url.match(reoff)) {
+       urlnext = urlnext.replace(reoff, 'offset=' + offset_next);
+   } else {
+       urlnext = urlnext + ';offset=' + offset_next;
+   }
+   
+   if (url.match(relim)) {
+       urlnext = urlnext.replace(relim, 'limit=' + limit);
+   } else {
+       urlnext = urlnext + ';limit=' + limit;
+   }
+   
+   document.getElementById('next').href = urlnext;
+
+} else {
+   document.getElementById('next').style.visibility="hidden";
+}
+
+if (offset > 0) {
+   var offset_prev = offset - limit;
+   if (offset_prev < 0) {
+        offset_prev=0;
+   }
+   if (url.match(reoff)) {
+       urlprev = urlprev.replace(reoff, 'offset=' + offset_prev);
+   } else {
+       urlprev = urlprev + ';offset=' + offset_prev ;
+   }
+   if (url.match(relim)) {
+       urlprev = urlprev.replace(relim, 'limit=' + limit);
+   } else {
+       urlprev = urlprev + ';limit=' + limit;
+   }
+
+   if (offset_prev >= 0) {
+       document.getElementById('prev').href = urlprev;
+   } else {
+       document.getElementById('prev').style.visibility="hidden";
+   }
+} else {
+   document.getElementById('prev').style.visibility="hidden";
+}   
+</script>
index cc0ab0ca5fd55e783341d23f45b18e919d19113b..238e7c25e18075db4f1878b91a2a349af4205234 100644 (file)
@@ -1,6 +1,7 @@
 bweb (2.2.6-1) stable; urgency=low
   * Replace VolStatus by Enabled in volume location
   * Add Enabled in volume update and zoom
+  * Add Prev/Next on job log output
   * Add a error filter to Job zoom view
 
  -- Eric Bollengier <eric@eb.homelinux.org>  Tue,  30 Oct 2007 22:15:47 +0000