/** * @test */ public function GetTaskWithoutJobs() { global $DB; // Verify prepare a deploy task $DB->connect(); $pfTask = new PluginFusioninventoryTask(); // create task $input = array('entities_id' => 0, 'name' => 'deploy', 'is_active' => 1); $pfTask->add($input); $running_tasks = $pfTask->getItemsFromDB(array('is_running' => TRUE, 'is_active' => TRUE)); $this->assertEquals(array(), $running_tasks, 'Not find task because not have job'); }
function prepareRun($taskjobs_id) { global $DB; $task = new PluginFusioninventoryTask(); $job = new PluginFusioninventoryTaskjob(); $joblog = new PluginFusioninventoryTaskjoblog(); $jobstate = new PluginFusioninventoryTaskjobstate(); $agent = new PluginFusioninventoryAgent(); $uniqid = uniqid(); $job->getFromDB($taskjobs_id); $task->getFromDB($job->fields['plugin_fusioninventory_tasks_id']); $communication = $task->fields['communication']; $actions = importArrayFromDB($job->fields['action']); $definitions = importArrayFromDB($job->fields['definition']); $taskvalid = 0; $computers = array(); foreach ($actions as $action) { $itemtype = key($action); $items_id = current($action); switch ($itemtype) { case 'Computer': $computers[] = $items_id; break; case 'Group': $computer_object = new Computer(); //find computers by user associated with this group $group_users = new Group_User(); $group = new Group(); $group->getFromDB($items_id); $members = array(); $computers_a_1 = array(); $computers_a_2 = array(); //array_keys($group_users->find("groups_id = '$items_id'")); $members = $group_users->getGroupUsers($items_id); foreach ($members as $member) { $computers = $computer_object->find("users_id = '{$member['id']}'"); foreach ($computers as $computer) { $computers_a_1[] = $computer['id']; } } //find computers directly associated with this group $computers = $computer_object->find("groups_id = '{$items_id}'"); foreach ($computers as $computer) { $computers_a_2[] = $computer['id']; } //merge two previous array and deduplicate entries $computers = array_unique(array_merge($computers_a_1, $computers_a_2)); break; case 'PluginFusioninventoryDeployGroup': $group = new PluginFusioninventoryDeployGroup(); $group->getFromDB($items_id); switch ($group->getField('type')) { case 'STATIC': $query = "SELECT items_id\n FROM glpi_plugin_fusioninventory_deploygroups_staticdatas\n WHERE groups_id = '{$items_id}'\n AND itemtype = 'Computer'"; $res = $DB->query($query); while ($row = $DB->fetch_assoc($res)) { $computers[] = $row['items_id']; } break; case 'DYNAMIC': $query = "SELECT fields_array\n FROM glpi_plugin_fusioninventory_deploygroups_dynamicdatas\n WHERE groups_id = '{$items_id}'\n LIMIT 1"; $res = $DB->query($query); $row = $DB->fetch_assoc($res); if (isset($_GET)) { $get_tmp = $_GET; } if (isset($_SESSION["glpisearchcount"]['Computer'])) { unset($_SESSION["glpisearchcount"]['Computer']); } if (isset($_SESSION["glpisearchcount2"]['Computer'])) { unset($_SESSION["glpisearchcount2"]['Computer']); } $_GET = importArrayFromDB($row['fields_array']); $_GET["glpisearchcount"] = count($_GET['field']); if (isset($_GET['field2'])) { $_GET["glpisearchcount2"] = count($_GET['field2']); } $pfSearch = new PluginFusioninventorySearch(); Search::manageGetValues('Computer'); $glpilist_limit = $_SESSION['glpilist_limit']; $_SESSION['glpilist_limit'] = 999999999; $result = $pfSearch->constructSQL('Computer', $_GET); $_SESSION['glpilist_limit'] = $glpilist_limit; while ($data = $DB->fetch_array($result)) { $computers[] = $data['id']; } if (count($get_tmp) > 0) { $_GET = $get_tmp; } break; } break; } } $c_input = array(); $c_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $c_input['state'] = 0; $c_input['plugin_fusioninventory_agents_id'] = 0; $c_input['execution_id'] = $task->fields['execution_id']; $pfCollect = new PluginFusioninventoryCollect(); foreach ($computers as $computer_id) { //get agent if for this computer $agents_id = $agent->getAgentWithComputerid($computer_id); if ($agents_id === FALSE) { $jobstates_id = $jobstate->add($c_input); $jobstate->changeStatusFinish($jobstates_id, 0, '', 1, "No agent found for [[Computer::" . $computer_id . "]]", 0, 0); } else { foreach ($definitions as $definition) { $pfCollect->getFromDB($definition['PluginFusioninventoryCollect']); switch ($pfCollect->fields['type']) { case 'registry': // get all registry $pfCollect_Registry = new PluginFusioninventoryCollect_Registry(); $a_registries = $pfCollect_Registry->find("`plugin_fusioninventory_collects_id`='" . $pfCollect->fields['id'] . "'"); foreach ($a_registries as $data_r) { $uniqid = uniqid(); $c_input['state'] = 0; $c_input['itemtype'] = 'PluginFusioninventoryCollect_Registry'; $c_input['items_id'] = $data_r['id']; $c_input['date'] = date("Y-m-d H:i:s"); $c_input['uniqid'] = $uniqid; $c_input['plugin_fusioninventory_agents_id'] = $agents_id; # Push the agent, in the stack of agent to awake if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1; } $jobstates_id = $jobstate->add($c_input); //Add log of taskjob $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id; $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED; $taskvalid++; $joblog->add($c_input); } break; case 'wmi': // get all wmi $pfCollect_Wmi = new PluginFusioninventoryCollect_Wmi(); $a_wmies = $pfCollect_Wmi->find("`plugin_fusioninventory_collects_id`='" . $pfCollect->fields['id'] . "'"); foreach ($a_wmies as $data_r) { $uniqid = uniqid(); $c_input['state'] = 0; $c_input['itemtype'] = 'PluginFusioninventoryCollect_Wmi'; $c_input['items_id'] = $data_r['id']; $c_input['date'] = date("Y-m-d H:i:s"); $c_input['uniqid'] = $uniqid; $c_input['plugin_fusioninventory_agents_id'] = $agents_id; # Push the agent, in the stack of agent to awake if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1; } $jobstates_id = $jobstate->add($c_input); //Add log of taskjob $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id; $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED; $taskvalid++; $joblog->add($c_input); } break; case 'file': // find files $pfCollect_File = new PluginFusioninventoryCollect_File(); $a_files = $pfCollect_File->find("`plugin_fusioninventory_collects_id`='" . $pfCollect->fields['id'] . "'"); foreach ($a_files as $data_r) { $uniqid = uniqid(); $c_input['state'] = 0; $c_input['itemtype'] = 'PluginFusioninventoryCollect_File'; $c_input['items_id'] = $data_r['id']; $c_input['date'] = date("Y-m-d H:i:s"); $c_input['uniqid'] = $uniqid; $c_input['plugin_fusioninventory_agents_id'] = $agents_id; # Push the agent, in the stack of agent to awake if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1; } $jobstates_id = $jobstate->add($c_input); //Add log of taskjob $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id; $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED; $taskvalid++; $joblog->add($c_input); } break; } } } } if ($taskvalid > 0) { $job->fields['status'] = 1; $job->update($job->fields); } else { $job->reinitializeTaskjobs($job->fields['plugin_fusioninventory_tasks_id']); } }
function prepareRun($taskjobs_id) { $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTaskjoblog = new PluginFusioninventoryTaskjoblog(); $pfTaskjobstate = new PluginFusioninventoryTaskjobstate(); $pfAgentmodule = new PluginFusioninventoryAgentmodule(); $pfIPRange = new PluginFusioninventoryIPRange(); $pfAgent = new PluginFusioninventoryAgent(); $uniqid = uniqid(); $pfTaskjob->getFromDB($taskjobs_id); $pfTask->getFromDB($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); $communication = $pfTask->fields['communication']; //list all iprange $a_iprange = importArrayFromDB($pfTaskjob->fields['definition']); $count_ip = 0; $a_iprangelist = array(); $a_subnet_nbip = array(); foreach ($a_iprange as $iprange) { $iprange_id = current($iprange); $a_iprangelist[] = $iprange_id; $pfIPRange->getFromDB($iprange_id); $s = $pfIPRange->getIp2long($pfIPRange->fields['ip_start']); $e = $pfIPRange->getIp2long($pfIPRange->fields['ip_end']); $a_subnet_nbip[$iprange_id] = $e - $s; $count_ip += $e - $s; } //list all agents $a_agent = importArrayFromDB($pfTaskjob->fields['action']); $dynagent = 0; $a_agentlist = array(); foreach ($a_agent as $agent) { $agent_id = current($agent); if ($agent_id == '.1') { $dynagent = 1; } else { if ($agent_id == '.2') { $dynagent = 2; } else { // Detect if agent exists if ($pfAgent->getFromDB($agent_id)) { if ($pfTask->fields['communication'] == 'pull') { $a_agentlist[$agent_id] = 1; } else { if ($pfTaskjob->isAgentAlive('1', $agent_id)) { $a_agentlist[$agent_id] = 1; } } } } } } if ($dynagent == '1') { $a_agents = $pfAgentmodule->getAgentsCanDo('NETWORKDISCOVERY'); foreach ($a_agents as $data) { if ($count_ip / 10 >= count($a_agentlist)) { $pfAgent->getFromDB($data['id']); $a_ip = $pfAgent->getIPs(); foreach ($a_ip as $ip) { if ($pfTask->fields['communication'] == 'push') { if ($pfTaskjob->isAgentAlive('1', $data['id'])) { $a_agentlist[$data['id']] = 1; } } else { if ($pfTask->fields['communication'] == 'pull') { $a_agentlist[$data['id']] = 1; } } } } } } if ($dynagent == '2') { // Dynamic with subnet $pfSnmpinventory = new PluginFusioninventoryNetworkinventory(); $taskvalid = 0; foreach ($a_subnet_nbip as $iprange_id => $nbips) { //$maxagentpossible = $nbips/10; $pfIPRange->getFromDB($iprange_id); $a_agentListComplete = array(); $a_agentList = $pfSnmpinventory->getAgentsSubnet($nbips, "push", "", $pfIPRange->fields['ip_start'], $pfIPRange->fields['ip_end']); if (isset($a_agentList)) { $a_agentListComplete = array_merge($a_agentListComplete, $a_agentList); } if (!isset($a_agentListComplete) or empty($a_agentListComplete)) { $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['state'] = 1; $a_input['itemtype'] = 'PluginFusioninventoryIPRange'; $a_input['items_id'] = $iprange_id; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, 'PluginFusioninventoryIPRange', 1, "Unable to find agent to run this job"); $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; //$input_taskjob['status'] = 1; $pfTaskjob->update($input_taskjob); } else { $s = $pfIPRange->getIp2long($pfIPRange->fields['ip_start']); $e = $pfIPRange->getIp2long($pfIPRange->fields['ip_end']); $nbIpAgent = ceil(($e - $s) / count($a_agentListComplete)); $iptimes = 0; foreach ($a_agentListComplete as $agent_id) { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1; //Add jobstate and put status (waiting on server = 0) $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 0; $a_input['plugin_fusioninventory_agents_id'] = $agent_id; $a_input['itemtype'] = 'PluginFusioninventoryIPRange'; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; $a_input['items_id'] = $iprange_id; if ($iptimes + $nbIpAgent > $e - $s) { $a_input['specificity'] = $iptimes . "-" . ($e - $s); } else { $a_input['specificity'] = $iptimes . "-" . ($iptimes + $nbIpAgent); } $taskvalid++; $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); unset($a_input['state']); $iptimes += $nbIpAgent + 1; if ($iptimes >= $e - $s + 1) { break; } $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; $input_taskjob['status'] = 1; $pfTaskjob->update($input_taskjob); } } } if ($taskvalid == "0") { $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); } // *** Add jobstate } else { if (count($a_agentlist) == 0) { $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 1; $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['itemtype'] = 'PluginFusioninventoryIPRange'; $a_input['items_id'] = 0; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, 'PluginFusioninventoryIPRange', 1, "Unable to find agent to run this job"); $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; //$input_taskjob['status'] = 1; $pfTaskjob->update($input_taskjob); } else { $iptimes = 0; $nbIpadded = 0; $break = 0; $numberIpByAgent = ceil($count_ip / count($a_agentlist)); $a_iprangelistTmp = $a_iprangelist; $ip_id = array_shift($a_iprangelistTmp); foreach ($a_agentlist as $agent_id => $ip) { //Add jobstate and put status (waiting on server = 0) $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 0; $a_input['plugin_fusioninventory_agents_id'] = $agent_id; $a_input['itemtype'] = 'PluginFusioninventoryIPRange'; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; // $nbIpAgent = $numberIpByAgent; $nbIpadded = 0; foreach ($a_iprangelist as $iprange_id) { if ($ip_id == $iprange_id) { $pfIPRange->getFromDB($iprange_id); $s = $pfIPRange->getIp2long($pfIPRange->fields['ip_start']); $e = $pfIPRange->getIp2long($pfIPRange->fields['ip_end']); if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1; } $a_input['items_id'] = $iprange_id; $nbIpAgent = $numberIpByAgent - $nbIpadded; if ($iptimes + $nbIpAgent > $e - $s) { $a_input['specificity'] = $iptimes . "-" . ($e - $s); $nbIpadded = $e - $s - $iptimes; $ip_id = array_shift($a_iprangelistTmp); $iptimes = 0; } else { $a_input['specificity'] = $iptimes . "-" . ($iptimes + $nbIpAgent); $iptimes += $nbIpAgent + 1; $nbIpadded = 0; $break = 1; } $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); unset($a_input['state']); } } $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; $input_taskjob['status'] = 1; $pfTaskjob->update($input_taskjob); } } } return $uniqid; }
function getRunningTasks() { $this->running_tasks = PluginFusioninventoryTask::getItemsFromDB(array('is_active' => TRUE, 'is_running' => TRUE, 'definitions' => array(__CLASS__ => $this->fields['id']), 'by_entities' => FALSE)); }
#!/usr/bin/php <?php $doc = <<<DOC prepare_jobs.php Usage: prepare_jobs.php [-h | -q | -d ] -h, --help show this help -q, --quiet run quietly -d, --debug display more execution messages DOC; chdir(dirname($_SERVER["SCRIPT_FILENAME"])); include "../../../inc/includes.php"; include "./docopt.php"; require "./logging.php"; $_SESSION["glpicronuserrunning"] = 1; /** * Process arguments passed to the script */ $docopt = new \Docopt\Handler(); $args = $docopt->handle($doc); $logger = new Logging(); $logger->setLevelFromArgs($args['--quiet'], $args['--debug']); $task = new PluginFusioninventoryTask(); $task->cronTaskscheduler();
/** * @test */ public function PrinterToInventoryWithoutIP() { self::restore_database(); $printer = new Printer(); $networkport = new NetworkPort(); $networkName = new NetworkName(); $pfPrinter = new PluginFusioninventoryPrinter(); $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $computer = new Computer(); $pfAgent = new PluginFusioninventoryAgent(); $communication = new PluginFusioninventoryCommunication(); // Create computers + agents $input = array('entities_id' => 0, 'name' => 'computer1'); $computers_id = $computer->add($input); $input = array('entities_id' => 0, 'name' => 'computer1', 'version' => '{"INVENTORY":"v2.3.11"}', 'device_id' => 'computer1', 'useragent' => 'FusionInventory-Agent_v2.3.11', 'computers_id' => $computers_id); $pfAgent->add($input); // Create printer $input = array('name' => 'printer 001', 'entities_id' => 0); $printers_id = $printer->add($input); // Add port $networkports_id = $networkport->add(array('itemtype' => 'Printer', 'instantiation_type' => 'NetworkPortEthernet', 'items_id' => $printers_id, 'entities_id' => 0)); $networknames_id = $networkName->add(array('entities_id' => 0, 'itemtype' => 'NetworkPort', 'items_id' => $networkports_id)); $input = array('printers_id' => 1, 'plugin_fusioninventory_configsecurities_id' => 2); $pfPrinter->add($input); // Add task // create task $input = array('entities_id' => 0, 'name' => 'network inventory', 'is_active' => 1); $tasks_id = $pfTask->add($input); // create taskjob $input = array('plugin_fusioninventory_tasks_id' => $tasks_id, 'entities_id' => 0, 'name' => 'inventory', 'method' => 'networkinventory', 'targets' => '[{"Printer":"' . $printers_id . '"}]', 'actors' => '[{"PluginFusioninventoryAgent":"1"}]'); $pfTaskjob->add($input); PluginFusioninventoryTask::cronTaskscheduler(); $data = $pfTask->getJoblogs(array(1)); // Task is prepared // Agent will get data $communication->getTaskAgent(1); $message = $communication->getMessage(); $json = json_encode($message); $array = json_decode($json, TRUE); $ref = array(); $this->assertEquals($ref, $array, 'XML of SNMP inventory task'); }
FusionInventory is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with FusionInventory. If not, see <http://www.gnu.org/licenses/>. ------------------------------------------------------------------------ @package FusionInventory @author David Durieux @co-author @copyright Copyright (c) 2010-2015 FusionInventory team @license AGPL License 3.0 or (at your option) any later version http://www.gnu.org/licenses/agpl-3.0-standalone.html @link http://www.fusioninventory.org/ @link http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/ @since 2010 ------------------------------------------------------------------------ */ include "../../../inc/includes.php"; Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "plugins", "pluginfusioninventorymenu", "task"); Session::checkRight('plugin_fusioninventory_task', READ); PluginFusioninventoryMenu::displayMenu("mini"); //PluginFusioninventoryTaskjob::isAllowurlfopen(); $pfTask = new PluginFusioninventoryTask(); $pfTask->showList(); Html::footer();
/** * Purge task and taskjob related with method * * @param $method value name of the method * * @return nothing * **/ static function cleanTasksbyMethod($method) { $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTask = new PluginFusioninventoryTask(); $a_taskjobs = $pfTaskjob->find("`method`='" . $method . "'"); $task_id = 0; foreach ($a_taskjobs as $a_taskjob) { $pfTaskjob->delete($a_taskjob, 1); if ($task_id != $a_taskjob['plugin_fusioninventory_tasks_id'] and $task_id != '0') { // Search if this task have other taskjobs, if not, we will delete it $findtaskjobs = $pfTaskjob->find("`plugin_fusioninventory_tasks_id`='" . $task_id . "'"); if (count($findtaskjobs) == '0') { $pfTask->delete(array('id' => $task_id), 1); } } $task_id = $a_taskjob['plugin_fusioninventory_tasks_id']; } if ($task_id != '0') { // Search if this task have other taskjobs, if not, we will delete it $findtaskjobs = $pfTaskjob->find("`plugin_fusioninventory_tasks_id`='" . $task_id . "'"); if (count($findtaskjobs) == '0') { $pfTask->delete(array('id' => $task_id), 1); } } }
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with FusionInventory. If not, see <http://www.gnu.org/licenses/>. ------------------------------------------------------------------------ @package FusionInventory @author David Durieux @co-author @copyright Copyright (c) 2010-2015 FusionInventory team @license AGPL License 3.0 or (at your option) any later version http://www.gnu.org/licenses/agpl-3.0-standalone.html @link http://www.fusioninventory.org/ @link http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/ @since 2010 ------------------------------------------------------------------------ */ include "../../../inc/includes.php"; $pfTask = new PluginFusioninventoryTask(); Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "plugins", "pluginfusioninventorymenu", "task"); Session::checkRight('plugin_fusioninventory_task', READ); PluginFusioninventoryMenu::displayMenu("mini"); //PluginFusioninventoryTaskjob::isAllowurlfopen(); //Submit the task form parameters $pfTask->submitForm($_POST); //If there is no form to submit, display the form $pfTask->display($_GET); Html::footer();
$taskjob->update($input_taskjob); } else { Session::checkRight('plugin_fusioninventory_iprange', UPDATE); if ($iprange->checkip($_POST)) { $_POST['ip_start'] = (int) $_POST['ip_start0'] . "." . (int) $_POST['ip_start1'] . "."; $_POST['ip_start'] .= (int) $_POST['ip_start2'] . "." . (int) $_POST['ip_start3']; $_POST['ip_end'] = (int) $_POST['ip_end0'] . "." . (int) $_POST['ip_end1'] . "."; $_POST['ip_end'] .= (int) $_POST['ip_end2'] . "." . (int) $_POST['ip_end3']; $iprange->update($_POST); } } Html::back(); } else { if (isset($_POST["delete"])) { if (isset($_POST['communication'])) { $task = new PluginFusioninventoryTask(); $task->delete(array('id' => $_POST['task_id']), 1); $_SERVER['HTTP_REFERER'] = str_replace("&allowcreate=1", "", $_SERVER['HTTP_REFERER']); Html::back(); } else { Session::checkRight('plugin_fusioninventory_"iprange', PURGE); $iprange->delete($_POST); Html::redirect(Toolbox::getItemTypeSearchURL('PluginFusioninventoryIPRange')); } } } } $id = ""; if (isset($_GET["id"])) { $id = $_GET["id"]; }
header("Content-Type: text/html; charset=UTF-8"); header_nocache(); if (!isset($_POST["ID"])) { exit; } if (!isset($_POST["sort"])) { $_POST["sort"] = ""; } if (!isset($_POST["order"])) { $_POST["order"] = ""; } if (!isset($_POST["withtemplate"])) { $_POST["withtemplate"] = ""; } $pfia = new PluginFusioninventoryAgents(); $pfit = new PluginFusioninventoryTask(); switch ($_POST['glpi_tab']) { case -1: showPorts($_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN); $pfit->RemoteStateAgent(GLPI_ROOT . '/plugins/fusioninventory/front/agents.state.php', $_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'WAKEONLAN' => 1)); showHistory(PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, $_POST["ID"]); break; case 1: showPorts($_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN); break; case 2: $pfit->RemoteStateAgent(GLPI_ROOT . '/plugins/fusioninventory/front/agents.state.php', $_POST["ID"], PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'WAKEONLAN' => 1)); break; case 3: showHistory(PLUGIN_FUSIONINVENTORY_MAC_UNKNOWN, $_POST["ID"]); break;
/** * @test */ public function deleteTask() { global $DB; $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTaskjobState = new PluginFusioninventoryTaskjobstate(); $pfTaskjoblog = new PluginFusioninventoryTaskjoblog(); //delete task $return = $pfTask->delete(array('id' => self::$tasks_id)); $this->assertEquals(true, $return); //check deletion of job $jobs_found = $pfTaskjob->find("id = " . self::$taskjobs_id); $this->assertEquals(array(), $jobs_found); //check deletion of state $states_found = $pfTaskjobState->find("id = " . self::$taskjobstates_id); $this->assertEquals(array(), $states_found); //check deletion of log $logs_found = $pfTaskjoblog->find("id = " . self::$taskjobstates_id); $this->assertEquals(array(), $logs_found); }
$state = $ptc->importToken(gzuncompress($GLOBALS["HTTP_RAW_POST_DATA"])); if ($state == '2') { // agent created $ocsinventory = '1'; } $top0 = gettimeofday(); if (!$ptc->import(gzuncompress($GLOBALS["HTTP_RAW_POST_DATA"]))) { //if ($ac->connectionOK($errors)) { if (1) { $res .= "1'" . $errors . "'"; $p_xml = gzuncompress($GLOBALS["HTTP_RAW_POST_DATA"]); $pxml = @simplexml_load_string($p_xml); if (isset($pxml->DEVICEID)) { $ptc->setXML("<?xml version='1.0' encoding='ISO-8859-1'?>\n<REPLY>\n</REPLY>"); $pta = new PluginFusioninventoryAgents(); $ptt = new PluginFusioninventoryTask(); $ptcm = new PluginFusioninventoryConfigModules(); $a_agent = $pta->InfosByKey($pxml->DEVICEID); $a_tasks = $ptt->find("`agent_id`='" . $a_agent['ID'] . "'", "date"); $single = 0; $_SESSION['glpi_plugin_fusioninventory_addagentprocess'] = '0'; foreach ($a_tasks as $task_id => $datas) { if ($a_tasks[$task_id]['action'] == 'INVENTORY' and $ptcm->isActivated('inventoryocs') and $a_agent['module_inventory'] == '1') { $ptc->addInventory(); $input['ID'] = $task_id; $ptt->delete($input); $ocsinventory = '0'; $single = 1; } if ($a_tasks[$task_id]['action'] == 'NETDISCOVERY' and $ptcm->isActivated('netdiscovery') and $a_agent['module_netdiscovery'] == '1') { $single = 1;
<?php $doc = <<<DOC get_job_logs.php Usage: get_job_logs.php [-h | -q | -d ] [-m methods] [-t task_ids] -h, --help Show this help -q, --quiet Run quietly -d, --debug Show informations. -m, --methods=methods Show only tasks defined with a list of methods (separated by commas). -t, --tasks=task_ids Filter logs by tasks (separated by commas) DOC; chdir(dirname($_SERVER["SCRIPT_FILENAME"])); include "../../../inc/includes.php"; include "./docopt.php"; require "./logging.php"; /** * Process arguments passed to the script */ $docopt = new \Docopt\Handler(); $args = $docopt->handle($doc); $logger = new Logging(); $logger->setLevelFromArgs($args['--quiet'], $args['--debug']); $logger->debug($args); /* * Get Running Tasks */ $logs = PluginFusioninventoryTask::getJobLogs(); $logger->info($logs);
/** * Get all devices and put in taskjobstate each task for * each device for each agent * * @param type $taskjobs_id id of taskjob esx * * @return uniqid value */ function prepareRun($taskjobs_id) { $task = new PluginFusioninventoryTask(); $job = new PluginFusioninventoryTaskjob(); $joblog = new PluginFusioninventoryTaskjoblog(); $jobstate = new PluginFusioninventoryTaskjobstate(); $uniqid = uniqid(); $job->getFromDB($taskjobs_id); $task->getFromDB($job->fields['plugin_fusioninventory_tasks_id']); $communication = $task->fields['communication']; //list all agents $agent_actions = importArrayFromDB($job->fields['action']); $task_definitions = importArrayFromDB($job->fields['definition']); $agent_actionslist = array(); foreach ($agent_actions as $targets) { foreach ($targets as $itemtype => $items_id) { $item = new $itemtype(); // Detect if agent exists if ($item->getFromDB($items_id)) { $agent_actionslist[$items_id] = 1; } } } // *** Add jobstate if (empty($agent_actionslist)) { $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 0; $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; foreach ($task_definitions as $task_definition) { foreach ($task_definition as $task_itemtype => $task_items_id) { $a_input['itemtype'] = $task_itemtype; $a_input['items_id'] = $task_items_id; $jobstates_id = $jobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id; $a_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED; $a_input['date'] = date("Y-m-d H:i:s"); $joblog->add($a_input); $jobstate->changeStatusFinish($jobstates_id, 0, 'PluginFusioninventoryInventoryComputerESX', 1, "Unable to find agent to run this job"); } } $job->update($job->fields); } else { foreach ($agent_actions as $targets) { foreach ($targets as $items_id) { if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$items_id] = 1; } foreach ($task_definitions as $task_definition) { foreach ($task_definition as $task_itemtype => $task_items_id) { $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 0; $a_input['plugin_fusioninventory_agents_id'] = $items_id; $a_input['itemtype'] = $task_itemtype; $a_input['items_id'] = $task_items_id; $a_input['uniqid'] = $uniqid; $a_input['date'] = date("Y-m-d H:i:s"); $a_input['execution_id'] = $task->fields['execution_id']; $jobstates_id = $jobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id; $a_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED; $joblog->add($a_input); unset($a_input['state']); } } } } $job->fields['status'] = 1; $job->update($job->fields); } return $uniqid; }
static function board() { global $DB; // Computers $query = "SELECT * FROM `glpi_plugin_fusioninventory_inventorycomputercomputers`" . " LEFT JOIN `glpi_computers` " . " ON (`glpi_plugin_fusioninventory_inventorycomputercomputers`.`id`=`glpi_computers`.`id` " . " AND `glpi_computers`.`is_deleted`='0')" . " WHERE `glpi_computers`.`id` IS NOT NULL"; $result = $DB->query($query); $fusionComputers = $DB->numrows($result); $allComputers = countElementsInTable('glpi_computers', "`is_deleted`='0' AND `is_template`='0'"); $dataComputer = array(); $dataComputer[] = array('key' => 'FusionInventory computers : ' . $fusionComputers, 'y' => $fusionComputers, 'color' => '#3dff7d'); $dataComputer[] = array('key' => 'Other computers : ' . ($allComputers - $fusionComputers), 'y' => $allComputers - $fusionComputers, 'color' => "#dedede"); // SNMP $networkequipment = countElementsInTable('glpi_plugin_fusioninventory_networkequipments'); $printer = countElementsInTable('glpi_plugin_fusioninventory_printers'); $dataSNMP = array(); $dataSNMP[] = array('key' => 'NetworkEquipments (SNMP) : ' . $networkequipment, 'y' => $networkequipment, 'color' => '#3d94ff'); $dataSNMP[] = array('key' => 'Printers (SNMP) : ' . $printer, 'y' => $printer, 'color' => '#3dff7d'); // switches ports $allSwitchesPortSNMP = countElementsInTable('glpi_plugin_fusioninventory_networkports'); $query = "SELECT `glpi_networkports`.`id` FROM `glpi_networkports`\n LEFT JOIN `glpi_plugin_fusioninventory_networkports`\n ON `glpi_plugin_fusioninventory_networkports`.`networkports_id` = `glpi_networkports`.`id`\n LEFT JOIN glpi_networkports_networkports\n ON (`networkports_id_1`=`glpi_networkports`.`id`\n OR `networkports_id_2`=`glpi_networkports`.`id`)\n WHERE `glpi_plugin_fusioninventory_networkports`.`id` IS NOT NULL\n AND `glpi_networkports_networkports`.`id` IS NOT NULL"; $result = $DB->query($query); $networkPortsLinked = $DB->numrows($result); $dataPortL = array(); $dataPortL[] = array('key' => 'SNMP switch network ports linked : ' . $networkPortsLinked, 'y' => $networkPortsLinked, 'color' => '#3dff7d'); $dataPortL[] = array('key' => 'SNMP switch network ports not linked : ' . ($allSwitchesPortSNMP - $networkPortsLinked), 'y' => $allSwitchesPortSNMP - $networkPortsLinked, 'color' => '#dedede'); // Ports connected at last SNMP inventory $networkPortsConnected = countElementsInTable('glpi_plugin_fusioninventory_networkports', "`ifstatus`='1' OR `ifstatus`='up'"); $dataPortC = array(); $dataPortC[] = array('key' => 'Ports connected : ' . $networkPortsConnected, 'y' => $networkPortsConnected, 'color' => '#3dff7d'); $dataPortC[] = array('key' => 'Ports not connected : ' . ($allSwitchesPortSNMP - $networkPortsConnected), 'y' => $allSwitchesPortSNMP - $networkPortsConnected, 'color' => '#dedede'); // Number of computer inventories in last hour, 6 hours, 24 hours $dataInventory = PluginFusioninventoryInventoryComputerStat::getLastHours(); // Deploy $query = "SELECT `plugin_fusioninventory_tasks_id` FROM glpi_plugin_fusioninventory_taskjobs" . " WHERE method LIKE '%deploy%'" . " GROUP BY `plugin_fusioninventory_tasks_id`"; $result = $DB->query($query); $a_tasks = array(); while ($data = $DB->fetch_array($result)) { $a_tasks[] = $data['plugin_fusioninventory_tasks_id']; } $pfTask = new PluginFusioninventoryTask(); $data = $pfTask->getJoblogs($a_tasks); $dataDeploy = array(); $dataDeploy[0] = array('key' => 'Prepared and waiting', 'y' => 0, 'color' => '#efefef'); $dataDeploy[1] = array('key' => 'Running', 'y' => 0, 'color' => '#aaaaff'); $dataDeploy[2] = array('key' => 'Successfull', 'y' => 0, 'color' => '#aaffaa'); $dataDeploy[3] = array('key' => 'In error', 'y' => 0, 'color' => '#ff0000'); foreach ($data['tasks'] as $lev1) { foreach ($lev1['jobs'] as $lev2) { foreach ($lev2['targets'] as $lev3) { $dataDeploy[2]['y'] += count($lev3['counters']['agents_success']); $dataDeploy[3]['y'] += count($lev3['counters']['agents_error']); $dataDeploy[0]['y'] += count($lev3['counters']['agents_prepared']); $dataDeploy[1]['y'] += count($lev3['counters']['agents_running']); } } } for ($k = 0; $k < 4; $k++) { $dataDeploy[$k]['key'] .= " : " . $dataDeploy[$k]['y']; } echo "<table align='center'>"; echo "<tr height='280'>"; echo "<td width='380'>"; self::showChart('computers', $dataComputer); echo "</td>"; echo "<td width='380'>"; $title = __('Number of computer inventories of last hours', 'fusioninventory'); $title = ''; self::showChartBar('nbinventory', $dataInventory, $title); echo "</td>"; echo "<td width='380'>"; self::showChart('deploy', $dataDeploy, __('Deployment', 'fusioninventory')); echo "</td>"; echo "</tr>"; echo "<tr height='280'>"; echo "<td>"; self::showChart('snmp', $dataSNMP); echo "</td>"; echo "<td>"; self::showChart('ports', $dataPortL); echo "</td>"; echo "<td>"; self::showChart('portsconnected', $dataPortC); echo "</td>"; echo "</tr>"; echo "</table>"; }
/** * Display each history line * * @param $taskjobstates_id integer id of the taskjobstate * * @return nothing * **/ function showHistoryLines($taskjobstates_id, $displayprocess = 1, $displaytaskjob = 0, $nb_td = '5') { global $CFG_GLPI; $pfTaskjobstate = new PluginFusioninventoryTaskjobstate(); $pfAgent = new PluginFusioninventoryAgent(); $pfTaskjobstate->getFromDB($taskjobstates_id); $displayforceend = 0; $a_history = $this->find('`plugin_fusioninventory_taskjobstates_id` = "' . $pfTaskjobstate->fields['id'] . '"', 'id DESC', '1'); echo "<tr class='tab_bg_1'>"; echo "<td width='40' id='plusmoins" . $pfTaskjobstate->fields["id"] . "'><img src='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/pics/expand.png' " . "onClick='document.getElementById(\"viewfollowup" . $pfTaskjobstate->fields["id"] . "\").show();close_array(" . $pfTaskjobstate->fields["id"] . ");' /></td>"; echo "<td>"; echo $pfTaskjobstate->fields['uniqid']; echo "</td>"; if ($displayprocess == '1') { echo "<td>"; echo $pfTaskjobstate->fields['id']; echo "</td>"; } if ($displaytaskjob == '1') { $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTask = new PluginFusioninventoryTask(); $pfTaskjob->getFromDB($pfTaskjobstate->fields['plugin_fusioninventory_taskjobs_id']); $pfTask->getFromDB($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); echo "<td>"; echo $pfTaskjob->getLink(1) . " (" . $pfTask->getLink() . ")"; echo "</td>"; } echo "<td>"; $pfAgent->getFromDB($pfTaskjobstate->fields['plugin_fusioninventory_agents_id']); echo $pfAgent->getLink(1); Ajax::UpdateItemOnEvent('plusmoins' . $pfTaskjobstate->fields["id"], 'viewfollowup' . $pfTaskjobstate->fields["id"], $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/ajax/showtaskjoblogdetail.php", array('agents_id' => $pfTaskjobstate->fields['plugin_fusioninventory_agents_id'], 'uniqid' => $pfTaskjobstate->fields['uniqid']), array("click")); echo "</td>"; $a_return = $this->displayHistoryDetail(array_pop($a_history), 0); $count = $a_return[0]; $displayforceend += $count; echo $a_return[1]; if ($displayforceend == "0") { echo "<td align='center'>"; echo "<form name='form' method='post' action='" . $CFG_GLPI['root_doc'] . "/plugins/fusioninventory/front/taskjob.form.php'>"; echo "<input type='hidden' name='taskjobstates_id' value='" . $pfTaskjobstate->fields['id'] . "' />"; echo "<input type='hidden' name='taskjobs_id' value='" . $pfTaskjobstate->fields['plugin_fusioninventory_taskjobs_id'] . "' />"; echo '<input name="forceend" value="' . __('Force the end', 'fusioninventory') . '" class="submit" type="submit">'; Html::closeForm(); echo "</td>"; } echo "</tr>"; echo "<tr>"; echo "<td colspan='" . $nb_td . "' style='display: none;' id='viewfollowup" . $pfTaskjobstate->fields["id"] . "' class='tab_bg_4'>"; echo "</td>"; echo "</tr>"; }
/** * Submit Form values */ public function submitForm($postvars) { if (isset($postvars['definition_add'])) { // * Add a definition $mytaskjob->getFromDB($postvars['id']); $a_listdef = importArrayFromDB($mytaskjob->fields['definition']); $add = 1; foreach ($a_listdef as $dataDB) { if (isset($dataDB[$postvars['DefinitionType']]) and $dataDB[$postvars['DefinitionType']] == $postvars['definitionselectiontoadd']) { $add = 0; break; } } if ($add == '1') { if (isset($postvars['DefinitionType']) and $postvars['DefinitionType'] != '') { $a_listdef[] = array($postvars['DefinitionType'] => $postvars['definitionselectiontoadd']); } } $input = array(); $input['id'] = $postvars['id']; $input['definition'] = exportArrayToDB($a_listdef); $mytaskjob->update($input); Html::back(); } else { if (isset($postvars['action_add'])) { // * Add an action $mytaskjob->getFromDB($postvars['id']); $a_listact = importArrayFromDB($mytaskjob->fields['action']); $add = 1; foreach ($a_listact as $dataDB) { if (isset($dataDB[$postvars['ActionType']]) and $dataDB[$postvars['ActionType']] == $postvars['actionselectiontoadd']) { $add = 0; break; } } if ($add == '1') { if (isset($postvars['ActionType']) and $postvars['ActionType'] != '') { $a_listact[] = array($postvars['ActionType'] => $postvars['actionselectiontoadd']); } } $input = array(); $input['id'] = $postvars['id']; $input['action'] = exportArrayToDB($a_listact); $mytaskjob->update($input); Html::back(); } else { if (isset($postvars['definition_delete'])) { // * Delete definition $mytaskjob->getFromDB($postvars['id']); $a_listdef = importArrayFromDB($mytaskjob->fields['definition']); foreach ($postvars['definition_to_delete'] as $itemdelete) { $datadel = explode('-', $itemdelete); foreach ($a_listdef as $num => $dataDB) { if (isset($dataDB[$datadel[0]]) and $dataDB[$datadel[0]] == $datadel[1]) { unset($a_listdef[$num]); } } } $input = array(); $input['id'] = $postvars['id']; $input['definition'] = exportArrayToDB($a_listdef); $mytaskjob->update($input); Html::back(); } else { if (isset($postvars['action_delete'])) { // * Delete action $mytaskjob->getFromDB($postvars['id']); $a_listact = importArrayFromDB($mytaskjob->fields['action']); foreach ($postvars['action_to_delete'] as $itemdelete) { $datadel = explode('-', $itemdelete); foreach ($a_listact as $num => $dataDB) { if (isset($dataDB[$datadel[0]]) and $dataDB[$datadel[0]] == $datadel[1]) { unset($a_listact[$num]); } } } $input = array(); $input['id'] = $postvars['id']; $input['action'] = exportArrayToDB($a_listact); $mytaskjob->update($input); Html::back(); /** * Wizard related method disabled for 0.85 * TODO: cf. TaskJob::showQuickForm() */ //} else if (isset($postvars['quickform'])) { // $pfTask = new PluginFusioninventoryTask(); // if (isset($postvars['update'])) { // $mytaskjob->getFromDB($postvars['id']); // $pfTask->getFromDB($mytaskjob->fields['plugin_fusioninventory_tasks_id']); // } // $inputtaskjob = array(); // $inputtask = array(); // if (isset($postvars['update'])) { // $inputtaskjob['id'] = $postvars['id']; // $inputtask['id'] = $mytaskjob->fields['plugin_fusioninventory_tasks_id']; // } // $inputtaskjob['name'] = $postvars['name']; // if (isset($postvars['add']) OR $pfTask->fields['name'] == '') { // $inputtask['name'] = $postvars['name']; // } // $inputtask['is_active'] = $postvars['is_active']; // $inputtaskjob['method'] = $postvars['method']; // $inputtask['communication'] = $postvars['communication']; // $inputtask['periodicity_count'] = $postvars['periodicity_count']; // $inputtask['periodicity_type'] = $postvars['periodicity_type']; // $inputtask['entities_id'] = $_SESSION['glpiactive_entity']; // $inputtaskjob['entities_id'] = $_SESSION['glpiactive_entity']; // if (isset($postvars['update'])) { // $mytaskjob->update($inputtaskjob); // $pfTask->update($inputtask); // Html::back(); // } else if (isset($postvars['add'])) { // if (!isset($postvars['entities_id'])) { // $postvars['entities_id'] = $_SESSION['glpidefault_entity']; // } // // Get entity of task // if (isset($postvars['plugin_fusioninventory_tasks_id'])) { // $pfTask = new PluginFusioninventoryTask(); // $pfTask->getFromDB($postvars['plugin_fusioninventory_tasks_id']); // $entities_list = getSonsOf('glpi_entities', $pfTask->fields['entities_id']); // if (!in_array($postvars['entities_id'], $entities_list)) { // $postvars['entities_id'] = $pfTask->fields['entities_id']; // } // } else { // $inputtask['date_scheduled'] = date("Y-m-d H:i:s"); // $task_id = $pfTask->add($inputtask); // $inputtaskjob['plugin_fusioninventory_tasks_id'] = $task_id; // } // if (isset($postvars['method_id'])) { // $postvars['method'] = $postvars['method_id']; // } // $inputtaskjob['plugins_id'] = $postvars['method-'.$postvars['method']]; // $taskjobs_id = $mytaskjob->add($inputtaskjob); // $redirect = $_SERVER['HTTP_REFERER']; // $redirect = str_replace('&id=0', '&id='.$taskjobs_id, $redirect); // Html::redirect($redirect); // } } else { if (isset($postvars['taskjobstoforcerun'])) { // * Force running many tasks (wizard) Session::checkRight('plugin_fusioninventory_task', UPDATE); $pfTaskjob = new PluginFusioninventoryTaskjob(); $_SESSION["plugin_fusioninventory_forcerun"] = array(); foreach ($postvars['taskjobstoforcerun'] as $taskjobs_id) { $pfTaskjob->getFromDB($taskjobs_id); $uniqid = $pfTaskjob->forceRunningTask($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); $_SESSION["plugin_fusioninventory_forcerun"][$taskjobs_id] = $uniqid; } unset($_SESSION["MESSAGE_AFTER_REDIRECT"]); } else { if (isset($postvars['add']) || isset($postvars['update'])) { // * Add and update taskjob Session::checkRight('plugin_fusioninventory_task', CREATE); if (isset($postvars['add'])) { if (!isset($postvars['entities_id'])) { $postvars['entities_id'] = $_SESSION['glpidefault_entity']; } // Get entity of task $pfTask = new PluginFusioninventoryTask(); $pfTask->getFromDB($postvars['plugin_fusioninventory_tasks_id']); $entities_list = getSonsOf('glpi_entities', $pfTask->fields['entities_id']); if (!in_array($postvars['entities_id'], $entities_list)) { $postvars['entities_id'] = $pfTask->fields['entities_id']; } //$postvars['execution_id'] = $pfTask->fields['execution_id']; $this->add($postvars); } else { if (isset($postvars['method_id'])) { $postvars['method'] = $postvars['method_id']; } $targets = array(); if (array_key_exists('targets', $postvars) and is_array($postvars['targets']) and count($postvars['targets']) > 0) { foreach ($postvars['targets'] as $target) { list($itemtype, $itemid) = explode('-', $target); $targets[] = array($itemtype => $itemid); } } $postvars['targets'] = exportArrayToDB($targets); $actors = array(); if (array_key_exists('actors', $postvars) and is_array($postvars['actors']) and count($postvars['actors']) > 0) { foreach ($postvars['actors'] as $actor) { list($itemtype, $itemid) = explode('-', $actor); $actors[] = array($itemtype => $itemid); } } $postvars['actors'] = exportArrayToDB($actors); //TODO: get rid of plugins_id and just use method //$postvars['plugins_id'] = $postvars['method-'.$postvars['method']]; $this->update($postvars); } } else { if (isset($postvars["delete"])) { // * delete taskjob Session::checkRight('plugin_fusioninventory_task', PURGE); $this->delete($postvars); } elseif (isset($postvars['itemaddaction'])) { $array = explode("||", $postvars['methodaction']); $module = $array[0]; $method = $array[1]; // Add task $mytask = new PluginFusioninventoryTask(); $input = array(); $input['name'] = $method; $task_id = $mytask->add($input); // Add job with this device $input = array(); $input['plugin_fusioninventory_tasks_id'] = $task_id; $input['name'] = $method; $input['datetime_start'] = $postvars['datetime_start']; $input['plugins_id'] = PluginFusioninventoryModule::getModuleId($module); $input['method'] = $method; $a_selectionDB = array(); $a_selectionDB[][$postvars['itemtype']] = $postvars['items_id']; $input['definition'] = exportArrayToDB($a_selectionDB); $taskname = "plugin_" . $module . "_task_selection_type_" . $method; if (is_callable($taskname)) { $input['selection_type'] = call_user_func($taskname, $postvars['itemtype']); } $mytaskjob->add($input); // Upsate task to activate it $mytask->getFromDB($task_id); $mytask->fields['is_active'] = "1"; $mytask->update($mytask->fields); // force running this job (?) } elseif (isset($postvars['forceend'])) { $taskjobstate = new PluginFusioninventoryTaskjobstate(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $mytaskjobstate->getFromDB($postvars['taskjobstates_id']); $jobstate = $mytaskjobstate->fields; $a_taskjobstates = $mytaskjobstate->find("`uniqid`='" . $mytaskjobstate->fields['uniqid'] . "'"); foreach ($a_taskjobstates as $data) { if ($data['state'] != PluginFusioninventoryTaskjobstate::FINISHED) { $mytaskjobstate->changeStatusFinish($data['id'], 0, '', 1, "Action cancelled by user", 0, 0); } } $pfTaskjob->getFromDB($jobstate['plugin_fusioninventory_taskjobs_id']); $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); } elseif (isset($postvars['delete_taskjobs'])) { foreach ($postvars['taskjobs'] as $taskjob_id) { $input = array('id' => $taskjob_id); $this->delete($input, true); } } } } } } } } }
FusionInventory is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with FusionInventory. If not, see <http://www.gnu.org/licenses/>. ------------------------------------------------------------------------ @package FusionInventory @author David Durieux @co-author @copyright Copyright (c) 2010-2015 FusionInventory team @license AGPL License 3.0 or (at your option) any later version http://www.gnu.org/licenses/agpl-3.0-standalone.html @link http://www.fusioninventory.org/ @link http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/ @since 2010 ------------------------------------------------------------------------ */ include "../../../inc/includes.php"; Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "plugins", "pluginfusioninventorymenu", "taskjoblog"); Session::checkRight('plugin_fusioninventory_task', READ); PluginFusioninventoryMenu::displayMenu("mini"); $pfTask = new PluginFusioninventoryTask(); $pfTask->menuTasksLogs(); Search::show('PluginFusioninventoryTaskjoblog'); Html::footer();
header("Content-Type: text/html; charset=UTF-8"); header_nocache(); if (!isset($_POST["ID"])) { exit; } if (!isset($_POST["sort"])) { $_POST["sort"] = ""; } if (!isset($_POST["order"])) { $_POST["order"] = ""; } if (!isset($_POST["withtemplate"])) { $_POST["withtemplate"] = ""; } $pfia = new PluginFusioninventoryAgents(); $pfit = new PluginFusioninventoryTask(); $pfia->showForm($_POST['target'], $_POST["ID"]); switch ($_POST['glpi_tab']) { case -1: $pfia->showFormAdvancedOptions($_POST['target'], $_POST["ID"]); $pfit->RemoteStateAgent($_POST['target'], $_POST["ID"], PLUGIN_FUSIONINVENTORY_SNMP_AGENTS, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'SNMPQUERY' => 1, 'WAKEONLAN' => 1)); break; case 1: $pfia->showFormAdvancedOptions($_POST['target'], $_POST["ID"]); break; case 2: $pfit->RemoteStateAgent($_POST['target'], $_POST["ID"], PLUGIN_FUSIONINVENTORY_SNMP_AGENTS, array('INVENTORY' => 1, 'NETDISCOVERY' => 1, 'SNMPQUERY' => 1, 'WAKEONLAN' => 1)); break; default: $pfia->showFormAdvancedOptions($_POST['target'], $_POST["ID"]); break;
@since 2010 ------------------------------------------------------------------------ */ ob_start(); include "../../../../inc/includes.php"; ob_end_clean(); $response = FALSE; //Agent communication using REST protocol if (isset($_GET['action'])) { switch ($_GET['action']) { case 'getJobs': if (isset($_GET['machineid'])) { $pfAgent = new PluginFusioninventoryAgent(); $pfAgentModule = new PluginFusioninventoryAgentModule(); $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTaskjobstate = new PluginFusioninventoryTaskjobstate(); $agent = $pfAgent->InfosByKey(Toolbox::addslashes_deep($_GET['machineid'])); if (isset($agent['id'])) { $taskjobstates = $pfTask->getTaskjobstatesForAgent($agent['id'], array('deployinstall', 'deployuninstall')); if (!$pfAgentModule->isAgentCanDo("DEPLOY", $agent['id'])) { foreach ($taskjobstates as $taskjobstate) { $taskjobstate->cancel(__("Deploy module has been disabled for this agent", 'fusioninventory')); } $response = "{}"; } else { //sort taskjobs by key id /** * TODO: sort taskjobs by 'index' field in the taskjob query since it can be * manipulated by drag and drop (cf. Task::getTaskjobsForAgent() ).
static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { if ($tabnum == 'task') { $pfTask = new PluginFusioninventoryTask(); $pfTask->showJobLogs(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $a_taskjobs = $pfTaskjob->find('`targets` LIKE \'%"PluginFusioninventoryIPRange":"' . $item->getID() . '"%\''); foreach ($a_taskjobs as $data) { //$pfTask->getFromDB($data['plugin_fusioninventory_tasks_id']); } } }
include "../../../inc/includes.php"; header("Content-Type: text/html; charset=UTF-8"); Html::header_nocache(); if (!isset($_POST["id"])) { exit; } if (!isset($_POST["sort"])) { $_POST["sort"] = ""; } if (!isset($_POST["order"])) { $_POST["order"] = ""; } if (!isset($_POST["withtemplate"])) { $_POST["withtemplate"] = ""; } $pfTask = new PluginFusioninventoryTask(); $pfTaskjoblog = new PluginFusioninventoryTaskjoblog(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $a_taskjob = $pfTaskjob->find("`plugin_fusioninventory_tasks_id`='" . $_POST["id"] . "'\n AND `rescheduled_taskjob_id`='0' ", "id"); $i = 1; switch ($_POST['glpi_tab']) { case -1: foreach ($a_taskjob as $taskjob_id => $datas) { $pfTaskjob->showForm($taskjob_id); $pfTaskjoblog->showHistory($taskjob_id); $taskjob_id_next = $taskjob_id; for ($j = 2; $j > 1; $j++) { $a_taskjobreties = $pfTaskjob->find("`rescheduled_taskjob_id`='" . $taskjob_id_next . "' ", "", 1); if (!empty($a_taskjobreties)) { foreach ($a_taskjobreties as $taskjob_id_next => $datas2) { $pfTaskjob->showForm($taskjob_id_next);
------------------------------------------------------------------------ */ //This call is to check that the ESX inventory service is up and running if (isset($_GET['status'])) { return 'ok'; } ob_start(); include "../../../../inc/includes.php"; ob_end_clean(); $response = FALSE; //Agent communication using REST protocol if (isset($_GET['action']) && isset($_GET['machineid'])) { switch ($_GET['action']) { case 'getJobs': $pfAgent = new PluginFusioninventoryAgent(); $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTaskjobstate = new PluginFusioninventoryTaskjobstate(); $agent = $pfAgent->InfosByKey(Toolbox::addslashes_deep($_GET['machineid'])); if (isset($agent['id'])) { $taskjobstates = $pfTask->getTaskjobstatesForAgent($agent['id'], array('InventoryComputerESX')); ////start of json response $order = new stdClass(); $order->jobs = array(); $module = new PluginFusioninventoryInventoryComputerESX(); foreach ($taskjobstates as $taskjobstate) { $order->jobs[] = $module->run($taskjobstate); $taskjobstate->changeStatus($taskjobstate->fields['id'], $taskjobstate::SERVER_HAS_SENT_DATA); } // return an empty dictionnary if there are no jobs. if (count($order->jobs) == 0) {
You should have received a copy of the GNU Affero General Public License along with FusionInventory. If not, see <http://www.gnu.org/licenses/>. ------------------------------------------------------------------------ @package FusionInventory @author David Durieux @co-author Kevin Roy @copyright Copyright (c) 2010-2015 FusionInventory team @license AGPL License 3.0 or (at your option) any later version http://www.gnu.org/licenses/agpl-3.0-standalone.html @link http://www.fusioninventory.org/ @link http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/ @since 2010 ------------------------------------------------------------------------ */ if (strpos($_SERVER['PHP_SELF'], "taskjob_logs.php")) { include "../../../inc/includes.php"; Session::checkCentralAccess(); } //unlock session since access checks have been done session_write_close(); header("Content-Type: text/html; charset=UTF-8"); Html::header_nocache(); $pfTask = new PluginFusioninventoryTask(); $pfTask->ajaxGetJobLogs($_GET); ?>
function prepareRun($taskjob_id, $definitions_filter = NULL) { global $DB; $task = new PluginFusioninventoryTask(); $job = new PluginFusioninventoryTaskjob(); $joblog = new PluginFusioninventoryTaskjoblog(); $jobstate = new PluginFusioninventoryTaskjobstate(); $agent = new PluginFusioninventoryAgent(); $agentmodule = new PluginFusioninventoryAgentmodule(); $job->getFromDB($taskjob_id); $task->getFromDB($job->fields['plugin_fusioninventory_tasks_id']); $communication = $task->fields['communication']; $actions = importArrayFromDB($job->fields['action']); $definitions = importArrayFromDB($job->fields['definition']); $taskvalid = 0; $computers = array(); foreach ($actions as $action) { $itemtype = key($action); $items_id = current($action); switch ($itemtype) { case 'Computer': if ($this->definitionFiltered("Computer", $definitions_filter)) { break; } $computers[] = $items_id; break; case 'Group': if ($this->definitionFiltered("Group", $definitions_filter)) { break; } $computer_object = new Computer(); //find computers by user associated with this group $group_users = new Group_User(); $group = new Group(); $group->getFromDB($items_id); $members = array(); $computers_a_1 = array(); $computers_a_2 = array(); //array_keys($group_users->find("groups_id = '$items_id'")); $members = $group_users->getGroupUsers($items_id); foreach ($members as $member) { $computers = $computer_object->find("users_id = '{$member['id']}' " . " AND `is_deleted`='0' AND `is_template`='0'"); foreach ($computers as $computer) { $computers_a_1[] = $computer['id']; } } //find computers directly associated with this group $computers = $computer_object->find("groups_id = '{$items_id}' " . " AND `is_deleted`='0' AND `is_template`='0'"); foreach ($computers as $computer) { $computers_a_2[] = $computer['id']; } //merge two previous array and deduplicate entries $computers = array_unique(array_merge($computers_a_1, $computers_a_2)); break; case 'PluginFusioninventoryDeployGroup': $group = new PluginFusioninventoryDeployGroup(); $group->getFromDB($items_id); switch ($group->getField('type')) { case 'STATIC': if ($this->definitionFiltered("PluginFusioninventoryDeployGroupStatic", $definitions_filter)) { break; } $query = "SELECT items_id\n FROM glpi_plugin_fusioninventory_deploygroups_staticdatas\n WHERE groups_id = '{$items_id}'\n AND itemtype = 'Computer'"; $res = $DB->query($query); while ($row = $DB->fetch_assoc($res)) { $computers[] = $row['items_id']; } break; case 'DYNAMIC': if ($this->definitionFiltered("PluginFusioninventoryDeployGroupDynamic", $definitions_filter)) { break; } //$definitions_filter is NULL = update by crontask ! if ($definitions_filter != NULL) { $where = " AND `can_update_group`='1'"; } else { $where = ""; } $query = "SELECT fields_array\n FROM glpi_plugin_fusioninventory_deploygroups_dynamicdatas\n WHERE groups_id = '{$items_id}' {$where}\n LIMIT 1"; $res = $DB->query($query); $row = $DB->fetch_assoc($res); //No dynamic groups have been found : break if ($DB->numrows($res) == 0) { break; } if (isset($_GET)) { $get_tmp = $_GET; } if (isset($_SESSION["glpisearchcount"]['Computer'])) { unset($_SESSION["glpisearchcount"]['Computer']); } if (isset($_SESSION["glpisearchcount2"]['Computer'])) { unset($_SESSION["glpisearchcount2"]['Computer']); } $_GET = importArrayFromDB($row['fields_array']); $_GET["glpisearchcount"] = count($_GET['field']); if (isset($_GET['field2'])) { $_GET["glpisearchcount2"] = count($_GET['field2']); } $pfSearch = new PluginFusioninventorySearch(); Search::manageParams('Computer'); $glpilist_limit = $_SESSION['glpilist_limit']; $_SESSION['glpilist_limit'] = 999999999; $result = $pfSearch->constructSQL('Computer', $_GET); $_SESSION['glpilist_limit'] = $glpilist_limit; while ($data = $DB->fetch_array($result)) { $computers[] = $data['id']; } if (count($get_tmp) > 0) { $_GET = $get_tmp; } break; } break; } } //Remove duplicatas from array //We are using isset for faster processing than array_unique because we might have many //entries in this list. $tmp_computers = array(); foreach ($computers as $computer) { if (!isset($tmp_computers[$computer])) { $tmp_computers[$computer] = 1; } } $computers = array_keys($tmp_computers); $c_input = array(); $c_input['plugin_fusioninventory_taskjobs_id'] = $job->fields['id']; $c_input['state'] = 0; $c_input['plugin_fusioninventory_agents_id'] = 0; $c_input['execution_id'] = $task->fields['execution_id']; $package = new PluginFusioninventoryDeployPackage(); foreach ($computers as $computer_id) { //Unique Id match taskjobstatuses for an agent(computer) foreach ($definitions as $definition) { $uniqid = uniqid(); $package->getFromDB($definition['PluginFusioninventoryDeployPackage']); $c_input['state'] = 0; $c_input['itemtype'] = 'PluginFusioninventoryDeployPackage'; $c_input['items_id'] = $package->fields['id']; $c_input['date'] = date("Y-m-d H:i:s"); $c_input['uniqid'] = $uniqid; //get agent for this computer $agents_id = $agent->getAgentWithComputerid($computer_id); if ($agents_id === FALSE) { $jobstates_id = $jobstate->add($c_input); $jobstate->changeStatusFinish($jobstates_id, 0, '', 1, "No agent found for [[Computer::" . $computer_id . "]]", 0, 0); } else { if ($agentmodule->isAgentCanDo('DEPLOY', $agents_id)) { $c_input['plugin_fusioninventory_agents_id'] = $agents_id; $jobstates_running = $jobstate->find(implode(" ", array(" `itemtype` = 'PluginFusioninventoryDeployPackage'", "AND `items_id` = " . $package->fields['id'], "AND `state` <> " . PluginFusioninventoryTaskjobstate::FINISHED, "AND `plugin_fusioninventory_agents_id` = " . $agents_id))); if (count($jobstates_running) == 0) { # Push the agent, in the stack of agent to awake if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agents_id] = 1; } $jobstates_id = $jobstate->add($c_input); //Add log of taskjob $c_input['plugin_fusioninventory_taskjobstates_id'] = $jobstates_id; $c_input['state'] = PluginFusioninventoryTaskjoblog::TASK_PREPARED; $taskvalid++; $joblog->add($c_input); unset($c_input['state']); unset($c_input['plugin_fusioninventory_agents_id']); } } } } } if ($taskvalid > 0) { $job->fields['status'] = 1; $job->update($job->fields); } else { $job->reinitializeTaskjobs($job->fields['plugin_fusioninventory_tasks_id']); } }
function prepareRun($taskjobs_id) { global $DB; $pfTask = new PluginFusioninventoryTask(); $pfTaskjob = new PluginFusioninventoryTaskjob(); $pfTaskjoblog = new PluginFusioninventoryTaskjoblog(); $pfTaskjobstate = new PluginFusioninventoryTaskjobstate(); $pfIPRange = new PluginFusioninventoryIPRange(); $pfAgent = new PluginFusioninventoryAgent(); $a_specificity = array(); $a_specificity['DEVICE'] = array(); $uniqid = uniqid(); $pfTaskjob->getFromDB($taskjobs_id); $pfTask->getFromDB($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); $NetworkEquipment = new NetworkEquipment(); $NetworkPort = new NetworkPort(); /* * * Different possibilities : * IP RANGE * NetworkEquipment * Printer * * We will count total number of devices to query */ // get all snmpauth $a_snmpauth = getAllDatasFromTable("glpi_plugin_fusioninventory_configsecurities"); // get items_id by type $a_iprange = array(); $a_NetworkEquipment = array(); $a_Printer = array(); $communication = $pfTask->fields['communication']; $a_definition = importArrayFromDB($pfTaskjob->fields['definition']); foreach ($a_definition as $datas) { $itemtype = key($datas); $items_id = current($datas); switch ($itemtype) { case 'PluginFusioninventoryIPRange': $a_iprange[] = $items_id; break; case 'NetworkEquipment': $query = "SELECT `glpi_networkequipments`.`id` AS `gID`,\n `glpi_ipaddresses`.`name` AS `gnifaddr`,\n `plugin_fusioninventory_configsecurities_id`,\n FROM `glpi_networkequipments`\n LEFT JOIN `glpi_plugin_fusioninventory_networkequipments`\n ON `networkequipments_id`=`glpi_networkequipments`.`id`\n LEFT JOIN `glpi_networkports`\n ON `glpi_networkports`.`items_id`=`glpi_networkequipments`.`id`\n AND `glpi_networkports`.`itemtype`='NetworkEquipment'\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n WHERE `glpi_networkequipments`.`is_deleted`='0'\n AND `plugin_fusioninventory_configsecurities_id`!='0'\n AND `glpi_networkequipments`.`id` = '" . $items_id . "'\n AND `glpi_ipaddresses`.`name`!=''\n LIMIT 1"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) { $input = array(); $input['TYPE'] = 'NETWORKING'; $input['ID'] = $data['gID']; $input['IP'] = $data['gnifaddr']; $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id']; $a_specificity['DEVICE']['NetworkEquipment' . $data['gID']] = $input; $a_NetworkEquipment[] = $items_id; } } break; case 'Printer': $query = "SELECT `glpi_printers`.`id` AS `gID`,\n `glpi_ipaddresses`.`name` AS `gnifaddr`,\n `plugin_fusioninventory_configsecurities_id`,\n FROM `glpi_printers`\n LEFT JOIN `glpi_plugin_fusioninventory_printers`\n ON `printers_id`=`glpi_printers`.`id`\n LEFT JOIN `glpi_networkports`\n ON `glpi_networkports`.`items_id`=`glpi_printers`.`id`\n AND `glpi_networkports`.`itemtype`='Printer'\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n WHERE `glpi_printers`.`is_deleted`=0\n AND `plugin_fusioninventory_configsecurities_id`!='0'\n AND `glpi_printers`.`id` = '" . $items_id . "'\n AND `glpi_ipaddresses`.`name`!=''\n LIMIT 1"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) { $input = array(); $input['TYPE'] = 'PRINTER'; $input['ID'] = $data['gID']; $input['IP'] = $data['gnifaddr']; $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id']; $a_specificity['DEVICE']['Printer' . $data['gID']] = $input; $a_Printer[] = $items_id; } } break; } } // Get all devices on each iprange foreach ($a_iprange as $items_id) { $pfIPRange->getFromDB($items_id); // Search NetworkEquipment $query = "SELECT `glpi_networkequipments`.`id` AS `gID`,\n `glpi_ipaddresses`.`name` AS `gnifaddr`,\n `plugin_fusioninventory_configsecurities_id`,\n FROM `glpi_networkequipments`\n LEFT JOIN `glpi_plugin_fusioninventory_networkequipments`\n ON `networkequipments_id`=`glpi_networkequipments`.`id`\n LEFT JOIN `glpi_networkports`\n ON `glpi_networkports`.`items_id`=`glpi_networkequipments`.`id`\n AND `glpi_networkports`.`itemtype`='NetworkEquipment'\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n WHERE `glpi_networkequipments`.`is_deleted`='0'\n AND `plugin_fusioninventory_configsecurities_id`!='0'"; if ($pfIPRange->fields['entities_id'] != '-1') { $entities = "(" . $this->fields['entities_id']; foreach (getAncestorsOf("glpi_entities", $pfIPRange->fields['entities_id']) as $parent) { $entities .= ",{$parent}"; } $entities .= ")"; $query .= " AND `glpi_networkequipments`.`entities_id` IN " . $entities . " "; } $query .= " AND inet_aton(`glpi_ipaddresses`.`name`)\n BETWEEN inet_aton('" . $pfIPRange->fields['ip_start'] . "')\n AND inet_aton('" . $pfIPRange->fields['ip_end'] . "') "; $query .= " GROUP BY `glpi_networkequipments`.`id`"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) { $input = array(); $input['TYPE'] = 'NETWORKING'; $input['ID'] = $data['gID']; $input['IP'] = $data['gnifaddr']; $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id']; $a_specificity['DEVICE']['NetworkEquipment' . $data['gID']] = $input; $a_NetworkEquipment[] = $data['gID']; } } // Search Printer $query = "SELECT `glpi_printers`.`id` AS `gID`,\n `glpi_ipaddresses`.`name` AS `gnifaddr`,\n `plugin_fusioninventory_configsecurities_id`,\n FROM `glpi_printers`\n LEFT JOIN `glpi_plugin_fusioninventory_printers`\n ON `printers_id`=`glpi_printers`.`id`\n LEFT JOIN `glpi_networkports`\n ON `glpi_networkports`.`items_id`=`glpi_printers`.`id`\n AND `glpi_networkports`.`itemtype`='Printer'\n LEFT JOIN `glpi_networknames`\n ON `glpi_networknames`.`items_id`=`glpi_networkports`.`id`\n AND `glpi_networknames`.`itemtype`='NetworkPort'\n LEFT JOIN `glpi_ipaddresses`\n ON `glpi_ipaddresses`.`items_id`=`glpi_networknames`.`id`\n AND `glpi_ipaddresses`.`itemtype`='NetworkName'\n WHERE `glpi_printers`.`is_deleted`=0\n AND `plugin_fusioninventory_configsecurities_id`!='0'"; if ($pfIPRange->fields['entities_id'] != '-1') { $entities = "(" . $this->fields['entities_id']; foreach (getAncestorsOf("glpi_entities", $pfIPRange->fields['entities_id']) as $parent) { $entities .= ",{$parent}"; } $entities .= ")"; $query .= "AND `glpi_printers`.`entities_id` IN " . $entities . " "; } $query .= " AND inet_aton(`glpi_ipaddresses`.`name`)\n BETWEEN inet_aton('" . $pfIPRange->fields['ip_start'] . "')\n AND inet_aton('" . $pfIPRange->fields['ip_end'] . "') "; $query .= " GROUP BY `glpi_printers`.`id`"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { if (isset($a_snmpauth[$data['plugin_fusioninventory_configsecurities_id']])) { $input = array(); $input['TYPE'] = 'PRINTER'; $input['ID'] = $data['gID']; $input['IP'] = $data['gnifaddr']; $input['AUTHSNMP_ID'] = $data['plugin_fusioninventory_configsecurities_id']; $a_specificity['DEVICE']['Printer' . $data['gID']] = $input; $a_Printer[] = $data['gID']; } } } $count_device = count($a_NetworkEquipment) + count($a_Printer); $a_actions = importArrayFromDB($pfTaskjob->fields['action']); // *** For dynamic agent same subnet, it's an another management *** if (strstr($pfTaskjob->fields['action'], '".2"')) { $a_subnet = array(); $a_agentList = array(); $a_devicesubnet = array(); foreach ($a_NetworkEquipment as $items_id) { $NetworkEquipment->getFromDB($items_id); $a_ip = explode(".", $NetworkEquipment->fields['ip']); $ip_subnet = $a_ip[0] . "." . $a_ip[1] . "." . $a_ip[2] . "."; if (!isset($a_subnet[$ip_subnet])) { $a_subnet[$ip_subnet] = 0; } $a_subnet[$ip_subnet]++; $a_devicesubnet[$ip_subnet]['NetworkEquipment'][$items_id] = 1; } foreach ($a_Printer as $items_id) { $a_ports = $NetworkPort->find("`itemtype`='Printer'\n AND `items_id`='" . $items_id . "'\n AND `ip`!='127.0.0.1'"); foreach ($a_ports as $a_port) { $a_ip = explode(".", $a_port['ip']); $ip_subnet = $a_ip[0] . "." . $a_ip[1] . "." . $a_ip[2] . "."; if (!isset($a_subnet[$ip_subnet])) { $a_subnet[$ip_subnet] = 0; } $a_subnet[$ip_subnet]++; $a_devicesubnet[$ip_subnet]['Printer'][$items_id] = 1; } } $a_agentsubnet = array(); foreach ($a_subnet as $subnet => $num) { $a_agentList = $this->getAgentsSubnet($num, $communication, $subnet); if (!isset($a_agentList)) { $a_agentsubnet[$subnet] = ''; } else { $a_agentsubnet[$subnet] = $a_agentList; } } $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 1; $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['itemtype'] = ''; $a_input['items_id'] = 0; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; $taskvalid = 0; foreach ($a_agentsubnet as $subnet => $a_agentList) { if (!isset($a_agentList) or isset($a_agentList) && is_array($a_agentList) && count($a_agentList) == '0' or isset($a_agentList) && !is_array($a_agentList) && $a_agentList == '') { // No agent available for this subnet for ($i = 0; $i < 2; $i++) { $itemtype = 'Printer'; if ($i == '0') { $itemtype = 'NetworkEquipment'; } if (isset($a_devicesubnet[$subnet][$itemtype])) { foreach ($a_devicesubnet[$subnet][$itemtype] as $items_id => $num) { $a_input['itemtype'] = $itemtype; $a_input['items_id'] = $items_id; $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE'][$itemtype . $items_id]); $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, '', 1, "Unable to find agent to inventory " . "this " . $itemtype, 0, 0); $a_input['state'] = 1; } } } } else { // add taskjobstate $count_device_subnet = 0; if (isset($a_devicesubnet[$subnet]['NetworkEquipment'])) { $count_device_subnet += count($a_devicesubnet[$subnet]['NetworkEquipment']); } if (isset($a_devicesubnet[$subnet]['Printer'])) { $count_device_subnet += count($a_devicesubnet[$subnet]['Printer']); } $nb_devicebyagent = ceil($count_device_subnet / count($a_agentList)); $nbagent = 0; $agent_id = array_pop($a_agentList); $a_input['state'] = 0; for ($i = 0; $i < 2; $i++) { $itemtype = 'Printer'; if ($i == '0') { $itemtype = 'NetworkEquipment'; } if (isset($a_devicesubnet[$subnet][$itemtype])) { foreach ($a_devicesubnet[$subnet][$itemtype] as $items_id => $num) { $a_input['itemtype'] = $itemtype; $a_input['items_id'] = $items_id; $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE'][$itemtype . $items_id]); if ($nbagent == $nb_devicebyagent) { $agent_id = array_pop($a_agentList); $nbagent = 0; } $a_input['plugin_fusioninventory_agents_id'] = $agent_id; $nbagent++; $taskvalid++; $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); unset($a_input['state']); $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['state'] = 0; if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1; } } } } } } if ($taskvalid == "0") { $pfTaskjob->reinitializeTaskjobs($pfTaskjob->fields['plugin_fusioninventory_tasks_id']); } } else { $a_agentList = array(); // *** Only agents not dynamic *** if (!strstr($pfTaskjob->fields['action'], '".1"') and !strstr($pfTaskjob->fields['action'], '".2"')) { $agent_require_model = 0; foreach ($a_actions as $a_action) { if (!in_array('.1', $a_action) and !in_array('.2', $a_action)) { $agent_id = current($a_action); if ($pfAgent->getFromDB($agent_id)) { $agent_version = $pfAgent->getAgentVersion($agent_id); if (strnatcmp($agent_version, '2.3.4') < 0) { $agent_require_model = 1; } if ($communication == 'pull') { $a_agentList[] = $agent_id; } else { if ($pfTaskjob->isAgentAlive('1', $agent_id)) { $a_agentList[] = $agent_id; } } } } } } else { if (strstr($pfTaskjob->fields['action'], '".1"')) { $a_agentList = $this->getAgentsSubnet($count_device, $communication); } } /* * Manage agents */ if (count($a_agentList) == 0) { $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 1; $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['itemtype'] = ''; $a_input['items_id'] = 0; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, '', 1, "Unable to find agent to run this job"); $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; //$input_taskjob['status'] = 0; $pfTaskjob->update($input_taskjob); } elseif ($count_device == 0) { $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 1; $a_input['plugin_fusioninventory_agents_id'] = 0; $a_input['itemtype'] = ''; $a_input['items_id'] = 0; $a_input['uniqid'] = $uniqid; $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); $pfTaskjobstate->changeStatusFinish($Taskjobstates_id, 0, '', 0, "No suitable devices to inventory"); $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; //$input_taskjob['status'] = 1; $pfTaskjob->update($input_taskjob); } else { foreach ($a_agentList as $agent_id) { //Add jobstate and put status (waiting on server = 0) $a_input = array(); $a_input['plugin_fusioninventory_taskjobs_id'] = $taskjobs_id; $a_input['state'] = 0; $a_input['plugin_fusioninventory_agents_id'] = $agent_id; $a_input['uniqid'] = $uniqid; $a_input['execution_id'] = $task->fields['execution_id']; $alternate = 0; for ($d = 0; $d < ceil($count_device / count($a_agentList)); $d++) { if (count($a_NetworkEquipment) + count($a_Printer) > 0) { $getdevice = "NetworkEquipment"; if ($alternate == "1") { $getdevice = "Printer"; $alternate = 0; } else { $getdevice = "NetworkEquipment"; $alternate++; } if (count($a_NetworkEquipment) == '0') { $getdevice = "Printer"; } else { if (count($a_Printer) == '0') { $getdevice = "NetworkEquipment"; } } $a_input['itemtype'] = $getdevice; switch ($getdevice) { case 'NetworkEquipment': $a_input['items_id'] = array_pop($a_NetworkEquipment); $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE']['NetworkEquipment' . $a_input['items_id']]); break; case 'Printer': $a_input['items_id'] = array_pop($a_Printer); $a_input['specificity'] = exportArrayToDB($a_specificity['DEVICE']['Printer' . $a_input['items_id']]); break; } $Taskjobstates_id = $pfTaskjobstate->add($a_input); //Add log of taskjob $a_input['plugin_fusioninventory_taskjobstates_id'] = $Taskjobstates_id; $a_input['state'] = 7; $a_input['date'] = date("Y-m-d H:i:s"); $pfTaskjoblog->add($a_input); unset($a_input['state']); if ($communication == "push") { $_SESSION['glpi_plugin_fusioninventory']['agents'][$agent_id] = 1; } } } } $input_taskjob = array(); $input_taskjob['id'] = $pfTaskjob->fields['id']; $input_taskjob['status'] = 1; $pfTaskjob->update($input_taskjob); } } return $uniqid; }
// $ptt = new PluginFusioninventoryTask; // $ptais = new PluginFusioninventoryAgentsInventoryState; // // if ($ptt->addTask(0, 0, 'INVENTORY', $_POST['agentID'])) { // $ptais->changeStatus($_POST['ID'], 1); // if ($pta->RemoteStartAgent($_POST['agentID'], $_POST['ip'])) { // $ptais->changeStatus($_POST['ID'], 2); // } // } // glpi_header($_SERVER['HTTP_REFERER']); //} // //$ptais = new PluginFusioninventoryAgentsInventoryState; //$ptais->computerState($_SERVER["PHP_SELF"], $_GET["ID"]); if (isset($_POST['action'])) { $pfit = new PluginFusioninventoryTask(); foreach ($_POST['agent-ip'] as $agentip) { $splitinfo = explode("-", $agentip); $param = ""; if (isset($splitinfo[2])) { $param = "{$splitinfo['2']}"; } // Add a task... if ($_POST['action'] == "INVENTORY") { $a_device = explode("-", $_POST['device']); switch ($a_device[0]) { case NETWORKING_TYPE: case PRINTER_TYPE: $pfit->addTask($a_device[1], $a_device[0], 'SNMPQUERY', $splitinfo[0], $param); break; case COMPUTER_TYPE:
/** * @test */ public function prepareTask2() { global $DB; // Verify prepare a network discovery task $DB->connect(); $pfTask = new PluginFusioninventoryTask(); $data = $pfTask->getJoblogs(array(2)); $ref = array(3 => 'computer3'); $this->assertEquals($ref, $data['agents']); }
/** * @test */ public function prepareTaskDisabled() { global $DB; $DB->connect(); $pfTask = new PluginFusioninventoryTask(); $pfTask->update(array('id' => 1, 'is_active' => 0)); PluginFusioninventoryTask::cronTaskscheduler(); $data = $pfTask->getJoblogs(array(1)); $ref = array(); $this->assertEquals($ref, $data['agents'], 'Task inactive, so no agent prepared'); $ref_prepared = array(); $this->assertEquals($ref_prepared, $data['tasks']); }