Project

General

Profile

Revision 8b28e91d

ID8b28e91dbb2975f743d3648d0391ceb3102bb96e
Parent 79397eb3
Child 18eae138

Added by Romain Chollet about 7 years ago

[#1574] Prise en charge des équipements réseaux de glpi

Change-Id: Icfc0865276cb7efb4e53e1978c77497b6fcb7f05
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/2331
Reviewed-by: Francois POIROTTE <>
Tested-by: Francois POIROTTE <>

View differences:

Vigilo/VigiloNetworkEquipment.php
1
<?php
2

  
3
class VigiloNetworkEquipment extends VigiloXml
4
{
5
    protected $network;
6
    protected $addresses;
7
    protected $ventilation;
8
    protected $children;
9
    protected $agent;
10

  
11
    public function __construct($network)
12
    {
13
        $this->agent        = null;
14
        $this->ventilation  = "Servers";
15
        $this->network     = $network;
16
        $this->addresses    = array();
17
        $this->children     = array();
18

  
19
        if (class_exists('PluginFusioninventoryAgent')) {
20
            $agent = new PluginFusioninventoryAgent();
21
            if ($agent->getAgentWithComputerid($this->network->getID()) !== false) {
22
                $this->agent = $agent;
23
            }
24
        }
25

  
26
        $this->selectTemplates();
27
        $this->selectGroups();
28
        $this->monitorNetworkInterfaces();
29
    }
30

  
31
    public function getName()
32
    {
33
        return $this->network->getName();
34
    }
35

  
36
    protected function selectTemplates()
37
    {
38
	$template_name = $this->network->getField("template_name");
39

  
40
        if ($template_name && $template_name !== "N/A") {
41
            $this->children[] = new VigiloHostTemplate($this->network->getField("template_name"));
42
        }
43
    }
44

  
45
    protected function selectGroups()
46
    {
47
        $location = new Location();
48
        $location->getFromDB($this->network->fields["locations_id"]);
49
        if (!($location->getName()=='N/A')) {
50
            $locationCompleteName=explode(" > ", $location->getField("completename"));
51
            $locationRealName=implode("/", $locationCompleteName);
52
            $this->children[] = new VigiloGroup($locationRealName);
53
        }
54

  
55
        $entity = new Entity();
56
        $entity->getFromDB($this->network->fields["entities_id"]);
57
        if (!($entity->getName()=='N/A')) {
58
            $entityCompleteName=explode(" > ", $entity->getField("completename"));
59
            $entityRealName=implode("/", $entityCompleteName);
60
            $this->children[] = new VigiloGroup($entityRealName);
61
        }
62

  
63
        $manufacturer = new Manufacturer();
64
        $manufacturer->getFromDB($this->network->fields["manufacturers_id"]);
65
        if (!($manufacturer->getName()=='N/A')) {
66
            $this->children[] = new VigiloGroup($manufacturer->getName());
67
        }
68
    }
69

  
70
    protected function selectAddress()
71
    {
72
        static $address = null;
73

  
74
        if ($address === null && $this->agent) {
75
            $addresses = $this->agent->getIPs();
76
            if (count($addresses)) {
77
                $address = current($addresses);
78
            }
79
        }
80

  
81
        if ($address === null) {
82
            $address = $this->network->getName();
83
            foreach ($this->addresses as $addr) {
84
                if (!$addr->is_ipv4()) {
85
                    continue;
86
                }
87

  
88
                $textual = $addr->getTextual();
89
                if (is_string($textual)) {
90
                    $address = $textual;
91
                    break;
92
                }
93
            }
94
        }
95

  
96
        return $address;
97
    }
98

  
99
    protected function monitorNetworkInterfaces()
100
    {
101
        global $DB;
102
        $query = NetworkPort::getSQLRequestToSearchForItem(
103
            $this->network->getType(),
104
            $this->network->getID()
105
        );
106

  
107
        foreach ($DB->query($query) as $np) {
108
            $query2 = NetworkName::getSQLRequestToSearchForItem("NetworkPort", $np['id']);
109
            $port = new NetworkPort();
110
            $ethport = new NetworkPortEthernet();
111
            $port->getFromDB($np['id']);
112
            if ($port->getName() == 'lo') {
113
                continue;
114
            }
115

  
116
            $args   = array();
117
            $label  = isset($port->fields['comment']) ? $port->fields['comment'] : $port->getName();
118
            $ethport = $ethport->find('networkports_id=' . $np['id']);
119
            foreach ($ethport as $rowEthPort) {
120
                if ($rowEthPort['speed']) {
121
                    $args[] = new VigiloArg('max', $rowEthPort['speed']);
122
                    break;
123
                }
124
            }
125
            $args[] = new VigiloArg('label', $label);
126
            $args[] = new VigiloArg('ifname', $port->getName());
127
            $this->children[] = new VigiloTest('Interface', $args);
128

  
129
            // Retrieve all IP addresses associated with this interface.
130
            // This will be used later in selectAddress() to select
131
            // the most appropriate IP address to query this network.
132
            foreach ($DB->query($query2) as $nn) {
133
                $query3 = IPAddress::getSQLRequestToSearchForItem("NetworkName", $nn['id']);
134
                foreach ($DB->query($query3) as $ip) {
135
                    $addr = new IPAddress();
136
                    if ($addr->getFromDB($ip['id'])) {
137
                        $this->addresses[] = $addr;
138
                    }
139
                }
140
            }
141
        }
142
    }
143

  
144
    public function __toString()
145
    {
146
        $outXML=new DOMdocument();
147
        $outXML->preserveWhiteSpace=false;
148
        $outXML->formatOutput=true;
149
        $outXML->loadXML(
150
            self::sprintf(
151
                '<?xml version="1.0"?>' .
152
                '<host name="%s" address="%s" ventilation="%s">%s</host>',
153
                $this->network->getName(),
154
                $this->selectAddress(),
155
                "Servers",
156
                $this->children
157
            )
158
        );
159
        return $outXML->saveXML();
160
    }
161
}
ajax/getVTValue.php
5 5
   header("Content-Type: text/html; charset=UTF-8");
6 6
   Html::header_nocache();
7 7
}
8

  
8 9
if (!defined('GLPI_ROOT')) {
9 10
   die("Can not acces directly to this file");
10 11
}
......
16 17
    $ret['results'][] = $template;
