]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Add group stats
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 2 Apr 2008 13:45:01 +0000 (13:45 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 2 Apr 2008 13:45:01 +0000 (13:45 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6721 91ce42f0-d328-0410-95d8-f526ca767f89

13 files changed:
gui/bweb/cgi/bconsole.pl
gui/bweb/cgi/bresto.pl
gui/bweb/cgi/bweb.pl
gui/bweb/lang/en/tpl/begin.tpl
gui/bweb/lang/en/tpl/display_stats.tpl [new file with mode: 0644]
gui/bweb/lang/es/tpl/begin.tpl
gui/bweb/lang/es/tpl/display_stats.tpl [new file with mode: 0644]
gui/bweb/lang/fr/tpl/begin.tpl
gui/bweb/lang/fr/tpl/display_stats.tpl [new file with mode: 0644]
gui/bweb/lib/Bweb.pm
gui/bweb/technotes-2.3
gui/bweb/tpl/begin.tpl
gui/bweb/tpl/display_stats.tpl [new file with mode: 0644]

index a169dd730c62da2a05079a3493259fb774d229ef..c66843c3e92b23fa47fa191dcef4cf4d15f94752 100755 (executable)
@@ -108,7 +108,7 @@ for my $a (@action)
                                   fileset   => $arg->{fileset},
                                   where     => $arg->{where},
                                   regexwhere => $arg->{regexwhere},
-                                  replace   => $arg->{replace},
+#                                 replace   => $arg->{replace},
                                   priority  => $arg->{priority},
                                   bootstrap => $filename);
 
index 616e42e1593473080b3ce8921ec6054ee2bd06cf..845c497a0161265328a7cf0538044c4af7064b70 100755 (executable)
@@ -895,10 +895,13 @@ SELECT btemp.JobId, btemp.FileIndex, btemp.FilenameId, btemp.PathId
 )");
    } else { # postgresql have distinct with more than one criteria...
         $bvfs->dbh_do("CREATE TABLE b2$$ AS (
-SELECT DISTINCT ON (PathId, FilenameId) JobId, FileIndex
-  FROM btemp
- ORDER BY PathId, FilenameId, JobId DESC
- HAVING FileIndex > 0
+SELECT JobId, FileIndex
+FROM (
+ SELECT DISTINCT ON (PathId, FilenameId) JobId, FileIndex
+   FROM btemp
+  ORDER BY PathId, FilenameId, JobId DESC
+ ) AS T
+ WHERE FileIndex > 0
 )");
     }
 
index 55a68d114890f2939d07029210e38e807a6efcb4..1f0eab14e48467fc76da0f1d2b25e217d53437ac 100755 (executable)
@@ -378,6 +378,8 @@ if ($action eq 'begin') {           # main display
                                        age => $arg->{age});
        }
     }
