/** * Update devices with values get by SNMP * * @param $ID_Device : ID of device * @param $type : type of device (NETWORKING_TYPE, PRINTER_TYPE ...) * @param $oidsModel : oid list from model SNMP * @param $oidvalues : list of values from agent query * @param $Array_Object_TypeNameConstant : array with oid => constant in relation with fields to update * * @return $oidList : array with ports object name and oid * **/ static function updateGLPIDevice($ID_Device, $type, $oidsModel, $oidvalues, $Array_Object_TypeNameConstant) { global $DB, $LANG, $CFG_GLPI, $FUSIONINVENTORY_MAPPING; if ($_SESSION['fusioninventory_logs'] == "1") { $logs = new PluginFusioninventoryLogs(); } if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", ">>>>>>>>>> Update devices values <<<<<<<<<<", $type, $ID_Device, 1); } // Update 'last_fusioninventory_update' field $query = "UPDATE "; if ($type == NETWORKING_TYPE) { $query .= "`glpi_plugin_fusioninventory_networking`\n SET `last_fusioninventory_update`='" . date("Y-m-d H:i:s") . "',\n `last_PID_update`='" . $_SESSION['FK_process'] . "'\n WHERE `FK_networking`='" . $ID_Device . "';"; } if ($type == PRINTER_TYPE) { $query .= "`glpi_plugin_fusioninventory_printers`\n SET `last_fusioninventory_update`='" . date("Y-m-d H:i:s") . "'\n WHERE `FK_printers`='" . $ID_Device . "';"; } $DB->query($query); foreach ($Array_Object_TypeNameConstant as $oid => $link) { if (!preg_match("/\\.\$/", $oid)) { // SNMPGet ONLY if (isset($oidvalues[$oid][""])) { if (isset($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown']) and !empty($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown'])) { $oidvalues[$oid][""] = PluginFusioninventorySNMP::hex_to_string($oidvalues[$oid][""]); if ($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown'] == "glpi_dropdown_model_networking") { $oidvalues[$oid][""] = Dropdown::importExternal("NetworkEquipmentModel", $oidvalues[$oid][""], 0, array("manufacturer" => $oidvalues[$oid][""])); } else { $oidvalues[$oid][""] = Dropdown::importExternal(getItemTypeForTable($FUSIONINVENTORY_MAPPING[$type][$link]['dropdown']), $oidvalues[$oid][""], 0); } } switch ($type) { case NETWORKING_TYPE: $Field = "FK_networking"; if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_networking") { $Field = "ID"; } break; case PRINTER_TYPE: $Field = "FK_printers"; if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_printers") { $Field = "ID"; } break; } if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", $link . " = " . $oidvalues[$oid][""], $type, $ID_Device, 1); } // * Memory if ($link == "ram" or $link == "memory") { $oidvalues[$oid][""] = ceil($oidvalues[$oid][""] / 1024 / 1024); if ($type == PRINTER_TYPE) { $oidvalues[$oid][""] .= " MB"; } } if ($link == 'macaddr') { $MacAddress = PluginFusioninventoryIfmac::ifmacwalk_ifmacaddress($oidvalues[$oid][""]); $oidvalues[$oid][""] = $MacAddress; } // Convert hexa in string $oidvalues[$oid][""] = PluginFusioninventorySNMP::hex_to_string($oidvalues[$oid][""]); if (strstr($oidvalues[$oid][""], "noSuchName")) { // NO Update field in GLPI } else { if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_plugin_fusioninventory_printers_cartridges") { // * Printers cartridges $object_name_clean = str_replace("MAX", "", $link); $object_name_clean = str_replace("REMAIN", "", $object_name_clean); if (strstr($link, "MAX")) { $printer_cartridges_max_remain[$object_name_clean]["MAX"] = $oidvalues[$oid][""]; } if (strstr($link, "REMAIN")) { $printer_cartridges_max_remain[$object_name_clean]["REMAIN"] = $oidvalues[$oid][""]; } if (isset($printer_cartridges_max_remain[$object_name_clean]["MAX"]) and isset($printer_cartridges_max_remain[$object_name_clean]["REMAIN"])) { $pourcentage = ceil(100 * $printer_cartridges_max_remain[$object_name_clean]["REMAIN"] / $printer_cartridges_max_remain[$object_name_clean]["MAX"]); // Test existance of row in MySQl $query_sel = "SELECT *\n FROM " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n WHERE " . $Field . "='" . $ID_Device . "'\n AND `object_name`='" . $object_name_clean . "';"; $result_sel = $DB->query($query_sel); if ($DB->numrows($result_sel) == "0") { $queryInsert = "INSERT INTO " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n (" . $Field . ",object_name)\n VALUES('" . $ID_Device . "', '" . $object_name_clean . "');"; $DB->query($queryInsert); } $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $pourcentage . "'\n WHERE " . $Field . "='" . $ID_Device . "'\n AND `object_name`='" . $object_name_clean . "';"; $DB->query($queryUpdate); unset($printer_cartridges_max_remain[$object_name_clean]["MAX"]); unset($printer_cartridges_max_remain[$object_name_clean]["REMAIN"]); } else { // Test existance of row in MySQl $query_sel = "SELECT *\n FROM " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n WHERE " . $Field . "='" . $ID_Device . "'\n AND `object_name`='" . $link . "';"; $result_sel = $DB->query($query_sel); if ($DB->numrows($result_sel) == "0") { $queryInsert = "INSERT INTO " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n (" . $Field . ",object_name)\n VALUES('" . $ID_Device . "', '" . $link . "');"; $DB->query($queryInsert); } $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid][""] . "'\n WHERE " . $Field . "='" . $ID_Device . "'\n AND `object_name`='" . $link . "';"; $DB->query($queryUpdate); } } else { if (strstr($link, "pagecounter")) { // Detect if the script has wroten a line for the counter today // (if yes, don't touch, else add line) $today = strftime("%Y-%m-%d", time()); $query_line = "SELECT *\n FROM `glpi_plugin_fusioninventory_printers_history`\n WHERE `date` LIKE '" . $today . "%'\n AND `FK_printers`='" . $ID_Device . "';"; $result_line = $DB->query($query_line); if ($DB->numrows($result_line) == "0") { if (empty($oidvalues[$oid][""])) { $oidvalues[$oid][""] = 0; } $queryInsert = "INSERT INTO " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n (" . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "," . $Field . ", `date`)\n VALUES('" . $oidvalues[$oid][""] . "','" . $ID_Device . "', '" . $today . "');"; $DB->query($queryInsert); } else { $data_line = $DB->fetch_assoc($result_line); if ($data_line[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] == "0") { if (empty($oidvalues[$oid][""])) { $oidvalues[$oid][""] = 0; } $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid][""] . "'\n WHERE " . $Field . "='" . $ID_Device . "'\n AND `date` LIKE '" . $today . "%';"; $DB->query($queryUpdate); } } } else { if ($link == "cpuuser" or $link == "cpusystem") { if ($object_name == "cpuuser") { $cpu_values['cpuuser'] = $oidvalues[$oid][""]; } if ($object_name == "cpusystem") { $cpu_values['cpusystem'] = $oidvalues[$oid][""]; } if (isset($cpu_values['cpuuser']) and isset($cpu_values['cpusystem'])) { $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . ($cpu_values['cpuuser'] + $cpu_values['cpusystem']) . "'\n WHERE " . $Field . "='" . $ID_Device . "';"; $DB->query($queryUpdate); unset($cpu_values); } } else { if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] != "") { if ($FUSIONINVENTORY_MAPPING[$type][$link]['field'] == "cpu" and empty($oidvalues[$oid][""])) { $SNMPValue = 0; } if (strstr($FUSIONINVENTORY_MAPPING[$type][$link]['table'], "glpi_plugin_fusioninventory")) { $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid][""] . "'\n WHERE " . $Field . "='" . $ID_Device . "'"; $DB->query($queryUpdate); } else { $commonitem = new commonitem(); $commonitem->setType($type, true); $tableau[$Field] = $ID_Device; $tableau[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] = $oidvalues[$oid][""]; $commonitem->obj->update($tableau); } } } } } } } } } }