17 18
}
18 19

  
19
$ret['count']   = count($ret['results']);
20
$ret['count'] = count($ret['results']);
20 21

  
21
/*$ret['results'][] = array("id" => 0, "text" => "-----");
22
$ret['results'][] = array("id" => 1, "text" => "linux");
23
$ret['results'][] = array("id" => 2, "text" => "windows");
24
*/
25 22
echo json_encode($ret);
26 23

  
27 24
?>
hook.php
32 32
        }
33 33
    }
34 34

  
35
    public function add($computer)
35
    public function addComputer($computer)
36 36
    {
37 37
        if ($computer->getField("is_template")==0) {
38 38
            global $DB;
......
57 57
            if (!file_exists($confdir)) {
58 58
                mkdir($confdir, 0770, true);
59 59
            }
60
            $acc = "";
61
            foreach ($dirs as $dir) {
62
                $acc .= DIRECTORY_SEPARATOR . $dir;
63
                chgrp($acc, "vigiconf");
60

  
61
            $res = file_put_contents($file, $host, LOCK_EX);
62
            if ($res !== false) {
63
                chgrp($file, "vigiconf");
64
                chmod($file, 0660);
65
            }
66
        }
67
    }
68

  
69
    public function addNetworkEquipment($networkequipment)
70
    {
71
        if ($networkequipment->getField("is_template")==0) {
72
            global $DB;
73

  
74
            $host       = new VigiloNetworkEquipment($networkequipment);
75
            $dirs       = array($this->confdir, "hosts", "managed");
76
            $confdir    = implode(DIRECTORY_SEPARATOR, $dirs);
77
            $file       = $confdir . DIRECTORY_SEPARATOR . $host->getName() . ".xml";
78

  
79
            if (!file_exists($confdir)) {
80
                mkdir($confdir, 0770, true);
64 81
            }
65 82

  
66 83
            $res = file_put_contents($file, $host, LOCK_EX);
......
82 99
        if (isset($computer->oldvalues["name"])) {
83 100
            $this->unmonitor($computer->oldvalues["name"]);
84 101
        }
85
        $this->add($computer);
102
    }
103

  
104
    public function updateComputer($computer)
105
    {
106
        $this->update($computer);
107
        $this->addComputer($computer);
108
    }
109

  
110
    public function updateNetworkEquipment($networkEquipment)
111
    {
112
        $this->update($networkEquipment);
113
        $this->addNetworkEquipment($networkEquipment);
86 114
    }
87 115

  
88 116
    public function unmonitor($host)
......
96 124
        global $DB;
97 125
        $computer=new Computer();
98 126
        $computer->getFromDB($computer_software_version->getField("computers_id"));
99
        $this->update($computer);
127
        $this->updateComputer($computer);
100 128
    }
101 129

  
102 130
    public function manageSoftwares($software)
......
113 141
                    if ($idComputer['computers_id'] != -1) {
114 142
                        $computer=new Computer();
115 143
                        $computer->getFromDB($idComputer['computers_id']);
116
                        $this->update($computer);
144
                        $this->updateComputer($computer);
117 145
                    }
118 146
                }
119 147
            }
......
126 154
        $id=$disk->getField('computers_id');
