/** * Update config of a new software * * This function create a new software in GLPI with some general datas. * * @param $computers_id integer : glpi computer id. * @param $ocsid integer : ocs computer id (ID). * @param $ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $dohistory array: * *@return Nothing (void). **/ static function updateDisk($computers_id, $ocsid, $ocsservers_id, $cfg_ocs, $dohistory) { global $PluginOcsinventoryngDBocs, $DB; $already_processed = array(); self::checkOCSconnection($ocsservers_id); $query = "SELECT*\n FROM `drives`\n WHERE `HARDWARE_ID` = '{$ocsid}'"; $result = $PluginOcsinventoryngDBocs->query($query); $d = new ComputerDisk(); if ($PluginOcsinventoryngDBocs->numrows($result) > 0) { while ($line = $PluginOcsinventoryngDBocs->fetch_array($result)) { $line = Toolbox::clean_cross_side_scripting_deep(Toolbox::addslashes_deep($line)); // Only not empty disk if ($line['TOTAL'] > 0) { $disk = array(); $disk['computers_id'] = $computers_id; $disk['is_dynamic'] = 1; // TYPE : vxfs / ufs : VOLUMN = mount / FILESYSTEM = device if (in_array($line['TYPE'], array("vxfs", "ufs"))) { $disk['name'] = $line['VOLUMN']; $disk['mountpoint'] = $line['VOLUMN']; $disk['device'] = $line['FILESYSTEM']; $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["TYPE"]); } else { if (in_array($line['FILESYSTEM'], array('ext2', 'ext3', 'ext4', 'ffs', 'fuseblk', 'fusefs', 'hfs', 'jfs', 'jfs2', 'Journaled HFS+', 'nfs', 'smbfs', 'reiserfs', 'vmfs', 'VxFS', 'ufs', 'xfs', 'zfs'))) { // Try to detect mount point : OCS database is dirty $disk['mountpoint'] = $line['VOLUMN']; $disk['device'] = $line['TYPE']; // Found /dev in VOLUMN : invert datas if (strstr($line['VOLUMN'], '/dev/')) { $disk['mountpoint'] = $line['TYPE']; $disk['device'] = $line['VOLUMN']; } if ($line['FILESYSTEM'] == "vmfs") { $disk['name'] = basename($line['TYPE']); } else { $disk['name'] = $disk['mountpoint']; } $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]); } else { if (in_array($line['FILESYSTEM'], array('FAT', 'FAT32', 'NTFS'))) { if (!empty($line['VOLUMN'])) { $disk['name'] = $line['VOLUMN']; } else { $disk['name'] = $line['LETTER']; } $disk['mountpoint'] = $line['LETTER']; $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]); } } } // Ok import disk if (isset($disk['name']) && !empty($disk["name"])) { $disk['totalsize'] = $line['TOTAL']; $disk['freesize'] = $line['FREE']; $query = "SELECT `id`\n FROM `glpi_computerdisks`\n WHERE `computers_id`='{$computers_id}'\n AND `name`='" . $disk['name'] . "'\n AND `is_dynamic`"; $results = $DB->query($query); if ($DB->numrows($results) == 1) { $id = $DB->result($results, 0, 'id'); } else { $id = false; } if (!$id) { $d->reset(); if (!$dohistory) { $disk['_no_history'] = true; } $disk['is_dynamic'] = 1; $id_disk = $d->add($disk); $already_processed[] = $id_disk; } else { // Only update if needed if ($d->getFromDB($id)) { // Update on type, total size change or variation of 5% if ($d->fields['totalsize'] != $disk['totalsize'] || $d->fields['filesystems_id'] != $disk['filesystems_id'] || abs($disk['freesize'] - $d->fields['freesize']) / $disk['totalsize'] > 0.05) { $toupdate['id'] = $id; $toupdate['totalsize'] = $disk['totalsize']; $toupdate['freesize'] = $disk['freesize']; $toupdate['filesystems_id'] = $disk['filesystems_id']; $d->update($toupdate); } $already_processed[] = $id; } } } } } } // Delete Unexisting Items not found in OCS //Look for all ununsed disks $query = "SELECT `id`\n FROM `glpi_computerdisks`\n WHERE `computers_id`='{$computers_id}'\n AND `is_dynamic`"; if (!empty($already_processed)) { $query .= "AND `id` NOT IN (" . implode(',', $already_processed) . ")"; } foreach ($DB->request($query) as $data) { //Delete all connexions $d->delete(array('id' => $data['id'], '_ocsservers_id' => $ocsservers_id), true); } }
/** * Update config of a new software * * This function create a new software in GLPI with some general datas. * * @param $computers_id integer : glpi computer id. * @param $ocsid integer : ocs computer id (ID). * @param $ocsservers_id integer : ocs server id * @param $cfg_ocs array : ocs config * @param $import_disk array : already imported softwares * @param $dohistory array : already imported softwares * *@return Nothing (void). **/ static function updateDisk($computers_id, $ocsid, $ocsservers_id, $cfg_ocs, $import_disk, $dohistory) { global $DBocs; self::checkOCSconnection($ocsservers_id); $query = "SELECT *\n FROM `drives`\n WHERE `HARDWARE_ID` = '{$ocsid}'"; $result = $DBocs->query($query); $d = new ComputerDisk(); if ($DBocs->numrows($result) > 0) { while ($line = $DBocs->fetch_array($result)) { $line = clean_cross_side_scripting_deep(addslashes_deep($line)); // Only not empty disk if ($line['TOTAL'] > 0) { $disk = array(); $disk['computers_id'] = $computers_id; // TYPE : vxfs / ufs : VOLUMN = mount / FILESYSTEM = device if (in_array($line['TYPE'], array("vxfs", "ufs"))) { $disk['name'] = $line['VOLUMN']; $disk['mountpoint'] = $line['VOLUMN']; $disk['device'] = $line['FILESYSTEM']; $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["TYPE"]); } else { if (in_array($line['FILESYSTEM'], array('ext2', 'ext3', 'ext4', 'ffs', 'fuseblk', 'fusefs', 'hfs', 'jfs', 'jfs2', 'Journaled HFS+', 'nfs', 'smbfs', 'reiserfs', 'vmfs', 'VxFS', 'ufs', 'xfs', 'zfs'))) { // Try to detect mount point : OCS database is dirty $disk['mountpoint'] = $line['VOLUMN']; $disk['device'] = $line['TYPE']; // Found /dev in VOLUMN : invert datas if (strstr($line['VOLUMN'], '/dev/')) { $disk['mountpoint'] = $line['TYPE']; $disk['device'] = $line['VOLUMN']; } $disk['name'] = $disk['mountpoint']; $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]); } else { if (in_array($line['FILESYSTEM'], array('FAT', 'FAT32', 'NTFS'))) { if (!empty($line['VOLUMN'])) { $disk['name'] = $line['VOLUMN']; } else { $disk['name'] = $line['LETTER']; } $disk['mountpoint'] = $line['LETTER']; $disk['filesystems_id'] = Dropdown::importExternal('Filesystem', $line["FILESYSTEM"]); } } } // Ok import disk if (isset($disk['name']) && !empty($disk["name"])) { $disk['totalsize'] = $line['TOTAL']; $disk['freesize'] = $line['FREE']; if (!in_array(stripslashes($disk["name"]), $import_disk)) { $d->reset(); if (!$dohistory) { $disk['_no_history'] = true; } $id_disk = $d->add($disk); if ($id_disk) { self::addToOcsArray($computers_id, array($id_disk => $disk["name"]), "import_disk"); } } else { // Only update sizes if needed $id = array_search(stripslashes($disk["name"]), $import_disk); if ($d->getFromDB($id)) { // Update on total size change or variation of 5% if ($d->fields['totalsize'] != $disk['totalsize'] || abs($disk['freesize'] - $d->fields['freesize']) / $disk['totalsize'] > 0.05) { $toupdate['id'] = $id; $toupdate['totalsize'] = $disk['totalsize']; $toupdate['freesize'] = $disk['freesize']; $d->update($toupdate); } unset($import_disk[$id]); } } } } } } // Delete Unexisting Items not found in OCS if (count($import_disk)) { foreach ($import_disk as $key => $val) { $d->delete(array("id" => $key)); self::deleteInOcsArray($computers_id, $key, "import_device"); } } }