+} elsif ($action eq 'group_stats') {
+    $bweb->display_group_stats();
 
 } elsif ($action eq 'group_stats') {
     $bweb->display_group_stats(age => $arg->{age});
index 50565b5ecea50538a5b90bcc7838d94202d6a14c..716d0e9389ea461398c05c23743e3890bf13669c 100644 (file)
@@ -64,6 +64,7 @@ if ('Main' == ('_' + '_Main_' + '_')) {
   <ul>
     <li><a href="bweb.pl?action=graph"> Statistics </a>
     <li><a href="btime.pl"> Backup Timing </a>
+    <li><a href="bweb.pl?action=group_stats"> Groups </a>
     <!-- <li><a href="bperf.pl"> Perfs </a> -->
   </ul>
  </li>
diff --git a/gui/bweb/lang/en/tpl/display_stats.tpl b/gui/bweb/lang/en/tpl/display_stats.tpl
new file mode 100644 (file)
index 0000000..2077a31
--- /dev/null
@@ -0,0 +1,47 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Statistics (<TMPL_VAR label>)</h1>
+ </div>
+ <div class='bodydiv'>
+<form action='?'>
+     <table id='id<TMPL_VAR ID>'></table>
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("Name", "Nb Jobs", "Nb Bytes", "Nb Bytes", "Nb Files", "Nb Resto");
+
+var data = new Array();
+
+<TMPL_LOOP stats>
+data.push( 
+  new Array( "<TMPL_VAR name>", 
+            "<TMPL_VAR nb_job>",
+            human_size(<TMPL_VAR nb_byte>),
+            <TMPL_VAR nb_byte>,
+            "<TMPL_VAR nb_file>",
+            "<TMPL_VAR nb_resto>"
+             )
+) ; 
+</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: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+// disable_sorting: new Array(1),
+ rows_per_page: rows_per_page
+}
+);
+</script>
index 22a2e393a168a525ed04adec240f058a4c253b24..0118c2959c7f73504f3583a859fe643b9bbf3daa 100644 (file)
@@ -35,10 +35,10 @@ if ('Principal' == ('_' + '_Main_' + '_')) {
      <li><a href="bweb.pl?action=job_group">Jobs by group</a>
      <li><a href="bweb.pl?action=overview">Jobs overview</a>
      <li><a href="bweb.pl?action=missing">Missing Jobs</a>
-     <li><a href="bweb.pl?action=job">Últimos Jobs</a> </li>
-     <li><a href="bweb.pl?action=running">Jobs en Ejecución</a>
-     <li><a href="bweb.pl?action=next_job">Próximos Jobs</a> </li>
-     <li><a href="bweb.pl?action=restore" title="Launch brestore">Recuperación</a> </li>
+     <li><a href="bweb.pl?action=job">Últimos Jobs</a> </li>
+     <li><a href="bweb.pl?action=running">Jobs en Ejecución</a>
+     <li><a href="bweb.pl?action=next_job">Próximos Jobs</a> </li>
+     <li><a href="bweb.pl?action=restore" title="Launch brestore">Recuperación</a> </li>
      <li><a href="/bweb/bresto.html" title="Try bresto">Web Restore</a> </li>
    </ul>
  </li>
@@ -60,16 +60,17 @@ if ('Principal' == ('_' + '_Main_' + '_')) {
 </TMPL_LOOP>
   </ul>
  </li>
- <li><a href="bweb.pl?action=graph"> Estadísticas </a>
+ <li><a href="bweb.pl?action=graph"> Estadísticas </a>
   <ul>
-    <li><a href="bweb.pl?action=graph"> Estadísticas </a>
+    <li><a href="bweb.pl?action=graph"> Estadísticas </a>
     <li><a href="btime.pl"> Backup Timing </a>
+    <li><a href="bweb.pl?action=group_stats"> Groupes </a>
     <!-- <li><a href="bperf.pl"> Perfs </a> -->
   </ul>
  </li>
- <li> <a href="bweb.pl?action=view_conf"> Configuración </a> 
+ <li> <a href="bweb.pl?action=view_conf"> Configuración </a> 
 <TMPL_IF enable_security>
-  <ul> <li> <a href="bweb.pl?action=view_conf"> Configuración </a> 
+  <ul> <li> <a href="bweb.pl?action=view_conf"> Configuración </a> 
        <li> <a href="bweb.pl?action=users"> Manage users </a>
   </ul>
 </TMPL_IF>
diff --git a/gui/bweb/lang/es/tpl/display_stats.tpl b/gui/bweb/lang/es/tpl/display_stats.tpl
new file mode 100644 (file)
index 0000000..7f5fa80
--- /dev/null
@@ -0,0 +1,47 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Estadísticas (<TMPL_VAR label>)</h1>
+ </div>
+ <div class='bodydiv'>
+<form action='?'>
+     <table id='id<TMPL_VAR ID>'></table>
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("Nombre", "Nb Jobs", "Nb Bytes", "Nb Bytes", "Nb Files", "Nb Resto");
+
+var data = new Array();
+
+<TMPL_LOOP stats>
+data.push( 
+  new Array( "<TMPL_VAR name>", 
+            "<TMPL_VAR nb_job>",
+            human_size(<TMPL_VAR nb_byte>),
+            <TMPL_VAR nb_byte>,
+            "<TMPL_VAR nb_file>",
+            "<TMPL_VAR nb_resto>"
+             )
+) ; 
+</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: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+// disable_sorting: new Array(1),
+ rows_per_page: rows_per_page
+}
+);
+</script>
index afd99c59a7780e2474375c56d47ed0a71b16dc75..94502c36829a83b9ba54e106b7f366fdf7913398 100644 (file)
@@ -14,7 +14,7 @@
 
 <script type="text/javascript" language="JavaScript">
 if (navigator.appName == 'Konqueror') {
-        alert("Désolé, bweb fonctionne seulement avec mozilla.");
+        alert("Désolé, bweb fonctionne seulement avec mozilla.");
 }
 if ('Accueil' == ('_' + '_Main_' + '_')) {
        document.write("<font color='red'>Update your configuration to use the correct tpl directory (You are using devel tpl)</font>");
@@ -31,10 +31,10 @@ if ('Accueil' == ('_' + '_Main_' + '_')) {
  </li>
  <li style="padding: 0.25em 2em;">Jobs
    <ul> 
-     <li><a href="bweb.pl?action=run_job">Jobs définis</a>
+     <li><a href="bweb.pl?action=run_job">Jobs définis</a>
      <li><a href="bweb.pl?action=job_group">Jobs par groupe</a>
      <li><a href="bweb.pl?action=overview">Jobs overview</a>
-     <li><a href="bweb.pl?action=missing">Missing Jobs</a>
+     <li><a href="bweb.pl?action=missing">Jobs absents</a>
      <li><a href="bweb.pl?action=job">Historique</a> </li>
      <li><a href="bweb.pl?action=running">Jobs en cours</a>
      <li><a href="bweb.pl?action=next_job">Prochains jobs</a> </li>
@@ -42,9 +42,9 @@ if ('Accueil' == ('_' + '_Main_' + '_')) {
      <li><a href="/bweb/bresto.html" title="Try bresto">Web Restore</a> </li>
    </ul>
  </li>
- <li style="padding: 0.25em 2em;">Médias
+ <li style="padding: 0.25em 2em;">Médias
   <ul>
-     <li><a href="bweb.pl?action=pool">Pools de média</a> </li>
+     <li><a href="bweb.pl?action=pool">Pools de média</a> </li>
      <li><a href="bweb.pl?action=location">Localisations</a> </li>
      <li><a href="bweb.pl?action=media">Tous les Medias</a><hr></li>
      <li><a href="bweb.pl?action=add_media">Ajouter des Medias</a><hr></li>
@@ -64,6 +64,7 @@ if ('Accueil' == ('_' + '_Main_' + '_')) {
   <ul>
     <li><a href="bweb.pl?action=graph"> Statistiques </a>
     <li><a href="btime.pl"> Backup Timing </a>
+    <li><a href="bweb.pl?action=group_stats"> Groupes </a>
     <!-- <li><a href="bperf.pl"> Perfs </a> -->
   </ul>
  </li>
diff --git a/gui/bweb/lang/fr/tpl/display_stats.tpl b/gui/bweb/lang/fr/tpl/display_stats.tpl
new file mode 100644 (file)
index 0000000..c0814e2
--- /dev/null
@@ -0,0 +1,47 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> Statistiques (<TMPL_VAR label>)</h1>
+ </div>
+ <div class='bodydiv'>
+<form action='?'>
+     <table id='id<TMPL_VAR ID>'></table>
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("Nom", "Nb Jobs", "Nb Bytes", "Nb Bytes", "Nb Fichiers", "Nb Resto");
+
+var data = new Array();
+
+<TMPL_LOOP stats>
+data.push( 
+  new Array( "<TMPL_VAR name>", 
+            "<TMPL_VAR nb_job>",
+            human_size(<TMPL_VAR nb_byte>),
+            <TMPL_VAR nb_byte>,
+            "<TMPL_VAR nb_file>",
+            "<TMPL_VAR nb_resto>"
+             )
+) ; 
+</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: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+// disable_sorting: new Array(1),
+ rows_per_page: rows_per_page
+}
+);
+</script>
index 7e8b707de5539ef15770bbd6809b8625d6bdd512..0041285033090d6679519db17d9948e7a7e40cd5 100644 (file)
@@ -3608,7 +3608,7 @@ GROUP BY Client.Name
 }
 
 
-sub display_group_stats
+sub _display_group_stats
 {
     my ($self, %arg) = @_ ;
 
@@ -4009,6 +4009,49 @@ WHERE
                   "running_job.tpl") ;
 }
 
