glpi-plugin-auf : intégration Debian 8 et Ubuntu 14.04
[auf-serveur.git] / glpi-plugin-auf / plugin / rapport.migrationubuntu.php
index e2118a8..e80fe78 100644 (file)
@@ -4,17 +4,240 @@ $USEDBREPLICATE=1;
 $DBCONNECTION_REQUIRED=0;
 
 include ("../../inc/includes.php");
+include_once ("inc/functions.php");
+
+$svg_color_names = Array('blue', 'red', 'green', 'yellow');
 
 Session::checkRight("reports", "r");
 Session::checkRight("computer", "r");
 
+$report_title = "Progression des mises à niveau Ubuntu";
+
 #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($report_title, $_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 "\n<p class='big b' style='margin: 5px; text-align: center'><span id='report_date' style='float: right; margin: 2px 20px; font-size: 75%; font-style: italic'>(".date('Y-m-d H:i:s')." UTC)</span>$report_title</p>";
+
+$computer = new Computer();
+
+$itemtype = 'Computer';
+$table_item = getTableForItemType($itemtype);
+
+// 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='5'>Parc interne</th>";
+echo "<th colspan='5'>Parc public</th>";
+echo "</tr>";
+echo "<tr class='tab_bg_1'>";
+echo "<th>Autres ".svg_circle('blue', 3)."</th><th>Ubuntu<br />10.04 ".svg_circle('red', 3)."</th><th>Ubuntu<br />12.04 ".svg_circle('green', 3)."</th><th>Ubuntu<br />14.04 ".svg_circle('yellow', 3)."</th><th>Progression</th>";
+echo "<th>Autres ".svg_circle('blue', 3)."</th><th>Ubuntu<br />10.04 ".svg_circle('red', 3)."</th><th>Ubuntu<br />12.04 ".svg_circle('green', 3)."</th><th>Ubuntu<br />14.04 ".svg_circle('yellow', 3)."</th><th>Progression</th>";
+echo "</tr>\n";
+
+$grand_internes_1204 = 0; $grand_internes_1004 = 0; $grand_internes_autres = 0;
+$grand_publics_1204 = 0;  $grand_publics_1004 = 0; $grand_publics_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_internes_1404 = 0; $region_internes_1204 = 0; $region_internes_1004 = 0; $region_internes_autres = 0;
+  $region_publics_1404 = 0;  $region_publics_1204 = 0;  $region_publics_1004 = 0; $region_publics_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_internes_1404 = 0; $nb_internes_1204 = 0; $nb_internes_1004 = 0; $nb_internes_autres = 0;
+    $nb_publics_1404 = 0;  $nb_publics_1204 = 0;  $nb_publics_1004 = 0; $nb_publics_autres = 0;
+    $query = "SELECT s.completename AS sname, o.name AS oname,
+                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 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)) {
+      // on ne compte pas les sorties d'inventaire
+      if (preg_match("/^sortie/i", $data['sname'])) {
+        continue;
+      }
+      // postes internes
+      if (preg_match("/^poste.*interne/i", $data['categorie'])) {
+        if (preg_match("/^production/i", $data['utilisation']) &&
+           !preg_match("/panne/i", $data['sname']) ) {
+          if (preg_match("/^Ubuntu 14\.04/", $data['oname'])) {
+            $nb_internes_1404++;
+          } elseif (preg_match("/^Ubuntu 12\.04/", $data['oname'])) {
+            $nb_internes_1204++;
+          } elseif (preg_match("/^Ubuntu 10\.04/", $data['oname'])) {
+            $nb_internes_1004++;
+          } else {
+            $nb_internes_autres++;
+          }
+        }
+      }
+      // postes publics
+      elseif (preg_match("/^poste.*public/i", $data['categorie'])) {
+        if (preg_match("/^production/i", $data['utilisation']) &&
+           !preg_match("/panne/i", $data['sname']) ) {
+          if (preg_match("/^Ubuntu 14\.04/", $data['oname'])) {
+            $nb_publics_1404++;
+          } elseif (preg_match("/^Ubuntu 12\.04/", $data['oname'])) {
+            $nb_publics_1204++;
+          } elseif (preg_match("/^Ubuntu 10\.04/", $data['oname'])) {
+            $nb_publics_1004++;
+          } else {
+            $nb_publics_autres++;
+          }
+        }
+      }
+      // autres
+      else {
+        // on ne compte que les postes clients, pas les serveurs
+      }
+    } // systèmes dans l'implantation
+
+    $total_internes = $nb_internes_1404 + $nb_internes_1204 + $nb_internes_1004 + $nb_internes_autres;
+    $total_publics = $nb_publics_1404 + $nb_publics_1204 + $nb_publics_1004 + $nb_publics_autres;
+    if (($total_internes + $total_publics) > 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_internes_autres</td>";
+      $line .= "<td class='numeric'>$nb_internes_1004</td>";
+      $line .= "<td class='numeric'>$nb_internes_1204</td>";
+      $line .= "<td class='numeric'>$nb_internes_1404</td>";
+      $line .= "<td class='numeric tab_bg_2'>".progression_html(Array($nb_internes_autres, $nb_internes_1004, $nb_internes_1204, $nb_internes_1404), $nb_internes_1204 + $nb_internes_1404)."</td>";
+      $line .= "<td class='numeric'>$nb_publics_autres</td>";
+      $line .= "<td class='numeric'>$nb_publics_1004</td>";
+      $line .= "<td class='numeric'>$nb_publics_1204</td>";
+      $line .= "<td class='numeric'>$nb_publics_1404</td>";
+      $line .= "<td class='numeric tab_bg_2'>".progression_html(Array($nb_publics_autres, $nb_publics_1004, $nb_publics_1204, $nb_publics_1404), $nb_publics_1204 + $nb_publics_1404)."</td>";
+      $line .= "</tr>\n";
+      $table_lines[] = $line;
+    }
+    // total régional
+    $region_internes_autres += $nb_internes_autres;
+    $region_internes_1004 += $nb_internes_1004;
+    $region_internes_1204 += $nb_internes_1204;
+    $region_internes_1404 += $nb_internes_1404;
+    $region_publics_autres += $nb_publics_autres;
+    $region_publics_1004 += $nb_publics_1004;
+    $region_publics_1204 += $nb_publics_1204;
+    $region_publics_1404 += $nb_publics_1404;
+    #$table_lines[] = "<tr><td>".$implant_name."</td></tr>";
+  } // fin des implantations de la région
+
+  $total_internes = $region_internes_1404 + $region_internes_1204 + $region_internes_1004 + $region_internes_autres;
+  $total_publics = $region_publics_1404 + $region_publics_1204 + $region_publics_1004 + $region_publics_autres;
+  if (($total_internes + $total_publics) > 0) {
+    $line = "<tr class='tab_bg_1 b'><td>Sous-total</td>";
+    $line .= "<td class='numeric'>$region_internes_autres</td>";
+    $line .= "<td class='numeric'>$region_internes_1004</td>";
+    $line .= "<td class='numeric'>$region_internes_1204</td>";
+    $line .= "<td class='numeric'>$region_internes_1404</td>";
+    $line .= "<td class='numeric tab_bg_1'>".progression_html(Array($region_internes_autres, $region_internes_1004, $region_internes_1204, $region_internes_1004 + $region_internes_1404), $region_internes_1404)."</td>";
+    $line .= "<td class='numeric'>$region_publics_autres</td>";
+    $line .= "<td class='numeric'>$region_publics_1004</td>";
+    $line .= "<td class='numeric'>$region_publics_1204</td>";
+    $line .= "<td class='numeric'>$region_publics_1404</td>";
+    $line .= "<td class='numeric tab_bg_1'>".progression_html(Array($region_publics_autres, $region_publics_1004, $region_publics_1204, $region_publics_1404), $region_publics_1204 + $region_publics_1404)."</td>";
+    $line .= "</tr>\n";
+    $table_lines[] = $line;
+  }
+
+  # TODO: revoir ce pie-chart
+  $region_name = svg_pie_chart(Array(
+    $region_internes_autres + $region_publics_autres,
+    $region_internes_1004 + $region_publics_1004,
+    $region_internes_1204 + $region_publics_1204,
+    $region_internes_1404 + $region_publics_1404,
+  ), 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='12'></th></tr>\n";
+  }
+  echo implode("\n", $table_lines);
+
+  // total général
+  $grand_internes_autres += $region_internes_autres;
+  $grand_internes_1004 += $region_internes_1004;
+  $grand_internes_1204 += $region_internes_1204;
+  $grand_internes_1404 += $region_internes_1404;
+  $grand_publics_autres += $region_publics_autres;
+  $grand_publics_1004 += $region_publics_1004;
+  $grand_publics_1204 += $region_publics_1204;
+  $grand_publics_1404 += $region_publics_1404;
+} // fin des régions
+
+#echo "<tr class='tab_bg_1'><td colspan='8'>&nbsp;</td></tr>";
+
+$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,
+  $grand_internes_1404 + $grand_publics_1404,
+), 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>";
+$line .= "<td class='numeric b'>$grand_internes_1404</td>";
+$line .= "<td class='numeric tab_bg_1'>".progression_html(Array($grand_internes_autres, $grand_internes_1004, $grand_internes_1204, $grand_internes_1404), $grand_internes_1204 + $grand_internes_1404)."</td>";
+$line .= "<td class='numeric b'>$grand_publics_autres</td>";
+$line .= "<td class='numeric b'>$grand_publics_1004</td>";
+$line .= "<td class='numeric b'>$grand_publics_1204</td>";
+$line .= "<td class='numeric b'>$grand_publics_1404</td>";
+$line .= "<td class='numeric tab_bg_1'>".progression_html(Array($grand_publics_autres, $grand_publics_1004, $grand_publics_1204, $grand_publics_1404), $grand_publics_1204 + $grand_publics_1404)."</td>";
+$line .= "</tr>";
+echo "<tr><th colspan='12'></th></tr>\n";
+echo $line;
+
+echo "</table>";
 
-echo "<p style=\"font-size: 120%; text-align: center;\">Les données du rapport de migration Ubuntu seront disponibles à partir du lundi 21 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 "<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 14.04, 12.04 ou 10.04.</li>";
+echo "<li>La valeur de progression considère à la fois les versions 12.04 et 14.04.</li>";
+echo "<li><i>Note&nbsp;: la mise à niveau vers Ubuntu 14.04 n'est pas encore d'actualité (les paquets AUF ne sont pas prêts à 100%).</i></li>";
+echo "</ul></div>";
 
 Html::footer();
 ?>