glpi-plugin-auf : rapport sur la migration Debian + ajustements cosmétiques
authorProgfou <jean-christophe.andre@auf.org>
Thu, 1 May 2014 23:36:47 +0000 (19:36 -0400)
committerProgfou <jean-christophe.andre@auf.org>
Thu, 1 May 2014 23:36:47 +0000 (19:36 -0400)
glpi-plugin-auf/plugin/rapport.migrationdebian.php
glpi-plugin-auf/plugin/rapport.migrationubuntu.php
glpi-plugin-auf/plugin/setup.php

index 96203c4..931ddda 100644 (file)
@@ -1 +1,288 @@
-<?php echo "À venir…"; ?>
+<?php
+//Options for GLPI 0.71 and newer : need slave db to access the report
+$USEDBREPLICATE=1;
+$DBCONNECTION_REQUIRED=0;
+
+include ("../../inc/includes.php");
+
+$svg_bar_width = 28;
+$svg_bar_height = 10;
+
+Session::checkRight("reports", "r");
+Session::checkRight("computer", "r");
+
+#Html::header(Report::getTypeName(2), $_SERVER['PHP_SELF'], "utils", "report");
+Html::header("Progression de la migration vers Debian 7", $_SERVER['PHP_SELF'], "utils", "report");
+Report::title();
+
+echo "\n<p class='big b' style='margin: 5px; text-align: center'>Progression de la migration vers Debian 7 <em>(Wheezy)</em></p>";
+
+$computer = new Computer();
+
+$itemtype = 'Computer';
+$table_item = getTableForItemType($itemtype);
+
+$svg_colors = Array('red'=>'#ffa0a0', 'green'=>'#a0ffa0', 'yellow'=>'#ffdd80', 'blue'=>'#a0a0ff');
+
+function svg_circle($color, $size=4) {
+  global $svg_colors;
+  if (array_key_exists($color, $svg_colors)) { $color = $svg_colors[$color]; }
+  $r = (int)$size; $cx = $r+1; $cy = $r+1;
+  $svg = '<svg width="'.(2+2*$r).'" height="'.(2+2*$r).'" style="margin: 1px; vertical-align: middle;">';
+  $svg .= "<circle cx='$cx' cy='$cy' r='$r' stroke='black' stroke-width='0' fill='$color' />";
+  $svg .= '</svg>';
+  return $svg;
+}
+
+function svg_pie_chart($values, $size=16) {
+  global $svg_colors;
+  $color_names = Array('blue', 'red', 'green', 'yellow'); $color_idx = 0;
+  $total = 0.0; foreach ($values as $v) { $total += $v; }
+  $r = (int)$size; $cx = $r+1; $cy = $r+1; $rad = 2*pi()/$total; $old_a = 0;
+  $svg = '<svg width="'.(2+2*$r).'" height="'.(2+2*$r).'" style="margin: 2px; vertical-align: middle;">';
+  foreach ($values as $a) {
+    $color = $svg_colors[$color_names[$color_idx++]];
+    if ($a == $total) {
+      $svg .= "<circle cx='$cx' cy='$cy' r='$r' stroke='black' stroke-width='0' fill='$color' />";
+    } elseif ($a > 0) {
+      $x1 = $cx + $r * cos(-$old_a * $rad);
+      $y1 = $cy + $r * sin(-$old_a * $rad);
+      $x2 = $cx + $r * cos(-($old_a + $a) * $rad);
+      $y2 = $cy + $r * sin(-($old_a + $a) * $rad);
+      $big = ($a > ($total/2)) ? '1' : '0';
+      $svg .= "<path d=\"M$cx,$cy L$x1,$y1 A$r,$r 0 $big,0 $x2,$y2 z\" style=\"stroke: 0 black; fill: $color;\" />";
+    }
+    $old_a += $a;
+  }
+  $svg .= '</svg>';
+  return $svg;
+}
+
+function svg_bar($values, $width=100, $height=5) {
+  global $svg_colors;
+  $color_names = Array('blue', 'red', 'green', 'yellow'); $color_idx = 0;
+  $total = 0.0; foreach ($values as $v) { $total += $v; }
+  $svg = "<svg width='$width' height='$height' style='float: left; margin: 2px; vertical-align: middle;'>";
+  $x = 0;
+  foreach ($values as $v) {
+    $color = $svg_colors[$color_names[$color_idx++]];
+    $w = round(($width*$v)/$total);
+    if ($w > 0) {
+      $svg .= "<rect x='$x' y='0' width='$w' height='$height' style='stroke: 0 black; fill: $color;' />";
+      $x += $w;
+    }
+  }
+  $svg .= '</svg>';
+  return $svg;
+}
+
+// echo "\n<span class='big b' style='color: red;'>ATTENTION : ce rapport est en cours de refonte, merci de ne pas tenir compte des données affichées ci-dessous.</span><br><br>";
+
+//echo "\n<span class='big b'>Ordinateurs par implantation</span><br><br>";
+echo "<table class='tab_cadrehov'>";
+echo "<tr class='tab_bg_1'><th rowspan='2' colspan='2'>Implantation</th>";
+echo "<th colspan='4'>Serveurs physiques</th>";
+echo "<th colspan='4'>Serveurs virtuels</th>";
+echo "</tr>";
+echo "<tr class='tab_bg_1'>";
+echo "<th>Autres ".svg_circle('blue', 3)."</th><th>Debian 6 ".svg_circle('red', 3)."</th><th>Debian 7 ".svg_circle('green', 3)."</th><th>Progression</th>";
+echo "<th>Autres ".svg_circle('blue', 3)."</th><th>Debian 6 ".svg_circle('red', 3)."</th><th>Debian 7 ".svg_circle('green', 3)."</th><th>Progression</th>";
+echo "</tr>\n";
+
+$grand_serveurs_wheezy = 0; $grand_serveurs_squeeze = 0; $grand_serveurs_autres = 0;
+$grand_virtuels_wheezy = 0; $grand_virtuels_squeeze = 0; $grand_virtuels_autres = 0;
+// récupération de la liste des régions
+$query = "SELECT id FROM glpi_entities WHERE (id=0 OR entities_id=0)";
+$query .= " ".getEntitiesRestrictRequest("AND", "glpi_entities")." ORDER BY name";
+$region_result = $DB->query($query);
+// parcours des régions
+while ($region_data = $DB->fetch_assoc($region_result)) {
+  $region_id = $region_data['id'];
+  if ($region_id != 0) {
+    $region_name = getTreeLeafValueName("glpi_entities", $region_id);
+  } else {
+    $region_name = "AUF";
+  }
+  $table_lines = Array();
+  $region_serveurs_wheezy = 0; $region_serveurs_squeeze = 0; $region_serveurs_autres = 0;
+  $region_virtuels_wheezy = 0; $region_virtuels_squeeze = 0; $region_virtuels_autres = 0;
+
+  // récupération de la liste des implantations
+  $query = "SELECT id,level FROM glpi_entities WHERE ";
+  if ($region_id != 0) {
+    $query .= getRealQueryForTreeItem("glpi_entities", $region_id, "id");
+  } else {
+    $query .= "id=0";
+  }
+  $query .= " ".getEntitiesRestrictRequest("AND", "glpi_entities")." ORDER BY name";
+  $implant_result = $DB->query($query);
+  // parcours des implantations
+  while ($implant_data = $DB->fetch_assoc($implant_result)) {
+    $implant_id = $implant_data['id'];
+    if ($implant_id != 0) {
+      $implant_name = getTreeLeafValueName("glpi_entities", $implant_id);
+    } else {
+      $implant_name = "<i>(non classé)</i>";
+    }
+
+    // récupération de la liste des systèmes de l'implantation
+    $nb_serveurs_wheezy = 0; $nb_serveurs_squeeze = 0; $nb_serveurs_autres = 0;
+    $nb_virtuels_wheezy = 0; $nb_virtuels_squeeze = 0; $nb_virtuels_autres = 0;
+    $query = "SELECT s.completename AS sname, o.name AS oname,
+                 ac.est_virtuel AS virtuel,
+                 acc.name AS categorie, acu.name AS utilisation
+              FROM `$table_item` c
+              LEFT JOIN glpi_states s ON (c.states_id = s.id)
+              LEFT JOIN glpi_plugin_auf_computers ac ON (c.id = ac.id)
+              LEFT JOIN glpi_plugin_auf_categories acc ON (ac.auf_categories_id = acc.id)
+              LEFT JOIN glpi_plugin_auf_utilisations acu ON (ac.auf_utilisations_id = acu.id)
+              LEFT JOIN glpi_operatingsystems o ON (c.operatingsystems_id = o.id)
+              WHERE c.is_deleted = '0' AND c.is_template = '0'
+                AND o.name LIKE 'Debian %'
+                AND c.entities_id = '".$implant_id."'";
+    $result = $DB->query($query);
+    while ($data=$DB->fetch_assoc($result)) {
+      // on ne compte pas les sorties d'inventaire
+      if (preg_match("/^sortie/i", $data['sname'])) {
+        continue;
+      }
+      // serveurs virtuels
+      if ($data['virtuel']) {
+        if (preg_match("/^Debian( GNU\/Linux)? 7/", $data['oname'])) {
+          $nb_virtuels_wheezy++;
+        } elseif (preg_match("/^Debian( GNU\/Linux)? 6/", $data['oname'])) {
+          $nb_virtuels_squeeze++;
+        } else {
+          $nb_virtuels_autres++;
+        }
+      }
+      // serveurs physiques
+      elseif (preg_match("/^infra/i", $data['categorie'])) {
+        if (preg_match("/^production/i", $data['utilisation']) &&
+           !preg_match("/panne/i", $data['sname'])) {
+          if (preg_match("/^Debian( GNU\/Linux)? 7/", $data['oname'])) {
+            $nb_serveurs_wheezy++;
+          } elseif (preg_match("/^Debian( GNU\/Linux)? 6/", $data['oname'])) {
+            $nb_serveurs_squeeze++;
+          } else {
+            $nb_serveurs_autres++;
+          }
+        }
+      }
+      // autres
+      else {
+        // on ne compte pas les postes clients, que les serveurs
+      }
+    } // systèmes dans l'implantation
+
+    $total_serveurs = $nb_serveurs_wheezy + $nb_serveurs_squeeze + $nb_serveurs_autres;
+    $total_virtuels = $nb_virtuels_wheezy + $nb_virtuels_squeeze + $nb_virtuels_autres;
+    if (($total_serveurs + $total_virtuels) > 0) {
+      $spaces = "";
+      for ($i=1;$i<$implant_data['level'];$i++) { $spaces .= "&nbsp;"; }
+      $line = "<tr><td class='tab_bg_1'>$spaces$implant_name</td>";
+      $line .= "<td class='numeric'>$nb_serveurs_autres</td>";
+      $line .= "<td class='numeric'>$nb_serveurs_squeeze</td>";
+      $line .= "<td class='numeric'>$nb_serveurs_wheezy</td>";
+      $line .= "<td class='numeric tab_bg_2'>";
+      $line .= svg_bar(Array($nb_serveurs_autres, $nb_serveurs_squeeze, $nb_serveurs_wheezy), $svg_bar_width, $svg_bar_height);
+      $line .= round((100*$nb_serveurs_wheezy)/$total_serveurs)."%</td>";
+      $line .= "<td class='numeric'>$nb_virtuels_autres</td>";
+      $line .= "<td class='numeric'>$nb_virtuels_squeeze</td>";
+      $line .= "<td class='numeric'>$nb_virtuels_wheezy</td>";
+      $line .= "<td class='numeric tab_bg_2'>";
+      $line .= svg_bar(Array($nb_virtuels_autres, $nb_virtuels_squeeze, $nb_virtuels_wheezy), $svg_bar_width, $svg_bar_height);
+      $line .= round((100*$nb_virtuels_wheezy)/$total_virtuels)."%</td>";
+      $line .= "</tr>\n";
+      $table_lines[] = $line;
+    }
+    // total régional
+    $region_serveurs_autres += $nb_serveurs_autres;
+    $region_serveurs_squeeze += $nb_serveurs_squeeze;
+    $region_serveurs_wheezy += $nb_serveurs_wheezy;
+    $region_virtuels_autres += $nb_virtuels_autres;
+    $region_virtuels_squeeze += $nb_virtuels_squeeze;
+    $region_virtuels_wheezy += $nb_virtuels_wheezy;
+    #$table_lines[] = "<tr><td>".$implant_name."</td></tr>";
+  } // fin des implantations de la région
+
+  $total_serveurs = $region_serveurs_wheezy + $region_serveurs_squeeze + $region_serveurs_autres;
+  $total_virtuels = $region_virtuels_wheezy + $region_virtuels_squeeze + $region_virtuels_autres;
+  if (($total_serveurs + $total_virtuels) > 0) {
+    $line = "<tr class='tab_bg_1 b'><td>Sous-total</td>";
+    $line .= "<td class='numeric'>$region_serveurs_autres</td>";
+    $line .= "<td class='numeric'>$region_serveurs_squeeze</td>";
+    $line .= "<td class='numeric'>$region_serveurs_wheezy</td>";
+    $line .= "<td class='numeric tab_bg_1'>";
+    $line .= svg_bar(Array($region_serveurs_autres, $region_serveurs_squeeze, $region_serveurs_wheezy), $svg_bar_width, $svg_bar_height);
+    $line .= round((100*$region_serveurs_wheezy)/$total_serveurs)."%</td>";
+    $line .= "<td class='numeric'>$region_virtuels_autres</td>";
+    $line .= "<td class='numeric'>$region_virtuels_squeeze</td>";
+    $line .= "<td class='numeric'>$region_virtuels_wheezy</td>";
+    $line .= "<td class='numeric tab_bg_1'>";
+    $line .= svg_bar(Array($region_virtuels_autres, $region_virtuels_squeeze, $region_virtuels_wheezy), $svg_bar_width, $svg_bar_height);
+    $line .= round((100*$region_virtuels_wheezy)/$total_virtuels)."%</td>";
+    $line .= "</tr>\n";
+    $table_lines[] = $line;
+  }
+
+  # TODO: revoir ce pie-chart
+  $region_name = svg_pie_chart(Array(
+    $region_serveurs_autres + $region_virtuels_autres,
+    $region_serveurs_squeeze + $region_virtuels_squeeze,
+    $region_serveurs_wheezy + $region_virtuels_wheezy,
+  ), 16) . $region_name;
+  $table_lines[0] = str_replace("<tr>", "<tr><td class='tab_bg_1 b' rowspan='".count($table_lines)."'>$region_name</td>", $table_lines[0]);
+  if ($region_id != 0) {
+    echo "<tr><th colspan='10'></th></tr>\n";
+  }
+  echo implode("\n", $table_lines);
+
+  // total général
+  $grand_serveurs_autres += $region_serveurs_autres;
+  $grand_serveurs_squeeze += $region_serveurs_squeeze;
+  $grand_serveurs_wheezy += $region_serveurs_wheezy;
+  $grand_virtuels_autres += $region_virtuels_autres;
+  $grand_virtuels_squeeze += $region_virtuels_squeeze;
+  $grand_virtuels_wheezy += $region_virtuels_wheezy;
+} // fin des régions
+
+#echo "<tr class='tab_bg_1'><td colspan='8'>&nbsp;</td></tr>";
+
+$total_serveurs = $grand_serveurs_wheezy + $grand_serveurs_squeeze + $grand_serveurs_autres;
+$total_virtuels = $grand_virtuels_wheezy + $grand_virtuels_squeeze + $grand_virtuels_autres;
+$line = "<tr class='tab_bg_1'><td class='b' colspan='2'>";
+$line .= svg_pie_chart(Array(
+  $grand_serveurs_autres + $grand_virtuels_autres,
+  $grand_serveurs_squeeze + $grand_virtuels_squeeze,
+  $grand_serveurs_wheezy + $grand_virtuels_wheezy,
+), 16);
+$line .= "TOTAL GÉNÉRAL</td>";
+$line .= "<td class='numeric b'>$grand_serveurs_autres</td>";
+$line .= "<td class='numeric b'>$grand_serveurs_squeeze</td>";
+$line .= "<td class='numeric b'>$grand_serveurs_wheezy</td>";
+$line .= "<td class='numeric tab_bg_1'>";
+$line .= svg_bar(Array($grand_serveurs_autres, $grand_serveurs_squeeze, $grand_serveurs_wheezy), $svg_bar_width, $svg_bar_height);
+$line .= round((100*$grand_serveurs_wheezy)/$total_serveurs)."%</td>";
+$line .= "<td class='numeric b'>$grand_virtuels_autres</td>";
+$line .= "<td class='numeric b'>$grand_virtuels_squeeze</td>";
+$line .= "<td class='numeric b'>$grand_virtuels_wheezy</td>";
+$line .= "<td class='numeric tab_bg_1'>";
+$line .= svg_bar(Array($grand_virtuels_autres, $grand_virtuels_squeeze, $grand_virtuels_wheezy), $svg_bar_width, $svg_bar_height);
+$line .= round((100*$grand_virtuels_wheezy)/$total_virtuels)."%</td>";
+$line .= "</tr>";
+echo "<tr><th colspan='10'></th></tr>\n";
+echo $line;
+
+echo "</table>";
+
+echo "<div style='margin: 5px; text-align: center;'><p><strong>Remarques&nbsp;:</strong></p><ul>";
+echo "<li>Ce rapport ne considère que les machines déclarées en production et qui n'ont pas un statut de panne.</li>";
+echo "<li>Ce rapport ne considère que les machines dans la catégorie infrastructure, pas les postes internes ou publics.</li>";
+echo "<li>Ce rapport considère à la fois les machines physiques et les machines virtuelles.</li>";
+echo "<li>Ce rapport ne considère que les machines sous Debian, aucun autre système.</li>";
+echo "<li>La colonne «&nbsp;Autres&nbsp;» consiste en des systèmes Debian d'une version autre que 7 ou 6.</li>";
+echo "</ul></div>";
+
+Html::footer();
+?>
index f410047..f28b381 100644 (file)
@@ -12,11 +12,10 @@ Session::checkRight("reports", "r");
 Session::checkRight("computer", "r");
 
 #Html::header(Report::getTypeName(2), $_SERVER['PHP_SELF'], "utils", "report");
