glpi-plugin-auf : rapport sur la migration Debian + ajustements cosmétiques
[auf-serveur.git] / glpi-plugin-auf / plugin / rapport.migrationdebian.php
1 <?php
2 //Options for GLPI 0.71 and newer : need slave db to access the report
3 $USEDBREPLICATE=1;
4 $DBCONNECTION_REQUIRED=0;
5
6 include ("../../inc/includes.php");
7
8 $svg_bar_width = 28;
9 $svg_bar_height = 10;
10
11 Session::checkRight("reports", "r");
12 Session::checkRight("computer", "r");
13
14 #Html::header(Report::getTypeName(2), $_SERVER['PHP_SELF'], "utils", "report");
15 Html::header("Progression de la migration vers Debian 7", $_SERVER['PHP_SELF'], "utils", "report");
16 Report::title();
17
18 echo "\n<p class='big b' style='margin: 5px; text-align: center'>Progression de la migration vers Debian 7 <em>(Wheezy)</em></p>";
19
20 $computer = new Computer();
21
22 $itemtype = 'Computer';
23 $table_item = getTableForItemType($itemtype);
24
25 $svg_colors = Array('red'=>'#ffa0a0', 'green'=>'#a0ffa0', 'yellow'=>'#ffdd80', 'blue'=>'#a0a0ff');
26
27 function svg_circle($color, $size=4) {
28 global $svg_colors;
29 if (array_key_exists($color, $svg_colors)) { $color = $svg_colors[$color]; }
30 $r = (int)$size; $cx = $r+1; $cy = $r+1;
31 $svg = '<svg width="'.(2+2*$r).'" height="'.(2+2*$r).'" style="margin: 1px; vertical-align: middle;">';
32 $svg .= "<circle cx='$cx' cy='$cy' r='$r' stroke='black' stroke-width='0' fill='$color' />";
33 $svg .= '</svg>';
34 return $svg;
35 }
36
37 function svg_pie_chart($values, $size=16) {
38 global $svg_colors;
39 $color_names = Array('blue', 'red', 'green', 'yellow'); $color_idx = 0;
40 $total = 0.0; foreach ($values as $v) { $total += $v; }
41 $r = (int)$size; $cx = $r+1; $cy = $r+1; $rad = 2*pi()/$total; $old_a = 0;
42 $svg = '<svg width="'.(2+2*$r).'" height="'.(2+2*$r).'" style="margin: 2px; vertical-align: middle;">';
43 foreach ($values as $a) {
44 $color = $svg_colors[$color_names[$color_idx++]];
45 if ($a == $total) {
46 $svg .= "<circle cx='$cx' cy='$cy' r='$r' stroke='black' stroke-width='0' fill='$color' />";
47 } elseif ($a > 0) {
48 $x1 = $cx + $r * cos(-$old_a * $rad);
49 $y1 = $cy + $r * sin(-$old_a * $rad);
50 $x2 = $cx + $r * cos(-($old_a + $a) * $rad);
51 $y2 = $cy + $r * sin(-($old_a + $a) * $rad);
52 $big = ($a > ($total/2)) ? '1' : '0';
53 $svg .= "<path d=\"M$cx,$cy L$x1,$y1 A$r,$r 0 $big,0 $x2,$y2 z\" style=\"stroke: 0 black; fill: $color;\" />";
54 }
55 $old_a += $a;
56 }
57 $svg .= '</svg>';
58 return $svg;
59 }
60
61 function svg_bar($values, $width=100, $height=5) {
62 global $svg_colors;
63 $color_names = Array('blue', 'red', 'green', 'yellow'); $color_idx = 0;
64 $total = 0.0; foreach ($values as $v) { $total += $v; }
65 $svg = "<svg width='$width' height='$height' style='float: left; margin: 2px; vertical-align: middle;'>";
66 $x = 0;
67 foreach ($values as $v) {
68 $color = $svg_colors[$color_names[$color_idx++]];
69 $w = round(($width*$v)/$total);
70 if ($w > 0) {
71 $svg .= "<rect x='$x' y='0' width='$w' height='$height' style='stroke: 0 black; fill: $color;' />";
72 $x += $w;
73 }
74 }
75 $svg .= '</svg>';
76 return $svg;
77 }
78
79 // 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>";
80
81 //echo "\n<span class='big b'>Ordinateurs par implantation</span><br><br>";
82 echo "<table class='tab_cadrehov'>";
83 echo "<tr class='tab_bg_1'><th rowspan='2' colspan='2'>Implantation</th>";
84 echo "<th colspan='4'>Serveurs physiques</th>";
85 echo "<th colspan='4'>Serveurs virtuels</th>";
86 echo "</tr>";
87 echo "<tr class='tab_bg_1'>";
88 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>";
89 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>";
90 echo "</tr>\n";
91
92 $grand_serveurs_wheezy = 0; $grand_serveurs_squeeze = 0; $grand_serveurs_autres = 0;
93 $grand_virtuels_wheezy = 0; $grand_virtuels_squeeze = 0; $grand_virtuels_autres = 0;
94 // récupération de la liste des régions
95 $query = "SELECT id FROM glpi_entities WHERE (id=0 OR entities_id=0)";
96 $query .= " ".getEntitiesRestrictRequest("AND", "glpi_entities")." ORDER BY name";
97 $region_result = $DB->query($query);
98 // parcours des régions
99 while ($region_data = $DB->fetch_assoc($region_result)) {
100 $region_id = $region_data['id'];
101 if ($region_id != 0) {
102 $region_name = getTreeLeafValueName("glpi_entities", $region_id);
103 } else {
104 $region_name = "AUF";
105 }
106 $table_lines = Array();
107 $region_serveurs_wheezy = 0; $region_serveurs_squeeze = 0; $region_serveurs_autres = 0;
108 $region_virtuels_wheezy = 0; $region_virtuels_squeeze = 0; $region_virtuels_autres = 0;
109
110 // récupération de la liste des implantations
111 $query = "SELECT id,level FROM glpi_entities WHERE ";
112 if ($region_id != 0) {
113 $query .= getRealQueryForTreeItem("glpi_entities", $region_id, "id");
114 } else {
115 $query .= "id=0";
116 }
117 $query .= " ".getEntitiesRestrictRequest("AND", "glpi_entities")." ORDER BY name";
118 $implant_result = $DB->query($query);
119 // parcours des implantations
120 while ($implant_data = $DB->fetch_assoc($implant_result)) {
121 $implant_id = $implant_data['id'];
122 if ($implant_id != 0) {
123 $implant_name = getTreeLeafValueName("glpi_entities", $implant_id);
124 } else {
125 $implant_name = "<i>(non classé)</i>";
126 }
127
128 // récupération de la liste des systèmes de l'implantation
129 $nb_serveurs_wheezy = 0; $nb_serveurs_squeeze = 0; $nb_serveurs_autres = 0;
130 $nb_virtuels_wheezy = 0; $nb_virtuels_squeeze = 0; $nb_virtuels_autres = 0;
131 $query = "SELECT s.completename AS sname, o.name AS oname,
132 ac.est_virtuel AS virtuel,
133 acc.name AS categorie, acu.name AS utilisation
134 FROM `$table_item` c
135 LEFT JOIN glpi_states s ON (c.states_id = s.id)
136 LEFT JOIN glpi_plugin_auf_computers ac ON (c.id = ac.id)
137 LEFT JOIN glpi_plugin_auf_categories acc ON (ac.auf_categories_id = acc.id)
138 LEFT JOIN glpi_plugin_auf_utilisations acu ON (ac.auf_utilisations_id = acu.id)
139 LEFT JOIN glpi_operatingsystems o ON (c.operatingsystems_id = o.id)
140 WHERE c.is_deleted = '0' AND c.is_template = '0'
141 AND o.name LIKE 'Debian %'
142 AND c.entities_id = '".$implant_id."'";
143 $result = $DB->query($query);
144 while ($data=$DB->fetch_assoc($result)) {
145 // on ne compte pas les sorties d'inventaire
146 if (preg_match("/^sortie/i", $data['sname'])) {
147 continue;
148 }
149 // serveurs virtuels
150 if ($data['virtuel']) {
151 if (preg_match("/^Debian( GNU\/Linux)? 7/", $data['oname'])) {
152 $nb_virtuels_wheezy++;
153 } elseif (preg_match("/^Debian( GNU\/Linux)? 6/", $data['oname'])) {
154 $nb_virtuels_squeeze++;
155 } else {
156 $nb_virtuels_autres++;
157 }
158 }
159 // serveurs physiques
160 elseif (preg_match("/^infra/i", $data['categorie'])) {
161 if (preg_match("/^production/i", $data['utilisation']) &&
162 !preg_match("/panne/i", $data['sname'])) {
163 if (preg_match("/^Debian( GNU\/Linux)? 7/", $data['oname'])) {
164 $nb_serveurs_wheezy++;
165 } elseif (preg_match("/^Debian( GNU\/Linux)? 6/", $data['oname'])) {
166 $nb_serveurs_squeeze++;
167 } else {
168 $nb_serveurs_autres++;
169 }
170 }
171 }
172 // autres
173 else {
174 // on ne compte pas les postes clients, que les serveurs
175 }
176 } // systèmes dans l'implantation
177
178 $total_serveurs = $nb_serveurs_wheezy + $nb_serveurs_squeeze + $nb_serveurs_autres;
179 $total_virtuels = $nb_virtuels_wheezy + $nb_virtuels_squeeze + $nb_virtuels_autres;
180 if (($total_serveurs + $total_virtuels) > 0) {
181 $spaces = "";
182 for ($i=1;$i<$implant_data['level'];$i++) { $spaces .= "&nbsp;"; }
183 $line = "<tr><td class='tab_bg_1'>$spaces$implant_name</td>";
184 $line .= "<td class='numeric'>$nb_serveurs_autres</td>";
185 $line .= "<td class='numeric'>$nb_serveurs_squeeze</td>";
186 $line .= "<td class='numeric'>$nb_serveurs_wheezy</td>";
187 $line .= "<td class='numeric tab_bg_2'>";
188 $line .= svg_bar(Array($nb_serveurs_autres, $nb_serveurs_squeeze, $nb_serveurs_wheezy), $svg_bar_width, $svg_bar_height);
189 $line .= round((100*$nb_serveurs_wheezy)/$total_serveurs)."%</td>";
190 $line .= "<td class='numeric'>$nb_virtuels_autres</td>";
191 $line .= "<td class='numeric'>$nb_virtuels_squeeze</td>";
192 $line .= "<td class='numeric'>$nb_virtuels_wheezy</td>";
193 $line .= "<td class='numeric tab_bg_2'>";
194 $line .= svg_bar(Array($nb_virtuels_autres, $nb_virtuels_squeeze, $nb_virtuels_wheezy), $svg_bar_width, $svg_bar_height);
195 $line .= round((100*$nb_virtuels_wheezy)/$total_virtuels)."%</td>";
196 $line .= "</tr>\n";
197 $table_lines[] = $line;
198 }
199 // total régional
200 $region_serveurs_autres += $nb_serveurs_autres;
201 $region_serveurs_squeeze += $nb_serveurs_squeeze;
202 $region_serveurs_wheezy += $nb_serveurs_wheezy;
203 $region_virtuels_autres += $nb_virtuels_autres;
204 $region_virtuels_squeeze += $nb_virtuels_squeeze;
205 $region_virtuels_wheezy += $nb_virtuels_wheezy;
206 #$table_lines[] = "<tr><td>".$implant_name."</td></tr>";
207 } // fin des implantations de la région
208
209 $total_serveurs = $region_serveurs_wheezy + $region_serveurs_squeeze + $region_serveurs_autres;
210 $total_virtuels = $region_virtuels_wheezy + $region_virtuels_squeeze + $region_virtuels_autres;
211 if (($total_serveurs + $total_virtuels) > 0) {
212 $line = "<tr class='tab_bg_1 b'><td>Sous-total</td>";
213 $line .= "<td class='numeric'>$region_serveurs_autres</td>";
214 $line .= "<td class='numeric'>$region_serveurs_squeeze</td>";
215 $line .= "<td class='numeric'>$region_serveurs_wheezy</td>";
216 $line .= "<td class='numeric tab_bg_1'>";
217 $line .= svg_bar(Array($region_serveurs_autres, $region_serveurs_squeeze, $region_serveurs_wheezy), $svg_bar_width, $svg_bar_height);
218 $line .= round((100*$region_serveurs_wheezy)/$total_serveurs)."%</td>";
219 $line .= "<td class='numeric'>$region_virtuels_autres</td>";
220 $line .= "<td class='numeric'>$region_virtuels_squeeze</td>";
221 $line .= "<td class='numeric'>$region_virtuels_wheezy</td>";
222 $line .= "<td class='numeric tab_bg_1'>";
223 $line .= svg_bar(Array($region_virtuels_autres, $region_virtuels_squeeze, $region_virtuels_wheezy), $svg_bar_width, $svg_bar_height);
224 $line .= round((100*$region_virtuels_wheezy)/$total_virtuels)."%</td>";
225 $line .= "</tr>\n";
226 $table_lines[] = $line;
227 }
228
229 # TODO: revoir ce pie-chart
230 $region_name = svg_pie_chart(Array(
231 $region_serveurs_autres + $region_virtuels_autres,
232 $region_serveurs_squeeze + $region_virtuels_squeeze,
233 $region_serveurs_wheezy + $region_virtuels_wheezy,
234 ), 16) . $region_name;
235 $table_lines[0] = str_replace("<tr>", "<tr><td class='tab_bg_1 b' rowspan='".count($table_lines)."'>$region_name</td>", $table_lines[0]);
236 if ($region_id != 0) {
237 echo "<tr><th colspan='10'></th></tr>\n";
238 }
239 echo implode("\n", $table_lines);
240
241 // total général
242 $grand_serveurs_autres += $region_serveurs_autres;
243 $grand_serveurs_squeeze += $region_serveurs_squeeze;
244 $grand_serveurs_wheezy += $region_serveurs_wheezy;
245 $grand_virtuels_autres += $region_virtuels_autres;
246 $grand_virtuels_squeeze += $region_virtuels_squeeze;
247 $grand_virtuels_wheezy += $region_virtuels_wheezy;
248 } // fin des régions
249
250 #echo "<tr class='tab_bg_1'><td colspan='8'>&nbsp;</td></tr>";
251
252 $total_serveurs = $grand_serveurs_wheezy + $grand_serveurs_squeeze + $grand_serveurs_autres;
253 $total_virtuels = $grand_virtuels_wheezy + $grand_virtuels_squeeze + $grand_virtuels_autres;
254 $line = "<tr class='tab_bg_1'><td class='b' colspan='2'>";
255 $line .= svg_pie_chart(Array(
256 $grand_serveurs_autres + $grand_virtuels_autres,
257 $grand_serveurs_squeeze + $grand_virtuels_squeeze,
258 $grand_serveurs_wheezy + $grand_virtuels_wheezy,
259 ), 16);
260 $line .= "TOTAL GÉNÉRAL</td>";
261 $line .= "<td class='numeric b'>$grand_serveurs_autres</td>";
262 $line .= "<td class='numeric b'>$grand_serveurs_squeeze</td>";
263 $line .= "<td class='numeric b'>$grand_serveurs_wheezy</td>";
264 $line .= "<td class='numeric tab_bg_1'>";
265 $line .= svg_bar(Array($grand_serveurs_autres, $grand_serveurs_squeeze, $grand_serveurs_wheezy), $svg_bar_width, $svg_bar_height);
266 $line .= round((100*$grand_serveurs_wheezy)/$total_serveurs)."%</td>";
267 $line .= "<td class='numeric b'>$grand_virtuels_autres</td>";
268 $line .= "<td class='numeric b'>$grand_virtuels_squeeze</td>";
269 $line .= "<td class='numeric b'>$grand_virtuels_wheezy</td>";
270 $line .= "<td class='numeric tab_bg_1'>";
271 $line .= svg_bar(Array($grand_virtuels_autres, $grand_virtuels_squeeze, $grand_virtuels_wheezy), $svg_bar_width, $svg_bar_height);
272 $line .= round((100*$grand_virtuels_wheezy)/$total_virtuels)."%</td>";
273 $line .= "</tr>";
274 echo "<tr><th colspan='10'></th></tr>\n";
275 echo $line;
276
277 echo "</table>";
278
279 echo "<div style='margin: 5px; text-align: center;'><p><strong>Remarques&nbsp;:</strong></p><ul>";
280 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>";
281 echo "<li>Ce rapport ne considère que les machines dans la catégorie infrastructure, pas les postes internes ou publics.</li>";
282 echo "<li>Ce rapport considère à la fois les machines physiques et les machines virtuelles.</li>";
283 echo "<li>Ce rapport ne considère que les machines sous Debian, aucun autre système.</li>";
284 echo "<li>La colonne «&nbsp;Autres&nbsp;» consiste en des systèmes Debian d'une version autre que 7 ou 6.</li>";
285 echo "</ul></div>";
286
287 Html::footer();
288 ?>