127 155
        $computer=new Computer();
128 156
        $computer->getFromDB($id);
129
        $this->update($computer);
157
        $this->updateComputer($computer);
130 158
    }
131 159

  
132 160
    public function manageAddresses($address)
......
135 163
        $id=$address->getField('mainitems_id');
136 164
        $comp=new Computer();
137 165
        $comp->getFromDB($id);
138
        $this->update($comp);
166
        $this->updateComputer($comp);
139 167
    }
140 168

  
141 169
    public function manageNetworks($network)
142 170
    {
143 171
        global $DB;
144 172
        $id=$network->getField('items_id');
145
        $comp=new Computer();
146
        $comp->getFromDB($id);
147
        $this->update($comp);
173
        $itemtype = $network->getField('itemtype');
174
        if ($itemtype === 'Computer') {
175
            $comp=new Computer();
176
            $comp->getFromDB($id);
177
            $this->updateComputer($comp);
178
        }
179
        else if ($itemtype === 'NetworkEquipment') {
180
            $ne=new NetworkEquipment();
181
            $ne->getFromDB($id);
182
            $this->updateNetworkEquipment($ne);
183
        }
148 184
    }
149 185

  
150 186
    public function plugin_vigilo_getAddSearchOptions($itemtype)
setup.php
10 10
    $p          =  "vigilo";
11 11
    $hookObj    =  new VigiloHooks();
12 12
    $hooks['csrf_compliant'][$p]        = true;
13
    $hooks['item_add'][$p]              = array("Computer" => array($hookObj, "add"),
13
    $hooks['item_add'][$p]              = array("Computer" => array($hookObj, "addComputer"),
14
                                                "NetworkEquipment" => array($hookObj, "addNetworkEquipment"),
14 15
                                                "ComputerDisk" => array($hookObj,"manageDisks"),
15 16
                                                "NetworkPort" => array($hookObj,"manageNetworks"),
16 17
                                                "IPAddress" => array($hookObj,"manageAddresses"),
......
24 25
                                                "Entity" => array($hookObj,"updateGroups"),
25 26
                                                "Computer_SoftwareVersion" => array($hookObj, "manageComputerSoftwareVersion"),
26 27
                                                "Manufacturer" => array($hookObj,"updateGroups"));
27
    $hooks['item_update'][$p]           = array("Computer" => array($hookObj, "update"),
28
    $hooks['item_update'][$p]           = array("Computer" => array($hookObj, "updateComputer"),
29
                                                "NetworkEquipment" => array($hookObj, "updateNetworkEquipment"),
28 30
                                                "ComputerDisk" => array($hookObj,"manageDisks"),
29 31
                                                "NetworkPort" => array($hookObj,"manageNetworks"),
30 32
                                                "IPAddress" => array($hookObj,"manageAddresses"),
......
39 41
                                                "Entity" => array($hookObj,"updateGroups"),
40 42
                                                "Manufacturer" => array($hookObj,"updateGroups"));
41 43
    $hooks['item_purge'][$p]            = array("Computer" => array($hookObj, "delete"),
44
                                                "NetworkEquipment" => array($hookObj, "delete"),
42 45
                                                "ComputerDisk" => array($hookObj,"manageDisks"),
43 46
                                                "NetworkPort" => array($hookObj,"manageNetworks"),
44 47
                                                "IPAddress" => array($hookObj,"manageAddresses"),
......
53 56
                                                "Entity" => array($hookObj,"updateGroups"),
54 57
                                                "Manufacturer" => array($hookObj,"updateGroups"));
55 58
    $hooks['item_delete'][$p]           = array("Computer" => array($hookObj, "delete"),
59
                                                "NetworkEquipment" => array($hookObj, "delete"),
56 60
                                                "ComputerDisk" => array($hookObj,"manageDisks"),
57 61
                                                "NetworkPort" => array($hookObj,"manageNetworks"),
58 62
                                                "IPAddress" => array($hookObj,"manageAddresses"),
......
66 70
                                                "Computer_SoftwareVersion" => array($hookObj, "manageComputerSoftwareVersion"),
67 71
                                                "Entity" => array($hookObj,"updateGroups"),
68 72
                                                "Manufacturer" => array($hookObj,"updateGroups"));
69
    $hooks['item_restore'][$p]          = array("Computer" => array($hookObj, "add"),
73
    $hooks['item_restore'][$p]          = array("Computer" => array($hookObj, "addComputer"),
74
                                                "NetworkEquipment" => array($hookObj, "addNetworkEquipment"),
70 75
                                                "ComputerDisk" => array($hookObj,"manageDisks"),
71 76
                                                "NetworkPort" => array($hookObj,"manageNetworks"),
72 77
                                                "IPAddress" => array($hookObj,"manageAddresses"),

Also available in: Unified diff