-Html::header("Suivi de la migration vers Ubuntu 12.04.", $_SERVER['PHP_SELF'], "utils", "report");
+Html::header("Progression de la migration vers Ubuntu 12.04.", $_SERVER['PHP_SELF'], "utils", "report");
 Report::title();
 
-#echo "\n<p class='big b' style='text-align: center'>Suivi de la migration vers Ubuntu 12.04</p><br><br>";
-#echo "<p style=\"font-size: 120%; text-align: center;\">Les données du rapport de migration Ubuntu seront disponibles à partir du jeudi 24 avril 2014.<br />En attendant vous pouvez déjà consulter les rapports sur le <a href=\"https://glpi.auf.org/glpi/plugins/auf/report.computers.php\">parc machine</a> et sur les <a href=\"https://glpi.auf.org/glpi/plugins/auf/report.operatingsystems.php\">systèmes d'exploitation</a>.</p>";
+echo "\n<p class='big b' style='margin: 5px; text-align: center'>Progression de la migration vers Ubuntu 12.04 <em>(Precise)</em></p>";
 
 $computer = new Computer();
 
@@ -137,7 +136,9 @@ while ($region_data = $DB->fetch_assoc($region_result)) {
               LEFT JOIN glpi_plugin_auf_categories acc ON (ac.auf_categories_id = acc.id)
               LEFT JOIN glpi_plugin_auf_utilisations acu ON (ac.auf_utilisations_id = acu.id)
               LEFT JOIN glpi_operatingsystems o ON (c.operatingsystems_id = o.id)
-              WHERE c.is_deleted = '0' AND c.is_template = '0' AND ac.est_virtuel IS FALSE
+              WHERE c.is_deleted = '0' AND c.is_template = '0'
+                AND ac.est_virtuel IS FALSE
+                AND o.name LIKE 'Ubuntu %'
                 AND c.entities_id = '".$implant_id."'";
     $result = $DB->query($query);
     while ($data=$DB->fetch_assoc($result)) {
@@ -253,7 +254,13 @@ while ($region_data = $DB->fetch_assoc($region_result)) {
 
 $total_internes = $grand_internes_1204 + $grand_internes_1004 + $grand_internes_autres;
 $total_publics += $grand_publics_1204 + $grand_publics_1004 + $grand_publics_autres;
-$line = "<tr class='tab_bg_1'><td class='b' colspan='2'>Total général</td>";
+$line = "<tr class='tab_bg_1'><td class='b' colspan='2'>";
+$line .= svg_pie_chart(Array(
+  $grand_internes_autres + $grand_publics_autres,
+  $grand_internes_1004 + $grand_publics_1004,
+  $grand_internes_1204 + $grand_publics_1204,
+), 16);
+$line .= "TOTAL GÉNÉRAL</td>";
 $line .= "<td class='numeric b'>$grand_internes_autres</td>";
 $line .= "<td class='numeric b'>$grand_internes_1004</td>";
 $line .= "<td class='numeric b'>$grand_internes_1204</td>";
@@ -272,5 +279,13 @@ echo $line;
 
 echo "</table>";
 
+echo "<div style='margin: 5px; text-align: center;'><p><strong>Remarques&nbsp;:</strong></p><ul>";
+echo "<li>Ce rapport ne considère que les machines déclarées en production et qui n'ont pas un statut de panne.</li>";
+echo "<li>Ce rapport ne considère que les machines dans les catégories poste interne ou public, donc pas les serveurs.</li>";
+echo "<li>Ce rapport ne considère que les machines physiques, pas les machines virtuelles.</li>";
+echo "<li>Ce rapport ne considère que les machines sous Ubuntu, aucun autre système.</li>";
+echo "<li>La colonne «&nbsp;Autres&nbsp;» consiste en des systèmes Ubuntu d'une version autre que 12.04 ou 10.04.</li>";
+echo "</ul></div>";
+
 Html::footer();
 ?>
index 2537022..e20c0d8 100644 (file)
@@ -30,7 +30,8 @@ function plugin_init_auf() {
       if (isset($_SESSION["glpiname"])) {
          $report_list = array();
          if (Session::haveRight("computer", "r")) {
-            $report_list["rapport.migrationubuntu.php"] = "Suivi de la migration vers Ubuntu 12.04";
+            $report_list["rapport.migrationubuntu.php"] = "Progression de la migration vers Ubuntu 12.04 (Precise)";
+            $report_list["rapport.migrationdebian.php"] = "Progression de la migration vers Debian 7 (Wheezy)";
             $report_list["report.operatingsystems.php"] = "Systèmes d'exploitation par implantation";
             $report_list["report.computers.php"] = "Ordinateurs par implantation";
             // $report_list["report.wip.php"] = 'WIP (rapport en cours de développement)';