Make parallel and serial checks
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# RemoteSupport
|
||||
GLPI Plugin for direct VNC connection from browser inside computer from server
|
||||
GLPI Plugin for direct VNC connection from browser inside computer from server and update status of online computers, it checks computer with go program in glpi cron and with fusion inventory agent...
|
||||
|
||||
This Plugin add a simple button inside computer:
|
||||
|
||||
|
||||
BIN
bin/check_status
BIN
bin/check_status
Binary file not shown.
@@ -9,24 +9,25 @@ class PluginRemotesupportRemotesupport extends CommonDBTM
|
||||
public static function showInfo($item)
|
||||
{
|
||||
|
||||
$config = Config::getConfigurationValues('plugin:Remotesupport');
|
||||
$config = Config::getConfigurationValues('plugin:Remotesupport');
|
||||
|
||||
if ($config["show_in_computers"] == false)
|
||||
return true;
|
||||
if ($config["show_in_computers"] == false) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($config["fusion"] == true && $config["easy_novnc"] == true) {
|
||||
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
|
||||
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($item->getID());
|
||||
if (empty($a_computerextend)) {
|
||||
return true;
|
||||
}
|
||||
if ($config["fusion"] == true && $config["easy_novnc"] == true) {
|
||||
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
|
||||
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($item->getID());
|
||||
if (empty($a_computerextend)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$href = "https://" . $_SERVER['SERVER_ADDR'] . "/vnc.html?path=vnc%2F" . $a_computerextend['remote_addr'] . "&autoconnect=true&resize=scale&reconnect=true&show_dot=true";
|
||||
$name = $a_computerextend['remote_addr'];
|
||||
} else {
|
||||
$href = "vnc://" . $item->fields["name"];
|
||||
$name = $item->fields["name"];
|
||||
}
|
||||
$href = "https://" . $_SERVER['SERVER_ADDR'] . "/vnc.html?path=vnc%2F" . $a_computerextend['remote_addr'] . "&autoconnect=true&resize=scale&reconnect=true&show_dot=true";
|
||||
$name = $a_computerextend['remote_addr'];
|
||||
} else {
|
||||
$href = "vnc://" . $item->fields["name"];
|
||||
$name = $item->fields["name"];
|
||||
}
|
||||
echo '<table class="tab_glpi" width="100%">';
|
||||
echo '<tr>';
|
||||
echo '<th>' . __('Remote Support') . '</th>';
|
||||
@@ -34,7 +35,7 @@ class PluginRemotesupportRemotesupport extends CommonDBTM
|
||||
echo '<tr class="tab_bg_1">';
|
||||
echo '<td>';
|
||||
|
||||
$url = "<a target=\"_blank\" href=\"". $href ."\"><li class=\"document\"><i class=\"fa fa-laptop-medical\"></i>" . $name . "</li></a>";
|
||||
$url = "<a target=\"_blank\" href=\"" . $href . "\"><li class=\"document\"><i class=\"fa fa-laptop-medical\"></i>" . $name . "</li></a>";
|
||||
|
||||
if ($url != "") {
|
||||
echo "<div><ul class=\"timeline_choices\"><h2>VNC connect : </h2>";
|
||||
@@ -69,74 +70,103 @@ class PluginRemotesupportRemotesupport extends CommonDBTM
|
||||
|
||||
$req = $DB->request('glpi_computers', ['FIELDS' => ['glpi_computers' => ['id', 'contact']]]);
|
||||
|
||||
$contactids = [];
|
||||
while ($ret = $req->next()) {
|
||||
$contactids[$ret["id"]] = $ret["contact"];
|
||||
}
|
||||
$contactids = [];
|
||||
while ($ret = $req->next()) {
|
||||
$contactids[$ret["id"]] = $ret["contact"];
|
||||
}
|
||||
|
||||
return $contactids;
|
||||
return $contactids;
|
||||
}
|
||||
|
||||
public static function cronRemotesupport($task)
|
||||
{
|
||||
global $DB;
|
||||
|
||||
$config = Config::getConfigurationValues('plugin:Remotesupport');
|
||||
$config = Config::getConfigurationValues('plugin:Remotesupport');
|
||||
|
||||
if ($config["fusion"])
|
||||
return 0;
|
||||
|
||||
Toolbox::logInFile("remotsupport", "Starting search of agents\n");
|
||||
$pfConfig = new PluginFusioninventoryConfig();
|
||||
$port = $pfConfig->getValue('agent_port');
|
||||
$rs_path = Plugin::getPhpDir('remotesupport');
|
||||
|
||||
$check_arr = [];
|
||||
$comps = [];
|
||||
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
|
||||
foreach (getAllDataFromTable(PluginFusioninventoryAgent::getTable()) as $a) {
|
||||
|
||||
$check = [];
|
||||
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($a["computers_id"]);
|
||||
|
||||
$check["url"] = "http://" . $a_computerextend["remote_addr"] . ":" . $port . "/status";
|
||||
$check["id"] = $a["id"];
|
||||
$check["computers_id"] = $a["computers_id"];
|
||||
$check["status"] = "unknown";
|
||||
|
||||
$check_arr[] = $check;
|
||||
$comps[$a["computers_id"]] = $check;
|
||||
//print_r($agent->getAgentStatusURLs());
|
||||
if ($config["fusion"] || $config["run_mode"] == "None") {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$descriptorspec = array(
|
||||
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
|
||||
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
|
||||
2 => array("file", "/tmp/error-output.txt", "a"), // stderr is a file to write to
|
||||
);
|
||||
Toolbox::logInFile("remotsupport", "Starting search of agents\n");
|
||||
|
||||
$cwd = '/tmp';
|
||||
$env = array('debug' => 'false');
|
||||
if ($config["run_mode"] == "Parallel") {
|
||||
$pfConfig = new PluginFusioninventoryConfig();
|
||||
$port = $pfConfig->getValue('agent_port');
|
||||
$rs_path = Plugin::getPhpDir('remotesupport');
|
||||
|
||||
$process = proc_open($rs_path . '/bin/check_status', $descriptorspec, $pipes, $cwd, $env);
|
||||
$check_arr = [];
|
||||
$comps = [];
|
||||
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
|
||||
foreach (getAllDataFromTable(PluginFusioninventoryAgent::getTable()) as $a) {
|
||||
|
||||
if (is_resource($process)) {
|
||||
// $pipes now looks like this:
|
||||
// 0 => writeable handle connected to child stdin
|
||||
// 1 => readable handle connected to child stdout
|
||||
// Any error output will be appended to /tmp/error-output.txt
|
||||
$check = [];
|
||||
$a_computerextend = $pfInventoryComputerComputer->hasAutomaticInventory($a["computers_id"]);
|
||||
|
||||
fwrite($pipes[0], json_encode($check_arr));
|
||||
fclose($pipes[0]);
|
||||
$check["url"] = "http://" . $a_computerextend["remote_addr"] . ":" . $port . "/status";
|
||||
$check["id"] = $a["id"];
|
||||
$check["computers_id"] = $a["computers_id"];
|
||||
$check["status"] = "unknown";
|
||||
|
||||
$checked = json_decode(stream_get_contents($pipes[1]));
|
||||
fclose($pipes[1]);
|
||||
$check_arr[] = $check;
|
||||
$comps[$a["computers_id"]] = $check;
|
||||
//print_r($agent->getAgentStatusURLs());
|
||||
}
|
||||
|
||||
// It is important that you close any pipes before calling
|
||||
// proc_close in order to avoid a deadlock
|
||||
$return_value = proc_close($process);
|
||||
$descriptorspec = array(
|
||||
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
|
||||
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
|
||||
2 => array("file", "/tmp/error-output.txt", "a"), // stderr is a file to write to
|
||||
);
|
||||
|
||||
$cwd = '/tmp';
|
||||
$env = array('debug' => 'false');
|
||||
|
||||
$process = proc_open($rs_path . '/bin/check_status', $descriptorspec, $pipes, $cwd, $env);
|
||||
|
||||
if (is_resource($process)) {
|
||||
// $pipes now looks like this:
|
||||
// 0 => writeable handle connected to child stdin
|
||||
// 1 => readable handle connected to child stdout
|
||||
// Any error output will be appended to /tmp/error-output.txt
|
||||
|
||||
fwrite($pipes[0], json_encode($check_arr));
|
||||
fclose($pipes[0]);
|
||||
|
||||
$checked = json_decode(stream_get_contents($pipes[1]));
|
||||
fclose($pipes[1]);
|
||||
|
||||
// It is important that you close any pipes before calling
|
||||
// proc_close in order to avoid a deadlock
|
||||
$return_value = proc_close($process);
|
||||
|
||||
Toolbox::logInFile("remotsupport", "command returned $return_value\n");
|
||||
}
|
||||
|
||||
} else {
|
||||
$agents = [];
|
||||
$data_set = [];
|
||||
$checked = [];
|
||||
|
||||
foreach (getAllDataFromTable(PluginFusioninventoryAgent::getTable()) as $a) {
|
||||
|
||||
$data_set[] = $a["id"];
|
||||
$agents[$a["id"]] = $a;
|
||||
}
|
||||
|
||||
foreach ($data_set as $id) {
|
||||
$agent = new PluginFusioninventoryAgent;
|
||||
$agent->getFromDB((int) $id);
|
||||
$st = $agent->getStatus();
|
||||
|
||||
if ($st["message"] != "noanswer") {
|
||||
$check = new stdClass();
|
||||
$check->computers_id = $agents[$id]["computers_id"];
|
||||
$checked[] = $check;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Toolbox::logInFile("remotsupport", "command returned $return_value\n");
|
||||
}
|
||||
|
||||
$stids = self::getStatesIds();
|
||||
@@ -146,21 +176,21 @@ class PluginRemotesupportRemotesupport extends CommonDBTM
|
||||
['1' => '1']
|
||||
);
|
||||
|
||||
$ids = [];
|
||||
$cids = self::getContactArray();
|
||||
$ids = [];
|
||||
$cids = self::getContactArray();
|
||||
|
||||
foreach ($checked as $s) {
|
||||
|
||||
$comp = new Computer();
|
||||
$comp->getFromDB($s->computers_id);
|
||||
Toolbox::logInFile("remotsupport", $s->computers_id . " " . $cids[$s->computers_id] . "\n");
|
||||
$ids[] = $s->computers_id;
|
||||
}
|
||||
|
||||
$DB->update("glpi_computers", [
|
||||
'states_id' => $stids["Online"] ],
|
||||
['id' => $ids ]
|
||||
);
|
||||
$ids[] = $s->computers_id;
|
||||
}
|
||||
|
||||
$DB->update("glpi_computers", [
|
||||
'states_id' => $stids["Online"]],
|
||||
['id' => $ids]
|
||||
);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user