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