glpi / src / plugins / vigilo / vigilo_hooks.php @ e878cf6c
History | View | Annotate | Download (7.11 KB)
1 |
<?php
|
---|---|
2 |
|
3 |
class VigiloHooks |
4 |
{ |
5 |
// Callbacks pour différents événements
|
6 |
// concernant les équipements supportés.
|
7 |
public function preItemUpdate($item) |
8 |
{ |
9 |
global $DB; |
10 |
|
11 |
$id = $item->getID(); |
12 |
$query = <<<SQL |
13 |
SELECT `template`
|
14 |
FROM glpi_plugin_vigilo_template
|
15 |
WHERE `id` = $id;
|
16 |
SQL;
|
17 |
|
18 |
$item->fields['vigilo_template'] = 0; |
19 |
$result = $DB->query($query); |
20 |
if ($result) { |
21 |
$tpl = $DB->result($result, 0, "template"); |
22 |
$templates = PluginVigiloTemplate::getTemplates(); |
23 |
$index = array_search($tpl, $templates, true); |
24 |
if (false !== $index) { |
25 |
$item->fields['vigilo_template'] = $index; |
26 |
} |
27 |
} |
28 |
} |
29 |
|
30 |
public function itemAddOrUpdate($item) |
31 |
{ |
32 |
global $DB; |
33 |
|
34 |
$templates = PluginVigiloTemplate::getTemplates(); |
35 |
$tplId = (int) $item->input['vigilo_template']; |
36 |
|
37 |
if ($tplId > 0 && $tplId < count($templates)) { |
38 |
$id = $item->getID(); |
39 |
$template = $DB->escape($templates[$tplId]); |
40 |
$query = <<<SQL |
41 |
INSERT INTO `glpi_plugin_vigilo_template`(`id`, `template`)
|
42 |
VALUES ($id, '$template')
|
43 |
ON DUPLICATE KEY UPDATE `template` = '$template';
|
44 |
SQL;
|
45 |
$DB->query($query); |
46 |
$item->fields['vigilo_template'] = $templates[$tplId]; |
47 |
} else {
|
48 |
$item->fields['vigilo_template'] = null; |
49 |
} |
50 |
|
51 |
// Si la mise à jour modifie le technicien associé à la machine,
|
52 |
// il peut-être nécessaire de mettre à jour les groupes de Vigilo.
|
53 |
if (!empty($item->fields['users_id_tech'])) { |
54 |
$this->updateGroups(null); |
55 |
} |
56 |
|
57 |
$this->update($item); |
58 |
} |
59 |
|
60 |
public function itemPurge($item) |
61 |
{ |
62 |
global $DB; |
63 |
|
64 |
$id = $item->getID(); |
65 |
$query = "DELETE FROM `glpi_plugin_vigilo_template` WHERE `id` = $id;"; |
66 |
$DB->query($query); |
67 |
$this->unmonitor($item->getField('name')); |
68 |
|
69 |
// Si la mise à jour modifie le technicien associé à la machine,
|
70 |
// il peut-être nécessaire de mettre à jour les groupes de Vigilo.
|
71 |
if (!empty($item->fields['users_id_tech'])) { |
72 |
$this->updateGroups(null); |
73 |
} |
74 |
} |
75 |
|
76 |
// Méthodes outils / annexes
|
77 |
public function writeVigiloConfig($obj, $objtype) |
78 |
{ |
79 |
$dirs = array(VIGILO_CONFDIR, $objtype, "managed"); |
80 |
$confdir = implode(DIRECTORY_SEPARATOR, $dirs); |
81 |
$file = $confdir . DIRECTORY_SEPARATOR . $obj->getName() . ".xml"; |
82 |
|
83 |
if (!file_exists($confdir)) { |
84 |
mkdir($confdir, 0770, true); |
85 |
} |
86 |
|
87 |
$outXML = new DOMDocument(); |
88 |
$outXML->preserveWhiteSpace = false; |
89 |
$outXML->formatOutput = true; |
90 |
$outXML->loadXML((string) $obj); |
91 |
$res = file_put_contents($file, $outXML->saveXML(), LOCK_EX); |
92 |
if (false !== $res) { |
93 |
@chgrp($file, "vigiconf"); |
94 |
@chmod($file, 0660); |
95 |
} |
96 |
} |
97 |
|
98 |
// Méthodes d'ajout / mise à jour / suppression de la supervision
|
99 |
// pour un objet équipement supporté.
|
100 |
public function delete($computer) |
101 |
{ |
102 |
global $DB; |
103 |
|
104 |
$this->unmonitor($computer->fields["name"]); |
105 |
|
106 |
$query = "UPDATE `glpi_plugin_vigilo_config` SET `value` = 1 WHERE `key` = 'needs_deploy';"; |
107 |
$DB->query($query); |
108 |
} |
109 |
|
110 |
public function update($item) |
111 |
{ |
112 |
global $DB; |
113 |
|
114 |
if (isset($item->oldvalues["name"])) { |
115 |
$this->unmonitor($item->oldvalues["name"]); |
116 |
} |
117 |
|
118 |
$query = "UPDATE `glpi_plugin_vigilo_config` SET `value` = 1 WHERE `key` = 'needs_deploy';"; |
119 |
$DB->query($query); |
120 |
|
121 |
// "is_template" vaut "1" (sous forme de chaîne de caractères)
|
122 |
// lorsque l'objet passé fait référence à un modèle dans GLPI,
|
123 |
// et "0" lorsque ce n'est pas le cas.
|
124 |
// MAIS, il peut aussi valoir NOT_AVAILABLE ("N/A") lors de la création
|
125 |
// d'un nouvel objet (car l'attribut n'est pas encore défini).
|
126 |
// Le cast sur le champ permet de gérer ces 3 cas.
|
127 |
if ((int) $item->getField("is_template")) { |
128 |
return;
|
129 |
} |
130 |
|
131 |
$cls = "PluginVigiloMonitored" . $item->getType(); |
132 |
if (class_exists($cls, true)) { |
133 |
$obj = new $cls($item); |
134 |
|
135 |
// Ecriture du fichier de configuration principal (host).
|
136 |
$this->writeVigiloConfig($obj, "hosts"); |
137 |
|
138 |
// Création d'un service de haut niveau "services:<nom>"
|
139 |
// qui affichera le pire état des services de la machine "<nom>",
|
140 |
// et d'un service "machine:<nom>" qui affichera le pire état
|
141 |
// entre l'état de la machine "<nom>" et de ses services.
|
142 |
$hls = new PluginVigiloHls($obj); |
143 |
$this->writeVigiloConfig($hls, "hlservices"); |
144 |
} |
145 |
} |
146 |
|
147 |
public function unmonitor($host) |
148 |
{ |
149 |
$dirs = array(VIGILO_CONFDIR, "hosts", "managed", $host . ".xml"); |
150 |
$filename = implode(DIRECTORY_SEPARATOR, $dirs); |
151 |
if (file_exists($filename)) { |
152 |
unlink($filename); |
153 |
} |
154 |
} |
155 |
|
156 |
// Méthodes de mise à jour d'un équipement
|
157 |
// lorsque l'un de ses composants change.
|
158 |
public function refreshSoftwareVersion($version) |
159 |
{ |
160 |
$computer = new Computer(); |
161 |
$computer->getFromDB($version->getField("computers_id")); |
162 |
$this->update($computer); |
163 |
} |
164 |
|
165 |
public function refreshSoftware($software) |
166 |
{ |
167 |
$softwareVer = new SoftwareVersion(); |
168 |
$versions = $softwareVer->find('softwares_id=' . $software->getID()); |
169 |
foreach ($versions as $version) { |
170 |
if (!$version['id']) { |
171 |
continue;
|
172 |
} |
173 |
|
174 |
$installations = new Computer_SoftwareVersion(); |
175 |
$filter = 'softwareversions_id=' . $version['id']; |
176 |
$installations = $installations->find($filter); |
177 |
foreach ($installations as $installation) { |
178 |
if (-1 === $installation['computers_id']) { |
179 |
continue;
|
180 |
} |
181 |
|
182 |
$computer = new Computer(); |
183 |
$computer->getFromDB($installation['computers_id']); |
184 |
$this->update($computer); |
185 |
} |
186 |
} |
187 |
} |
188 |
|
189 |
public function refreshDisk($disk) |
190 |
{ |
191 |
$id = $disk->getField('computers_id'); |
192 |
$computer = new Computer(); |
193 |
$computer->getFromDB($id); |
194 |
$this->update($computer); |
195 |
} |
196 |
|
197 |
public function refreshAddress($address) |
198 |
{ |
199 |
$id = $address->getField('mainitems_id'); |
200 |
$itemtype = $address->getField('mainitemtype'); |
201 |
$item = new $itemtype(); |
202 |
$item->getFromDB($id); |
203 |
$this->update($item); |
204 |
} |
205 |
|
206 |
public function refreshDevice($device) |
207 |
{ |
208 |
$id = $device->getField('items_id'); |
209 |
$itemtype = $device->getField('itemtype'); |
210 |
$item = new $itemtype(); |
211 |
$item->getFromDB($id); |
212 |
$this->update($item); |
213 |
} |
214 |
|
215 |
// Méthode de mise à jour en cas d'évolution de l'emplacement,
|
216 |
// de l'entité ou du fabricant d'un équipement.
|
217 |
public function updateGroups($obj) |
218 |
{ |
219 |
$groups = new PluginVigiloGroups(); |
220 |
$this->writeVigiloConfig($groups, "groups"); |
221 |
} |
222 |
} |