mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-27 07:44:35 +02:00
implemented services treeview
Former-commit-id: d5d71442d0c6122ba91b160647559cdf03f55625
This commit is contained in:
parent
cd83f324a1
commit
eb56fd566c
BIN
pandora_console/images/tree_events.png
Normal file
BIN
pandora_console/images/tree_events.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 329 B |
BIN
pandora_console/images/tree_service_map.png
Normal file
BIN
pandora_console/images/tree_service_map.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 401 B |
@ -3,18 +3,21 @@
|
|||||||
// ==================================================
|
// ==================================================
|
||||||
// Copyright (c) 2005-2012 Artica Soluciones Tecnologicas
|
// Copyright (c) 2005-2012 Artica Soluciones Tecnologicas
|
||||||
// Please see http://pandorafms.org for full contribution list
|
// Please see http://pandorafms.org for full contribution list
|
||||||
|
|
||||||
// This program is free software; you can redistribute it and/or
|
// This program is free software; you can redistribute it and/or
|
||||||
// modify it under the terms of the GNU Lesser General Public License
|
// modify it under the terms of the GNU Lesser General Public License
|
||||||
// as published by the Free Software Foundation; version 2
|
// as published by the Free Software Foundation; version 2
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
// Only accesible by ajax
|
// Only accesible by ajax
|
||||||
if (is_ajax()) {
|
if (is_ajax ()) {
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
enterprise_include_once('include/functions_dashboard.php');
|
enterprise_include_once("include/functions_dashboard.php");
|
||||||
|
|
||||||
$public_hash = get_parameter('hash', 0);
|
$public_hash = get_parameter('hash', 0);
|
||||||
|
|
||||||
@ -25,29 +28,27 @@ if (is_ajax()) {
|
|||||||
} else {
|
} else {
|
||||||
$validate_hash = enterprise_hook(
|
$validate_hash = enterprise_hook(
|
||||||
'dasboard_validate_public_hash',
|
'dasboard_validate_public_hash',
|
||||||
[
|
array($public_hash, 'tree_view')
|
||||||
$public_hash,
|
|
||||||
'tree_view',
|
|
||||||
]
|
|
||||||
);
|
);
|
||||||
if ($validate_hash === false || $validate_hash === ENTERPRISE_NOT_HOOK) {
|
if ($validate_hash === false || $validate_hash === ENTERPRISE_NOT_HOOK) {
|
||||||
db_pandora_audit('Invalid public hash', 'Trying to access report builder');
|
db_pandora_audit("Invalid public hash", "Trying to access report builder");
|
||||||
include 'general/noaccess.php';
|
require ("general/noaccess.php");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
include_once $config['homedir'].'/include/class/Tree.class.php';
|
require_once($config['homedir'] . "/include/class/Tree.class.php");
|
||||||
include_once $config['homedir'].'/include/class/TreeOS.class.php';
|
require_once($config['homedir'] . "/include/class/TreeOS.class.php");
|
||||||
include_once $config['homedir'].'/include/class/TreeModuleGroup.class.php';
|
require_once($config['homedir'] . "/include/class/TreeModuleGroup.class.php");
|
||||||
include_once $config['homedir'].'/include/class/TreeModule.class.php';
|
require_once($config['homedir'] . "/include/class/TreeModule.class.php");
|
||||||
include_once $config['homedir'].'/include/class/TreeTag.class.php';
|
require_once($config['homedir'] . "/include/class/TreeTag.class.php");
|
||||||
include_once $config['homedir'].'/include/class/TreeGroup.class.php';
|
require_once($config['homedir'] . "/include/class/TreeGroup.class.php");
|
||||||
include_once $config['homedir'].'/include/class/TreeGroupEdition.class.php';
|
require_once($config['homedir'] . "/include/class/TreeService.class.php");
|
||||||
enterprise_include_once('include/class/TreePolicies.class.php');
|
require_once($config['homedir'] . "/include/class/TreeGroupEdition.class.php");
|
||||||
enterprise_include_once('include/class/TreeGroupMeta.class.php');
|
enterprise_include_once("include/class/TreePolicies.class.php");
|
||||||
include_once $config['homedir'].'/include/functions_reporting.php';
|
enterprise_include_once("include/class/TreeGroupMeta.class.php");
|
||||||
include_once $config['homedir'].'/include/functions_os.php';
|
require_once($config['homedir'] . "/include/functions_reporting.php");
|
||||||
|
require_once($config['homedir'] . "/include/functions_os.php");
|
||||||
|
|
||||||
$getChildren = (bool) get_parameter('getChildren', 0);
|
$getChildren = (bool) get_parameter('getChildren', 0);
|
||||||
$getGroupStatus = (bool) get_parameter('getGroupStatus', 0);
|
$getGroupStatus = (bool) get_parameter('getGroupStatus', 0);
|
||||||
@ -62,64 +63,55 @@ if (is_ajax()) {
|
|||||||
$childrenMethod = get_parameter('childrenMethod', 'on_demand');
|
$childrenMethod = get_parameter('childrenMethod', 'on_demand');
|
||||||
$hash = get_parameter('hash', false);
|
$hash = get_parameter('hash', false);
|
||||||
if ($hash !== false) {
|
if ($hash !== false) {
|
||||||
enterprise_hook('dasboard_validate_public_hash', [$hash, 'tree_view']);
|
enterprise_hook('dasboard_validate_public_hash', array($hash, 'tree_view'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$default_filters = [
|
$default_filters = array(
|
||||||
'searchAgent' => '',
|
'searchAgent' => '',
|
||||||
'statusAgent' => AGENT_STATUS_ALL,
|
'statusAgent' => AGENT_STATUS_ALL,
|
||||||
'searchModule' => '',
|
'searchModule' => '',
|
||||||
'statusModule' => -1,
|
'statusModule' => -1,
|
||||||
'groupID' => 0,
|
'groupID' => 0,
|
||||||
'tagID' => 0,
|
'tagID' => 0,
|
||||||
];
|
);
|
||||||
$filter = get_parameter('filter', $default_filters);
|
$filter = get_parameter('filter', $default_filters);
|
||||||
|
|
||||||
$agent_a = check_acl($config['id_user'], 0, 'AR');
|
$agent_a = check_acl ($config['id_user'], 0, "AR");
|
||||||
$agent_w = check_acl($config['id_user'], 0, 'AW');
|
$agent_w = check_acl ($config['id_user'], 0, "AW");
|
||||||
$access = ($agent_a == true) ? 'AR' : (($agent_w == true) ? 'AW' : 'AR');
|
$access = ($agent_a == true) ? 'AR' : (($agent_w == true) ? 'AW' : 'AR');
|
||||||
$switch_type = !empty($rootType) ? $rootType : $type;
|
$switch_type = !empty($rootType) ? $rootType : $type;
|
||||||
switch ($switch_type) {
|
switch ($switch_type) {
|
||||||
case 'os':
|
case 'os':
|
||||||
$tree = new TreeOS($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeOS($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'module_group':
|
case 'module_group':
|
||||||
$tree = new TreeModuleGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeModuleGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'module':
|
case 'module':
|
||||||
$tree = new TreeModule($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeModule($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'tag':
|
case 'tag':
|
||||||
$tree = new TreeTag($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeTag($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'group':
|
case 'group':
|
||||||
if (is_metaconsole()) {
|
if(is_metaconsole()){
|
||||||
if (!class_exists('TreeGroupMeta')) {
|
if (!class_exists('TreeGroupMeta')) break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$tree = new TreeGroupMeta($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeGroupMeta($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
} else {
|
}
|
||||||
|
else{
|
||||||
$tree = new TreeGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'policies':
|
case 'policies':
|
||||||
if (!class_exists('TreePolicies')) {
|
if (!class_exists('TreePolicies')) break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$tree = new TreePolicies($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreePolicies($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'group_edition':
|
case 'group_edition':
|
||||||
$tree = new TreeGroupEdition($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
$tree = new TreeGroupEdition($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
break;
|
break;
|
||||||
|
case 'services':
|
||||||
|
$tree = new TreeService($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// FIXME. No error handler
|
// FIXME. No error handler
|
||||||
return;
|
return;
|
||||||
@ -127,17 +119,18 @@ if (is_ajax()) {
|
|||||||
|
|
||||||
$tree->setFilter($filter);
|
$tree->setFilter($filter);
|
||||||
ob_clean();
|
ob_clean();
|
||||||
echo json_encode(['success' => 1, 'tree' => $tree->getArray()]);
|
|
||||||
|
echo json_encode(array('success' => 1, 'tree' => $tree->getArray()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($getDetail) {
|
if ($getDetail) {
|
||||||
include_once $config['homedir'].'/include/functions_treeview.php';
|
require_once($config['homedir']."/include/functions_treeview.php");
|
||||||
|
|
||||||
$id = (int) get_parameter('id');
|
$id = (int) get_parameter('id');
|
||||||
$type = (string) get_parameter('type');
|
$type = (string) get_parameter('type');
|
||||||
|
|
||||||
$server = [];
|
$server = array();
|
||||||
if (is_metaconsole()) {
|
if (is_metaconsole()) {
|
||||||
$server_id = (int) get_parameter('serverID');
|
$server_id = (int) get_parameter('serverID');
|
||||||
$server = metaconsole_get_servers($server_id);
|
$server = metaconsole_get_servers($server_id);
|
||||||
@ -151,21 +144,17 @@ if (is_ajax()) {
|
|||||||
case 'agent':
|
case 'agent':
|
||||||
treeview_printTable($id, $server, true);
|
treeview_printTable($id, $server, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'module':
|
case 'module':
|
||||||
treeview_printModuleTable($id, $server, true);
|
treeview_printModuleTable($id, $server, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'alert':
|
case 'alert':
|
||||||
treeview_printAlertsTable($id, $server, true);
|
treeview_printAlertsTable($id, $server, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Nothing
|
// Nothing
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<br></div>';
|
echo '<br></div>';
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -173,3 +162,4 @@ if (is_ajax()) {
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
?>
|
File diff suppressed because it is too large
Load Diff
@ -1,213 +1,191 @@
|
|||||||
<?php
|
<?php
|
||||||
// Pandora FMS- http://pandorafms.com
|
//Pandora FMS- http://pandorafms.com
|
||||||
// ==================================================
|
// ==================================================
|
||||||
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
|
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
|
||||||
// Please see http://pandorafms.org for full contribution list
|
// Please see http://pandorafms.org for full contribution list
|
||||||
|
|
||||||
// This program is free software; you can redistribute it and/or
|
// This program is free software; you can redistribute it and/or
|
||||||
// modify it under the terms of the GNU Lesser General Public License
|
// modify it under the terms of the GNU Lesser General Public License
|
||||||
// as published by the Free Software Foundation; version 2
|
// as published by the Free Software Foundation; version 2
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
require_once $config['homedir'].'/include/class/Tree.class.php';
|
require_once($config['homedir']."/include/class/Tree.class.php");
|
||||||
|
|
||||||
class TreeGroup extends Tree
|
class TreeGroup extends Tree {
|
||||||
{
|
|
||||||
|
|
||||||
protected $propagateCounters = true;
|
protected $propagateCounters = true;
|
||||||
|
|
||||||
protected $displayAllGroups = false;
|
protected $displayAllGroups = false;
|
||||||
|
|
||||||
|
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')
|
|
||||||
{
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
|
|
||||||
$this->L1fieldName = 'id_group';
|
$this->L1fieldName = "id_group";
|
||||||
$this->L1extraFields = [
|
$this->L1extraFields = array(
|
||||||
'tg.nombre AS `name`',
|
"tg.nombre AS `name`",
|
||||||
'tg.icon',
|
"tg.icon",
|
||||||
'tg.id_grupo AS gid',
|
"tg.id_grupo AS gid"
|
||||||
];
|
);
|
||||||
|
|
||||||
$this->L2conditionInside = 'AND (
|
$this->L2conditionInside = "AND (
|
||||||
ta.id_grupo = '.$this->id.'
|
ta.id_grupo = " . $this->id . "
|
||||||
OR tasg.id_group = '.$this->id.'
|
OR tasg.id_group = " . $this->id . "
|
||||||
)';
|
)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setPropagateCounters($value) {
|
||||||
public function setPropagateCounters($value)
|
$this->propagateCounters = (bool)$value;
|
||||||
{
|
|
||||||
$this->propagateCounters = (bool) $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setDisplayAllGroups($value) {
|
||||||
public function setDisplayAllGroups($value)
|
$this->displayAllGroups = (bool)$value;
|
||||||
{
|
|
||||||
$this->displayAllGroups = (bool) $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getData() {
|
||||||
protected function getData()
|
|
||||||
{
|
|
||||||
if ($this->id == -1) {
|
if ($this->id == -1) {
|
||||||
|
|
||||||
$this->getFirstLevel();
|
$this->getFirstLevel();
|
||||||
} else if ($this->type == 'group') {
|
|
||||||
|
} elseif ($this->type == 'group') {
|
||||||
$this->getSecondLevel();
|
$this->getSecondLevel();
|
||||||
} else if ($this->type == 'agent') {
|
} elseif ($this->type == 'agent') {
|
||||||
$this->getThirdLevel();
|
$this->getThirdLevel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getGroupSearchFilter() {
|
||||||
protected function getGroupSearchFilter()
|
return "";
|
||||||
{
|
|
||||||
return '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getFirstLevel() {
|
||||||
protected function getFirstLevel()
|
|
||||||
{
|
|
||||||
$processed_items = $this->getProcessedGroups();
|
$processed_items = $this->getProcessedGroups();
|
||||||
|
|
||||||
if (!empty($processed_items)) {
|
if (!empty($processed_items)) {
|
||||||
// Filter by group name. This should be done after rerieving the items cause we need the possible items descendants
|
// Filter by group name. This should be done after rerieving the items cause we need the possible items descendants
|
||||||
if (!empty($this->filter['searchGroup'])) {
|
if (!empty($this->filter['searchGroup'])) {
|
||||||
// Save the groups which intersect with the user groups
|
// Save the groups which intersect with the user groups
|
||||||
$groups = db_get_all_rows_filter('tgrupo', ['nombre' => '%'.$this->filter['searchGroup'].'%']);
|
$groups = db_get_all_rows_filter('tgrupo', array('nombre' => '%' . $this->filter['searchGroup'] . '%'));
|
||||||
if ($groups == false) {
|
if ($groups == false) $groups = array();
|
||||||
$groups = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$userGroupsACL = $this->userGroupsACL;
|
$userGroupsACL = $this->userGroupsACL;
|
||||||
$ids_hash = array_reduce(
|
$ids_hash = array_reduce($groups, function ($userGroups, $group) use ($userGroupsACL) {
|
||||||
$groups,
|
|
||||||
function ($userGroups, $group) use ($userGroupsACL) {
|
|
||||||
$group_id = $group['id_grupo'];
|
$group_id = $group['id_grupo'];
|
||||||
if (isset($userGroupsACL[$group_id])) {
|
if (isset($userGroupsACL[$group_id])) {
|
||||||
$userGroups[$group_id] = $userGroupsACL[$group_id];
|
$userGroups[$group_id] = $userGroupsACL[$group_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $userGroups;
|
return $userGroups;
|
||||||
},
|
}, array());
|
||||||
[]
|
|
||||||
);
|
|
||||||
|
|
||||||
$result = self::extractGroupsWithIDs($processed_items, $ids_hash);
|
$result = self::extractGroupsWithIDs($processed_items, $ids_hash);
|
||||||
|
|
||||||
$processed_items = ($result === false) ? [] : $result;
|
$processed_items = ($result === false) ? array() : $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// groupID filter. To access the view from tactical views f.e.
|
// groupID filter. To access the view from tactical views f.e.
|
||||||
if (!empty($this->filter['groupID'])) {
|
if (!empty($this->filter['groupID'])) {
|
||||||
$result = self::extractItemWithID($processed_items, $this->filter['groupID'], 'group', $this->strictACL);
|
$result = self::extractItemWithID($processed_items, $this->filter['groupID'], "group", $this->strictACL);
|
||||||
|
|
||||||
$processed_items = ($result === false) ? [] : [$result];
|
$processed_items = ($result === false) ? array() : array($result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
hd("G-GETFIRSTLEVELGETFIRSTLEVELGETFIRSTLEVELGETFIRSTLEVELGETFIRSTLEVELGETFIRSTLEVELGETFIRSTLEVELGETFIRSTLEVEL", true);
|
||||||
|
hd($processed_items, true);
|
||||||
$this->tree = $processed_items;
|
$this->tree = $processed_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getProcessedGroups () {
|
||||||
protected function getProcessedGroups()
|
$processed_groups = array();
|
||||||
{
|
|
||||||
$processed_groups = [];
|
|
||||||
// Index and process the groups
|
// Index and process the groups
|
||||||
$groups = $this->getGroupCounters();
|
$groups = $this->getGroupCounters();
|
||||||
|
|
||||||
// If user have not permissions in parent, set parent node to 0 (all)
|
// If user have not permissions in parent, set parent node to 0 (all)
|
||||||
// Avoid to do foreach for admins
|
// Avoid to do foreach for admins
|
||||||
if (!users_can_manage_group_all('AR')) {
|
if (!users_can_manage_group_all("AR")) {
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (!isset($this->userGroups[$groups[$id]['parent']])) {
|
if (!isset($this->userGroups[$groups[$id]['parent']])) {
|
||||||
$groups[$id]['parent'] = 0;
|
$groups[$id]['parent'] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the group hierarchy
|
// Build the group hierarchy
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (isset($groups[$id]['parent']) && ($groups[$id]['parent'] != 0)) {
|
if (isset($groups[$id]['parent']) && ($groups[$id]['parent'] != 0)) {
|
||||||
$parent = $groups[$id]['parent'];
|
$parent = $groups[$id]['parent'];
|
||||||
// Parent exists
|
// Parent exists
|
||||||
if (!isset($groups[$parent]['children'])) {
|
if (!isset($groups[$parent]['children'])) {
|
||||||
$groups[$parent]['children'] = [];
|
$groups[$parent]['children'] = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store a reference to the group into the parent
|
// Store a reference to the group into the parent
|
||||||
$groups[$parent]['children'][] = &$groups[$id];
|
$groups[$parent]['children'][] = &$groups[$id];
|
||||||
// This group was introduced into a parent
|
// This group was introduced into a parent
|
||||||
$groups[$id]['have_parent'] = true;
|
$groups[$id]['have_parent'] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort the children groups
|
// Sort the children groups
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (isset($groups[$id]['children'])) {
|
if (isset($groups[$id]['children'])) {
|
||||||
usort($groups[$id]['children'], ['Tree', 'cmpSortNames']);
|
usort($groups[$id]['children'], array("Tree", "cmpSortNames"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Filter groups and eliminates the reference to children groups out of her parent
|
||||||
// Filter groups and eliminates the reference to children groups out of her parent
|
$groups = array_filter($groups, function ($group) {
|
||||||
$groups = array_filter(
|
|
||||||
$groups,
|
|
||||||
function ($group) {
|
|
||||||
return !$group['have_parent'];
|
return !$group['have_parent'];
|
||||||
}
|
});
|
||||||
);
|
|
||||||
// Propagate child counters to her parents
|
// Propagate child counters to her parents
|
||||||
|
|
||||||
if ($this->propagateCounters) {
|
if ($this->propagateCounters) {
|
||||||
self::processCounters($groups);
|
TreeGroup::processCounters($groups);
|
||||||
// Filter groups and eliminates the reference to empty groups
|
// Filter groups and eliminates the reference to empty groups
|
||||||
$groups = $this->deleteEmptyGroups($groups);
|
$groups = $this->deleteEmptyGroups($groups);
|
||||||
} else {
|
} else {
|
||||||
$groups = $this->deleteEmptyGroupsNotPropagate($groups);
|
$groups = $this->deleteEmptyGroupsNotPropagate($groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($groups, ['Tree', 'cmpSortNames']);
|
usort($groups, array("Tree", "cmpSortNames"));
|
||||||
|
|
||||||
return $groups;
|
return $groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getGroupCounters() {
|
||||||
protected function getGroupCounters()
|
|
||||||
{
|
|
||||||
$fields = $this->getFirstLevelFields();
|
$fields = $this->getFirstLevelFields();
|
||||||
$inside_fields = $this->getFirstLevelFieldsInside();
|
$inside_fields = $this->getFirstLevelFieldsInside();
|
||||||
|
|
||||||
$group_acl = '';
|
$group_acl = "";
|
||||||
$secondary_group_acl = '';
|
$secondary_group_acl = "";
|
||||||
if (!users_can_manage_group_all('AR')) {
|
if (!users_can_manage_group_all("AR")) {
|
||||||
$user_groups_str = implode(',', $this->userGroupsArray);
|
$user_groups_str = implode(",", $this->userGroupsArray);
|
||||||
$group_acl = " AND ta.id_grupo IN ($user_groups_str)";
|
$group_acl = " AND ta.id_grupo IN ($user_groups_str)";
|
||||||
$secondary_group_acl = " AND tasg.id_group IN ($user_groups_str)";
|
$secondary_group_acl = " AND tasg.id_group IN ($user_groups_str)";
|
||||||
}
|
}
|
||||||
|
|
||||||
$agent_search_filter = $this->getAgentSearchFilter();
|
$agent_search_filter = $this->getAgentSearchFilter();
|
||||||
$agent_search_filter = preg_replace('/%/', '%%', $agent_search_filter);
|
$agent_search_filter = preg_replace("/%/", "%%", $agent_search_filter);
|
||||||
$agent_status_filter = $this->getAgentStatusFilter();
|
$agent_status_filter = $this->getAgentStatusFilter();
|
||||||
$module_status_filter = $this->getModuleStatusFilter();
|
$module_status_filter = $this->getModuleStatusFilter();
|
||||||
|
|
||||||
$module_search_inner = '';
|
$module_search_inner = "";
|
||||||
$module_search_filter = '';
|
$module_search_filter = "";
|
||||||
if (!empty($this->filter['searchModule'])) {
|
if (!empty($this->filter['searchModule'])) {
|
||||||
$module_search_inner = '
|
$module_search_inner = "
|
||||||
INNER JOIN tagente_modulo tam
|
INNER JOIN tagente_modulo tam
|
||||||
ON ta.id_agente = tam.id_agente
|
ON ta.id_agente = tam.id_agente
|
||||||
INNER JOIN tagente_estado tae
|
INNER JOIN tagente_estado tae
|
||||||
ON tae.id_agente_modulo = tam.id_agente_modulo';
|
ON tae.id_agente_modulo = tam.id_agente_modulo";
|
||||||
$module_search_filter = "AND tam.disabled = 0
|
$module_search_filter = "AND tam.disabled = 0
|
||||||
AND tam.nombre LIKE '%%".$this->filter['searchModule']."%%' ".$this->getModuleStatusFilterFromTestado();
|
AND tam.nombre LIKE '%%" . $this->filter['searchModule'] . "%%' " .
|
||||||
|
$this->getModuleStatusFilterFromTestado()
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
$table = is_metaconsole() ? 'tmetaconsole_agent' : 'tagente';
|
$table = is_metaconsole() ? "tmetaconsole_agent" : "tagente";
|
||||||
$table_sec = is_metaconsole() ? 'tmetaconsole_agent_secondary_group' : 'tagent_secondary_group';
|
$table_sec = is_metaconsole() ? "tmetaconsole_agent_secondary_group" : "tagent_secondary_group";
|
||||||
|
|
||||||
$sql_model = "SELECT %s FROM
|
$sql_model = "SELECT %s FROM
|
||||||
(
|
(
|
||||||
@ -236,7 +214,7 @@ class TreeGroup extends Tree
|
|||||||
$secondary_group_acl
|
$secondary_group_acl
|
||||||
GROUP BY id_group
|
GROUP BY id_group
|
||||||
) x GROUP BY g";
|
) x GROUP BY g";
|
||||||
$sql_array = [];
|
$sql_array = array();
|
||||||
foreach ($inside_fields as $inside_field) {
|
foreach ($inside_fields as $inside_field) {
|
||||||
$sql_array[] = sprintf(
|
$sql_array[] = sprintf(
|
||||||
$sql_model,
|
$sql_model,
|
||||||
@ -245,46 +223,48 @@ class TreeGroup extends Tree
|
|||||||
$inside_field['condition']
|
$inside_field['condition']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
$sql = "SELECT $fields FROM (" . implode(" UNION ALL ", $sql_array) . ") x2
|
||||||
$sql = "SELECT $fields FROM (".implode(' UNION ALL ', $sql_array).') x2
|
|
||||||
RIGHT JOIN tgrupo tg
|
RIGHT JOIN tgrupo tg
|
||||||
ON x2.g = tg.id_grupo
|
ON x2.g = tg.id_grupo
|
||||||
GROUP BY tg.id_grupo';
|
GROUP BY tg.id_grupo";
|
||||||
$stats = db_get_all_rows_sql($sql);
|
$stats = db_get_all_rows_sql($sql);
|
||||||
|
|
||||||
$group_stats = [];
|
$group_stats = array();
|
||||||
|
|
||||||
|
hd("STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS STATS ", true);
|
||||||
|
hd($stats, true);
|
||||||
foreach ($stats as $group) {
|
foreach ($stats as $group) {
|
||||||
$group_stats[$group['gid']]['total_count'] = (int) $group['total_count'];
|
$group_stats[$group['gid']]['total_count'] = (int)$group['total_count'];
|
||||||
$group_stats[$group['gid']]['total_critical_count'] = (int) $group['total_critical_count'];
|
$group_stats[$group['gid']]['total_critical_count'] = (int)$group['total_critical_count'];
|
||||||
$group_stats[$group['gid']]['total_unknown_count'] = (int) $group['total_unknown_count'];
|
$group_stats[$group['gid']]['total_unknown_count'] = (int)$group['total_unknown_count'];
|
||||||
$group_stats[$group['gid']]['total_warning_count'] = (int) $group['total_warning_count'];
|
$group_stats[$group['gid']]['total_warning_count'] = (int)$group['total_warning_count'];
|
||||||
$group_stats[$group['gid']]['total_not_init_count'] = (int) $group['total_not_init_count'];
|
$group_stats[$group['gid']]['total_not_init_count'] = (int)$group['total_not_init_count'];
|
||||||
$group_stats[$group['gid']]['total_normal_count'] = (int) $group['total_normal_count'];
|
$group_stats[$group['gid']]['total_normal_count'] = (int)$group['total_normal_count'];
|
||||||
$group_stats[$group['gid']]['total_fired_count'] = (int) $group['total_alerts_count'];
|
$group_stats[$group['gid']]['total_fired_count'] = (int)$group['total_alerts_count'];
|
||||||
$group_stats[$group['gid']]['name'] = $group['name'];
|
$group_stats[$group['gid']]['name'] = $group['name'];
|
||||||
$group_stats[$group['gid']]['parent'] = $group['parent'];
|
$group_stats[$group['gid']]['parent'] = $group['parent'];
|
||||||
$group_stats[$group['gid']]['icon'] = $group['icon'];
|
$group_stats[$group['gid']]['icon'] = $group['icon'];
|
||||||
$group_stats[$group['gid']]['id'] = $group['gid'];
|
$group_stats[$group['gid']]['id'] = $group['gid'];
|
||||||
$group_stats[$group['gid']] = $this->getProcessedItem($group_stats[$group['gid']]);
|
$group_stats[$group['gid']] = $this->getProcessedItem($group_stats[$group['gid']]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return $group_stats;
|
return $group_stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getFirstLevelFields() {
|
||||||
protected function getFirstLevelFields()
|
|
||||||
{
|
|
||||||
$fields = parent::getFirstLevelFields();
|
$fields = parent::getFirstLevelFields();
|
||||||
$parent = $this->getDisplayHierarchy() ? 'tg.parent' : '0 as parent';
|
$parent = $this->getDisplayHierarchy() ? 'tg.parent' : '0 as parent';
|
||||||
return "$fields, $parent";
|
return "$fields, $parent";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getProcessedModules($modules_tree) {
|
||||||
|
|
||||||
protected function getProcessedModules($modules_tree)
|
$groups = array();
|
||||||
{
|
|
||||||
$groups = [];
|
|
||||||
foreach ($modules_tree as $group) {
|
foreach ($modules_tree as $group) {
|
||||||
$groups[$group['id']] = $group;
|
$groups[$group["id"]] = $group;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the module hierarchy
|
// Build the module hierarchy
|
||||||
@ -293,9 +273,8 @@ class TreeGroup extends Tree
|
|||||||
$parent = $groups[$id]['parent'];
|
$parent = $groups[$id]['parent'];
|
||||||
// Parent exists
|
// Parent exists
|
||||||
if (!isset($groups[$parent]['children'])) {
|
if (!isset($groups[$parent]['children'])) {
|
||||||
$groups[$parent]['children'] = [];
|
$groups[$parent]['children'] = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store a reference to the group into the parent
|
// Store a reference to the group into the parent
|
||||||
$groups[$parent]['children'][] = &$groups[$id];
|
$groups[$parent]['children'][] = &$groups[$id];
|
||||||
// This group was introduced into a parent
|
// This group was introduced into a parent
|
||||||
@ -306,94 +285,75 @@ class TreeGroup extends Tree
|
|||||||
// Sort the children groups
|
// Sort the children groups
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (isset($groups[$id]['children'])) {
|
if (isset($groups[$id]['children'])) {
|
||||||
usort($groups[$id]['children'], ['Tree', 'cmpSortNames']);
|
usort($groups[$id]['children'], array("Tree", "cmpSortNames"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Filter groups and eliminates the reference to children groups out of her parent
|
||||||
// Filter groups and eliminates the reference to children groups out of her parent
|
$groups = array_filter($groups, function ($group) {
|
||||||
$groups = array_filter(
|
|
||||||
$groups,
|
|
||||||
function ($group) {
|
|
||||||
return !$group['have_parent'];
|
return !$group['have_parent'];
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
return array_values($groups);
|
return array_values($groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// FIXME: Hierarchy lops is broken
|
// FIXME: Hierarchy lops is broken
|
||||||
protected function getProcessedModules_old($modules_tree)
|
protected function getProcessedModules_old($modules_tree) {
|
||||||
{
|
|
||||||
$tree_modules = [];
|
|
||||||
$new_modules_root = array_filter(
|
|
||||||
$modules_tree,
|
|
||||||
function ($module) {
|
|
||||||
return (isset($module['parent']) && ($module['parent'] == 0));
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$new_modules_child = array_filter(
|
$tree_modules = array();
|
||||||
$modules_tree,
|
$new_modules_root = array_filter($modules_tree, function ($module) {
|
||||||
function ($module) {
|
return (isset($module['parent']) && ($module['parent'] == 0));
|
||||||
|
});
|
||||||
|
|
||||||
|
$new_modules_child = array_filter($modules_tree, function ($module) {
|
||||||
return (isset($module['parent']) && ($module['parent'] != 0));
|
return (isset($module['parent']) && ($module['parent'] != 0));
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while (!empty($new_modules_child)) {
|
while (!empty($new_modules_child)) {
|
||||||
foreach ($new_modules_child as $i => $child) {
|
foreach ($new_modules_child as $i => $child) {
|
||||||
self::recursive_modules_tree_view($new_modules_root, $new_modules_child, $i, $child);
|
TreeGroup::recursive_modules_tree_view($new_modules_root, $new_modules_child, $i, $child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($new_modules_root as $m) {
|
foreach ($new_modules_root as $m) {
|
||||||
$tree_modules[] = $m;
|
$tree_modules[] = $m;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tree_modules;
|
return $tree_modules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// FIXME with getProcessedModules_old
|
// FIXME with getProcessedModules_old
|
||||||
static function recursive_modules_tree_view(&$new_modules, &$new_modules_child, $i, $child)
|
static function recursive_modules_tree_view (&$new_modules, &$new_modules_child, $i, $child) {
|
||||||
{
|
|
||||||
foreach ($new_modules as $index => $module) {
|
foreach ($new_modules as $index => $module) {
|
||||||
if ($module['id'] == $child['parent']) {
|
if ($module['id'] == $child['parent']) {
|
||||||
$new_modules[$index]['children'][] = $child;
|
$new_modules[$index]['children'][] = $child;
|
||||||
unset($new_modules_child[$i]);
|
unset($new_modules_child[$i]);
|
||||||
break;
|
break;
|
||||||
} else if (isset($new_modules[$index]['children'])) {
|
}
|
||||||
self::recursive_modules_tree_view($new_modules[$index]['children'], $new_modules_child, $i, $child);
|
else if (isset($new_modules[$index]['children'])) {
|
||||||
|
TreeGroup::recursive_modules_tree_view ($new_modules[$index]['children'], $new_modules_child, $i, $child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function processCounters(&$groups) {
|
||||||
static function processCounters(&$groups)
|
$all_counters = array();
|
||||||
{
|
|
||||||
$all_counters = [];
|
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
$child_counters = [];
|
$child_counters = array();
|
||||||
if (!empty($groups[$id]['children'])) {
|
if (!empty($groups[$id]['children'])) {
|
||||||
$child_counters = self::processCounters($groups[$id]['children']);
|
$child_counters = TreeGroup::processCounters($groups[$id]['children']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($child_counters)) {
|
if (!empty($child_counters)) {
|
||||||
foreach ($child_counters as $type => $value) {
|
foreach($child_counters as $type => $value) {
|
||||||
$groups[$id]['counters'][$type] += $value;
|
$groups[$id]['counters'][$type] += $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
foreach($groups[$id]['counters'] as $type => $value) {
|
||||||
foreach ($groups[$id]['counters'] as $type => $value) {
|
|
||||||
$all_counters[$type] += $value;
|
$all_counters[$type] += $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $all_counters;
|
return $all_counters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Recursive function to remove the empty groups
|
* @brief Recursive function to remove the empty groups
|
||||||
*
|
*
|
||||||
@ -401,47 +361,32 @@ class TreeGroup extends Tree
|
|||||||
*
|
*
|
||||||
* @return new_groups A new groups structure without empty groups
|
* @return new_groups A new groups structure without empty groups
|
||||||
*/
|
*/
|
||||||
protected function deleteEmptyGroups($groups)
|
protected function deleteEmptyGroups ($groups) {
|
||||||
{
|
if($this->displayAllGroups) return $groups;
|
||||||
if ($this->displayAllGroups) {
|
$new_groups = array();
|
||||||
return $groups;
|
|
||||||
}
|
|
||||||
|
|
||||||
$new_groups = [];
|
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
// If a group is empty, do not add to new_groups.
|
// If a group is empty, do not add to new_groups.
|
||||||
if (!isset($group['counters']['total']) || $group['counters']['total'] == 0) {
|
if (!isset($group['counters']['total']) || $group['counters']['total'] == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tray to remove the children groups
|
// Tray to remove the children groups
|
||||||
if (!empty($group['children'])) {
|
if (!empty($group['children'])) {
|
||||||
$children = $this->deleteEmptyGroups($group['children']);
|
$children = $this->deleteEmptyGroups ($group['children']);
|
||||||
if (empty($children)) {
|
if (empty($children)) unset($group['children']);
|
||||||
unset($group['children']);
|
else $group['children'] = $children;
|
||||||
} else {
|
|
||||||
$group['children'] = $children;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$new_groups[] = $group;
|
$new_groups[] = $group;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $new_groups;
|
return $new_groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function deleteEmptyGroupsNotPropagate ($groups) {
|
||||||
protected function deleteEmptyGroupsNotPropagate($groups)
|
if($this->displayAllGroups) return $groups;
|
||||||
{
|
$new_groups = array();
|
||||||
if ($this->displayAllGroups) {
|
|
||||||
return $groups;
|
|
||||||
}
|
|
||||||
|
|
||||||
$new_groups = [];
|
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
// Tray to remove the children groups
|
// Tray to remove the children groups
|
||||||
if (!empty($group['children'])) {
|
if (!empty($group['children'])) {
|
||||||
$children = $this->deleteEmptyGroupsNotPropagate($group['children']);
|
$children = $this->deleteEmptyGroupsNotPropagate ($group['children']);
|
||||||
if (empty($children)) {
|
if (empty($children)) {
|
||||||
unset($group['children']);
|
unset($group['children']);
|
||||||
// If a group is empty, do not add to new_groups.
|
// If a group is empty, do not add to new_groups.
|
||||||
@ -459,18 +404,16 @@ class TreeGroup extends Tree
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $new_groups;
|
return $new_groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function extractGroupsWithIDs ($groups, $ids_hash) {
|
||||||
private static function extractGroupsWithIDs($groups, $ids_hash)
|
$result_groups = array();
|
||||||
{
|
|
||||||
$result_groups = [];
|
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
if (isset($ids_hash[$group['id']])) {
|
if (isset($ids_hash[$group['id']])) {
|
||||||
$result_groups[] = $group;
|
$result_groups[] = $group;
|
||||||
} else if (!empty($group['children'])) {
|
}
|
||||||
|
else if (!empty($group['children'])) {
|
||||||
$result = self::extractGroupsWithIDs($group['children'], $ids_hash);
|
$result = self::extractGroupsWithIDs($group['children'], $ids_hash);
|
||||||
|
|
||||||
// Item found on children
|
// Item found on children
|
||||||
@ -483,47 +426,42 @@ class TreeGroup extends Tree
|
|||||||
return $result_groups;
|
return $result_groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function extractItemWithID ($items, $item_id, $item_type = "group", $strictACL = false) {
|
||||||
private static function extractItemWithID($items, $item_id, $item_type='group', $strictACL=false)
|
|
||||||
{
|
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
if ($item['type'] != $item_type) {
|
if ($item["type"] != $item_type)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
// Item found
|
// Item found
|
||||||
if ($strictACL && is_metaconsole()) {
|
if ($strictACL && is_metaconsole()) {
|
||||||
foreach ($item['id'] as $server_id => $id) {
|
foreach ($item["id"] as $server_id => $id) {
|
||||||
if ($id == $item_id) {
|
if ($id == $item_id)
|
||||||
return $item;
|
return $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
else {
|
||||||
if ($item['id'] == $item_id) {
|
if ($item["id"] == $item_id)
|
||||||
return $item;
|
return $item;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($item['type'] == 'group' && !empty($item['children'])) {
|
if ($item["type"] == "group" && !empty($item["children"])) {
|
||||||
$result = self::extractItemWithID($item['children'], $item_id, $item_type, $strictACL);
|
$result = self::extractItemWithID($item["children"], $item_id, $item_type, $strictACL);
|
||||||
|
|
||||||
// Item found on children
|
// Item found on children
|
||||||
if ($result !== false) {
|
if ($result !== false)
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Item not found
|
// Item not found
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getDisplayHierarchy() {
|
||||||
protected function getDisplayHierarchy()
|
|
||||||
{
|
|
||||||
return $this->filter['searchHirearchy'] ||
|
return $this->filter['searchHirearchy'] ||
|
||||||
(empty($this->filter['searchAgent']) && empty($this->filter['searchModule']));
|
(empty($this->filter['searchAgent']) && empty($this->filter['searchModule']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
@ -1,64 +1,56 @@
|
|||||||
<?php
|
<?php
|
||||||
// Pandora FMS- http://pandorafms.com
|
//Pandora FMS- http://pandorafms.com
|
||||||
// ==================================================
|
// ==================================================
|
||||||
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
|
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
|
||||||
// Please see http://pandorafms.org for full contribution list
|
// Please see http://pandorafms.org for full contribution list
|
||||||
|
|
||||||
// This program is free software; you can redistribute it and/or
|
// This program is free software; you can redistribute it and/or
|
||||||
// modify it under the terms of the GNU Lesser General Public License
|
// modify it under the terms of the GNU Lesser General Public License
|
||||||
// as published by the Free Software Foundation; version 2
|
// as published by the Free Software Foundation; version 2
|
||||||
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
require_once $config['homedir'].'/include/class/Tree.class.php';
|
require_once($config['homedir']."/include/class/Tree.class.php");
|
||||||
|
|
||||||
class TreeGroupEdition extends TreeGroup
|
class TreeGroupEdition extends TreeGroup {
|
||||||
{
|
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')
|
|
||||||
{
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
}
|
}
|
||||||
|
protected function getData() {
|
||||||
|
|
||||||
protected function getData()
|
|
||||||
{
|
|
||||||
if ($this->id == -1) {
|
if ($this->id == -1) {
|
||||||
$this->getFirstLevel();
|
$this->getFirstLevel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getProcessedGroups () {
|
||||||
protected function getProcessedGroups()
|
$processed_groups = array();
|
||||||
{
|
|
||||||
$processed_groups = [];
|
|
||||||
// Index and process the groups
|
// Index and process the groups
|
||||||
$groups = $this->getGroupCounters();
|
$groups = $this->getGroupCounters();
|
||||||
|
|
||||||
// If user have not permissions in parent, set parent node to 0 (all)
|
// If user have not permissions in parent, set parent node to 0 (all)
|
||||||
// Avoid to do foreach for admins
|
// Avoid to do foreach for admins
|
||||||
if (!users_can_manage_group_all('AR')) {
|
if (!users_can_manage_group_all("AR")) {
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (!isset($this->userGroups[$groups[$id]['parent']])) {
|
if (!isset($this->userGroups[$groups[$id]['parent']])) {
|
||||||
$groups[$id]['parent'] = 0;
|
$groups[$id]['parent'] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the group hierarchy
|
// Build the group hierarchy
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (isset($groups[$id]['parent']) && ($groups[$id]['parent'] != 0)) {
|
if (isset($groups[$id]['parent']) && ($groups[$id]['parent'] != 0)) {
|
||||||
$parent = $groups[$id]['parent'];
|
$parent = $groups[$id]['parent'];
|
||||||
// Parent exists
|
// Parent exists
|
||||||
if (!isset($groups[$parent]['children'])) {
|
if (!isset($groups[$parent]['children'])) {
|
||||||
$groups[$parent]['children'] = [];
|
$groups[$parent]['children'] = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store a reference to the group into the parent
|
// Store a reference to the group into the parent
|
||||||
$groups[$parent]['children'][] = &$groups[$id];
|
$groups[$parent]['children'][] = &$groups[$id];
|
||||||
// This group was introduced into a parent
|
// This group was introduced into a parent
|
||||||
@ -69,37 +61,32 @@ class TreeGroupEdition extends TreeGroup
|
|||||||
// Sort the children groups
|
// Sort the children groups
|
||||||
foreach ($groups as $id => $group) {
|
foreach ($groups as $id => $group) {
|
||||||
if (isset($groups[$id]['children'])) {
|
if (isset($groups[$id]['children'])) {
|
||||||
usort($groups[$id]['children'], ['Tree', 'cmpSortNames']);
|
usort($groups[$id]['children'], array("Tree", "cmpSortNames"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Filter groups and eliminates the reference to children groups out of her parent
|
||||||
// Filter groups and eliminates the reference to children groups out of her parent
|
$groups = array_filter($groups, function ($group) {
|
||||||
$groups = array_filter(
|
|
||||||
$groups,
|
|
||||||
function ($group) {
|
|
||||||
return !$group['have_parent'];
|
return !$group['have_parent'];
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
usort($groups, ['Tree', 'cmpSortNames']);
|
usort($groups, array("Tree", "cmpSortNames"));
|
||||||
return $groups;
|
return $groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected function getGroupCounters()
|
protected function getGroupCounters() {
|
||||||
{
|
$messages = array(
|
||||||
$messages = [
|
|
||||||
'confirm' => __('Confirm'),
|
'confirm' => __('Confirm'),
|
||||||
'cancel' => __('Cancel'),
|
'cancel' => __('Cancel'),
|
||||||
'messg' => __('Are you sure?'),
|
'messg' => __('Are you sure?')
|
||||||
];
|
);
|
||||||
$sql = 'SELECT id_grupo AS gid,
|
$sql = "SELECT id_grupo AS gid,
|
||||||
nombre as name, parent, icon
|
nombre as name, parent, icon
|
||||||
FROM tgrupo
|
FROM tgrupo
|
||||||
';
|
";
|
||||||
|
|
||||||
$stats = db_get_all_rows_sql($sql);
|
$stats = db_get_all_rows_sql($sql);
|
||||||
$group_stats = [];
|
$group_stats = array();
|
||||||
foreach ($stats as $group) {
|
foreach ($stats as $group) {
|
||||||
$group_stats[$group['gid']]['name'] = $group['name'];
|
$group_stats[$group['gid']]['name'] = $group['name'];
|
||||||
$group_stats[$group['gid']]['parent'] = $group['parent'];
|
$group_stats[$group['gid']]['parent'] = $group['parent'];
|
||||||
@ -115,6 +102,7 @@ class TreeGroupEdition extends TreeGroup
|
|||||||
|
|
||||||
return $group_stats;
|
return $group_stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
342
pandora_console/include/class/TreeService.class.php
Normal file
342
pandora_console/include/class/TreeService.class.php
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
<?php
|
||||||
|
//Pandora FMS- http://pandorafms.com
|
||||||
|
// ==================================================
|
||||||
|
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
|
||||||
|
// Please see http://pandorafms.org for full contribution list
|
||||||
|
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public License
|
||||||
|
// as published by the Free Software Foundation; version 2
|
||||||
|
|
||||||
|
// This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
global $config;
|
||||||
|
|
||||||
|
require_once($config['homedir']."/include/class/Tree.class.php");
|
||||||
|
|
||||||
|
class TreeService extends Tree {
|
||||||
|
|
||||||
|
protected $propagateCounters = true;
|
||||||
|
protected $displayAllGroups = false;
|
||||||
|
|
||||||
|
public function __construct($type, $rootType = '', $id = -1, $rootID = -1, $serverID = false, $childrenMethod = "on_demand", $access = 'AR') {
|
||||||
|
global $config;
|
||||||
|
|
||||||
|
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
|
||||||
|
|
||||||
|
$this->L1fieldName = "id_group";
|
||||||
|
$this->L1extraFields = array(
|
||||||
|
"ts.name AS `name`",
|
||||||
|
"ts.id AS `sid`"
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->filter['statusAgent'] = AGENT_STATUS_ALL;
|
||||||
|
|
||||||
|
$this->avoid_condition = true;
|
||||||
|
|
||||||
|
$this->L2inner = 'LEFT JOIN tservice_element tse
|
||||||
|
ON tse.id_agent = ta.id_agente';
|
||||||
|
|
||||||
|
$this->L2condition = 'AND tse.id_service='.$this->id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPropagateCounters($value) {
|
||||||
|
$this->propagateCounters = (bool)$value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDisplayAllGroups($value) {
|
||||||
|
$this->displayAllGroups = (bool)$value;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getData() {
|
||||||
|
if ($this->id == -1) {
|
||||||
|
$this->getFirstLevel();
|
||||||
|
} elseif ($this->type == 'services') {
|
||||||
|
$this->getSecondLevel();
|
||||||
|
} elseif ($this->type == 'agent') {
|
||||||
|
$this->getThirdLevel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFirstLevel() {
|
||||||
|
$processed_items = $this->getProcessedServices();
|
||||||
|
$ids = array_keys($processed_items);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$filter=array('id'=>$ids);
|
||||||
|
|
||||||
|
$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;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->tree = [];
|
||||||
|
|
||||||
|
$services = services_get_services($filter, false, $display_all_services);
|
||||||
|
|
||||||
|
foreach ($services as $row) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$status = services_get_status($row, true);
|
||||||
|
|
||||||
|
switch ($status) {
|
||||||
|
|
||||||
|
case SERVICE_STATUS_NORMAL:
|
||||||
|
$processed_items[$row['id']]['statusImageHTML']='<img src="http://localhost/pandora_console/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:
|
||||||
|
$processed_items[$row['id']]['statusImageHTML']='<img src="http://localhost/pandora_console/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:
|
||||||
|
$processed_items[$row['id']][$key]['statusImageHTML']='<img src="http://localhost/pandora_console/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:
|
||||||
|
$processed_items[$row['id']]['statusImageHTML']='<img src="http://localhost/pandora_console/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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->tree = $processed_items;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getProcessedServices () {
|
||||||
|
$fields = $this->getFirstLevelFields();
|
||||||
|
|
||||||
|
//hd($this->userGroupsArray, true);
|
||||||
|
|
||||||
|
if (users_can_manage_group_all("AR")){
|
||||||
|
$groups_acl = "";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$groups_acl = "AND ts.id_group IN (".implode(',', $this->userGroupsArray).")";
|
||||||
|
}
|
||||||
|
|
||||||
|
$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
|
||||||
|
GROUP BY id
|
||||||
|
) as t1
|
||||||
|
ON tss.id_service_child = t1.id
|
||||||
|
WHERE tss.id_service_child IS NULL
|
||||||
|
%s
|
||||||
|
",
|
||||||
|
$groups_acl
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$stats = db_get_all_rows_sql($sql);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$services = array();
|
||||||
|
|
||||||
|
foreach ($stats as $service) {
|
||||||
|
$services[$service['id']] = $this->getProcessedItem($services[$service['id']]);
|
||||||
|
if ($service['total_services']+$service['total_agents']+$service['total_modules'] > 0)
|
||||||
|
$services[$service['id']]['searchChildren'] = 1;
|
||||||
|
else
|
||||||
|
$services[$service['id']]['searchChildren'] = 0;
|
||||||
|
|
||||||
|
$services[$service['id']]['counters'] = array('total_services'=>$service['total_services'], 'total_agents'=>$service['total_agents'], 'total_modules'=>$service['total_modules']);
|
||||||
|
$services[$service['id']]['name'] = $service['name'];
|
||||||
|
$services[$service['id']]['id'] = $service['id'];
|
||||||
|
$services[$service['id']]['serviceDetail']='http://localhost/pandora_console/index.php?sec=network&sec2=enterprise/operation/services/services&tab=service_map&id_service='.(int)$service['id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
hd("STATS:::::::::::::::::::::::::::::: ", true);
|
||||||
|
hd($services, true);
|
||||||
|
|
||||||
|
return $services;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getFirstLevelFields() {
|
||||||
|
$fields = array();
|
||||||
|
|
||||||
|
return implode(",", array_merge($fields, $this->L1extraFields));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSecondLevel() {
|
||||||
|
$data = array();
|
||||||
|
$data_agents = array();
|
||||||
|
$data_modules = array();
|
||||||
|
$data_services = array();
|
||||||
|
|
||||||
|
$sql = $this->getSecondLevelSql();
|
||||||
|
$data_agents = db_process_sql($sql);
|
||||||
|
|
||||||
|
if (empty($data_agents))
|
||||||
|
$data_agents = array();
|
||||||
|
|
||||||
|
$this->processAgents($data_agents);
|
||||||
|
|
||||||
|
foreach ($data_agents as $key => $agent) {
|
||||||
|
$data_agents[$key]['showEventsBtn'] = 1;
|
||||||
|
$data_agents[$key]['eventAgent'] = $agent['id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = $this->getSecondLevelModulesSql();
|
||||||
|
$data_modules = db_process_sql($sql);
|
||||||
|
|
||||||
|
if (empty($data_modules))
|
||||||
|
$data_modules = array();
|
||||||
|
else {
|
||||||
|
foreach ($data_modules as $key => $module) {
|
||||||
|
switch ($module['estado']) {
|
||||||
|
case '0':
|
||||||
|
$data_modules[$key]['statusImageHTML'] = '<img src="http://localhost/pandora_console/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 '1':
|
||||||
|
$data_modules[$key]['statusImageHTML'] = '<img src="http://localhost/pandora_console/images/status_sets/default/agent_critical_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="CRITICAL status." />';
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
$data_modules[$key]['statusImageHTML'] = '<img src="http://localhost/pandora_console/images/status_sets/default/agent_warning_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="WARNING status." />';
|
||||||
|
break;
|
||||||
|
case '4':
|
||||||
|
$data_modules[$key]['statusImageHTML'] = '<img src="http://localhost/pandora_console/images/status_sets/default/agent_no_data_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="UNKNOWN status." />';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
# code...
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data_modules[$key]['showEventsBtn'] = 1;
|
||||||
|
$data_modules[$key]['eventModule'] = $module['id_agente_modulo'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hd("MODULESSSS::", true);
|
||||||
|
hd($data_modules, true);
|
||||||
|
|
||||||
|
$sql = $this->getSecondLevelServicesSql();
|
||||||
|
$data_services = db_process_sql($sql);
|
||||||
|
|
||||||
|
|
||||||
|
$service_stats = array();
|
||||||
|
|
||||||
|
foreach ($data_services as $service) {
|
||||||
|
$service_stats[$service['id']]['id'] = (int)$service['id'];
|
||||||
|
$service_stats[$service['id']]['name'] = $service['name'];
|
||||||
|
$service_stats[$service['id']]['alias'] = $service['name'];
|
||||||
|
if ($service['total_services']+$service['total_agents']+$service['total_modules'] > 0)
|
||||||
|
$service_stats[$service['id']]['searchChildren'] = 1;
|
||||||
|
else
|
||||||
|
$services[$service['id']]['searchChildren'] = 0;
|
||||||
|
|
||||||
|
$service_stats[$service['id']]['rootID'] = $service['rootID'];
|
||||||
|
$service_stats[$service['id']]['rootType'] = $service['rootType'];
|
||||||
|
$service_stats[$service['id']]['type'] = 'services';
|
||||||
|
$service_stats[$service['id']]['children']=array();
|
||||||
|
$service_stats[$service['id']]['serviceDetail']='http://localhost/pandora_console/index.php?sec=network&sec2=enterprise/operation/services/services&tab=service_map&id_service='.(int)$service['id'];
|
||||||
|
$service_stats[$service['id']]['counters']=array('total_services'=>$service['total_services'], '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) {
|
||||||
|
|
||||||
|
case SERVICE_STATUS_NORMAL:
|
||||||
|
$service_stats[$row['id']]['statusImageHTML']='<img src="http://localhost/pandora_console/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="http://localhost/pandora_console/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="http://localhost/pandora_console/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="http://localhost/pandora_console/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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data_services = array_values($service_stats);
|
||||||
|
|
||||||
|
$data = array_merge($data_services, $data_agents, $data_modules);
|
||||||
|
|
||||||
|
if (empty($data)) {
|
||||||
|
$this->tree = array();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->tree = $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSecondLevelServicesSql() {
|
||||||
|
$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
|
||||||
|
";
|
||||||
|
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected function getSecondLevelModulesSql() {
|
||||||
|
|
||||||
|
$sql = "SELECT tse.id_agente_modulo, nombre AS `name`, nombre AS `alias`, tse.id_service AS `rootID`, 'services' AS `rootType`, 'modules' AS `type`, estado
|
||||||
|
FROM tservice_element tse
|
||||||
|
INNER JOIN tagente_modulo tam ON tse.id_agente_modulo=tam.id_agente_modulo
|
||||||
|
INNER JOIN tagente_estado tae ON tam.id_agente_modulo=tae.id_agente_estado
|
||||||
|
WHERE tse.id_service=$this->id AND tse.id_agente_modulo<>0
|
||||||
|
";
|
||||||
|
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getAgentStatusFilter ($status = self::TV_DEFAULT_AGENT_STATUS) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -21,8 +21,8 @@ Description: The default Pandora FMS theme layout
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Tree view styles */
|
/* Tree view styles */
|
||||||
/*@import url(tree.css);
|
@import url(tree.css);
|
||||||
@import url(fixed-bottom-box.css);*/
|
@import url(fixed-bottom-box.css);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ---------------------------------------------------------------------
|
* ---------------------------------------------------------------------
|
||||||
|
@ -314,6 +314,7 @@ if ($id_agent != 0) {
|
|||||||
|
|
||||||
$text_module = (string) get_parameter('module_search', '');
|
$text_module = (string) get_parameter('module_search', '');
|
||||||
$id_agent_module = get_parameter('module_search_hidden', get_parameter('id_agent_module', 0));
|
$id_agent_module = get_parameter('module_search_hidden', get_parameter('id_agent_module', 0));
|
||||||
|
hd("------------------------------------>>>>>>> ".$id_agent_module." y id_agent: ".$id_agent, true);
|
||||||
if ($id_agent_module != 0) {
|
if ($id_agent_module != 0) {
|
||||||
$text_module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $id_agent_module);
|
$text_module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $id_agent_module);
|
||||||
if ($text_module == false) {
|
if ($text_module == false) {
|
||||||
|
@ -294,6 +294,8 @@ enterprise_hook('close_meta_frame');
|
|||||||
|
|
||||||
$(".loading_tree").show();
|
$(".loading_tree").show();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var parameters = {};
|
var parameters = {};
|
||||||
parameters['page'] = "include/ajax/tree.ajax";
|
parameters['page'] = "include/ajax/tree.ajax";
|
||||||
parameters['getChildren'] = 1;
|
parameters['getChildren'] = 1;
|
||||||
@ -436,7 +438,7 @@ enterprise_hook('close_meta_frame');
|
|||||||
params.id_module = module_id;
|
params.id_module = module_id;
|
||||||
params.offset = offset;
|
params.offset = offset;
|
||||||
params.period = period;
|
params.period = period;
|
||||||
title = <?php echo "'".__('Module: ')."'"; ?> ;
|
title = <?php echo "'" . __("Module: ") . "'" ?> ;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
|
||||||
@ -470,13 +472,13 @@ enterprise_hook('close_meta_frame');
|
|||||||
$("#text-time_from, #text-time_to").timepicker({
|
$("#text-time_from, #text-time_to").timepicker({
|
||||||
showSecond: true,
|
showSecond: true,
|
||||||
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
|
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
|
||||||
timeOnlyTitle: '<?php echo __('Choose time'); ?>',
|
timeOnlyTitle: '<?php echo __('Choose time');?>',
|
||||||
timeText: '<?php echo __('Time'); ?>',
|
timeText: '<?php echo __('Time');?>',
|
||||||
hourText: '<?php echo __('Hour'); ?>',
|
hourText: '<?php echo __('Hour');?>',
|
||||||
minuteText: '<?php echo __('Minute'); ?>',
|
minuteText: '<?php echo __('Minute');?>',
|
||||||
secondText: '<?php echo __('Second'); ?>',
|
secondText: '<?php echo __('Second');?>',
|
||||||
currentText: '<?php echo __('Now'); ?>',
|
currentText: '<?php echo __('Now');?>',
|
||||||
closeText: '<?php echo __('Close'); ?>'});
|
closeText: '<?php echo __('Close');?>'});
|
||||||
|
|
||||||
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
|
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
|
||||||
$("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
|
$("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user