wip smart services
This commit is contained in:
parent
ffba7b8285
commit
112f578512
|
@ -40,6 +40,7 @@ if (is_ajax()) {
|
|||
$id = get_parameter('id', -1);
|
||||
$rootID = get_parameter('rootID', -1);
|
||||
$serverID = get_parameter('serverID', false);
|
||||
$metaID = (int) get_parameter('metaID', 0);
|
||||
$childrenMethod = get_parameter('childrenMethod', 'on_demand');
|
||||
|
||||
$default_filters = [
|
||||
|
@ -98,7 +99,16 @@ if (is_ajax()) {
|
|||
break;
|
||||
|
||||
case 'services':
|
||||
$tree = new TreeService($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||
$tree = new TreeService(
|
||||
$type,
|
||||
$rootType,
|
||||
$id,
|
||||
$rootID,
|
||||
$serverID,
|
||||
$childrenMethod,
|
||||
$access,
|
||||
$metaID
|
||||
);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -64,14 +64,22 @@ class Tree
|
|||
const TV_DEFAULT_AGENT_STATUS = -1;
|
||||
|
||||
|
||||
public function __construct($type, $rootType='', $id=-1, $rootID=-1, $serverID=false, $childrenMethod='on_demand', $access='AR')
|
||||
{
|
||||
public function __construct(
|
||||
$type,
|
||||
$rootType='',
|
||||
$id=-1,
|
||||
$rootID=-1,
|
||||
$serverID=false,
|
||||
$childrenMethod='on_demand',
|
||||
$access='AR',
|
||||
$id_meta_server=0
|
||||
) {
|
||||
$this->type = $type;
|
||||
$this->rootType = !empty($rootType) ? $rootType : $type;
|
||||
$this->id = $id;
|
||||
$this->rootID = !empty($rootID) ? $rootID : $id;
|
||||
$this->serverID = $serverID;
|
||||
if (is_metaconsole()) {
|
||||
if (is_metaconsole() && $id_meta_server == 0) {
|
||||
$this->serverName = metaconsole_get_server_by_id($serverID);
|
||||
}
|
||||
|
||||
|
@ -90,7 +98,7 @@ class Tree
|
|||
include_once $config['homedir'].'/include/functions_tags.php';
|
||||
enterprise_include_once('include/functions_agents.php');
|
||||
|
||||
if (is_metaconsole()) {
|
||||
if (is_metaconsole() && $id_meta_server == 0) {
|
||||
enterprise_include_once('meta/include/functions_ui_meta.php');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@ global $config;
|
|||
|
||||
require_once $config['homedir'].'/include/class/Tree.class.php';
|
||||
|
||||
use PandoraFMS\Enterprise\Service;
|
||||
|
||||
class TreeService extends Tree
|
||||
{
|
||||
|
||||
|
@ -21,12 +23,35 @@ class TreeService extends Tree
|
|||
|
||||
protected $displayAllGroups = false;
|
||||
|
||||
private $metaID = 0;
|
||||
|
||||
public function __construct($type, $rootType='', $id=-1, $rootID=-1, $serverID=false, $childrenMethod='on_demand', $access='AR')
|
||||
{
|
||||
|
||||
public function __construct(
|
||||
$type,
|
||||
$rootType='',
|
||||
$id=-1,
|
||||
$rootID=-1,
|
||||
$serverID=false,
|
||||
$childrenMethod='on_demand',
|
||||
$access='AR',
|
||||
$id_server_meta=0
|
||||
) {
|
||||
global $config;
|
||||
|
||||
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||
if ($id_server_meta > 0) {
|
||||
$this->metaID = $id_server_meta;
|
||||
}
|
||||
|
||||
parent::__construct(
|
||||
$type,
|
||||
$rootType,
|
||||
$id,
|
||||
$rootID,
|
||||
$serverID,
|
||||
$childrenMethod,
|
||||
$access,
|
||||
$id_server_meta
|
||||
);
|
||||
|
||||
$this->L1fieldName = 'id_group';
|
||||
$this->L1extraFields = [
|
||||
|
@ -60,6 +85,18 @@ class TreeService extends Tree
|
|||
|
||||
protected function getData()
|
||||
{
|
||||
if (is_metaconsole() === true && $this->metaID > 0) {
|
||||
// Impersonate node.
|
||||
\enterprise_include_once('include/functions_metaconsole.php');
|
||||
\enterprise_hook(
|
||||
'metaconsole_connect',
|
||||
[
|
||||
null,
|
||||
$this->metaID,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->id == -1) {
|
||||
$this->getFirstLevel();
|
||||
} else if ($this->type == 'services') {
|
||||
|
@ -67,6 +104,11 @@ class TreeService extends Tree
|
|||
} else if ($this->type == 'agent') {
|
||||
$this->getThirdLevel();
|
||||
}
|
||||
|
||||
if (is_metaconsole() === true && $this->metaID > 0) {
|
||||
// Restore connection.
|
||||
\enterprise_hook('metaconsole_restore_db');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -120,8 +162,6 @@ class TreeService extends Tree
|
|||
|
||||
protected function getProcessedServices()
|
||||
{
|
||||
$fields = $this->getFirstLevelFields();
|
||||
|
||||
$is_favourite = $this->getServiceFavouriteFilter();
|
||||
|
||||
if (users_can_manage_group_all('AR')) {
|
||||
|
@ -131,29 +171,31 @@ class TreeService extends Tree
|
|||
}
|
||||
|
||||
$sql = sprintf(
|
||||
"SELECT t1.*
|
||||
FROM tservice_element tss
|
||||
RIGHT JOIN
|
||||
(SELECT ts.id, ts.id_agent_module, ts.name, ts.name AS `alias`, ts.id AS `rootID`,
|
||||
'services' AS rootType, 'services' AS type,
|
||||
0 AS quiet,
|
||||
SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`,
|
||||
SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`,
|
||||
SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services`
|
||||
FROM tservice ts
|
||||
LEFT JOIN tservice_element tse
|
||||
ON ts.id=tse.id_service
|
||||
WHERE
|
||||
1=1
|
||||
%s
|
||||
%s
|
||||
GROUP BY id
|
||||
) as t1
|
||||
ON tss.id_service_child = t1.id
|
||||
WHERE tss.id_service_child IS NULL
|
||||
",
|
||||
$groups_acl,
|
||||
$is_favourite
|
||||
'SELECT
|
||||
ts.id,
|
||||
ts.id_agent_module,
|
||||
ts.name,
|
||||
ts.name as `alias`,
|
||||
ts.id as `rootID`,
|
||||
"services" as `rootType`,
|
||||
"services" as `type`,
|
||||
ts.quiet,
|
||||
SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`,
|
||||
SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`,
|
||||
SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services`
|
||||
FROM tservice ts
|
||||
LEFT JOIN tservice_element tse
|
||||
ON tse.id_service = ts.id
|
||||
WHERE ts.id NOT IN (
|
||||
SELECT DISTINCT id_service_child
|
||||
FROM tservice_element
|
||||
WHERE id_server_meta = 0
|
||||
)
|
||||
%s
|
||||
%s
|
||||
GROUP BY ts.id',
|
||||
$is_favourite,
|
||||
$groups_acl
|
||||
);
|
||||
|
||||
$stats = db_get_all_rows_sql($sql);
|
||||
|
@ -259,6 +301,63 @@ class TreeService extends Tree
|
|||
$sql = $this->getSecondLevelServicesSql();
|
||||
$data_services = db_process_sql($sql);
|
||||
|
||||
$data_services = array_reduce(
|
||||
$data_services,
|
||||
function ($carry, $item) {
|
||||
if ($item['id_server_meta'] > 0
|
||||
&& is_metaconsole() === true
|
||||
) {
|
||||
// Impersonate node.
|
||||
\enterprise_include_once('include/functions_metaconsole.php');
|
||||
$r = \enterprise_hook(
|
||||
'metaconsole_connect',
|
||||
[
|
||||
null,
|
||||
$item['id_server_meta'],
|
||||
]
|
||||
);
|
||||
|
||||
if ($r === NOERR) {
|
||||
$item = db_get_row_sql(
|
||||
sprintf(
|
||||
'SELECT
|
||||
ts.id,
|
||||
ts.id_agent_module,
|
||||
ts.name,
|
||||
ts.name as `alias`,
|
||||
%d as `rootID`,
|
||||
"services" as `rootType`,
|
||||
"services" as `type`,
|
||||
ts.quiet,
|
||||
%d as id_server_meta,
|
||||
SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`,
|
||||
SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`,
|
||||
SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services`
|
||||
FROM tservice ts
|
||||
LEFT JOIN tservice_element tse
|
||||
ON tse.id_service = ts.id
|
||||
WHERE ts.id = %d
|
||||
GROUP BY ts.id',
|
||||
$item['id_server_meta'],
|
||||
$item['rootID'],
|
||||
$item['id']
|
||||
)
|
||||
);
|
||||
$item['obj'] = new Service($item['id']);
|
||||
}
|
||||
|
||||
// Restore connection.
|
||||
\enterprise_hook('metaconsole_restore_db');
|
||||
} else {
|
||||
$item['obj'] = new Service($item['id']);
|
||||
}
|
||||
|
||||
$carry[] = $item;
|
||||
return $carry;
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
$service_stats = [];
|
||||
|
||||
foreach ($data_services as $service) {
|
||||
|
@ -272,6 +371,12 @@ class TreeService extends Tree
|
|||
}
|
||||
|
||||
$service_stats[$service['id']]['rootID'] = $service['rootID'];
|
||||
if ($this->metaID > 0) {
|
||||
$service_stats[$service['id']]['metaID'] = $this->metaID;
|
||||
} else {
|
||||
$service_stats[$service['id']]['metaID'] = $service['id_server_meta'];
|
||||
}
|
||||
|
||||
$service_stats[$service['id']]['rootType'] = $service['rootType'];
|
||||
$service_stats[$service['id']]['type'] = 'services';
|
||||
$service_stats[$service['id']]['children'] = [];
|
||||
|
@ -281,41 +386,23 @@ class TreeService extends Tree
|
|||
'total_agents' => $service['total_agents'],
|
||||
'total_modules' => $service['total_modules'],
|
||||
];
|
||||
}
|
||||
|
||||
$own_info = get_user_info($config['id_user']);
|
||||
|
||||
if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) {
|
||||
$display_all_services = true;
|
||||
} else {
|
||||
$display_all_services = false;
|
||||
}
|
||||
|
||||
$services = services_get_services($filter, false, $display_all_services);
|
||||
|
||||
foreach ($services as $row) {
|
||||
if (!array_key_exists($row['id'], $service_stats)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$status = services_get_status($row, true);
|
||||
|
||||
switch ($status) {
|
||||
switch ($service['obj']->status()) {
|
||||
case SERVICE_STATUS_NORMAL:
|
||||
$service_stats[$row['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_ok_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="NORMAL status." />';
|
||||
$service_stats[$service['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_ok_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="NORMAL status." />';
|
||||
break;
|
||||
|
||||
case SERVICE_STATUS_CRITICAL:
|
||||
$service_stats[$row['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_critical_ball.png" data-title="CRITICAL status." data-use_title_for_force_title="1" class="forced_title" alt="CRITICAL status." />';
|
||||
$service_stats[$service['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_critical_ball.png" data-title="CRITICAL status." data-use_title_for_force_title="1" class="forced_title" alt="CRITICAL status." />';
|
||||
break;
|
||||
|
||||
case SERVICE_STATUS_WARNING:
|
||||
$service_stats[$row['id']][$key]['statusImageHTML'] = '<img src="images/status_sets/default/agent_warning_ball.png" data-title="WARNING status." data-use_title_for_force_title="1" class="forced_title" alt="WARNING status." />';
|
||||
$service_stats[$service['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_warning_ball.png" data-title="WARNING status." data-use_title_for_force_title="1" class="forced_title" alt="WARNING status." />';
|
||||
break;
|
||||
|
||||
case SERVICE_STATUS_UNKNOWN:
|
||||
default:
|
||||
$service_stats[$row['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_no_data_ball.png" data-title="UNKNOWN status." data-use_title_for_force_title="1" class="forced_title" alt="UNKNOWN status." />';
|
||||
$service_stats[$service['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_no_data_ball.png" data-title="UNKNOWN status." data-use_title_for_force_title="1" class="forced_title" alt="UNKNOWN status." />';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -337,13 +424,30 @@ class TreeService extends Tree
|
|||
{
|
||||
$group_acl = $this->getGroupAclCondition();
|
||||
|
||||
$sql = "SELECT ts.id, ts.name, tse1.id_service AS `rootID`, 'services' AS rootType, 'services' AS type, 0 AS quiet, SUM(if((tse2.id_agent<>0), 1, 0)) AS `total_agents`, SUM(if((tse2.id_agente_modulo<>0), 1, 0)) AS `total_modules`, SUM(if((tse2.id_service_child<>0), 1, 0)) AS `total_services`, 0 AS fired_count, 0 AS normal_count, 0 AS warning_count, 0 AS critical_count, 0 AS unknown_count, 0 AS notinit_count, 0 AS state_critical, 0 AS state_warning, 0 AS state_unknown, 0 AS state_notinit, 0 AS state_normal, 0 AS state_total, '' AS statusImageHTML, '' AS alertImageHTML
|
||||
FROM tservice_element tse1
|
||||
LEFT JOIN tservice_element tse2 ON tse1.id_service_child=tse2.id_service
|
||||
LEFT JOIN tservice ts ON tse1.id_service_child=ts.id
|
||||
WHERE tse1.id_service=$this->id AND tse1.id_service_child<>0
|
||||
GROUP BY tse1.id_service_child
|
||||
";
|
||||
$sql = sprintf(
|
||||
'SELECT
|
||||
ts.id,
|
||||
ts.id_agent_module,
|
||||
ts.name,
|
||||
ts.name as `alias`,
|
||||
tse.id_service as `rootID`,
|
||||
"services" as `rootType`,
|
||||
"services" as `type`,
|
||||
ts.quiet,
|
||||
tse.id_server_meta,
|
||||
SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`,
|
||||
SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`,
|
||||
SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services`
|
||||
FROM tservice ts
|
||||
INNER JOIN tservice_element tse
|
||||
ON tse.id_service_child = ts.id
|
||||
WHERE
|
||||
tse.id_service = %d
|
||||
%s
|
||||
GROUP BY ts.id',
|
||||
$this->id,
|
||||
$group_acl
|
||||
);
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
|
|
@ -4251,6 +4251,7 @@ function html_print_input($data, $wrapper='div', $input_only=false)
|
|||
}
|
||||
|
||||
$params = [];
|
||||
$params['disabled'] = $data['disabled'];
|
||||
$params['return'] = $data['return'];
|
||||
$params['show_helptip'] = false;
|
||||
$params['input_name'] = $data['name'];
|
||||
|
|
|
@ -1008,6 +1008,7 @@ var TreeController = {
|
|||
rootID: element.rootID,
|
||||
serverID: element.serverID,
|
||||
rootType: element.rootType,
|
||||
metaID: element.metaID,
|
||||
filter: controller.filter,
|
||||
hash: public_hash,
|
||||
id_user: public_user
|
||||
|
|
Loading…
Reference in New Issue