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