+sub display_group_stats
+{
+    my ($self) = @_;
+    my $arg = $self->get_form('age', 'since');
+    return if $self->cant_do('r_view_stat');
+    my $filter = $self->get_client_group_filter();
+
+    my ($limit, $label) = $self->get_limit(%$arg);
+
+    my $query = "
+SELECT client_group_name AS name, nb_byte, nb_file, nb_job, nb_resto
+  FROM (
+
+    SELECT sum(JobBytes) AS nb_byte,
+           sum(JobFiles) AS nb_file,
+           count(1) AS nb_job, client_group_name 
+      FROM job_old JOIN client_group_member USING (ClientId) 
+      JOIN client_group USING (client_group_id) $filter
+     WHERE JobStatus = 'T' AND Type IN ('M', 'B', 'g') 
+           $limit
+    GROUP BY client_group_name ORDER BY client_group_name
+
+  ) AS T1 LEFT JOIN (
+
+    SELECT count(1) AS nb_resto, client_group_name 
+      FROM job_old JOIN client_group_member USING (ClientId) 
+      JOIN client_group USING (client_group_id)
+     WHERE JobStatus = 'T' AND Type = 'R'
+           $limit
+    GROUP BY client_group_name ORDER BY client_group_name
+
+  ) AS T2 USING (client_group_name)
+";
+    $self->debug($query);
+    my $all = $self->dbh_selectall_hashref($query, 'name') ;
+    $self->debug($all);
+
+    $self->display({ ID => $cur_id++,
+                    label => $label,
+                    Stats => [ values %$all ]},
+                  "display_stats.tpl") ;
+}
+
 # return the autochanger list to update
 sub eject_media
 {
index 645781efb038b6925d2b0326dc955f852e22243c..8efc4fbcf01525779c20c37b9b00396c0f3c08b2 100644 (file)
@@ -1,3 +1,6 @@
+02Apr08
+ebl  Add group statistics page
+
 10Mar08
 ebl  Use lineal regression to guess backup progress (postgresql)
 
index 4d20ecc1e69396b0688ac6628929cf4b3ffd86ce..25d6981f091c39b9f97af61afcadcb50afb0eb50 100644 (file)
@@ -64,6 +64,7 @@ if ('__Main__' == ('_' + '_Main_' + '_')) {
   <ul>
     <li><a href="bweb.pl?action=graph"> __Statistics__ </a>
     <li><a href="btime.pl"> __Backup Timing__ </a>
+    <li><a href="bweb.pl?action=group_stats"> __Groups__ </a>
     <!-- <li><a href="bperf.pl"> __Perfs__ </a> -->
   </ul>
  </li>
diff --git a/gui/bweb/tpl/display_stats.tpl b/gui/bweb/tpl/display_stats.tpl
new file mode 100644 (file)
index 0000000..1481bd7
--- /dev/null
@@ -0,0 +1,47 @@
+<br/>
+ <div class='titlediv'>
+  <h1 class='newstitle'> __Statistics__ (<TMPL_VAR label>)</h1>
+ </div>
+ <div class='bodydiv'>
+<form action='?'>
+     <table id='id<TMPL_VAR ID>'></table>
+</form>
+ </div>
+
+<script type="text/javascript" language="JavaScript">
+var header = new Array("__Name__", "__Nb Jobs__", "__Nb Bytes__", "__Nb Bytes__", "__Nb Files__", "__Nb Resto__");
+
+var data = new Array();
+
+<TMPL_LOOP stats>
+data.push( 
+  new Array( "<TMPL_VAR name>", 
+            "<TMPL_VAR nb_job>",
+            human_size(<TMPL_VAR nb_byte>),
+            <TMPL_VAR nb_byte>,
+            "<TMPL_VAR nb_file>",
+            "<TMPL_VAR nb_resto>"
+             )
+) ; 
+</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: false,
+ even_cell_color: even_cell_color,
+ odd_cell_color: odd_cell_color, 
+ header_color: header_color,
+ page_nav: true,
+// disable_sorting: new Array(1),
+ rows_per_page: rows_per_page
+}
+);
+</script>