Merge branch 'ent-3210-Nueva-vista-de-servicios' into 'develop'

Ent 3210 nueva vista de servicios

See merge request artica/pandorafms!2195

Former-commit-id: f29cb46b83ff0fde722f3c5e3eaf26aedf5cf327
This commit is contained in:
Alejandro Fraguas 2019-02-26 16:32:34 +01:00
commit 441fb979e1
8 changed files with 2552 additions and 2300 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

View File

@ -3,173 +3,163 @@
// ==================================================
// Copyright (c) 2005-2012 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.
// Only accesible by ajax
if (is_ajax()) {
global $config;
if (is_ajax ()) {
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);
// Try to authenticate by hash on public dashboards
if ($public_hash == 0) {
// Login check
check_login();
} else {
$validate_hash = enterprise_hook(
'dasboard_validate_public_hash',
array($public_hash, 'tree_view')
);
if ($validate_hash === false || $validate_hash === ENTERPRISE_NOT_HOOK) {
db_pandora_audit("Invalid public hash", "Trying to access report builder");
require ("general/noaccess.php");
exit;
}
}
require_once($config['homedir'] . "/include/class/Tree.class.php");
require_once($config['homedir'] . "/include/class/TreeOS.class.php");
require_once($config['homedir'] . "/include/class/TreeModuleGroup.class.php");
require_once($config['homedir'] . "/include/class/TreeModule.class.php");
require_once($config['homedir'] . "/include/class/TreeTag.class.php");
require_once($config['homedir'] . "/include/class/TreeGroup.class.php");
require_once($config['homedir'] . "/include/class/TreeService.class.php");
require_once($config['homedir'] . "/include/class/TreeGroupEdition.class.php");
enterprise_include_once("include/class/TreePolicies.class.php");
enterprise_include_once("include/class/TreeGroupMeta.class.php");
require_once($config['homedir'] . "/include/functions_reporting.php");
require_once($config['homedir'] . "/include/functions_os.php");
$getChildren = (bool) get_parameter('getChildren', 0);
$getGroupStatus = (bool) get_parameter('getGroupStatus', 0);
$getDetail = (bool) get_parameter('getDetail');
if ($getChildren) {
$type = get_parameter('type', 'group');
$rootType = get_parameter('rootType', '');
$id = get_parameter('id', -1);
$rootID = get_parameter('rootID', -1);
$serverID = get_parameter('serverID', false);
$childrenMethod = get_parameter('childrenMethod', 'on_demand');
$hash = get_parameter('hash', false);
if ($hash !== false) {
enterprise_hook('dasboard_validate_public_hash', array($hash, 'tree_view'));
}
// Try to authenticate by hash on public dashboards
if ($public_hash == 0) {
// Login check
check_login();
} else {
$validate_hash = enterprise_hook(
'dasboard_validate_public_hash',
[
$public_hash,
'tree_view',
]
);
if ($validate_hash === false || $validate_hash === ENTERPRISE_NOT_HOOK) {
db_pandora_audit('Invalid public hash', 'Trying to access report builder');
include 'general/noaccess.php';
exit;
}
}
$default_filters = array(
'searchAgent' => '',
'statusAgent' => AGENT_STATUS_ALL,
'searchModule' => '',
'statusModule' => -1,
'groupID' => 0,
'tagID' => 0,
);
$filter = get_parameter('filter', $default_filters);
include_once $config['homedir'].'/include/class/Tree.class.php';
include_once $config['homedir'].'/include/class/TreeOS.class.php';
include_once $config['homedir'].'/include/class/TreeModuleGroup.class.php';
include_once $config['homedir'].'/include/class/TreeModule.class.php';
include_once $config['homedir'].'/include/class/TreeTag.class.php';
include_once $config['homedir'].'/include/class/TreeGroup.class.php';
include_once $config['homedir'].'/include/class/TreeGroupEdition.class.php';
enterprise_include_once('include/class/TreePolicies.class.php');
enterprise_include_once('include/class/TreeGroupMeta.class.php');
include_once $config['homedir'].'/include/functions_reporting.php';
include_once $config['homedir'].'/include/functions_os.php';
$agent_a = check_acl ($config['id_user'], 0, "AR");
$agent_w = check_acl ($config['id_user'], 0, "AW");
$access = ($agent_a == true) ? 'AR' : (($agent_w == true) ? 'AW' : 'AR');
$switch_type = !empty($rootType) ? $rootType : $type;
switch ($switch_type) {
case 'os':
$tree = new TreeOS($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'module_group':
$tree = new TreeModuleGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'module':
$tree = new TreeModule($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'tag':
$tree = new TreeTag($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'group':
if(is_metaconsole()){
if (!class_exists('TreeGroupMeta')) break;
$tree = new TreeGroupMeta($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
}
else{
$tree = new TreeGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
}
break;
case 'policies':
if (!class_exists('TreePolicies')) break;
$tree = new TreePolicies($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'group_edition':
$tree = new TreeGroupEdition($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'services':
$tree = new TreeService($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
default:
// FIXME. No error handler
return;
}
$getChildren = (bool) get_parameter('getChildren', 0);
$getGroupStatus = (bool) get_parameter('getGroupStatus', 0);
$getDetail = (bool) get_parameter('getDetail');
$tree->setFilter($filter);
ob_clean();
if ($getChildren) {
$type = get_parameter('type', 'group');
$rootType = get_parameter('rootType', '');
$id = get_parameter('id', -1);
$rootID = get_parameter('rootID', -1);
$serverID = get_parameter('serverID', false);
$childrenMethod = get_parameter('childrenMethod', 'on_demand');
$hash = get_parameter('hash', false);
if ($hash !== false) {
enterprise_hook('dasboard_validate_public_hash', [$hash, 'tree_view']);
}
$default_filters = [
'searchAgent' => '',
'statusAgent' => AGENT_STATUS_ALL,
'searchModule' => '',
'statusModule' => -1,
'groupID' => 0,
'tagID' => 0,
];
$filter = get_parameter('filter', $default_filters);
$agent_a = check_acl($config['id_user'], 0, 'AR');
$agent_w = check_acl($config['id_user'], 0, 'AW');
$access = ($agent_a == true) ? 'AR' : (($agent_w == true) ? 'AW' : 'AR');
$switch_type = !empty($rootType) ? $rootType : $type;
switch ($switch_type) {
case 'os':
$tree = new TreeOS($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'module_group':
$tree = new TreeModuleGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'module':
$tree = new TreeModule($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'tag':
$tree = new TreeTag($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'group':
if (is_metaconsole()) {
if (!class_exists('TreeGroupMeta')) {
break;
}
$tree = new TreeGroupMeta($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
} else {
$tree = new TreeGroup($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
}
break;
case 'policies':
if (!class_exists('TreePolicies')) {
break;
}
$tree = new TreePolicies($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
case 'group_edition':
$tree = new TreeGroupEdition($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access);
break;
default:
// FIXME. No error handler
return;
}
$tree->setFilter($filter);
ob_clean();
echo json_encode(['success' => 1, 'tree' => $tree->getArray()]);
return;
}
if ($getDetail) {
include_once $config['homedir'].'/include/functions_treeview.php';
$id = (int) get_parameter('id');
$type = (string) get_parameter('type');
$server = [];
if (is_metaconsole()) {
$server_id = (int) get_parameter('serverID');
$server = metaconsole_get_servers($server_id);
}
ob_clean();
echo '<div class="left_align">';
if (!empty($id) && !empty($type)) {
switch ($type) {
case 'agent':
treeview_printTable($id, $server, true);
break;
case 'module':
treeview_printModuleTable($id, $server, true);
break;
case 'alert':
treeview_printAlertsTable($id, $server, true);
break;
default:
// Nothing
break;
}
}
echo '<br></div>';
return;
}
return;
echo json_encode(array('success' => 1, 'tree' => $tree->getArray()));
return;
}
if ($getDetail) {
require_once($config['homedir']."/include/functions_treeview.php");
$id = (int) get_parameter('id');
$type = (string) get_parameter('type');
$server = array();
if (is_metaconsole()) {
$server_id = (int) get_parameter('serverID');
$server = metaconsole_get_servers($server_id);
}
ob_clean();
echo '<div class="left_align">';
if (!empty($id) && !empty($type)) {
switch ($type) {
case 'agent':
treeview_printTable($id, $server, true);
break;
case 'module':
treeview_printModuleTable($id, $server, true);
break;
case 'alert':
treeview_printAlertsTable($id, $server, true);
break;
default:
// Nothing
break;
}
}
echo '<br></div>';
return;
}
return;
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -36,9 +36,9 @@ class TreeGroup extends Tree
];
$this->L2conditionInside = 'AND (
ta.id_grupo = '.$this->id.'
OR tasg.id_group = '.$this->id.'
)';
ta.id_grupo = '.$this->id.'
OR tasg.id_group = '.$this->id.'
)';
}
@ -198,44 +198,44 @@ class TreeGroup extends Tree
$module_search_filter = '';
if (!empty($this->filter['searchModule'])) {
$module_search_inner = '
INNER JOIN tagente_modulo tam
ON ta.id_agente = tam.id_agente
INNER JOIN tagente_estado tae
ON tae.id_agente_modulo = tam.id_agente_modulo';
INNER JOIN tagente_modulo tam
ON ta.id_agente = tam.id_agente
INNER JOIN tagente_estado tae
ON tae.id_agente_modulo = tam.id_agente_modulo';
$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_sec = is_metaconsole() ? 'tmetaconsole_agent_secondary_group' : 'tagent_secondary_group';
$sql_model = "SELECT %s FROM
(
SELECT COUNT(DISTINCT(ta.id_agente)) AS total, id_grupo AS g
FROM $table ta
$module_search_inner
WHERE ta.disabled = 0
%s
$agent_search_filter
$agent_status_filter
$module_status_filter
$module_search_filter
$group_acl
GROUP BY id_grupo
UNION ALL
SELECT COUNT(DISTINCT(ta.id_agente)) AS total, id_group AS g
FROM $table ta INNER JOIN $table_sec tasg
ON ta.id_agente = tasg.id_agent
$module_search_inner
WHERE ta.disabled = 0
%s
$agent_search_filter
$agent_status_filter
$module_status_filter
$module_search_filter
$secondary_group_acl
GROUP BY id_group
) x GROUP BY g";
(
SELECT COUNT(DISTINCT(ta.id_agente)) AS total, id_grupo AS g
FROM $table ta
$module_search_inner
WHERE ta.disabled = 0
%s
$agent_search_filter
$agent_status_filter
$module_status_filter
$module_search_filter
$group_acl
GROUP BY id_grupo
UNION ALL
SELECT COUNT(DISTINCT(ta.id_agente)) AS total, id_group AS g
FROM $table ta INNER JOIN $table_sec tasg
ON ta.id_agente = tasg.id_agent
$module_search_inner
WHERE ta.disabled = 0
%s
$agent_search_filter
$agent_status_filter
$module_status_filter
$module_search_filter
$secondary_group_acl
GROUP BY id_group
) x GROUP BY g";
$sql_array = [];
foreach ($inside_fields as $inside_field) {
$sql_array[] = sprintf(
@ -247,9 +247,9 @@ class TreeGroup extends Tree
}
$sql = "SELECT $fields FROM (".implode(' UNION ALL ', $sql_array).') x2
RIGHT JOIN tgrupo tg
ON x2.g = tg.id_grupo
GROUP BY tg.id_grupo';
RIGHT JOIN tgrupo tg
ON x2.g = tg.id_grupo
GROUP BY tg.id_grupo';
$stats = db_get_all_rows_sql($sql);
$group_stats = [];

View File

@ -0,0 +1,334 @@
<?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="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="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="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="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();
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']='index.php?sec=network&sec2=enterprise/operation/services/services&tab=service_map&id_service='.(int)$service['id'];
}
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="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="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="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="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'];
}
}
$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']='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="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." />';
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." />';
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." />';
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

View File

@ -278,226 +278,228 @@ enterprise_hook('close_meta_frame');
<?php } ?>
<script type="text/javascript">
var treeController = TreeController.getController();
processTreeSearch();
$("form#tree_search").submit(function(e) {
e.preventDefault();
processTreeSearch();
});
function processTreeSearch () {
// Clear the tree
if (typeof treeController.recipient != 'undefined' && treeController.recipient.length > 0)
treeController.recipient.empty();
$(".loading_tree").show();
var parameters = {};
parameters['page'] = "include/ajax/tree.ajax";
parameters['getChildren'] = 1;
parameters['type'] = "<?php echo $tab; ?>";
parameters['filter'] = {};
parameters['filter']['searchGroup'] = $("input#text-search_group").val();
parameters['filter']['searchAgent'] = $("input#text-search_agent").val();
parameters['filter']['statusAgent'] = $("select#status_agent").val();
parameters['filter']['searchModule'] = $("input#text-search_module").val();
parameters['filter']['statusModule'] = $("select#status_module").val();
parameters['filter']['groupID'] = $("input#hidden-group-id").val();
parameters['filter']['tagID'] = $("input#hidden-tag-id").val();
if($("#checkbox-serach_hirearchy").is(':checked')){
parameters['filter']['searchHirearchy'] = 1;
}
else{
parameters['filter']['searchHirearchy'] = 0;
}
if($("#checkbox-show_not_init_agents").is(':checked')){
parameters['filter']['show_not_init_agents'] = 1;
}
else{
parameters['filter']['show_not_init_agents'] = 0;
}
if($("#checkbox-show_not_init_modules").is(':checked')){
parameters['filter']['show_not_init_modules'] = 1;
$('#hidden-show_not_init_modules_hidden').val(1);
}
else{
parameters['filter']['show_not_init_modules'] = 0;
$('#hidden-show_not_init_modules_hidden').val(0);
}
var treeController = TreeController.getController();
processTreeSearch();
$("form#tree_search").submit(function(e) {
e.preventDefault();
processTreeSearch();
});
function processTreeSearch () {
// Clear the tree
if (typeof treeController.recipient != 'undefined' && treeController.recipient.length > 0)
treeController.recipient.empty();
$(".loading_tree").show();
$.ajax({
type: "POST",
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
data: parameters,
success: function(data) {
if (data.success) {
$(".loading_tree").hide();
treeController.init({
recipient: $("div#tree-controller-recipient"),
detailRecipient: $.fixedBottomBox({ width: 400, height: window.innerHeight * 0.9 }),
page: parameters['page'],
emptyMessage: "<?php echo __('No data found'); ?>",
foundMessage: "<?php echo __('Found groups'); ?>",
tree: data.tree,
baseURL: "<?php echo ui_get_full_url(false, false, false, is_metaconsole()); ?>",
ajaxURL: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
filter: parameters['filter'],
counterTitles: {
total: {
agents: "<?php echo __('Total agents'); ?>",
modules: "<?php echo __('Total modules'); ?>",
none: "<?php echo __('Total'); ?>"
},
alerts: {
agents: "<?php echo __('Fired alerts'); ?>",
modules: "<?php echo __('Fired alerts'); ?>",
none: "<?php echo __('Fired alerts'); ?>"
},
critical: {
agents: "<?php echo __('Critical agents'); ?>",
modules: "<?php echo __('Critical modules'); ?>",
none: "<?php echo __('Critical'); ?>"
},
warning: {
agents: "<?php echo __('Warning agents'); ?>",
modules: "<?php echo __('Warning modules'); ?>",
none: "<?php echo __('Warning'); ?>"
},
unknown: {
agents: "<?php echo __('Unknown agents'); ?>",
modules: "<?php echo __('Unknown modules'); ?>",
none: "<?php echo __('Unknown'); ?>"
},
not_init: {
agents: "<?php echo __('Not init agents'); ?>",
modules: "<?php echo __('Not init modules'); ?>",
none: "<?php echo __('Not init'); ?>"
},
ok: {
agents: "<?php echo __('Normal agents'); ?>",
modules: "<?php echo __('Normal modules'); ?>",
none: "<?php echo __('Normal'); ?>"
}
}
});
}
},
dataType: "json"
});
}
// Show the modal window of an module
var moduleDetailsWindow = $("<div></div>");
moduleDetailsWindow
.hide()
.prop("id", "module_details_window")
.appendTo('body');
function show_module_detail_dialog(module_id, id_agent, server_name, offset, period, module_name) {
var params = {};
var f = new Date();
period = $('#period').val();
params.selection_mode = $('input[name=selection_mode]:checked').val();
if (!params.selection_mode) {
params.selection_mode='fromnow';
}
params.date_from = $('#text-date_from').val();
if (!params.date_from) {
params.date_from = f.getFullYear() + "/" + (f.getMonth() +1) + "/" + f.getDate();
}
params.time_from = $('#text-time_from').val();
if (!params.time_from) {
params.time_from = f.getHours() + ":" + f.getMinutes();
}
params.date_to = $('#text-date_to').val();
if (!params.date_to) {
params.date_to =f.getFullYear() + "/" + (f.getMonth() +1) + "/" + f.getDate();
}
params.time_to = $('#text-time_to').val();
if (!params.time_to) {
params.time_to = f.getHours() + ":" + f.getMinutes();
}
params.page = "include/ajax/module";
params.get_module_detail = 1;
params.server_name = server_name;
params.id_agent = id_agent;
params.id_module = module_id;
params.offset = offset;
params.period = period;
title = <?php echo "'".__('Module: ')."'"; ?> ;
$.ajax({
type: "POST",
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
data: params,
dataType: "html",
success: function(data) {
$("#module_details_window").hide ()
.empty ()
.append (data)
.dialog ({
resizable: true,
draggable: true,
modal: true,
title: title + module_name,
overlay: {
opacity: 0.5,
background: "black"
},
width: 650,
height: 500
})
.show ();
refresh_pagination_callback(module_id, id_agent, server_name, module_name);
datetime_picker_callback();
forced_title_callback();
}
});
}
function datetime_picker_callback() {
$("#text-time_from, #text-time_to").timepicker({
showSecond: true,
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
timeOnlyTitle: '<?php echo __('Choose time'); ?>',
timeText: '<?php echo __('Time'); ?>',
hourText: '<?php echo __('Hour'); ?>',
minuteText: '<?php echo __('Minute'); ?>',
secondText: '<?php echo __('Second'); ?>',
currentText: '<?php echo __('Now'); ?>',
closeText: '<?php echo __('Close'); ?>'});
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
$("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
}
function refresh_pagination_callback (module_id, id_agent, server_name,module_name) {
$(".binary_dialog").click( function() {
var classes = $(this).attr('class');
classes = classes.split(' ');
var offset_class = classes[2];
offset_class = offset_class.split('_');
var offset = offset_class[1];
var period = $('#period').val();
show_module_detail_dialog(module_id, id_agent, server_name, offset, period,module_name);
return false;
});
}
var parameters = {};
parameters['page'] = "include/ajax/tree.ajax";
parameters['getChildren'] = 1;
parameters['type'] = "<?php echo $tab; ?>";
parameters['filter'] = {};
parameters['filter']['searchGroup'] = $("input#text-search_group").val();
parameters['filter']['searchAgent'] = $("input#text-search_agent").val();
parameters['filter']['statusAgent'] = $("select#status_agent").val();
parameters['filter']['searchModule'] = $("input#text-search_module").val();
parameters['filter']['statusModule'] = $("select#status_module").val();
parameters['filter']['groupID'] = $("input#hidden-group-id").val();
parameters['filter']['tagID'] = $("input#hidden-tag-id").val();
if($("#checkbox-serach_hirearchy").is(':checked')){
parameters['filter']['searchHirearchy'] = 1;
}
else{
parameters['filter']['searchHirearchy'] = 0;
}
if($("#checkbox-show_not_init_agents").is(':checked')){
parameters['filter']['show_not_init_agents'] = 1;
}
else{
parameters['filter']['show_not_init_agents'] = 0;
}
if($("#checkbox-show_not_init_modules").is(':checked')){
parameters['filter']['show_not_init_modules'] = 1;
$('#hidden-show_not_init_modules_hidden').val(1);
}
else{
parameters['filter']['show_not_init_modules'] = 0;
$('#hidden-show_not_init_modules_hidden').val(0);
}
$.ajax({
type: "POST",
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
data: parameters,
success: function(data) {
if (data.success) {
$(".loading_tree").hide();
treeController.init({
recipient: $("div#tree-controller-recipient"),
detailRecipient: $.fixedBottomBox({ width: 400, height: window.innerHeight * 0.9 }),
page: parameters['page'],
emptyMessage: "<?php echo __('No data found'); ?>",
foundMessage: "<?php echo __('Found groups'); ?>",
tree: data.tree,
baseURL: "<?php echo ui_get_full_url(false, false, false, is_metaconsole()); ?>",
ajaxURL: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
filter: parameters['filter'],
counterTitles: {
total: {
agents: "<?php echo __('Total agents'); ?>",
modules: "<?php echo __('Total modules'); ?>",
none: "<?php echo __('Total'); ?>"
},
alerts: {
agents: "<?php echo __('Fired alerts'); ?>",
modules: "<?php echo __('Fired alerts'); ?>",
none: "<?php echo __('Fired alerts'); ?>"
},
critical: {
agents: "<?php echo __('Critical agents'); ?>",
modules: "<?php echo __('Critical modules'); ?>",
none: "<?php echo __('Critical'); ?>"
},
warning: {
agents: "<?php echo __('Warning agents'); ?>",
modules: "<?php echo __('Warning modules'); ?>",
none: "<?php echo __('Warning'); ?>"
},
unknown: {
agents: "<?php echo __('Unknown agents'); ?>",
modules: "<?php echo __('Unknown modules'); ?>",
none: "<?php echo __('Unknown'); ?>"
},
not_init: {
agents: "<?php echo __('Not init agents'); ?>",
modules: "<?php echo __('Not init modules'); ?>",
none: "<?php echo __('Not init'); ?>"
},
ok: {
agents: "<?php echo __('Normal agents'); ?>",
modules: "<?php echo __('Normal modules'); ?>",
none: "<?php echo __('Normal'); ?>"
}
}
});
}
},
dataType: "json"
});
}
// Show the modal window of an module
var moduleDetailsWindow = $("<div></div>");
moduleDetailsWindow
.hide()
.prop("id", "module_details_window")
.appendTo('body');
function show_module_detail_dialog(module_id, id_agent, server_name, offset, period, module_name) {
var params = {};
var f = new Date();
period = $('#period').val();
params.selection_mode = $('input[name=selection_mode]:checked').val();
if (!params.selection_mode) {
params.selection_mode='fromnow';
}
params.date_from = $('#text-date_from').val();
if (!params.date_from) {
params.date_from = f.getFullYear() + "/" + (f.getMonth() +1) + "/" + f.getDate();
}
params.time_from = $('#text-time_from').val();
if (!params.time_from) {
params.time_from = f.getHours() + ":" + f.getMinutes();
}
params.date_to = $('#text-date_to').val();
if (!params.date_to) {
params.date_to =f.getFullYear() + "/" + (f.getMonth() +1) + "/" + f.getDate();
}
params.time_to = $('#text-time_to').val();
if (!params.time_to) {
params.time_to = f.getHours() + ":" + f.getMinutes();
}
params.page = "include/ajax/module";
params.get_module_detail = 1;
params.server_name = server_name;
params.id_agent = id_agent;
params.id_module = module_id;
params.offset = offset;
params.period = period;
title = <?php echo "'" . __("Module: ") . "'" ?> ;
$.ajax({
type: "POST",
url: "<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
data: params,
dataType: "html",
success: function(data) {
$("#module_details_window").hide ()
.empty ()
.append (data)
.dialog ({
resizable: true,
draggable: true,
modal: true,
title: title + module_name,
overlay: {
opacity: 0.5,
background: "black"
},
width: 650,
height: 500
})
.show ();
refresh_pagination_callback(module_id, id_agent, server_name, module_name);
datetime_picker_callback();
forced_title_callback();
}
});
}
function datetime_picker_callback() {
$("#text-time_from, #text-time_to").timepicker({
showSecond: true,
timeFormat: '<?php echo TIME_FORMAT_JS; ?>',
timeOnlyTitle: '<?php echo __('Choose time');?>',
timeText: '<?php echo __('Time');?>',
hourText: '<?php echo __('Hour');?>',
minuteText: '<?php echo __('Minute');?>',
secondText: '<?php echo __('Second');?>',
currentText: '<?php echo __('Now');?>',
closeText: '<?php echo __('Close');?>'});
$.datepicker.setDefaults($.datepicker.regional[ "<?php echo get_user_language(); ?>"]);
$("#text-date_from, #text-date_to").datepicker({dateFormat: "<?php echo DATE_FORMAT_JS; ?>"});
}
function refresh_pagination_callback (module_id, id_agent, server_name,module_name) {
$(".binary_dialog").click( function() {
var classes = $(this).attr('class');
classes = classes.split(' ');
var offset_class = classes[2];
offset_class = offset_class.split('_');
var offset = offset_class[1];
var period = $('#period').val();
show_module_detail_dialog(module_id, id_agent, server_name, offset, period,module_name);
return false;
});
}
</script>