2014-12-16 16:39:00 +01:00
< ? php
//Pandora FMS- http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 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.
class Tree {
2015-01-05 13:25:41 +01:00
protected $type = null ;
2015-01-21 17:37:51 +01:00
protected $rootType = null ;
protected $id = - 1 ;
protected $rootID = - 1 ;
2015-01-30 15:32:39 +01:00
protected $serverID = false ;
2015-01-05 13:25:41 +01:00
protected $tree = array ();
protected $filter = array ();
protected $childrenMethod = " on_demand " ;
2017-10-25 17:44:59 +02:00
protected $userGroupsACL ;
2015-01-05 13:25:41 +01:00
protected $userGroups ;
2018-08-23 14:49:09 +02:00
protected $userGroupsArray ;
2016-01-28 14:38:23 +01:00
2015-01-14 17:56:42 +01:00
protected $strictACL = false ;
protected $acltags = false ;
2016-09-08 16:06:12 +02:00
protected $access = false ;
2016-01-28 14:38:23 +01:00
2016-09-08 16:06:12 +02:00
public function __construct ( $type , $rootType = '' , $id = - 1 , $rootID = - 1 , $serverID = false , $childrenMethod = " on_demand " , $access = 'AR' ) {
2016-01-28 14:38:23 +01:00
2014-12-16 16:39:00 +01:00
$this -> type = $type ;
2015-01-21 17:37:51 +01:00
$this -> rootType = ! empty ( $rootType ) ? $rootType : $type ;
$this -> id = $id ;
$this -> rootID = ! empty ( $rootID ) ? $rootID : $id ;
2015-01-30 15:32:39 +01:00
$this -> serverID = $serverID ;
2017-10-25 17:44:59 +02:00
$this -> childrenMethod = $childrenMethod ;
$this -> access = $access ;
2015-01-08 16:39:35 +01:00
2017-10-25 17:44:59 +02:00
$userGroupsACL = users_get_groups ( false , $this -> access );
$this -> userGroupsACL = empty ( $userGroupsACL ) ? false : $userGroupsACL ;
$this -> userGroups = $this -> userGroupsACL ;
2018-08-23 14:49:09 +02:00
$this -> userGroupsArray = array_keys ( $this -> userGroups );
2015-01-08 13:18:27 +01:00
global $config ;
include_once ( $config [ 'homedir' ] . " /include/functions_servers.php " );
2015-03-23 20:51:44 +01:00
include_once ( $config [ 'homedir' ] . " /include/functions_modules.php " );
2015-09-30 18:32:55 +02:00
require_once ( $config [ 'homedir' ] . " /include/functions_tags.php " );
2018-04-11 11:04:21 +02:00
enterprise_include_once ( " include/functions_agents.php " );
2015-01-21 17:37:51 +01:00
2017-10-25 17:44:59 +02:00
if ( is_metaconsole ()) enterprise_include_once ( " meta/include/functions_ui_meta.php " );
2015-01-29 21:00:30 +01:00
2018-08-23 14:49:09 +02:00
$this -> strictACL = false ;
2018-08-28 15:24:35 +02:00
2018-01-12 14:17:48 +01:00
$this -> acltags = tags_get_user_groups_and_tags ( $config [ 'id_user' ], $this -> access );
2014-12-16 16:39:00 +01:00
}
2016-01-28 14:38:23 +01:00
2014-12-17 18:58:34 +01:00
public function setFilter ( $filter ) {
2014-12-16 16:39:00 +01:00
$this -> filter = $filter ;
}
2014-12-30 16:24:23 +01:00
2018-08-29 13:55:50 +02:00
protected function getDisplayHierarchy () {
return $this -> filter [ 'searchHirearchy' ] ||
( empty ( $this -> filter [ 'searchAgent' ]) && empty ( $this -> filter [ 'searchModule' ]));
}
2018-08-28 12:52:57 +02:00
protected function getEmptyModuleFilterStatus () {
return (
! isset ( $this -> filter [ 'statusModule' ]) ||
$this -> filter [ 'statusModule' ] == - 1
);
}
2015-01-28 18:57:33 +01:00
protected function getAgentStatusFilter ( $status = - 1 ) {
if ( $status == - 1 )
$status = $this -> filter [ 'statusAgent' ];
2015-01-21 17:37:51 +01:00
$agent_status_filter = " " ;
2015-01-28 18:57:33 +01:00
switch ( $status ) {
2015-01-21 17:37:51 +01:00
case AGENT_STATUS_NOT_INIT :
$agent_status_filter = " AND (ta.total_count = 0
OR ta . total_count = ta . notinit_count ) " ;
break ;
case AGENT_STATUS_CRITICAL :
$agent_status_filter = " AND ta.critical_count > 0 " ;
break ;
case AGENT_STATUS_WARNING :
$agent_status_filter = " AND (ta.critical_count = 0
AND ta . warning_count > 0 ) " ;
break ;
case AGENT_STATUS_UNKNOWN :
$agent_status_filter = " AND (ta.critical_count = 0
AND ta . warning_count = 0
AND ta . unknown_count > 0 ) " ;
break ;
case AGENT_STATUS_NORMAL :
$agent_status_filter = " AND (ta.critical_count = 0
AND ta . warning_count = 0
AND ta . unknown_count = 0
AND ta . normal_count > 0 ) " ;
break ;
}
return $agent_status_filter ;
}
2018-08-24 12:54:22 +02:00
protected function getModuleStatusFilter () {
2018-08-28 12:52:57 +02:00
$show_init_condition = ( $this -> filter [ 'show_not_init_agents' ])
? " "
: " AND ta.notinit_count <> ta.total_count " ;
if ( $this -> getEmptyModuleFilterStatus ()) {
return $show_init_condition ;
2018-08-24 12:54:22 +02:00
}
2018-08-28 12:52:57 +02:00
$field_filter = modules_get_counter_by_states ( $this -> filter [ 'statusModule' ]);
if ( $field_filter === false ) return " AND 1=0 " ;
return " AND ta. $field_filter > 0 " . $show_init_condition ;
}
2018-08-31 09:09:54 +02:00
protected function getModuleStatusFilterFromTestado ( $state = false ) {
$selected_status = ( $state !== false )
? $state
: $this -> filter [ 'statusModule' ];
switch ( $selected_status ) {
2018-08-24 12:54:22 +02:00
case AGENT_MODULE_STATUS_CRITICAL_ALERT :
case AGENT_MODULE_STATUS_CRITICAL_BAD :
2018-08-28 12:52:57 +02:00
return " AND (tae.estado = " . AGENT_MODULE_STATUS_CRITICAL_ALERT . "
OR tae . estado = " .AGENT_MODULE_STATUS_CRITICAL_BAD. " ) " ;
2018-08-24 12:54:22 +02:00
case AGENT_MODULE_STATUS_WARNING_ALERT :
case AGENT_MODULE_STATUS_WARNING :
2018-08-28 12:52:57 +02:00
return " AND (tae.estado = " . AGENT_MODULE_STATUS_WARNING_ALERT . "
OR tae . estado = " .AGENT_MODULE_STATUS_WARNING. " ) " ;
2018-08-24 12:54:22 +02:00
case AGENT_MODULE_STATUS_UNKNOWN :
2018-08-28 12:52:57 +02:00
return " AND tae.estado = " . AGENT_MODULE_STATUS_UNKNOWN . " " ;
2018-08-24 12:54:22 +02:00
case AGENT_MODULE_STATUS_NO_DATA :
case AGENT_MODULE_STATUS_NOT_INIT :
2018-08-28 12:52:57 +02:00
return " AND (tae.estado = " . AGENT_MODULE_STATUS_NO_DATA . "
OR tae . estado = " .AGENT_MODULE_STATUS_NOT_INIT. " ) " ;
2018-08-24 12:54:22 +02:00
case AGENT_MODULE_STATUS_NORMAL_ALERT :
case AGENT_MODULE_STATUS_NORMAL :
2018-08-28 12:52:57 +02:00
return " AND (tae.estado = " . AGENT_MODULE_STATUS_NORMAL_ALERT . "
OR tae . estado = " .AGENT_MODULE_STATUS_NORMAL. " ) " ;
2018-08-24 12:54:22 +02:00
}
2018-08-28 12:52:57 +02:00
return " " ;
2018-08-24 12:54:22 +02:00
}
2015-01-21 17:37:51 +01:00
protected function getAgentCounterColumnsSql ( $agent_table ) {
// Add the agent counters to the columns
2015-01-28 18:57:33 +01:00
if ( $this -> filter [ 'statusAgent' ] == - 1 ) {
// Critical
$agent_critical_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_CRITICAL );
$agents_critical_count = " ( $agent_table
$agent_critical_filter ) AS total_critical_count " ;
// Warning
$agent_warning_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_WARNING );
$agents_warning_count = " ( $agent_table
$agent_warning_filter ) AS total_warning_count " ;
// Unknown
$agent_unknown_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_UNKNOWN );
$agents_unknown_count = " ( $agent_table
$agent_unknown_filter ) AS total_unknown_count " ;
// Normal
$agent_normal_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_NORMAL );
$agents_normal_count = " ( $agent_table
$agent_normal_filter ) AS total_normal_count " ;
// Not init
2018-08-28 15:24:35 +02:00
if ( $this -> filter [ 'show_not_init_agents' ]){
$agent_not_init_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_NOT_INIT );
$agents_not_init_count = " ( $agent_table
$agent_not_init_filter ) AS total_not_init_count " ;
}
else {
$agent_not_init_filter = 0 ;
$agents_not_init_count = 0 ;
}
2018-03-28 17:07:57 +02:00
2015-01-28 18:57:33 +01:00
// Alerts fired
$agents_fired_count = " ( $agent_table
AND ta . fired_count > 0 ) AS total_fired_count " ;
// Total
$agents_total_count = " ( $agent_table ) AS total_count " ;
$columns = " $agents_critical_count , $agents_warning_count , "
. " $agents_unknown_count , $agents_normal_count , $agents_not_init_count , "
. " $agents_fired_count , $agents_total_count " ;
}
else {
// Alerts fired
$agents_fired_count = " ( $agent_table
AND ta . fired_count > 0 ) AS total_fired_count " ;
// Total
$agents_total_count = " ( $agent_table ) AS total_count " ;
switch ( $this -> filter [ 'statusAgent' ]) {
case AGENT_STATUS_NOT_INIT :
// Not init
$agent_not_init_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_NOT_INIT );
$agents_not_init_count = " ( $agent_table
2015-01-29 21:00:30 +01:00
$agent_not_init_filter ) AS total_not_init_count " ;
2015-01-28 18:57:33 +01:00
$columns = " $agents_not_init_count , $agents_fired_count , $agents_total_count " ;
break ;
case AGENT_STATUS_CRITICAL :
// Critical
$agent_critical_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_CRITICAL );
$agents_critical_count = " ( $agent_table
$agent_critical_filter ) AS total_critical_count " ;
$columns = " $agents_critical_count , $agents_fired_count , $agents_total_count " ;
break ;
case AGENT_STATUS_WARNING :
// Warning
$agent_warning_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_WARNING );
$agents_warning_count = " ( $agent_table
$agent_warning_filter ) AS total_warning_count " ;
$columns = " $agents_warning_count , $agents_fired_count , $agents_total_count " ;
break ;
case AGENT_STATUS_UNKNOWN :
// Unknown
$agent_unknown_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_UNKNOWN );
$agents_unknown_count = " ( $agent_table
$agent_unknown_filter ) AS total_unknown_count " ;
$columns = " $agents_unknown_count , $agents_fired_count , $agents_total_count " ;
break ;
case AGENT_STATUS_NORMAL :
// Normal
$agent_normal_filter = $this -> getAgentStatusFilter ( AGENT_STATUS_NORMAL );
$agents_normal_count = " ( $agent_table
$agent_normal_filter ) AS total_normal_count " ;
$columns = " $agents_normal_count , $agents_fired_count , $agents_total_count " ;
break ;
}
}
return $columns ;
}
protected function getAgentCountersSql ( $agent_table ) {
2015-04-30 20:11:07 +02:00
global $config ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$columns = $this -> getAgentCounterColumnsSql ( $agent_table );
2018-08-28 15:24:35 +02:00
$columns = " SELECT $columns FROM dual LIMIT 1 " ;
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
return $columns ;
}
2015-01-28 18:57:33 +01:00
protected function getSql ( $item_for_count = false ) {
2015-01-21 17:37:51 +01:00
// Get the type
if ( empty ( $this -> type ))
$type = 'none' ;
else
$type = $this -> type ;
// Get the root type
if ( empty ( $this -> rootType ))
$rootType = 'none' ;
else
$rootType = $this -> rootType ;
// Get the parent
$parent = $this -> id ;
// Get the root id
$rootID = $this -> rootID ;
2016-01-28 14:38:23 +01:00
2015-01-30 15:32:39 +01:00
// Get the server id
$serverID = $this -> serverID ;
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
// Agent name filter
$agent_search_filter = " " ;
if ( ! empty ( $this -> filter [ 'searchAgent' ])) {
2017-03-09 12:16:20 +01:00
$agent_search_filter = " AND LOWER(ta.alias) LIKE LOWER('% " . $this -> filter [ 'searchAgent' ] . " %') " ;
2015-01-21 17:37:51 +01:00
}
2017-12-21 16:37:19 +01:00
//Search hirearchy
$search_hirearchy = false ;
if ( $this -> filter [ 'searchHirearchy' ]){
$search_hirearchy = true ;
}
2015-01-21 17:37:51 +01:00
// Agent status filter
$agent_status_filter = " " ;
2015-01-22 16:56:44 +01:00
if ( isset ( $this -> filter [ 'statusAgent' ])
2015-03-11 21:24:58 +01:00
&& $this -> filter [ 'statusAgent' ] != AGENT_STATUS_ALL
&& ! $this -> strictACL ) {
2015-01-21 17:37:51 +01:00
$agent_status_filter = $this -> getAgentStatusFilter ( $this -> filter [ 'statusAgent' ]);
}
// Agents join
$agents_join = " " ;
if ( ! empty ( $agent_search_filter ) || ! empty ( $agent_status_filter )) {
2015-04-30 12:35:42 +02:00
$agents_join = " INNER JOIN tagente ta
2015-01-21 17:37:51 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$agent_search_filter
$agent_status_filter " ;
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
// Module name filter
$module_search_filter = " " ;
if ( ! empty ( $this -> filter [ 'searchModule' ])) {
$module_search_filter = " AND tam.nombre LIKE '% " . $this -> filter [ 'searchModule' ] . " %' " ;
}
2018-08-28 12:52:57 +02:00
$module_status_from_agent = $this -> getModuleStatusFilter ();
2015-01-22 16:56:44 +01:00
2018-08-28 12:52:57 +02:00
// Module status filter
$module_status_filter = $this -> getModuleStatusFilterFromTestado ();
2015-01-21 17:37:51 +01:00
// Modules join
$modules_join = " " ;
2018-08-28 12:52:57 +02:00
$module_status_join = ' INNER JOIN tagente_estado tae
ON tam . id_agente_modulo = tae . id_agente_modulo ' ;
if ( ! $this -> filter [ 'show_not_init_modules' ]) {
$module_status_join .= " AND tae.estado <> " . AGENT_MODULE_STATUS_NO_DATA . "
AND tae . estado <> " .AGENT_MODULE_STATUS_NOT_INIT. " " ;
}
if ( ! empty ( $module_status_filter )) {
$module_status_join .= $module_status_filter ;
}
if ( ! empty ( $module_search_filter )) {
2015-04-30 12:35:42 +02:00
$modules_join = " INNER JOIN tagente_modulo tam
2015-01-21 17:37:51 +01:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
$module_search_filter
$module_status_join " ;
}
$sql = false ;
switch ( $rootType ) {
case 'group' :
2015-01-22 16:56:44 +01:00
// ACL Group
2015-04-30 20:11:07 +02:00
$user_groups_str = " -1 " ;
2017-10-25 17:44:59 +02:00
$group_filter = " " ;
2017-10-13 15:10:10 +02:00
2018-04-09 15:13:01 +02:00
if ( empty ( $this -> userGroups )) {
return ;
}
// Asking for a specific group.
if ( $item_for_count !== false ) {
if ( ! isset ( $this -> userGroups [ $item_for_count ])) {
return ;
2015-01-26 17:51:06 +01:00
}
2015-01-22 16:56:44 +01:00
}
2018-04-09 15:13:01 +02:00
// Asking for all groups.
2018-08-28 12:52:57 +02:00
elseif ( users_can_manage_group_all ( " AR " )) {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$group_filter = " " ;
$user_groups_condition = " " ;
} else {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$user_groups_condition = " WHERE ta.id_grupo IN( $user_groups_str ) " ;
2018-04-09 15:13:01 +02:00
$group_filter = " AND (
ta . id_grupo IN ( $user_groups_str )
OR tasg . id_group IN ( $user_groups_str )
) " ;
2015-01-22 16:56:44 +01:00
}
2017-12-21 16:37:19 +01:00
if ( ! $search_hirearchy && ( ! empty ( $agent_search_filter ) || ! empty ( $module_search_filter ))){
if ( is_metaconsole ()){
2018-04-09 12:33:03 +02:00
$id_groups_agents = db_get_all_rows_sql (
" SELECT DISTINCT(ta.id_grupo)
FROM tmetaconsole_agent ta
LEFT JOIN tmetaconsole_agent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
WHERE ta . disabled = 0
$agent_search_filter "
);
$id_secondary_groups_agents = db_get_all_rows_sql (
" SELECT DISTINCT(tasg.id_group)
FROM tmetaconsole_agent ta
LEFT JOIN tmetaconsole_agent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
WHERE ta . disabled = 0
$agent_search_filter "
);
2017-12-21 16:37:19 +01:00
}
else {
2018-04-09 12:40:11 +02:00
$id_groups_agents = db_get_all_rows_sql (
" SELECT DISTINCT(ta.id_grupo)
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
, tagente_modulo tam
WHERE tam . id_agente = ta . id_agente
AND ta . disabled = 0
$agent_search_filter
$module_search_filter "
);
$id_secondary_groups_agents = db_get_all_rows_sql (
" SELECT DISTINCT(tasg.id_group)
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
, tagente_modulo tam
WHERE tam . id_agente = ta . id_agente
AND ta . disabled = 0
$agent_search_filter
$module_search_filter "
);
2017-12-21 16:37:19 +01:00
}
if ( $id_groups_agents != false ){
foreach ( $id_groups_agents as $key => $value ) {
2018-04-09 12:33:03 +02:00
$id_groups_agents_array [ $value [ 'id_grupo' ]] = $value [ 'id_grupo' ];
}
foreach ( $id_secondary_groups_agents as $key => $value ) {
$id_groups_agents_array [ $value [ 'id_group' ]] = $value [ 'id_group' ];
2017-12-21 16:37:19 +01:00
}
$user_groups_array = explode ( " , " , $user_groups_str );
$user_groups_array = array_intersect ( $user_groups_array , $id_groups_agents_array );
$user_groups_str = implode ( " , " , $user_groups_array );
}
else {
$user_groups_str = false ;
}
}
2015-01-21 17:37:51 +01:00
switch ( $type ) {
// Get the agents of a group
case 'group' :
2015-01-26 17:51:06 +01:00
if ( empty ( $rootID ) || $rootID == - 1 ) {
2017-12-21 16:37:19 +01:00
if ( ! $search_hirearchy && ( ! empty ( $agent_search_filter ) || ! empty ( $module_search_filter ))){
$columns = 'tg.id_grupo AS id, tg.nombre AS name, tg.icon' ;
}
else {
$columns = 'tg.id_grupo AS id, tg.nombre AS name, tg.parent, tg.icon' ;
}
2016-02-16 18:06:46 +01:00
2015-01-26 17:51:06 +01:00
$order_fields = 'tg.nombre ASC, tg.id_grupo ASC' ;
2016-01-28 14:38:23 +01:00
2018-08-23 16:33:20 +02:00
if ( ! is_metaconsole ()) {
2015-04-30 20:11:07 +02:00
// Groups SQL
if ( $item_for_count === false ) {
$sql = " SELECT $columns
FROM tgrupo tg
2018-08-28 12:52:57 +02:00
$user_groups_str_condition
2015-04-30 20:11:07 +02:00
ORDER BY $order_fields " ;
}
// Counters SQL
else {
$agent_table = " SELECT COUNT(DISTINCT(ta.id_agente))
FROM tagente ta
2018-04-06 17:18:40 +02:00
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
2018-03-28 17:07:57 +02:00
LEFT JOIN tagente_modulo tam
2015-04-30 20:11:07 +02:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
$module_search_filter
$module_status_join
WHERE ta . disabled = 0
2018-04-06 17:18:40 +02:00
AND (
ta . id_grupo = $item_for_count
OR tasg . id_group = $item_for_count
)
2017-10-25 17:44:59 +02:00
$group_filter
2015-04-30 20:11:07 +02:00
$agent_search_filter
$agent_status_filter " ;
$sql = $this -> getAgentCountersSql ( $agent_table );
}
2015-04-17 16:12:51 +02:00
}
// Metaconsole
else {
2015-04-30 20:11:07 +02:00
// Groups SQL
if ( $item_for_count === false ) {
$sql = " SELECT $columns
FROM tgrupo tg
2018-08-28 12:52:57 +02:00
$user_groups_str_condition
2015-04-30 20:11:07 +02:00
ORDER BY $order_fields " ;
}
// Counters SQL
else {
$agent_table = " SELECT COUNT(DISTINCT(ta.id_agente))
2018-08-22 16:23:52 +02:00
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
2018-04-09 12:33:03 +02:00
ON ta . id_agente = tasg . id_agent
2015-04-30 20:11:07 +02:00
WHERE ta . disabled = 0
2018-04-09 12:33:03 +02:00
AND (
ta . id_grupo = $item_for_count
OR tasg . id_group = $item_for_count
)
2017-10-25 17:44:59 +02:00
$group_filter
2015-04-30 20:11:07 +02:00
$agent_search_filter
$agent_status_filter " ;
$sql = $this -> getAgentCountersSql ( $agent_table );
}
2015-04-17 16:12:51 +02:00
}
}
else {
2018-08-23 14:49:09 +02:00
if ( ! is_metaconsole ()) {
2018-08-28 12:52:57 +02:00
2016-09-26 10:58:42 +02:00
$columns = ' ta . id_agente AS id , ta . nombre AS name , ta . alias ,
2015-04-17 16:12:51 +02:00
ta . fired_count , ta . normal_count , ta . warning_count ,
ta . critical_count , ta . unknown_count , ta . notinit_count ,
ta . total_count , ta . quiet ' ;
2018-08-31 09:09:54 +02:00
$search_module_jj = " " ;
2018-08-28 12:52:57 +02:00
if ( ! empty ( $this -> filter [ 'searchModule' ])){
2018-08-31 09:09:54 +02:00
$columns .= " ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_CRITICAL_ALERT) . " , 1 , 0 )) as state_critical ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_WARNING_ALERT) . " , 1 , 0 )) as state_warning ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_UNKNOWN) . " , 1 , 0 )) as state_unknown ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NO_DATA) . " , 1 , 0 )) as state_notinit ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NORMAL) . " , 1 , 0 )) as state_normal ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado () . " , 1 , 0 )) as state_total
" ;
$search_module_jj = " INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
$having_conditional = " HAVING state_total > 0 " ;
2018-08-28 12:52:57 +02:00
}
2015-01-26 17:51:06 +01:00
2018-08-28 12:52:57 +02:00
$order_fields = 'ta.alias ASC, ta.id_agente ASC' ;
$inner_or_left = $this -> filter [ 'show_not_init_agents' ]
? " LEFT "
: " INNER " ;
2018-08-31 09:09:54 +02:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente ta
2018-04-06 17:18:40 +02:00
LEFT JOIN tagent_secondary_group tasg
ON tasg . id_agent = ta . id_agente
2018-08-28 12:52:57 +02:00
$inner_or_left JOIN tagente_modulo tam
2015-04-17 16:12:51 +02:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
2018-08-31 09:09:54 +02:00
$search_module_jj
2015-04-17 16:12:51 +02:00
WHERE ta . disabled = 0
2018-04-06 17:18:40 +02:00
AND (
ta . id_grupo = $rootID
OR tasg . id_group = $rootID
)
2018-08-28 12:52:57 +02:00
$module_status_from_agent
2017-10-25 17:44:59 +02:00
$group_filter
2015-01-22 16:56:44 +01:00
$agent_search_filter
$agent_status_filter
2018-08-28 12:52:57 +02:00
$module_search_filter
GROUP BY ta . id_agente
2018-08-31 09:09:54 +02:00
$having_conditional
ORDER BY $order_fields " ;
2015-04-17 16:12:51 +02:00
}
else {
2016-09-26 10:58:42 +02:00
$columns = ' ta . id_tagente AS id , ta . nombre AS name , ta . alias ,
2015-04-17 16:12:51 +02:00
ta . fired_count , ta . normal_count , ta . warning_count ,
ta . critical_count , ta . unknown_count , ta . notinit_count ,
2018-04-09 12:33:03 +02:00
ta . total_count , ta . quiet , ta . id_tmetaconsole_setup AS server_id ' ;
2016-09-26 10:58:42 +02:00
$order_fields = 'ta.alias ASC, ta.id_tagente ASC' ;
2016-01-28 14:38:23 +01:00
2015-04-17 16:12:51 +02:00
$sql = " SELECT $columns
2018-08-23 16:33:20 +02:00
FROM tmetaconsole_agent ta
LEFT JOIN tmetaconsole_agent_secondary_group tasg
2018-04-09 12:33:03 +02:00
ON ta . id_agente = tasg . id_agent
2015-04-17 16:12:51 +02:00
WHERE ta . disabled = 0
2018-04-09 12:33:03 +02:00
AND (
ta . id_grupo = $rootID
OR tasg . id_group = $rootID
)
2017-10-25 17:44:59 +02:00
$group_filter
2015-04-17 16:12:51 +02:00
$agent_search_filter
$agent_status_filter
2018-06-20 12:09:32 +02:00
GROUP BY ta . id_agente
2015-04-17 16:12:51 +02:00
ORDER BY $order_fields " ;
}
2015-01-26 17:51:06 +01:00
}
2015-01-21 17:37:51 +01:00
break ;
// Get the modules of an agent
case 'agent' :
2017-01-23 12:55:15 +01:00
$columns = ' tam . id_agente_modulo AS id ,
tam . parent_module_id AS parent ,
tam . nombre AS name , tam . id_tipo_modulo ,
tam . id_modulo , tae . estado , tae . datos ' ;
2015-01-21 17:37:51 +01:00
$order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC' ;
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
// Set for the common ACL only. The strict ACL case is different (groups and tags divided).
// The modules only have visibility in two cases:
// 1. The user has access to the group of its agent and this group hasn't tags.
// 2. The user has access to the group of its agent, this group has tags and the module
// has any of this tags.
$tag_join = '' ;
2018-08-23 16:33:20 +02:00
// $rootID it the agent group id in this case
if ( ! empty ( $this -> acltags ) && isset ( $this -> acltags [ $rootID ])) {
$tags_str = $this -> acltags [ $rootID ];
2016-01-28 14:38:23 +01:00
2018-08-23 16:33:20 +02:00
if ( ! empty ( $tags_str )) {
$tag_join = sprintf ( ' INNER JOIN ttag_module ttm
ON tam . id_agente_modulo = ttm . id_agente_modulo
AND ttm . id_tag IN ( % s ) ' , $tags_str );
2015-09-30 18:32:55 +02:00
}
}
2016-01-28 14:38:23 +01:00
2018-04-06 17:18:40 +02:00
$sql = " SELECT DISTINCT $columns
2015-04-30 12:35:42 +02:00
FROM tagente_modulo tam
2015-09-30 18:32:55 +02:00
$tag_join
2015-01-21 17:37:51 +01:00
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-22 16:56:44 +01:00
ON ta . disabled = 0
2018-04-06 17:18:40 +02:00
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
2015-01-22 16:56:44 +01:00
AND tam . id_agente = ta . id_agente
AND ta . id_grupo = $rootID
2017-10-25 17:44:59 +02:00
$group_filter
2015-01-22 16:56:44 +01:00
$agent_search_filter
$agent_status_filter
2015-01-21 17:37:51 +01:00
WHERE tam . disabled = 0
2015-01-22 16:56:44 +01:00
AND tam . id_agente = $parent
2015-01-21 17:37:51 +01:00
$module_search_filter
ORDER BY $order_fields " ;
break ;
}
break ;
case 'tag' :
2015-01-22 16:56:44 +01:00
// ACL Group
$group_acl = " " ;
2015-01-26 17:51:06 +01:00
if ( ! $this -> strictACL ) {
if ( ! empty ( $this -> userGroups )) {
$user_groups_str = implode ( " , " , array_keys ( $this -> userGroups ));
$group_acl = " AND ta.id_grupo IN ( $user_groups_str ) " ;
}
else {
$group_acl = " AND ta.id_grupo = -1 " ;
}
2015-01-22 16:56:44 +01:00
}
else {
2015-01-26 17:51:06 +01:00
if ( ! empty ( $this -> acltags ) && ! empty ( $rootID ) && $rootID != - 1 ) {
$groups = array ();
foreach ( $this -> acltags as $group_id => $tags_str ) {
if ( ! empty ( $tags_str )) {
$tags = explode ( " , " , $tags_str );
2015-03-05 19:43:19 +01:00
if ( in_array ( $rootID , $tags )) {
$hierarchy_groups = groups_get_id_recursive ( $group_id );
$groups = array_merge ( $groups , $hierarchy_groups );
}
2015-01-26 17:51:06 +01:00
}
}
if ( ! empty ( $groups )) {
2015-02-19 19:09:36 +01:00
if ( array_search ( 0 , $groups ) === false ) {
$user_groups_str = implode ( " , " , $groups );
$group_acl = " AND ta.id_grupo IN ( $user_groups_str ) " ;
}
2015-01-26 17:51:06 +01:00
}
else {
$group_acl = " AND ta.id_grupo = -1 " ;
}
}
else {
$group_acl = " AND ta.id_grupo = -1 " ;
}
2015-01-21 17:37:51 +01:00
}
switch ( $type ) {
// Get the agents of a tag
case 'tag' :
2015-01-22 16:56:44 +01:00
if ( empty ( $rootID ) || $rootID == - 1 ) {
2015-01-26 17:51:06 +01:00
if ( $this -> strictACL )
return false ;
2016-01-28 14:38:23 +01:00
2015-03-09 19:29:45 +01:00
// tagID filter. To access the view from tactical views f.e.
$tag_filter = '' ;
if ( ! empty ( $this -> filter [ 'tagID' ])) {
$tag_filter = " WHERE tt.id_tag = " . $this -> filter [ 'tagID' ];
}
2016-01-28 14:38:23 +01:00
2015-01-22 16:56:44 +01:00
$columns = 'tt.id_tag AS id, tt.name AS name' ;
2015-05-14 17:57:59 +02:00
$group_by_fields = 'tt.id_tag, tt.name' ;
2015-01-22 16:56:44 +01:00
$order_fields = 'tt.name ASC, tt.id_tag ASC' ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// Tags SQL
if ( $item_for_count === false ) {
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM ttag tt
INNER JOIN ttag_module ttm
2015-01-28 18:57:33 +01:00
ON tt . id_tag = ttm . id_tag
2015-04-30 12:35:42 +02:00
INNER JOIN tagente_modulo tam
2015-01-28 18:57:33 +01:00
ON tam . disabled = 0
AND ttm . id_agente_modulo = tam . id_agente_modulo
$module_search_filter
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-28 18:57:33 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$group_acl
$agent_search_filter
$agent_status_filter
2015-03-09 19:29:45 +01:00
$tag_filter
2015-05-14 17:57:59 +02:00
GROUP BY $group_by_fields
2015-01-28 18:57:33 +01:00
ORDER BY $order_fields " ;
}
// Counters SQL
else {
$agent_table = " SELECT COUNT(DISTINCT(ta.id_agente))
2015-04-30 12:35:42 +02:00
FROM tagente ta
INNER JOIN tagente_modulo tam
2015-01-28 18:57:33 +01:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
$module_search_filter
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN ttag_module ttm
2015-01-28 18:57:33 +01:00
ON tam . id_agente_modulo = ttm . id_agente_modulo
AND ttm . id_tag = $item_for_count
WHERE ta . disabled = 0
$group_acl
$agent_search_filter
$agent_status_filter " ;
$sql = $this -> getAgentCountersSql ( $agent_table );
}
2015-01-22 16:56:44 +01:00
}
else {
2016-09-26 10:58:42 +02:00
$columns = ' ta . id_agente AS id , ta . nombre AS name , ta . alias ,
2015-01-29 21:00:30 +01:00
ta . fired_count , ta . normal_count , ta . warning_count ,
ta . critical_count , ta . unknown_count , ta . notinit_count ,
ta . total_count , ta . quiet ' ;
2018-08-31 13:33:22 +02:00
$search_module_jj = " " ;
$columns .= " ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_CRITICAL_ALERT) . " , 1 , 0 )) as state_critical ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_WARNING_ALERT) . " , 1 , 0 )) as state_warning ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_UNKNOWN) . " , 1 , 0 )) as state_unknown ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NO_DATA) . " , 1 , 0 )) as state_notinit ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NORMAL) . " , 1 , 0 )) as state_normal ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado () . " , 1 , 0 )) as state_total
" ;
$search_module_jj = " INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
2015-01-22 16:56:44 +01:00
2018-08-31 13:33:22 +02:00
$order_fields = 'ta.alias ASC, ta.id_agente ASC' ;
$inner_or_left = $this -> filter [ 'show_not_init_agents' ]
? " LEFT "
: " INNER " ;
2015-01-22 16:56:44 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente ta
2018-08-31 13:33:22 +02:00
LEFT JOIN tagent_secondary_group tasg
ON tasg . id_agent = ta . id_agente
$inner_or_left JOIN tagente_modulo tam
2015-01-22 16:56:44 +01:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
2015-04-30 12:35:42 +02:00
INNER JOIN ttag_module ttm
2015-01-22 16:56:44 +01:00
ON tam . id_agente_modulo = ttm . id_agente_modulo
2018-08-31 13:33:22 +02:00
$search_module_jj
2015-01-22 16:56:44 +01:00
WHERE ta . disabled = 0
2018-08-31 13:33:22 +02:00
AND ttm . id_tag = $rootID
$module_status_from_agent
$group_filter
2015-01-22 16:56:44 +01:00
$agent_search_filter
$agent_status_filter
2018-08-31 13:33:22 +02:00
$module_search_filter
GROUP BY ta . id_agente
HAVING state_total > 0
2015-01-22 16:56:44 +01:00
ORDER BY $order_fields " ;
}
2015-01-21 17:37:51 +01:00
break ;
// Get the modules of an agent
case 'agent' :
2015-01-22 16:56:44 +01:00
$columns = ' tam . id_agente_modulo AS id , tam . nombre AS name ,
2015-01-21 17:37:51 +01:00
tam . id_tipo_modulo , tam . id_modulo , tae . estado , tae . datos ' ;
$order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC' ;
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
// Set for the common ACL only. The strict ACL case is different (groups and tags divided).
// The modules only have visibility in two cases:
// 1. The user has access to the group of its agent and this group hasn't tags.
// 2. The user has access to the group of its agent, this group has tags and the module
// has any of this tags.
$tag_filter = '' ;
if ( ! $this -> strictACL ) {
// $parent is the agent id
$group_id = ( int ) db_get_value ( 'id_grupo' , 'tagente' , 'id_agente' , $parent );
if ( empty ( $group_id )) {
// ACL error, this will restrict (fuck) the module search
$tag_filter = 'AND 1=0' ;
}
else if ( ! empty ( $this -> acltags ) && isset ( $this -> acltags [ $group_id ])) {
$tags_str = $this -> acltags [ $group_id ];
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
if ( ! empty ( $tags_str )) {
$tag_filter = sprintf ( 'AND ttm.id_tag IN (%s)' , $tags_str );
}
}
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente_modulo tam
INNER JOIN ttag_module ttm
2015-01-22 16:56:44 +01:00
ON tam . id_agente_modulo = ttm . id_agente_modulo
AND ttm . id_tag = $rootID
2015-09-30 18:32:55 +02:00
$tag_filter
2015-01-21 17:37:51 +01:00
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-22 16:56:44 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$group_acl
$agent_search_filter
$agent_status_filter
2015-01-21 17:37:51 +01:00
WHERE tam . disabled = 0
2015-01-22 16:56:44 +01:00
AND tam . id_agente = $parent
2015-01-21 17:37:51 +01:00
$module_search_filter
ORDER BY $order_fields " ;
break ;
}
break ;
case 'os' :
// ACL Group
$group_acl = " " ;
if ( ! empty ( $this -> userGroups )) {
$user_groups_str = implode ( " , " , array_keys ( $this -> userGroups ));
$group_acl = " AND ta.id_grupo IN ( $user_groups_str ) " ;
}
else {
$group_acl = " AND ta.id_grupo = -1 " ;
}
switch ( $type ) {
// Get the agents of an os
case 'os' :
if ( empty ( $rootID ) || $rootID == - 1 ) {
2015-01-22 16:56:44 +01:00
$columns = 'tos.id_os AS id, tos.name AS name, tos.icon_name AS os_icon' ;
2015-05-14 17:57:59 +02:00
$group_by_fields = 'tos.id_os, tos.name, tos.icon_name' ;
2015-01-21 17:37:51 +01:00
$order_fields = 'tos.icon_name ASC, tos.id_os ASC' ;
2015-01-28 18:57:33 +01:00
// OS SQL
if ( $item_for_count === false ) {
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tconfig_os tos
INNER JOIN tagente ta
2015-01-28 18:57:33 +01:00
ON ta . disabled = 0
AND ta . id_os = tos . id_os
2015-01-21 17:37:51 +01:00
$agent_search_filter
$agent_status_filter
2015-01-28 18:57:33 +01:00
$group_acl
$modules_join
2015-05-14 17:57:59 +02:00
GROUP BY $group_by_fields
2015-01-28 18:57:33 +01:00
ORDER BY $order_fields " ;
}
// Counters SQL
else {
$agent_table = " SELECT COUNT(DISTINCT(ta.id_agente))
2015-04-30 12:35:42 +02:00
FROM tagente ta
2015-01-28 18:57:33 +01:00
$modules_join
WHERE ta . disabled = 0
AND ta . id_os = $item_for_count
$group_acl
$agent_search_filter
$agent_status_filter " ;
$sql = $this -> getAgentCountersSql ( $agent_table );
}
2015-01-21 17:37:51 +01:00
}
else {
2016-09-26 10:58:42 +02:00
$columns = ' ta . id_agente AS id , ta . nombre AS name , ta . alias ,
2015-01-29 21:00:30 +01:00
ta . fired_count , ta . normal_count , ta . warning_count ,
ta . critical_count , ta . unknown_count , ta . notinit_count ,
ta . total_count , ta . quiet ' ;
2018-08-31 10:51:17 +02:00
$search_module_jj = " " ;
$columns .= " ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_CRITICAL_ALERT) . " , 1 , 0 )) as state_critical ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_WARNING_ALERT) . " , 1 , 0 )) as state_warning ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_UNKNOWN) . " , 1 , 0 )) as state_unknown ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NO_DATA) . " , 1 , 0 )) as state_notinit ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NORMAL) . " , 1 , 0 )) as state_normal ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado () . " , 1 , 0 )) as state_total
" ;
$search_module_jj = " INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
2016-01-28 14:38:23 +01:00
2018-08-31 10:51:17 +02:00
$order_fields = 'ta.alias ASC, ta.id_agente ASC' ;
$inner_or_left = $this -> filter [ 'show_not_init_agents' ]
? " LEFT "
: " INNER " ;
2015-01-21 17:37:51 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente ta
2018-08-31 10:51:17 +02:00
LEFT JOIN tagent_secondary_group tasg
ON tasg . id_agent = ta . id_agente
$inner_or_left JOIN tagente_modulo tam
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
$search_module_jj
2015-01-21 17:37:51 +01:00
WHERE ta . disabled = 0
2015-01-28 18:57:33 +01:00
AND ta . id_os = $rootID
2018-08-31 10:51:17 +02:00
$module_status_from_agent
$group_filter
2015-01-21 17:37:51 +01:00
$agent_search_filter
$agent_status_filter
2018-08-31 10:51:17 +02:00
$module_search_filter
GROUP BY ta . id_agente
HAVING state_total > 0
2015-01-21 17:37:51 +01:00
ORDER BY $order_fields " ;
}
break ;
// Get the modules of an agent
case 'agent' :
2015-01-22 16:56:44 +01:00
$columns = ' tam . id_agente_modulo AS id , tam . nombre AS name ,
2015-01-21 17:37:51 +01:00
tam . id_tipo_modulo , tam . id_modulo , tae . estado , tae . datos ' ;
$order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC' ;
$os_filter = " AND ta.id_os = $rootID " ;
$agent_filter = " AND ta.id_agente = $parent " ;
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
// Set for the common ACL only. The strict ACL case is different (groups and tags divided).
// The modules only have visibility in two cases:
// 1. The user has access to the group of its agent and this group hasn't tags.
// 2. The user has access to the group of its agent, this group has tags and the module
// has any of this tags.
$tag_join = '' ;
if ( ! $this -> strictACL ) {
// $parent is the agent id
$group_id = ( int ) db_get_value ( 'id_grupo' , 'tagente' , 'id_agente' , $parent );
if ( empty ( $group_id )) {
// ACL error, this will restrict (fuck) the module search
$tag_join = ' INNER JOIN ttag_module tta
ON 1 = 0 ' ;
}
else if ( ! empty ( $this -> acltags ) && isset ( $this -> acltags [ $group_id ])) {
$tags_str = $this -> acltags [ $group_id ];
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
if ( ! empty ( $tags_str )) {
$tag_join = sprintf ( ' INNER JOIN ttag_module ttm
ON tam . id_agente_modulo = ttm . id_agente_modulo
AND ttm . id_tag IN ( % s ) ' , $tags_str );
}
}
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente_modulo tam
2015-09-30 18:32:55 +02:00
$tag_join
2015-01-21 17:37:51 +01:00
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-21 17:37:51 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$os_filter
$group_acl
$agent_search_filter
$agent_status_filter
WHERE tam . disabled = 0
$agent_filter
$module_search_filter
ORDER BY $order_fields " ;
break ;
}
break ;
case 'module_group' :
// ACL Group
$group_acl = " " ;
if ( ! empty ( $this -> userGroups )) {
$user_groups_str = implode ( " , " , array_keys ( $this -> userGroups ));
$group_acl = " AND ta.id_grupo IN ( $user_groups_str ) " ;
}
else {
$group_acl = " AND ta.id_grupo = -1 " ;
}
switch ( $type ) {
// Get the agents of a module group
case 'module_group' :
if ( empty ( $rootID ) || $rootID == - 1 ) {
2015-01-22 16:56:44 +01:00
$columns = 'tmg.id_mg AS id, tmg.name AS name' ;
2015-05-14 17:57:59 +02:00
$group_by_fields = 'tmg.id_mg, tmg.name' ;
2015-01-21 17:37:51 +01:00
$order_fields = 'tmg.name ASC, tmg.id_mg ASC' ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// Module groups SQL
if ( $item_for_count === false ) {
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tmodule_group tmg
INNER JOIN tagente_modulo tam
2015-01-28 18:57:33 +01:00
ON tam . disabled = 0
AND tam . id_module_group = tmg . id_mg
$module_search_filter
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-28 18:57:33 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
2015-01-21 17:37:51 +01:00
$group_acl
$agent_search_filter
2015-01-28 18:57:33 +01:00
$agent_status_filter
2015-05-14 17:57:59 +02:00
GROUP BY $group_by_fields
2015-01-28 18:57:33 +01:00
ORDER BY $order_fields " ;
}
// Counters SQL
else {
$agent_table = " SELECT COUNT(DISTINCT(ta.id_agente))
2015-04-30 12:35:42 +02:00
FROM tagente ta
INNER JOIN tagente_modulo tam
2015-01-28 18:57:33 +01:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
AND tam . id_module_group = $item_for_count
$module_search_filter
$module_status_join
WHERE ta . disabled = 0
$group_acl
$agent_search_filter
$agent_status_filter " ;
$sql = $this -> getAgentCountersSql ( $agent_table );
}
2015-01-21 17:37:51 +01:00
}
else {
2016-09-26 10:58:42 +02:00
$columns = ' ta . id_agente AS id , ta . nombre AS name , ta . alias ,
2015-01-29 21:00:30 +01:00
ta . fired_count , ta . normal_count , ta . warning_count ,
ta . critical_count , ta . unknown_count , ta . notinit_count ,
ta . total_count , ta . quiet ' ;
2018-08-31 09:09:54 +02:00
$search_module_jj = " " ;
$columns .= " ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_CRITICAL_ALERT) . " , 1 , 0 )) as state_critical ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_WARNING_ALERT) . " , 1 , 0 )) as state_warning ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_UNKNOWN) . " , 1 , 0 )) as state_unknown ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NO_DATA) . " , 1 , 0 )) as state_notinit ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NORMAL) . " , 1 , 0 )) as state_normal ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado () . " , 1 , 0 )) as state_total
" ;
$search_module_jj = " INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
2016-01-28 14:38:23 +01:00
2018-08-31 09:09:54 +02:00
$order_fields = 'ta.alias ASC, ta.id_agente ASC' ;
$inner_or_left = $this -> filter [ 'show_not_init_agents' ]
? " LEFT "
: " INNER " ;
2015-01-21 17:37:51 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente ta
2018-08-31 09:09:54 +02:00
LEFT JOIN tagent_secondary_group tasg
ON tasg . id_agent = ta . id_agente
$inner_or_left JOIN tagente_modulo tam
2015-01-21 17:37:51 +01:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
2018-08-31 09:09:54 +02:00
$search_module_jj
2015-01-21 17:37:51 +01:00
WHERE ta . disabled = 0
2018-08-31 09:09:54 +02:00
AND tam . id_module_group = $rootID
$module_status_from_agent
$group_filter
2015-01-21 17:37:51 +01:00
$agent_search_filter
$agent_status_filter
2018-08-31 09:09:54 +02:00
$module_search_filter
GROUP BY ta . id_agente
HAVING state_total > 0
2015-01-21 17:37:51 +01:00
ORDER BY $order_fields " ;
}
break ;
// Get the modules of an agent
case 'agent' :
2015-01-22 16:56:44 +01:00
$columns = ' tam . id_agente_modulo AS id , tam . nombre AS name ,
2015-01-21 17:37:51 +01:00
tam . id_tipo_modulo , tam . id_modulo , tae . estado , tae . datos ' ;
$order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC' ;
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$module_group_filter = " AND tam.id_module_group = $rootID " ;
$agent_filter = " AND tam.id_agente = $parent " ;
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
// Set for the common ACL only. The strict ACL case is different (groups and tags divided).
// The modules only have visibility in two cases:
// 1. The user has access to the group of its agent and this group hasn't tags.
// 2. The user has access to the group of its agent, this group has tags and the module
// has any of this tags.
$tag_join = '' ;
if ( ! $this -> strictACL ) {
// $parent is the agent id
$group_id = ( int ) db_get_value ( 'id_grupo' , 'tagente' , 'id_agente' , $parent );
if ( empty ( $group_id )) {
// ACL error, this will restrict (fuck) the module search
$tag_join = ' INNER JOIN ttag_module tta
ON 1 = 0 ' ;
}
else if ( ! empty ( $this -> acltags ) && isset ( $this -> acltags [ $group_id ])) {
$tags_str = $this -> acltags [ $group_id ];
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
if ( ! empty ( $tags_str )) {
$tag_join = sprintf ( ' INNER JOIN ttag_module ttm
ON tam . id_agente_modulo = ttm . id_agente_modulo
AND ttm . id_tag IN ( % s ) ' , $tags_str );
}
}
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente_modulo tam
2015-09-30 18:32:55 +02:00
$tag_join
2015-01-21 17:37:51 +01:00
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-21 17:37:51 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$group_acl
$agent_search_filter
$agent_status_filter
WHERE tam . disabled = 0
$agent_filter
$module_group_filter
$module_search_filter
ORDER BY $order_fields " ;
break ;
}
break ;
case 'module' :
// ACL Group
2018-08-30 12:23:35 +02:00
//FIXME
2015-01-21 17:37:51 +01:00
$group_acl = " " ;
if ( ! empty ( $this -> userGroups )) {
$user_groups_str = implode ( " , " , array_keys ( $this -> userGroups ));
$group_acl = " AND ta.id_grupo IN ( $user_groups_str ) " ;
}
else {
$group_acl = " AND ta.id_grupo = -1 " ;
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
switch ( $type ) {
// Get the agents of a module
case 'module' :
if ( empty ( $rootID ) || $rootID == - 1 ) {
2015-01-22 16:56:44 +01:00
$columns = 'tam.nombre AS name' ;
2015-01-21 17:37:51 +01:00
$order_fields = 'tam.nombre ASC' ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// Modules SQL
if ( $item_for_count === false ) {
2018-08-08 11:49:54 +02:00
//FIXME This group ACL should be the same in all modules view
$group_acl = " AND (ta.id_grupo IN ( $user_groups_str ) OR tasg.id_group IN ( $user_groups_str )) " ;
2015-01-28 18:57:33 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente_modulo tam
INNER JOIN tagente ta
2015-01-28 18:57:33 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
2018-08-08 11:49:54 +02:00
LEFT JOIN tagent_secondary_group tasg
ON tasg . id_agent = ta . id_agente
2015-01-21 17:37:51 +01:00
$agent_search_filter
2015-01-28 18:57:33 +01:00
$agent_status_filter
$module_status_join
WHERE tam . disabled = 0
2018-08-08 11:49:54 +02:00
$group_acl
2015-01-28 18:57:33 +01:00
$module_search_filter
GROUP BY tam . nombre
ORDER BY $order_fields " ;
}
// Counters SQL
else {
$agent_table = " SELECT COUNT(DISTINCT(ta.id_agente))
2015-04-30 12:35:42 +02:00
FROM tagente ta
INNER JOIN tagente_modulo tam
2015-01-28 18:57:33 +01:00
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
AND tam . nombre = '$item_for_count'
$module_group_filter
$module_search_filter
$module_status_join
WHERE ta . disabled = 0
$group_acl
$agent_search_filter
$agent_status_filter " ;
$sql = $this -> getAgentCountersSql ( $agent_table );
}
2015-01-21 17:37:51 +01:00
}
else {
2016-09-26 10:58:42 +02:00
$columns = ' ta . id_agente AS id , ta . nombre AS name , ta . alias ,
2015-01-29 21:00:30 +01:00
ta . fired_count , ta . normal_count , ta . warning_count ,
ta . critical_count , ta . unknown_count , ta . notinit_count ,
ta . total_count , ta . quiet ' ;
2015-01-21 17:37:51 +01:00
$symbols = ' !"#$%&\'()*+,./:;<=>?@[\\]^{|}~' ;
$name = $rootID ;
for ( $i = 0 ; $i < strlen ( $symbols ); $i ++ ) {
$name = str_replace ( '_articapandora_' .
ord ( substr ( $symbols , $i , 1 )) . '_pandoraartica_' ,
substr ( $symbols , $i , 1 ), $name );
}
2018-08-30 12:23:35 +02:00
$this -> filter [ 'searchModule' ] = $name = io_safe_input ( $name );
2018-08-31 09:09:54 +02:00
$columns .= " ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_CRITICAL_ALERT) . " , 1 , 0 )) as state_critical ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_WARNING_ALERT) . " , 1 , 0 )) as state_warning ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_UNKNOWN) . " , 1 , 0 )) as state_unknown ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NO_DATA) . " , 1 , 0 )) as state_notinit ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado (AGENT_MODULE_STATUS_NORMAL) . " , 1 , 0 )) as state_normal ,
SUM ( if ( 1 = 1 " . $this->getModuleStatusFilterFromTestado () . " , 1 , 0 )) as state_total
" ;
$search_module_jj = " INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
2018-08-30 12:23:35 +02:00
$order_fields = 'ta.alias ASC, ta.id_agente ASC' ;
$inner_or_left = $this -> filter [ 'show_not_init_agents' ]
? " LEFT "
: " INNER " ;
2018-08-31 09:09:54 +02:00
$sql = " SELECT $columns
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON tasg . id_agent = ta . id_agente
$inner_or_left JOIN tagente_modulo tam
ON tam . disabled = 0
AND ta . id_agente = tam . id_agente
$search_module_jj
WHERE ta . disabled = 0
AND tam . nombre = '$name'
$module_status_from_agent
$group_filter
$agent_search_filter
$agent_status_filter
$module_search_filter
GROUP BY ta . id_agente
HAVING state_total > 0
ORDER BY $order_fields " ;
2015-01-21 17:37:51 +01:00
}
break ;
// Get the modules of an agent
case 'agent' :
2015-01-22 16:56:44 +01:00
$columns = ' tam . id_agente_modulo AS id , tam . nombre AS name ,
2015-01-21 17:37:51 +01:00
tam . id_tipo_modulo , tam . id_modulo , tae . estado , tae . datos ' ;
$order_fields = 'tam.nombre ASC, tam.id_agente_modulo ASC' ;
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$symbols = ' !"#$%&\'()*+,./:;<=>?@[\\]^{|}~' ;
$name = $rootID ;
for ( $i = 0 ; $i < strlen ( $symbols ); $i ++ ) {
$name = str_replace ( '_articapandora_' .
ord ( substr ( $symbols , $i , 1 )) . '_pandoraartica_' ,
substr ( $symbols , $i , 1 ), $name );
}
$name = io_safe_input ( $name );
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$module_name_filter = " AND tam.nombre = ' $name ' " ;
$agent_filter = " AND tam.id_agente = $parent " ;
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
// We need the agents table
if ( empty ( $agents_join )) {
2015-04-30 12:35:42 +02:00
$agents_join = " INNER JOIN tagente ta
2015-01-21 17:37:51 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$group_acl " ;
}
else {
$agents_join .= " $group_acl " ;
}
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
$tag_join = '' ;
2018-08-30 12:23:35 +02:00
// $parent is the agent id
$group_id = ( int ) db_get_value ( 'id_grupo' , 'tagente' , 'id_agente' , $parent );
if ( empty ( $group_id )) {
// ACL error, this will restrict (fuck) the module search
$tag_join = ' INNER JOIN ttag_module tta
ON 1 = 0 ' ;
}
else if ( ! empty ( $this -> acltags ) && isset ( $this -> acltags [ $group_id ])) {
$tags_str = $this -> acltags [ $group_id ];
2016-01-28 14:38:23 +01:00
2018-08-30 12:23:35 +02:00
if ( ! empty ( $tags_str )) {
$tag_join = sprintf ( ' INNER JOIN ttag_module ttm
ON tam . id_agente_modulo = ttm . id_agente_modulo
AND ttm . id_tag IN ( % s ) ' , $tags_str );
2015-09-30 18:32:55 +02:00
}
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$sql = " SELECT $columns
2015-04-30 12:35:42 +02:00
FROM tagente_modulo tam
2015-09-30 18:32:55 +02:00
$tag_join
2015-01-21 17:37:51 +01:00
$module_status_join
2015-04-30 12:35:42 +02:00
INNER JOIN tagente ta
2015-01-21 17:37:51 +01:00
ON ta . disabled = 0
AND tam . id_agente = ta . id_agente
$group_acl
WHERE tam . disabled = 0
$agent_filter
$module_name_filter
$module_group_filter
$module_search_filter
ORDER BY $order_fields " ;
break ;
}
break ;
2018-04-06 17:18:40 +02:00
default :
$sql = $this -> getSqlExtended ( $item_for_count , $type , $rootType , $parent , $rootID ,
$agent_search_filter , $agent_status_filter , $agents_join ,
$module_search_filter , $module_status_filter , $modules_join ,
$module_status_join );
2015-01-21 17:37:51 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
return $sql ;
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
// Override this method
2016-01-28 14:38:23 +01:00
protected function getSqlExtended ( $item_for_count , $type , $rootType , $parent , $rootID ,
2015-01-30 20:06:49 +01:00
$agent_search_filter , $agent_status_filter , $agents_join ,
$module_search_filter , $module_status_filter , $modules_join ,
$module_status_join ) {
2015-01-21 17:37:51 +01:00
return false ;
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
protected function getItems ( $item_for_count = false ) {
$sql = $this -> getSql ( $item_for_count );
2015-01-21 17:37:51 +01:00
if ( empty ( $sql ))
return array ();
2015-01-22 19:13:30 +01:00
$data = db_process_sql ( $sql );
2015-01-21 17:37:51 +01:00
if ( empty ( $data ))
return array ();
2018-04-10 18:20:51 +02:00
2017-10-26 11:51:15 +02:00
// [26/10/2017] It seems the module hierarchy should be only available into the tree by group
if ( $this -> rootType == 'group' && $this -> type == 'agent' ) {
2017-01-23 12:55:15 +01:00
$data = $this -> getProcessedModules ( $data );
}
2015-01-21 17:37:51 +01:00
return $data ;
}
2015-01-28 18:57:33 +01:00
protected function getCounters ( $id ) {
$counters = $this -> getItems ( $id );
if ( ! empty ( $counters )) {
$counters = array_pop ( $counters );
}
return $counters ;
}
static function cmpSortNames ( $a , $b ) {
return strcmp ( $a [ " name " ], $b [ " name " ]);
}
2016-01-28 14:38:23 +01:00
2018-08-29 13:55:50 +02:00
protected function getProcessedGroups () {
2015-12-16 11:39:00 +01:00
$processed_groups = array ();
// Index and process the groups
2018-08-29 13:55:50 +02:00
$groups = $this -> getGroupCounters ( 0 );
2016-02-16 16:21:21 +01:00
// If user have not permissions in parent, set parent node to 0 (all)
2018-08-29 13:55:50 +02:00
// Avoid to do foreach for admins
if ( ! users_can_manage_group_all ( " AR " )) {
foreach ( $groups as $id => $group ) {
if ( ! isset ( $this -> userGroups [ $groups [ $id ][ 'parent' ]])) {
$groups [ $id ][ 'parent' ] = 0 ;
}
2016-02-16 16:21:21 +01:00
}
}
2015-12-16 11:39:00 +01:00
// Build the group hierarchy
foreach ( $groups as $id => $group ) {
2016-01-28 11:09:09 +01:00
if ( isset ( $groups [ $id ][ 'parent' ]) && ( $groups [ $id ][ 'parent' ] != 0 )) {
$parent = $groups [ $id ][ 'parent' ];
// Parent exists
if ( ! isset ( $groups [ $parent ][ 'children' ])) {
2015-12-16 11:39:00 +01:00
$groups [ $parent ][ 'children' ] = array ();
2016-01-28 11:09:09 +01:00
}
2015-12-16 11:39:00 +01:00
// Store a reference to the group into the parent
$groups [ $parent ][ 'children' ][] = & $groups [ $id ];
// This group was introduced into a parent
$groups [ $id ][ 'have_parent' ] = true ;
2015-01-28 18:57:33 +01:00
}
}
2016-01-28 11:09:09 +01:00
// Sort the children groups
foreach ( $groups as $id => $group ) {
if ( isset ( $groups [ $id ][ 'children' ])) {
usort ( $groups [ $id ][ 'children' ], array ( " Tree " , " cmpSortNames " ));
}
}
//Filter groups and eliminates the reference to children groups out of her parent
$groups = array_filter ( $groups , function ( $group ) {
return ! $group [ 'have_parent' ];
});
// Propagate child counters to her parents
Tree :: processCounters ( $groups );
// Filter groups and eliminates the reference to empty groups
2018-08-29 13:55:50 +02:00
$groups = Tree :: deleteEmptyGroups ( $groups );
2017-12-21 16:37:19 +01:00
usort ( $groups , array ( " Tree " , " cmpSortNames " ));
2016-01-28 11:09:09 +01:00
return $groups ;
2015-01-28 18:57:33 +01:00
}
2018-08-28 12:52:57 +02:00
protected function getProcessedItem ( $item , $server = false ) {
2016-01-28 14:38:23 +01:00
2015-07-06 18:26:13 +02:00
if ( isset ( $processed_item [ 'is_processed' ]) && $processed_item [ 'is_processed' ])
return $item ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_item = array ();
$processed_item [ 'id' ] = $item [ 'id' ];
$processed_item [ 'name' ] = $item [ 'name' ];
$processed_item [ 'rootID' ] = $item [ 'id' ];
$processed_item [ 'rootType' ] = $this -> rootType ;
$processed_item [ 'searchChildren' ] = 1 ;
if ( isset ( $item [ 'type' ]))
$processed_item [ 'type' ] = $item [ 'type' ];
else
$processed_item [ 'type' ] = $this -> type ;
if ( isset ( $item [ 'rootType' ]))
$processed_item [ 'rootType' ] = $item [ 'rootType' ];
else
$processed_item [ 'rootType' ] = $this -> rootType ;
if ( $processed_item [ 'type' ] == 'group' ) {
2015-03-05 19:43:19 +01:00
$processed_item [ 'parent' ] = $item [ 'parent' ];
2016-01-28 14:38:23 +01:00
2018-08-31 10:51:17 +02:00
$processed_item [ 'icon' ] = empty ( $item [ 'icon' ])
? " without_group.png "
: $item [ 'icon' ] . " .png " ;
}
if ( isset ( $item [ 'iconHTML' ])) {
$processed_item [ 'icon' ] = $item [ 'iconHTML' ];
2015-01-28 18:57:33 +01:00
}
2015-09-30 18:32:55 +02:00
if ( is_metaconsole () && ! empty ( $server )) {
2015-01-30 15:32:39 +01:00
$processed_item [ 'serverID' ] = $server [ 'id' ];
2015-01-28 18:57:33 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$counters = array ();
if ( isset ( $item [ 'total_unknown_count' ]))
$counters [ 'unknown' ] = $item [ 'total_unknown_count' ];
if ( isset ( $item [ 'total_critical_count' ]))
$counters [ 'critical' ] = $item [ 'total_critical_count' ];
if ( isset ( $item [ 'total_warning_count' ]))
$counters [ 'warning' ] = $item [ 'total_warning_count' ];
if ( isset ( $item [ 'total_not_init_count' ]))
$counters [ 'not_init' ] = $item [ 'total_not_init_count' ];
if ( isset ( $item [ 'total_normal_count' ]))
$counters [ 'ok' ] = $item [ 'total_normal_count' ];
if ( isset ( $item [ 'total_count' ]))
$counters [ 'total' ] = $item [ 'total_count' ];
if ( isset ( $item [ 'total_fired_count' ]))
$counters [ 'alerts' ] = $item [ 'total_fired_count' ];
if ( ! empty ( $counters ))
$processed_item [ 'counters' ] = $counters ;
2015-12-16 11:39:00 +01:00
2015-07-06 18:26:13 +02:00
if ( ! empty ( $processed_item ))
$processed_item [ 'is_processed' ] = true ;
2015-01-28 18:57:33 +01:00
return $processed_item ;
}
// This function should be used only when retrieving the data of the metaconsole's nodes
protected function getMergedItems ( $items ) {
// This variable holds the result
$mergedItems = array ();
foreach ( $items as $key => $item ) {
// Avoid the deleted items
if ( ! isset ( $items [ $key ]) || empty ( $item ))
continue ;
// Store the item in a temporary element
$resultItem = $item ;
// The 'id' parameter will be stored as 'server_id' => 'id'
$resultItem [ 'id' ] = array ();
2015-01-30 15:32:39 +01:00
$resultItem [ 'id' ][ $item [ 'serverID' ]] = $item [ 'id' ];
2015-01-28 18:57:33 +01:00
$resultItem [ 'rootID' ] = array ();
2015-01-30 15:32:39 +01:00
$resultItem [ 'rootID' ][ $item [ 'serverID' ]] = $item [ 'rootID' ];
$resultItem [ 'serverID' ] = array ();
$resultItem [ 'serverID' ][ $item [ 'serverID' ]] = $item [ 'rootID' ];
2015-01-28 18:57:33 +01:00
// Initialize counters if any of it don't exist
if ( ! isset ( $resultItem [ 'counters' ]))
$resultItem [ 'counters' ] = array ();
if ( ! isset ( $resultItem [ 'counters' ][ 'unknown' ]))
$resultItem [ 'counters' ][ 'unknown' ] = 0 ;
if ( ! isset ( $resultItem [ 'counters' ][ 'critical' ]))
$resultItem [ 'counters' ][ 'critical' ] = 0 ;
if ( ! isset ( $resultItem [ 'counters' ][ 'warning' ]))
$resultItem [ 'counters' ][ 'warning' ] = 0 ;
if ( ! isset ( $resultItem [ 'counters' ][ 'not_init' ]))
$resultItem [ 'counters' ][ 'not_init' ] = 0 ;
if ( ! isset ( $resultItem [ 'counters' ][ 'ok' ]))
$resultItem [ 'counters' ][ 'ok' ] = 0 ;
if ( ! isset ( $resultItem [ 'counters' ][ 'total' ]))
$resultItem [ 'counters' ][ 'total' ] = 0 ;
if ( ! isset ( $resultItem [ 'counters' ][ 'alerts' ]))
$resultItem [ 'counters' ][ 'alerts' ] = 0 ;
if ( $item [ 'type' ] == 'group' ) {
// Add the children
if ( ! isset ( $resultItem [ 'children' ]))
$resultItem [ 'children' ] = array ();
}
// Iterate over the list to search items that match the actual item
foreach ( $items as $key2 => $item2 ) {
// Skip the actual or empty items
if ( $key == $key2 || ! isset ( $items [ $key2 ]))
continue ;
// Match with the name and type
if ( $item [ 'name' ] == $item2 [ 'name' ] && $item [ 'type' ] == $item2 [ 'type' ]) {
// Add the matched ids
2015-01-30 15:32:39 +01:00
$resultItem [ 'id' ][ $item2 [ 'serverID' ]] = $item2 [ 'id' ];
$resultItem [ 'rootID' ][ $item2 [ 'serverID' ]] = $item2 [ 'rootID' ];
$resultItem [ 'serverID' ][ $item2 [ 'serverID' ]] = $item2 [ 'rootID' ];
2015-01-28 18:57:33 +01:00
// Add the matched counters
if ( isset ( $item2 [ 'counters' ]) && ! empty ( $item2 [ 'counters' ])) {
foreach ( $item2 [ 'counters' ] as $type => $value ) {
if ( isset ( $resultItem [ 'counters' ][ $type ]))
$resultItem [ 'counters' ][ $type ] += $value ;
}
}
if ( $item [ 'type' ] == 'group' ) {
// Add the matched children
if ( isset ( $item2 [ 'children' ]))
$resultItem [ 'children' ] = array_merge ( $resultItem [ 'children' ], $item2 [ 'children' ]);
}
// Remove the item
unset ( $items [ $key2 ]);
}
}
if ( $item [ 'type' ] == 'group' ) {
// Get the merged children (recursion)
if ( ! empty ( $resultItem [ 'children' ]))
$resultItem [ 'children' ] = $this -> getMergedItems ( $resultItem [ 'children' ]);
}
// Add the resulting item
if ( ! empty ( $resultItem ) && ! empty ( $resultItem [ 'counters' ][ 'total' ]))
$mergedItems [] = $resultItem ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// Remove the item
unset ( $items [ $key ]);
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
usort ( $mergedItems , array ( " Tree " , " cmpSortNames " ));
return $mergedItems ;
}
2018-08-23 14:49:09 +02:00
protected function processModule ( & $module , $server = false , $all_groups ) {
2015-01-08 11:45:31 +01:00
global $config ;
2017-01-24 16:02:09 +01:00
if ( isset ( $module [ 'children' ])) {
foreach ( $module [ 'children' ] as $i => $children ) {
2018-08-23 14:49:09 +02:00
$this -> processModule ( $module [ 'children' ][ $i ], $server , $all_groups );
2017-01-24 16:02:09 +01:00
}
}
2015-01-08 11:45:31 +01:00
2015-01-02 09:11:00 +01:00
$module [ 'type' ] = 'module' ;
2015-01-22 16:56:44 +01:00
$module [ 'id' ] = ( int ) $module [ 'id' ];
2017-01-19 12:44:44 +01:00
$module [ 'name' ] = io_safe_output ( $module [ 'name' ]);
2015-01-02 09:45:53 +01:00
$module [ 'id_module_type' ] = ( int ) $module [ 'id_tipo_modulo' ];
2015-01-08 15:07:01 +01:00
$module [ 'server_type' ] = ( int ) $module [ 'id_modulo' ];
2015-01-21 17:37:51 +01:00
$module [ 'status' ] = $module [ 'estado' ];
$module [ 'value' ] = $module [ 'datos' ];
2015-01-29 21:00:30 +01:00
2015-09-30 18:32:55 +02:00
if ( is_metaconsole () && ! empty ( $server )) {
2015-01-30 15:32:39 +01:00
$module [ 'serverID' ] = $server [ 'id' ];
$module [ 'serverName' ] = $server [ 'server_name' ];
2015-01-29 21:00:30 +01:00
}
2015-06-08 09:32:01 +02:00
else {
2015-02-13 09:50:11 +01:00
$module [ 'serverName' ] = false ;
$module [ 'serverID' ] = false ;
}
2016-01-28 14:38:23 +01:00
2015-01-12 12:47:54 +01:00
if ( ! isset ( $module [ 'value' ]))
$module [ 'value' ] = modules_get_last_value ( $module [ 'id' ]);
2016-01-28 14:38:23 +01:00
2015-01-02 09:11:00 +01:00
// Status
2015-01-12 12:47:54 +01:00
switch ( $module [ 'status' ]) {
2015-01-02 09:11:00 +01:00
case AGENT_MODULE_STATUS_CRITICAL_ALERT :
2015-01-12 12:47:54 +01:00
$module [ 'alert' ] = 1 ;
case AGENT_MODULE_STATUS_CRITICAL_BAD :
$statusType = STATUS_MODULE_CRITICAL_BALL ;
$statusTitle = __ ( 'CRITICAL' );
$module [ 'statusText' ] = " critical " ;
2015-01-02 09:11:00 +01:00
break ;
case AGENT_MODULE_STATUS_WARNING_ALERT :
2015-01-12 12:47:54 +01:00
$module [ 'alert' ] = 1 ;
case AGENT_MODULE_STATUS_WARNING :
$statusType = STATUS_MODULE_WARNING_BALL ;
$statusTitle = __ ( 'WARNING' );
$module [ 'statusText' ] = " warning " ;
2015-01-02 09:11:00 +01:00
break ;
case AGENT_MODULE_STATUS_UNKNOWN :
2015-01-12 12:47:54 +01:00
$statusType = STATUS_MODULE_UNKNOWN_BALL ;
$statusTitle = __ ( 'UNKNOWN' );
$module [ 'statusText' ] = " unknown " ;
2015-01-02 09:11:00 +01:00
break ;
case AGENT_MODULE_STATUS_NO_DATA :
case AGENT_MODULE_STATUS_NOT_INIT :
2015-01-12 12:47:54 +01:00
$statusType = STATUS_MODULE_NO_DATA_BALL ;
$statusTitle = __ ( 'NO DATA' );
$module [ 'statusText' ] = " not_init " ;
2015-01-02 09:11:00 +01:00
break ;
case AGENT_MODULE_STATUS_NORMAL_ALERT :
2015-01-12 12:47:54 +01:00
$module [ 'alert' ] = 1 ;
case AGENT_MODULE_STATUS_NORMAL :
2015-01-02 09:11:00 +01:00
default :
2015-01-12 12:47:54 +01:00
$statusType = STATUS_MODULE_OK_BALL ;
$statusTitle = __ ( 'NORMAL' );
$module [ 'statusText' ] = " ok " ;
2015-01-02 09:11:00 +01:00
break ;
}
2016-01-28 14:38:23 +01:00
2015-01-12 12:47:54 +01:00
if ( $statusType !== STATUS_MODULE_UNKNOWN_BALL
&& $statusType !== STATUS_MODULE_NO_DATA_BALL ) {
if ( is_numeric ( $module [ " value " ])) {
$statusTitle .= " : " . format_for_graph ( $module [ " value " ]);
}
else {
$statusTitle .= " : " . substr ( io_safe_output ( $module [ " value " ]), 0 , 42 );
}
}
2016-01-28 14:38:23 +01:00
2015-01-12 12:47:54 +01:00
$module [ 'statusImageHTML' ] = ui_print_status_image ( $statusType , $statusTitle , true );
2016-01-28 14:38:23 +01:00
2015-01-08 13:18:27 +01:00
// HTML of the server type image
$module [ 'serverTypeHTML' ] = servers_show_type ( $module [ 'server_type' ]);
2016-01-28 14:38:23 +01:00
2015-01-08 11:45:31 +01:00
// Link to the Module graph
2016-01-28 14:38:23 +01:00
2015-03-24 19:10:09 +01:00
// ACL
$acl_graphs = false ;
2015-03-23 20:51:44 +01:00
$module [ " showGraphs " ] = 0 ;
2016-01-28 14:38:23 +01:00
2015-03-24 19:10:09 +01:00
// Avoid the check on the metaconsole. Too slow to show/hide an icon depending on the permissions
2015-09-30 18:32:55 +02:00
if ( ! empty ( $group_id ) && ! is_metaconsole ()) {
2018-08-08 11:49:54 +02:00
$acl_graphs = check_acl_one_of_groups ( $config [ 'id_user' ], $all_groups , " RR " );
2015-03-24 19:10:09 +01:00
}
2018-08-08 11:49:54 +02:00
else if ( ! empty ( $all_groups )) {
2015-03-24 19:10:09 +01:00
$acl_graphs = true ;
}
2016-01-28 14:38:23 +01:00
2015-03-24 19:10:09 +01:00
if ( $acl_graphs ) {
$module [ " showGraphs " ] = 1 ;
2015-01-29 21:00:30 +01:00
}
2016-01-28 14:38:23 +01:00
2015-03-23 20:51:44 +01:00
if ( $module [ " showGraphs " ]) {
$graphType = return_graphtype ( $module [ 'id_module_type' ]);
$url = ui_get_full_url ( " operation/agentes/stat_win.php " , false , false , false );
$winHandle = dechex ( crc32 ( $module [ 'id' ] . $module [ 'name' ]));
2016-01-28 14:38:23 +01:00
2015-03-23 20:51:44 +01:00
$graph_params = array (
" type " => $graphType ,
" period " => SECONDS_1DAY ,
" id " => $module [ 'id' ],
2015-04-21 10:44:50 +02:00
" label " => base64_encode ( $module [ 'name' ]),
2015-03-23 20:51:44 +01:00
" refresh " => SECONDS_10MINUTES
);
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
if ( is_metaconsole () && ! empty ( $server )) {
2015-03-23 20:51:44 +01:00
// Set the server id
$graph_params [ " server " ] = $module [ 'serverID' ];
}
2016-01-28 14:38:23 +01:00
2015-03-23 20:51:44 +01:00
$graph_params_str = http_build_query ( $graph_params );
$moduleGraphURL = " $url ? $graph_params_str " ;
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
$module [ 'moduleGraph' ] = array (
'url' => $moduleGraphURL ,
'handle' => $winHandle
);
2018-03-12 15:17:59 +01:00
// Info to be able to open the snapshot image new page
$module [ 'snapshot' ] = ui_get_snapshot_link ( array (
'id_module' => $module [ 'id' ],
'interval' => $module [ 'current_interval' ],
2018-08-14 13:21:32 +02:00
'module_name' => $module [ 'name' ],
'id_node' => $module [ 'serverID' ] ? $module [ 'serverID' ] : 0 ,
2018-03-12 15:17:59 +01:00
), true );
2015-01-29 21:00:30 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-30 20:06:49 +01:00
// Alerts fired image
2015-02-16 18:37:16 +01:00
$has_alerts = ( bool ) db_get_value (
2018-08-23 14:49:09 +02:00
'id_agent_module' ,
2015-02-16 18:37:16 +01:00
'talert_template_modules' , 'id_agent_module' , $module [ 'id' ]);
2016-01-28 14:38:23 +01:00
2015-01-30 20:06:49 +01:00
if ( $has_alerts ) {
$module [ 'alertsImageHTML' ] = html_print_image ( " images/bell.png " , true , array ( " title " => __ ( 'Module alerts' )));
}
2015-01-02 09:11:00 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
protected function processModules ( & $modules , $server = false ) {
2018-08-23 14:49:09 +02:00
if ( ! empty ( $modules )) {
$all_groups = modules_get_agent_groups ( $modules [ 0 ][ 'id' ]);
}
2015-01-21 17:37:51 +01:00
foreach ( $modules as $iterator => $module ) {
2018-08-23 14:49:09 +02:00
$this -> processModule ( $modules [ $iterator ], $server , $all_groups );
2015-01-02 09:11:00 +01:00
}
}
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
protected function processAgent ( & $agent , $server = false ) {
global $config ;
2016-01-28 14:38:23 +01:00
2015-01-12 11:07:16 +01:00
$agent [ 'type' ] = 'agent' ;
2015-01-22 16:56:44 +01:00
$agent [ 'id' ] = ( int ) $agent [ 'id' ];
$agent [ 'name' ] = $agent [ 'name' ];
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$agent [ 'rootID' ] = $this -> rootID ;
$agent [ 'rootType' ] = $this -> rootType ;
2016-01-28 14:38:23 +01:00
2015-09-30 18:32:55 +02:00
if ( is_metaconsole ()) {
2015-04-17 16:12:51 +02:00
if ( isset ( $agent [ 'server_id' ]))
$agent [ 'serverID' ] = $agent [ 'server_id' ];
else if ( ! empty ( $server ))
$agent [ 'serverID' ] = $server [ 'id' ];
}
2015-01-12 11:07:16 +01:00
// Counters
2015-01-14 17:56:42 +01:00
if ( empty ( $agent [ 'counters' ])) {
$agent [ 'counters' ] = array ();
2016-01-28 14:38:23 +01:00
2018-08-28 12:52:57 +02:00
$agent [ 'counters' ][ 'unknown' ] = isset ( $agent [ 'unknown_count' ]) ? $agent [ 'unknown_count' ] : 0 ;
$agent [ 'counters' ][ 'critical' ] = isset ( $agent [ 'critical_count' ]) ? $agent [ 'critical_count' ] : 0 ;
$agent [ 'counters' ][ 'warning' ] = isset ( $agent [ 'warning_count' ]) ? $agent [ 'warning_count' ] : 0 ;
$agent [ 'counters' ][ 'not_init' ] = isset ( $agent [ 'notinit_count' ]) ? $agent [ 'notinit_count' ] : 0 ;
$agent [ 'counters' ][ 'ok' ] = isset ( $agent [ 'normal_count' ]) ? $agent [ 'normal_count' ] : 0 ;
$agent [ 'counters' ][ 'total' ] = isset ( $agent [ 'total_count' ]) ? $agent [ 'total_count' ] : 0 ;
$agent [ 'counters' ][ 'alerts' ] = isset ( $agent [ 'fired_count' ]) ? $agent [ 'fired_count' ] : 0 ;
2015-01-14 17:56:42 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-12 11:07:16 +01:00
// Status image
$agent [ 'statusImageHTML' ] = agents_tree_view_status_img_ball (
$agent [ 'counters' ][ 'critical' ],
$agent [ 'counters' ][ 'warning' ],
$agent [ 'counters' ][ 'unknown' ],
$agent [ 'counters' ][ 'total' ],
$agent [ 'counters' ][ 'not_init' ]);
2016-01-28 14:38:23 +01:00
2015-01-12 11:07:16 +01:00
// Alerts fired image
$agent [ " alertImageHTML " ] = agents_tree_view_alert_img_ball ( $agent [ 'counters' ][ 'alerts' ]);
2016-01-28 14:38:23 +01:00
2018-08-28 12:52:57 +02:00
// search module recalculate counters
2018-08-31 09:09:54 +02:00
if ( array_key_exists ( 'state_normal' , $agent )){
$agent [ 'counters' ][ 'unknown' ] = $agent [ 'state_unknown' ];
$agent [ 'counters' ][ 'critical' ] = $agent [ 'state_critical' ];
$agent [ 'counters' ][ 'warning' ] = $agent [ 'state_warning' ];
$agent [ 'counters' ][ 'not_init' ] = $agent [ 'state_notinit' ];
$agent [ 'counters' ][ 'ok' ] = $agent [ 'state_normal' ];
$agent [ 'counters' ][ 'total' ] = $agent [ 'state_total' ];
2018-08-28 12:52:57 +02:00
$agent [ 'critical_count' ] = $agent [ 'counters' ][ 'critical' ];
$agent [ 'warning_count' ] = $agent [ 'counters' ][ 'warning' ];
$agent [ 'unknown_count' ] = $agent [ 'counters' ][ 'unknown' ];
$agent [ 'notinit_count' ] = $agent [ 'counters' ][ 'not_init' ];
$agent [ 'normal_count' ] = $agent [ 'counters' ][ 'ok' ];
$agent [ 'total_count' ] = $agent [ 'counters' ][ 'total' ];
}
if ( ! $this -> getEmptyModuleFilterStatus ()) {
$agent [ 'counters' ][ 'unknown' ] = 0 ;
$agent [ 'counters' ][ 'critical' ] = 0 ;
$agent [ 'counters' ][ 'warning' ] = 0 ;
$agent [ 'counters' ][ 'not_init' ] = 0 ;
$agent [ 'counters' ][ 'ok' ] = 0 ;
$agent [ 'counters' ][ 'total' ] = 0 ;
switch ( $this -> filter [ 'statusModule' ]) {
case AGENT_MODULE_STATUS_CRITICAL_ALERT :
case AGENT_MODULE_STATUS_CRITICAL_BAD :
$agent [ 'counters' ][ 'critical' ] = $agent [ 'critical_count' ];
$agent [ 'counters' ][ 'total' ] = $agent [ 'critical_count' ];
break ;
case AGENT_MODULE_STATUS_WARNING_ALERT :
case AGENT_MODULE_STATUS_WARNING :
$agent [ 'counters' ][ 'warning' ] = $agent [ 'warning_count' ];
$agent [ 'counters' ][ 'total' ] = $agent [ 'warning_count' ];
break ;
case AGENT_MODULE_STATUS_UNKNOWN :
$agent [ 'counters' ][ 'unknown' ] = $agent [ 'unknown_count' ];
$agent [ 'counters' ][ 'total' ] = $agent [ 'unknown_count' ];
break ;
case AGENT_MODULE_STATUS_NO_DATA :
case AGENT_MODULE_STATUS_NOT_INIT :
$agent [ 'counters' ][ 'not_init' ] = $agent [ 'notinit_count' ];
$agent [ 'counters' ][ 'total' ] = $agent [ 'notinit_count' ];
break ;
case AGENT_MODULE_STATUS_NORMAL_ALERT :
case AGENT_MODULE_STATUS_NORMAL :
$agent [ 'counters' ][ 'ok' ] = $agent [ 'normal_count' ];
$agent [ 'counters' ][ 'total' ] = $agent [ 'normal_count' ];
break ;
}
}
if ( ! $this -> filter [ 'show_not_init_modules' ]) {
$agent [ 'counters' ][ 'total' ] -= $agent [ 'counters' ][ 'not_init' ];
$agent [ 'counters' ][ 'not_init' ] = 0 ;
}
2015-01-29 21:00:30 +01:00
// Quiet image
if ( isset ( $agent [ 'quiet' ]) && $agent [ 'quiet' ])
2018-06-26 12:31:23 +02:00
$agent [ 'quietImageHTML' ] = html_print_image ( " /images/dot_blue.png " , true , array ( " title " => __ ( 'Quiet' )));
2016-01-28 14:38:23 +01:00
2015-01-02 09:11:00 +01:00
// Children
2015-01-14 17:56:42 +01:00
if ( empty ( $agent [ 'children' ])) {
$agent [ 'children' ] = array ();
if ( $agent [ 'counters' ][ 'total' ] > 0 ) {
switch ( $this -> childrenMethod ) {
case 'on_demand' :
$agent [ 'searchChildren' ] = 1 ;
break ;
case 'live' :
$agent [ 'searchChildren' ] = 0 ;
break ;
}
2015-01-02 09:11:00 +01:00
}
2015-01-14 17:56:42 +01:00
else {
switch ( $this -> childrenMethod ) {
case 'on_demand' :
$agent [ 'searchChildren' ] = 0 ;
break ;
case 'live' :
$agent [ 'searchChildren' ] = 0 ;
break ;
}
2015-01-02 09:11:00 +01:00
}
}
}
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
protected function processAgents ( & $agents , $server = false ) {
2015-01-02 09:11:00 +01:00
if ( ! empty ( $agents )) {
foreach ( $agents as $iterator => $agent ) {
2015-01-29 21:00:30 +01:00
$this -> processAgent ( $agents [ $iterator ], $server );
2015-01-02 09:11:00 +01:00
}
}
}
2016-01-28 14:38:23 +01:00
2018-02-27 11:04:49 +01:00
/**
* @ brief Recursive function to remove the empty groups
*
* @ param groups All groups structure
*
* @ return new_groups A new groups structure without empty groups
*/
protected static function deleteEmptyGroups ( $groups ) {
$new_groups = array ();
foreach ( $groups as $group ) {
// If a group is empty, do not add to new_groups.
if ( ! isset ( $group [ 'counters' ][ 'total' ]) || $group [ 'counters' ][ 'total' ] == 0 ) {
continue ;
}
// Tray to remove the children groups
if ( ! empty ( $group [ 'children' ])) {
$children = Tree :: deleteEmptyGroups ( $group [ 'children' ]);
if ( empty ( $children )) unset ( $group [ 'children' ]);
else $group [ 'children' ] = $children ;
}
$new_groups [] = $group ;
}
return $new_groups ;
}
2017-12-05 09:43:37 +01:00
private static function extractGroupsWithIDs ( $groups , $ids_hash ) {
$result_groups = array ();
foreach ( $groups as $group ) {
if ( isset ( $ids_hash [ $group [ 'id' ]])) {
$result_groups [] = $group ;
}
else if ( ! empty ( $group [ 'children' ])) {
$result = self :: extractGroupsWithIDs ( $group [ 'children' ], $ids_hash );
// Item found on children
if ( ! empty ( $result )) {
$result_groups = array_merge ( $result_groups , $result );
}
}
}
return $result_groups ;
}
2015-04-17 16:12:51 +02:00
private static function extractItemWithID ( $items , $item_id , $item_type = " group " , $strictACL = false ) {
2015-03-09 19:29:45 +01:00
foreach ( $items as $item ) {
if ( $item [ " type " ] != $item_type )
continue ;
2016-01-28 14:38:23 +01:00
2015-03-09 19:29:45 +01:00
// Item found
2018-08-23 16:33:20 +02:00
if ( $item [ " id " ] == $item_id )
return $item ;
2016-01-28 14:38:23 +01:00
2015-03-09 19:29:45 +01:00
if ( $item [ " type " ] == " group " && ! empty ( $item [ " children " ])) {
2015-04-17 16:12:51 +02:00
$result = self :: extractItemWithID ( $item [ " children " ], $item_id , $item_type , $strictACL );
2016-01-28 14:38:23 +01:00
2015-03-09 19:29:45 +01:00
// Item found on children
if ( $result !== false )
return $result ;
}
}
2016-01-28 14:38:23 +01:00
2015-03-09 19:29:45 +01:00
// Item not found
return false ;
}
2016-01-28 14:38:23 +01:00
2015-01-12 11:07:16 +01:00
public function getData () {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2015-01-26 17:51:06 +01:00
switch ( $this -> type ) {
2018-08-23 16:33:20 +02:00
case 'os' :
$this -> getDataOS ();
break ;
2015-01-26 17:51:06 +01:00
case 'group' :
2018-08-23 16:33:20 +02:00
$this -> getDataGroup ();
break ;
case 'module_group' :
$this -> getDataModuleGroup ();
break ;
case 'module' :
$this -> getDataModules ();
break ;
2015-01-26 17:51:06 +01:00
case 'tag' :
2018-08-23 16:33:20 +02:00
$this -> getDataTag ();
2015-01-26 17:51:06 +01:00
break ;
case 'agent' :
$this -> getDataAgent ();
break ;
2018-08-23 16:33:20 +02:00
default :
$this -> getDataExtended ();
}
} else {
2015-04-17 16:12:51 +02:00
if ( $this -> type == 'agent' ) {
$this -> getDataAgent ();
}
else {
$this -> getDataGroup ();
}
}
2015-01-12 11:07:16 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-12 11:07:16 +01:00
protected function getDataExtended () {
// Override this method to add new types
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
private function getDataAgent () {
$processed_items = array ();
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
// Module names
if ( $this -> id == - 1 ) {
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
}
// Agents
else {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2015-01-28 18:57:33 +01:00
$items = $this -> getItems ();
$this -> processModules ( $items );
$processed_items = $items ;
2015-01-22 16:56:44 +01:00
}
else {
2015-01-28 18:57:33 +01:00
$items = array ();
2016-01-28 14:38:23 +01:00
2015-01-30 15:32:39 +01:00
if ( $this -> serverID !== false ) {
2016-01-28 14:38:23 +01:00
2015-01-30 15:32:39 +01:00
$server = metaconsole_get_servers ( $this -> serverID );
if ( metaconsole_connect ( $server ) == NOERR ) {
2015-04-17 16:12:51 +02:00
$items = $this -> getItems ();
$this -> processModules ( $items , $server );
2016-01-28 14:38:23 +01:00
2015-01-30 15:32:39 +01:00
metaconsole_restore_db ();
}
2015-01-26 17:51:06 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $items ;
}
2015-01-26 17:51:06 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$this -> tree = $processed_items ;
}
2016-01-28 14:38:23 +01:00
2015-01-26 17:51:06 +01:00
private function getDataGroup () {
2015-01-28 18:57:33 +01:00
$processed_items = array ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// Groups
if ( $this -> id == - 1 ) {
2016-01-28 14:38:23 +01:00
2018-08-30 12:23:35 +02:00
//$items = $this->getItems();
2018-08-29 13:55:50 +02:00
$processed_items = $this -> getProcessedGroups ();
2016-01-28 14:38:23 +01:00
2017-12-05 09:43:37 +01:00
if ( ! empty ( $processed_items )) {
// Filter by group name. This should be done after rerieving the items cause we need the possible items descendants
if ( ! empty ( $this -> filter [ 'searchGroup' ])) {
// Save the groups which intersect with the user groups
$groups = db_get_all_rows_filter ( 'tgrupo' , array ( 'nombre' => '%' . $this -> filter [ 'searchGroup' ] . '%' ));
if ( $groups == false ) $groups = array ();
$userGroupsACL = $this -> userGroupsACL ;
$ids_hash = array_reduce ( $groups , function ( $userGroups , $group ) use ( $userGroupsACL ) {
$group_id = $group [ 'id_grupo' ];
if ( isset ( $userGroupsACL [ $group_id ])) {
$userGroups [ $group_id ] = $userGroupsACL [ $group_id ];
}
return $userGroups ;
}, array ());
$result = self :: extractGroupsWithIDs ( $processed_items , $ids_hash );
$processed_items = ( $result === false ) ? array () : $result ;
}
// groupID filter. To access the view from tactical views f.e.
if ( ! empty ( $this -> filter [ 'groupID' ])) {
$result = self :: extractItemWithID ( $processed_items , $this -> filter [ 'groupID' ], " group " , $this -> strictACL );
2016-01-28 14:38:23 +01:00
2017-12-05 09:43:37 +01:00
$processed_items = ( $result === false ) ? array () : array ( $result );
}
2015-03-09 19:29:45 +01:00
}
2015-01-22 18:07:17 +01:00
}
2015-01-28 18:57:33 +01:00
// Agents
else {
2015-04-17 16:12:51 +02:00
$items = $this -> getItems ();
$this -> processAgents ( $items );
$processed_items = $items ;
2015-01-22 18:07:17 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$this -> tree = $processed_items ;
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
private function getDataTag () {
2015-01-22 18:07:17 +01:00
$processed_items = array ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// Tags
2015-01-22 18:07:17 +01:00
if ( $this -> id == - 1 ) {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2018-08-31 13:33:22 +02:00
//FIXME REFACTOR ME, PLEASE
$fields = array (
" g AS id_tag " ,
" SUM(x_critical) AS total_critical_count " ,
" SUM(x_warning) AS total_warning_count " ,
" SUM(x_normal) AS total_normal_count " ,
" SUM(x_unknown) AS total_unknown_count " ,
" SUM(x_not_init) AS total_not_init_count " ,
" SUM(x_alerts) AS total_alerts_count " ,
" SUM(x_total) AS total_count "
);
$fields = implode ( " , " , $fields );
$array_array = array (
'warning' => array (
'header' => " 0 AS x_critical, SUM(total) AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.warning_count > 0 AND ta.critical_count = 0 "
),
'critical' => array (
'header' => " SUM(total) AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count > 0 "
),
'normal' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, SUM(total) AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.normal_count > 0 "
),
'unknown' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, SUM(total) AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0 "
),
'not_init' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, SUM(total) AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " AND ta.total_count = ta.notinit_count " : " AND 1=0 "
),
'alerts' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, SUM(total) AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.fired_count > 0 "
),
'total' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, SUM(total) AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " " : " AND ta.total_count <> ta.notinit_count "
)
);
$filters = array (
'agent_alias' => '' ,
'agent_status' => '' ,
'module_status' => '' ,
'module_search_condition' => '' ,
'module_status_inner' => '' ,
'group_search_condition' => '' ,
'group_search_inner' => ''
2016-01-28 14:38:23 +01:00
2018-08-31 13:33:22 +02:00
);
if ( ! empty ( $this -> filter [ 'searchAgent' ])) {
$filters [ 'agent_alias' ] = " AND LOWER(ta.alias) LIKE LOWER('% " . $this -> filter [ 'searchAgent' ] . " %') " ;
}
if ( $this -> filter [ 'statusAgent' ] >= 0 ) {
$filters [ 'agent_status' ] = $this -> getAgentStatusFilter ();
}
if ( $this -> filter [ 'statusModule' ] >= 0 ) {
$filters [ 'module_status_inner' ] = "
INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
$filters [ 'module_status' ] = $this -> getModuleStatusFilterFromTestado ();
}
if ( ! empty ( $this -> filter [ 'searchGroup' ])) {
$filters [ 'group_search_inner' ] = "
INNER JOIN tgrupo tg
ON ta . id_grupo = tg . id_grupo
OR tasg . id_group = tg . id_grupo " ;
$filters [ 'group_search_condition' ] = " AND tg.nombre LIKE '% " . $this -> filter [ 'searchGroup' ] . " %' " ;
}
if ( ! empty ( $this -> filter [ 'searchModule' ])) {
$filters [ 'module_search_condition' ] = " AND tam.nombre LIKE '% " . $this -> filter [ 'searchModule' ] . " %' " ;
}
2016-01-28 14:38:23 +01:00
2018-08-31 13:33:22 +02:00
$group_acl = " " ;
if ( ! users_can_manage_group_all ( " AR " )) {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$group_acl = " AND (ta.id_grupo IN ( $user_groups_str ) OR tasg.id_group IN ( $user_groups_str )) " ;
}
2016-01-28 14:38:23 +01:00
2018-08-31 13:33:22 +02:00
$sql_model = " SELECT %s FROM
(
SELECT COUNT ( DISTINCT ( ta . id_agente )) AS total , ttm . id_tag AS g
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
INNER JOIN tagente_modulo tam
ON ta . id_agente = tam . id_agente
INNER JOIN ttag_module ttm
ON ttm . id_agente_modulo = tam . id_agente_modulo
% s % s
WHERE ta . disabled = 0
AND tam . disabled = 0
% s % s % s
% s % s
% s % s
GROUP BY ttm . id_tag
) x GROUP BY g " ;
$sql_array = array ();
foreach ( $array_array as $s_array ) {
$sql_array [] = sprintf (
$sql_model ,
$s_array [ 'header' ],
$filters [ 'module_status_inner' ], $filters [ 'group_search_inner' ],
$s_array [ 'condition' ], $filters [ 'agent_alias' ], $filters [ 'agent_status' ],
$filters [ 'module_status' ], $filters [ 'module_search_condition' ],
$filters [ 'group_search_condition' ], $group_acl
);
}
$sql = " SELECT $fields , tt.name, tt.id_tag AS id
FROM ( " . implode( " UNION ALL " , $sql_array ) . " ) x2
INNER JOIN ttag tt
ON tt . id_tag = x2 . g
GROUP BY g
ORDER BY tt . name " ;
$items = db_get_all_rows_sql ( $sql );
//END REFACTOR ME, PLEASE
foreach ( $items as $key => $item ) {
2015-01-28 18:57:33 +01:00
$processed_item = $this -> getProcessedItem ( $item );
$processed_items [] = $processed_item ;
2015-01-16 17:16:24 +01:00
}
2015-01-14 17:56:42 +01:00
}
2015-01-16 17:16:24 +01:00
else {
2015-01-22 18:19:38 +01:00
$servers = metaconsole_get_servers ();
2016-01-28 14:38:23 +01:00
2015-01-16 17:16:24 +01:00
$item_list = array ();
2015-01-22 18:19:38 +01:00
foreach ( $servers as $server ) {
2015-01-26 19:04:29 +01:00
if ( metaconsole_connect ( $server ) != NOERR )
2015-01-22 19:13:30 +01:00
continue ;
2015-01-28 18:57:33 +01:00
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
$items = $this -> getItems ();
2016-01-28 14:38:23 +01:00
2015-01-16 17:16:24 +01:00
$processed_items = array ();
foreach ( $items as $key => $item ) {
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$counters = $this -> getCounters ( $item [ 'id' ]);
if ( ! empty ( $counters )) {
foreach ( $counters as $type => $value ) {
$item [ $type ] = $value ;
}
}
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
$processed_item = $this -> getProcessedItem ( $item , $server );
2015-01-28 18:57:33 +01:00
$processed_items [] = $processed_item ;
2015-01-26 19:35:56 +01:00
}
2015-01-28 18:57:33 +01:00
$item_list = array_merge ( $item_list , $processed_items );
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
metaconsole_restore_db ();
2015-01-14 17:56:42 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $this -> getMergedItems ( $item_list );
2015-01-14 17:56:42 +01:00
}
}
2015-01-22 18:07:17 +01:00
// Agents
2015-01-14 17:56:42 +01:00
else {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2015-01-22 16:56:44 +01:00
$items = $this -> getItems ();
$this -> processAgents ( $items );
2015-01-22 18:07:17 +01:00
$processed_items = $items ;
2015-01-16 17:16:24 +01:00
}
else {
2015-01-22 16:56:44 +01:00
$rootIDs = $this -> rootID ;
2016-01-28 14:38:23 +01:00
2015-01-22 16:56:44 +01:00
$items = array ();
foreach ( $rootIDs as $serverID => $rootID ) {
2015-01-22 19:13:30 +01:00
$server = metaconsole_get_servers ( $serverID );
2015-01-26 19:04:29 +01:00
if ( metaconsole_connect ( $server ) != NOERR )
2015-01-22 19:13:30 +01:00
continue ;
2015-01-28 18:57:33 +01:00
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-22 16:56:44 +01:00
$this -> rootID = $rootID ;
2015-01-22 19:13:30 +01:00
$newItems = $this -> getItems ();
2015-01-29 21:00:30 +01:00
$this -> processAgents ( $newItems , $server );
2015-01-26 19:31:53 +01:00
$items = array_merge ( $items , $newItems );
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
metaconsole_restore_db ();
2015-01-16 17:16:24 +01:00
}
2015-01-22 16:56:44 +01:00
$this -> rootID = $rootIDs ;
2016-01-28 14:38:23 +01:00
2015-01-22 16:56:44 +01:00
if ( ! empty ( $items ))
2015-01-28 18:57:33 +01:00
usort ( $items , array ( " Tree " , " cmpSortNames " ));
2016-01-28 14:38:23 +01:00
2015-01-22 18:07:17 +01:00
$processed_items = $items ;
2015-01-16 17:16:24 +01:00
}
2015-01-14 17:56:42 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-22 18:07:17 +01:00
$this -> tree = $processed_items ;
2015-01-12 11:07:16 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
private function getDataModules () {
$processed_items = array ();
// Module names
if ( $this -> id == - 1 ) {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2018-08-30 12:23:35 +02:00
//FIXME REFACTOR ME, PLEASE
$fields = array (
" g AS nombre " ,
" SUM(x_critical) AS total_critical_count " ,
" SUM(x_warning) AS total_warning_count " ,
" SUM(x_normal) AS total_normal_count " ,
" SUM(x_unknown) AS total_unknown_count " ,
2018-08-31 10:51:17 +02:00
" SUM(x_not_init) AS total_not_init_count " ,
2018-08-30 12:23:35 +02:00
" SUM(x_alerts) AS total_alerts_count " ,
" SUM(x_total) AS total_count "
);
$fields = implode ( " , " , $fields );
$array_array = array (
'warning' => array (
'header' => " 0 AS x_critical, SUM(total) AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.warning_count > 0 AND ta.critical_count = 0 "
),
'critical' => array (
'header' => " SUM(total) AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count > 0 "
),
'normal' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, SUM(total) AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.normal_count > 0 "
),
'unknown' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, SUM(total) AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0 "
),
'not_init' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, SUM(total) AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " AND ta.total_count = ta.notinit_count " : " AND 1=0 "
),
'alerts' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, SUM(total) AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.fired_count > 0 "
),
'total' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, SUM(total) AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " " : " AND ta.total_count <> ta.notinit_count "
)
);
$filters = array (
'agent_alias' => '' ,
'agent_status' => '' ,
'module_status' => '' ,
'module_search_condition' => '' ,
'module_status_inner' => '' ,
'group_search_condition' => '' ,
'group_search_inner' => ''
2016-01-28 14:38:23 +01:00
2018-08-30 12:23:35 +02:00
);
if ( ! empty ( $this -> filter [ 'searchAgent' ])) {
$filters [ 'agent_alias' ] = " AND LOWER(ta.alias) LIKE LOWER('% " . $this -> filter [ 'searchAgent' ] . " %') " ;
}
if ( $this -> filter [ 'statusAgent' ] >= 0 ) {
$filters [ 'agent_status' ] = $this -> getAgentStatusFilter ();
}
if ( $this -> filter [ 'statusModule' ] >= 0 ) {
$filters [ 'module_status_inner' ] = "
INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
$filters [ 'module_status' ] = $this -> getModuleStatusFilterFromTestado ();
}
if ( ! empty ( $this -> filter [ 'searchGroup' ])) {
$filters [ 'group_search_inner' ] = "
INNER JOIN tgrupo tg
ON ta . id_grupo = tg . id_grupo
OR tasg . id_group = tg . id_grupo " ;
$filters [ 'group_search_condition' ] = " AND tg.nombre LIKE '% " . $this -> filter [ 'searchGroup' ] . " %' " ;
}
if ( ! empty ( $this -> filter [ 'searchModule' ])) {
$filters [ 'module_search_condition' ] = " AND tam.nombre LIKE '% " . $this -> filter [ 'searchModule' ] . " %' " ;
}
$group_acl = " " ;
if ( ! users_can_manage_group_all ( " AR " )) {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$group_acl = " AND (ta.id_grupo IN ( $user_groups_str ) OR tasg.id_group IN ( $user_groups_str )) " ;
}
$sql_model = " SELECT %s FROM
(
SELECT COUNT ( DISTINCT ( ta . id_agente )) AS total , tam . nombre AS g
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
INNER JOIN tagente_modulo tam
ON ta . id_agente = tam . id_agente
% s % s
WHERE ta . disabled = 0
AND tam . disabled = 0
% s % s % s
% s % s
% s % s
GROUP BY tam . nombre
) x GROUP BY g " ;
$sql_array = array ();
foreach ( $array_array as $s_array ) {
$sql_array [] = sprintf (
$sql_model ,
$s_array [ 'header' ],
$filters [ 'module_status_inner' ], $filters [ 'group_search_inner' ],
$s_array [ 'condition' ], $filters [ 'agent_alias' ], $filters [ 'agent_status' ],
$filters [ 'module_status' ], $filters [ 'module_search_condition' ],
$filters [ 'group_search_condition' ], $group_acl
);
}
$sql = " SELECT $fields FROM ( " . implode ( " UNION ALL " , $sql_array ) . " ) x2 GROUP BY g " ;
$items = db_get_all_rows_sql ( $sql );
2016-01-28 14:38:23 +01:00
2018-08-30 12:23:35 +02:00
//END REFACTOR ME, PLEASE
foreach ( $items as $key => $item ) {
$item [ 'name' ] = $item [ 'nombre' ];
2016-01-28 14:38:23 +01:00
$name = str_replace ( array ( ' ' , '#' , '/' , '.' , '(' , ')' , '¿' , '?' , '¡' , '!' ),
array ( '_articapandora_' . ord ( ' ' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '#' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '/' ) . '_pandoraartica_' ,
2015-01-28 18:57:33 +01:00
'_articapandora_' . ord ( '.' ) . '_pandoraartica_' ,
2016-01-28 14:38:23 +01:00
'_articapandora_' . ord ( '(' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( ')' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '¿' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '?' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '¡' ) . '_pandoraartica_' ,
2015-01-28 18:57:33 +01:00
'_articapandora_' . ord ( '!' ) . '_pandoraartica_' ),
io_safe_output ( $item [ 'name' ]));
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_item = $this -> getProcessedItem ( $item );
$processed_item [ 'id' ] = $name ;
$processed_item [ 'rootID' ] = $name ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items [] = $processed_item ;
}
}
else {
$servers = metaconsole_get_servers ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$item_list = array ();
foreach ( $servers as $server ) {
if ( metaconsole_connect ( $server ) != NOERR )
2015-01-26 19:50:20 +01:00
continue ;
2015-01-28 18:57:33 +01:00
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$items = $this -> getItems ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = array ();
foreach ( $items as $key => $item ) {
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$counters = $this -> getCounters ( $item [ 'name' ]);
if ( ! empty ( $counters )) {
foreach ( $counters as $type => $value ) {
$item [ $type ] = $value ;
2015-01-26 19:50:20 +01:00
}
}
2016-01-28 14:38:23 +01:00
$name = str_replace ( array ( ' ' , '#' , '/' , '.' , '(' , ')' , '¿' , '?' , '¡' , '!' ),
array ( '_articapandora_' . ord ( ' ' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '#' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '/' ) . '_pandoraartica_' ,
2015-01-28 18:57:33 +01:00
'_articapandora_' . ord ( '.' ) . '_pandoraartica_' ,
2016-01-28 14:38:23 +01:00
'_articapandora_' . ord ( '(' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( ')' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '¿' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '?' ) . '_pandoraartica_' ,
'_articapandora_' . ord ( '¡' ) . '_pandoraartica_' ,
2015-01-28 18:57:33 +01:00
'_articapandora_' . ord ( '!' ) . '_pandoraartica_' ),
io_safe_output ( $item [ 'name' ]));
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
$processed_item = $this -> getProcessedItem ( $item , $server );
2015-01-28 18:57:33 +01:00
$processed_item [ 'id' ] = $name ;
$processed_item [ 'rootID' ] = $name ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items [] = $processed_item ;
2015-01-26 19:50:20 +01:00
}
2015-01-28 18:57:33 +01:00
$item_list = array_merge ( $item_list , $processed_items );
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
metaconsole_restore_db ();
2015-01-26 19:50:20 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $this -> getMergedItems ( $item_list );
2015-01-26 19:50:20 +01:00
}
2015-01-28 18:57:33 +01:00
}
// Agents
else {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2015-01-28 18:57:33 +01:00
$items = $this -> getItems ();
$this -> processAgents ( $items );
$processed_items = $items ;
}
else {
$rootIDs = $this -> rootID ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$items = array ();
foreach ( $rootIDs as $serverID => $rootID ) {
$server = metaconsole_get_servers ( $serverID );
if ( metaconsole_connect ( $server ) != NOERR )
continue ;
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$this -> rootID = $rootID ;
$newItems = $this -> getItems ();
2015-01-29 21:00:30 +01:00
$this -> processAgents ( $newItems , $server );
2015-01-28 18:57:33 +01:00
$items = array_merge ( $items , $newItems );
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
metaconsole_restore_db ();
}
$this -> rootID = $rootIDs ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
if ( ! empty ( $items ))
usort ( $items , array ( " Tree " , " cmpSortNames " ));
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $items ;
}
2015-01-26 19:50:20 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$this -> tree = $processed_items ;
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
private function getDataModuleGroup () {
2015-01-22 19:13:30 +01:00
$processed_items = array ();
2015-01-28 18:57:33 +01:00
// Module groups
2015-01-22 19:13:30 +01:00
if ( $this -> id == - 1 ) {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2018-08-31 09:09:54 +02:00
//FIXME REFACTOR ME, PLEASE
2016-01-28 14:38:23 +01:00
2018-08-31 09:09:54 +02:00
$fields = array (
" g AS id_module_group " ,
" SUM(x_critical) AS total_critical_count " ,
" SUM(x_warning) AS total_warning_count " ,
" SUM(x_normal) AS total_normal_count " ,
" SUM(x_unknown) AS total_unknown_count " ,
2018-08-31 10:51:17 +02:00
" SUM(x_not_init) AS total_not_init_count " ,
2018-08-31 09:09:54 +02:00
" SUM(x_alerts) AS total_alerts_count " ,
" SUM(x_total) AS total_count "
);
$fields = implode ( " , " , $fields );
$array_array = array (
'warning' => array (
'header' => " 0 AS x_critical, SUM(total) AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.warning_count > 0 AND ta.critical_count = 0 "
),
'critical' => array (
'header' => " SUM(total) AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count > 0 "
),
'normal' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, SUM(total) AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.normal_count > 0 "
),
'unknown' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, SUM(total) AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0 "
),
'not_init' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, SUM(total) AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " AND ta.total_count = ta.notinit_count " : " AND 1=0 "
),
'alerts' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, SUM(total) AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.fired_count > 0 "
),
'total' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, SUM(total) AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " " : " AND ta.total_count <> ta.notinit_count "
)
);
$filters = array (
'agent_alias' => '' ,
'agent_status' => '' ,
'module_status' => '' ,
'module_search_condition' => '' ,
'module_status_inner' => '' ,
'group_search_condition' => '' ,
'group_search_inner' => ''
2016-01-28 14:38:23 +01:00
2018-08-31 09:09:54 +02:00
);
if ( ! empty ( $this -> filter [ 'searchAgent' ])) {
$filters [ 'agent_alias' ] = " AND LOWER(ta.alias) LIKE LOWER('% " . $this -> filter [ 'searchAgent' ] . " %') " ;
}
if ( $this -> filter [ 'statusAgent' ] >= 0 ) {
$filters [ 'agent_status' ] = $this -> getAgentStatusFilter ();
}
if ( $this -> filter [ 'statusModule' ] >= 0 ) {
$filters [ 'module_status_inner' ] = "
INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
$filters [ 'module_status' ] = $this -> getModuleStatusFilterFromTestado ();
}
if ( ! empty ( $this -> filter [ 'searchGroup' ])) {
$filters [ 'group_search_inner' ] = "
INNER JOIN tgrupo tg
ON ta . id_grupo = tg . id_grupo
OR tasg . id_group = tg . id_grupo " ;
$filters [ 'group_search_condition' ] = " AND tg.nombre LIKE '% " . $this -> filter [ 'searchGroup' ] . " %' " ;
}
if ( ! empty ( $this -> filter [ 'searchModule' ])) {
$filters [ 'module_search_condition' ] = " AND tam.nombre LIKE '% " . $this -> filter [ 'searchModule' ] . " %' " ;
}
$group_acl = " " ;
if ( ! users_can_manage_group_all ( " AR " )) {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$group_acl = " AND (ta.id_grupo IN ( $user_groups_str ) OR tasg.id_group IN ( $user_groups_str )) " ;
}
$sql_model = " SELECT %s FROM
(
SELECT COUNT ( DISTINCT ( ta . id_agente )) AS total , tam . id_module_group AS g
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
INNER JOIN tagente_modulo tam
ON ta . id_agente = tam . id_agente
% s % s
WHERE ta . disabled = 0
AND tam . disabled = 0
% s % s % s
% s % s
% s % s
GROUP BY tam . id_module_group
) x GROUP BY g " ;
$sql_array = array ();
foreach ( $array_array as $s_array ) {
$sql_array [] = sprintf (
$sql_model ,
$s_array [ 'header' ],
$filters [ 'module_status_inner' ], $filters [ 'group_search_inner' ],
$s_array [ 'condition' ], $filters [ 'agent_alias' ], $filters [ 'agent_status' ],
$filters [ 'module_status' ], $filters [ 'module_search_condition' ],
$filters [ 'group_search_condition' ], $group_acl
);
}
$sql = " SELECT $fields , tmg.name, tmg.id_mg AS id FROM ( " . implode ( " UNION ALL " , $sql_array ) . " ) x2
INNER JOIN tmodule_group tmg
ON tmg . id_mg = x2 . g
GROUP BY g
ORDER BY tmg . name " ;
$items = db_get_all_rows_sql ( $sql );
2016-01-28 14:38:23 +01:00
2018-08-31 09:09:54 +02:00
//END REFACTOR ME, PLEASE
foreach ( $items as $item ) {
2015-01-28 18:57:33 +01:00
$processed_item = $this -> getProcessedItem ( $item );
2015-01-26 19:50:20 +01:00
$processed_items [] = $processed_item ;
}
}
else {
$servers = metaconsole_get_servers ();
2016-01-28 14:38:23 +01:00
2015-01-26 19:50:20 +01:00
$item_list = array ();
foreach ( $servers as $server ) {
if ( metaconsole_connect ( $server ) != NOERR )
continue ;
2015-01-28 18:57:33 +01:00
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-26 19:50:20 +01:00
$items = $this -> getItems ();
2016-01-28 14:38:23 +01:00
2015-01-26 19:50:20 +01:00
$processed_items = array ();
foreach ( $items as $key => $item ) {
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$counters = $this -> getCounters ( $item [ 'id' ]);
if ( ! empty ( $counters )) {
foreach ( $counters as $type => $value ) {
$item [ $type ] = $value ;
}
}
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
$processed_item = $this -> getProcessedItem ( $item , $server );
2015-01-26 19:50:20 +01:00
$processed_items [] = $processed_item ;
}
2015-01-28 18:57:33 +01:00
$item_list = array_merge ( $item_list , $processed_items );
2016-01-28 14:38:23 +01:00
2015-01-26 19:50:20 +01:00
metaconsole_restore_db ();
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $this -> getMergedItems ( $item_list );
2015-01-22 19:13:30 +01:00
}
}
// Agents
else {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2015-01-22 19:13:30 +01:00
$items = $this -> getItems ();
$this -> processAgents ( $items );
$processed_items = $items ;
}
else {
$rootIDs = $this -> rootID ;
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
$items = array ();
foreach ( $rootIDs as $serverID => $rootID ) {
$server = metaconsole_get_servers ( $serverID );
2015-01-26 19:04:29 +01:00
if ( metaconsole_connect ( $server ) != NOERR )
2015-01-22 19:13:30 +01:00
continue ;
2015-01-28 18:57:33 +01:00
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
$this -> rootID = $rootID ;
$newItems = $this -> getItems ();
2015-01-29 21:00:30 +01:00
$this -> processAgents ( $newItems , $server );
2015-01-28 18:57:33 +01:00
$items = array_merge ( $items , $newItems );
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
metaconsole_restore_db ();
}
$this -> rootID = $rootIDs ;
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
if ( ! empty ( $items ))
2015-01-28 18:57:33 +01:00
usort ( $items , array ( " Tree " , " cmpSortNames " ));
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
$processed_items = $items ;
}
}
2016-01-28 14:38:23 +01:00
2015-01-22 19:13:30 +01:00
$this -> tree = $processed_items ;
2015-01-28 18:57:33 +01:00
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
private function getDataOS () {
$processed_items = array ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
// OS
if ( $this -> id == - 1 ) {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2018-08-31 10:51:17 +02:00
//FIXME REFACTOR ME, PLEASE
2016-01-28 14:38:23 +01:00
2018-08-31 10:51:17 +02:00
$fields = array (
" g AS id_os " ,
" SUM(x_critical) AS total_critical_count " ,
" SUM(x_warning) AS total_warning_count " ,
" SUM(x_normal) AS total_normal_count " ,
" SUM(x_unknown) AS total_unknown_count " ,
" SUM(x_not_init) AS total_not_init_count " ,
" SUM(x_alerts) AS total_alerts_count " ,
" SUM(x_total) AS total_count "
);
$fields = implode ( " , " , $fields );
$array_array = array (
'warning' => array (
'header' => " 0 AS x_critical, SUM(total) AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.warning_count > 0 AND ta.critical_count = 0 "
),
'critical' => array (
'header' => " SUM(total) AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count > 0 "
),
'normal' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, SUM(total) AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.normal_count > 0 "
),
'unknown' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, SUM(total) AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0 "
),
'not_init' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, SUM(total) AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " AND ta.total_count = ta.notinit_count " : " AND 1=0 "
),
'alerts' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, SUM(total) AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.fired_count > 0 "
),
'total' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, SUM(total) AS x_total, g " ,
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " " : " AND ta.total_count <> ta.notinit_count "
)
);
$filters = array (
'agent_alias' => '' ,
'agent_status' => '' ,
'module_status' => '' ,
'module_search_condition' => '' ,
'module_status_inner' => '' ,
'group_search_condition' => '' ,
'group_search_inner' => ''
2016-01-28 14:38:23 +01:00
2018-08-31 10:51:17 +02:00
);
if ( ! empty ( $this -> filter [ 'searchAgent' ])) {
$filters [ 'agent_alias' ] = " AND LOWER(ta.alias) LIKE LOWER('% " . $this -> filter [ 'searchAgent' ] . " %') " ;
}
if ( $this -> filter [ 'statusAgent' ] >= 0 ) {
$filters [ 'agent_status' ] = $this -> getAgentStatusFilter ();
}
if ( $this -> filter [ 'statusModule' ] >= 0 ) {
$filters [ 'module_status_inner' ] = "
INNER JOIN tagente_estado tae
ON tae . id_agente_modulo = tam . id_agente_modulo " ;
$filters [ 'module_status' ] = $this -> getModuleStatusFilterFromTestado ();
}
if ( ! empty ( $this -> filter [ 'searchGroup' ])) {
$filters [ 'group_search_inner' ] = "
INNER JOIN tgrupo tg
ON ta . id_grupo = tg . id_grupo
OR tasg . id_group = tg . id_grupo " ;
$filters [ 'group_search_condition' ] = " AND tg.nombre LIKE '% " . $this -> filter [ 'searchGroup' ] . " %' " ;
}
if ( ! empty ( $this -> filter [ 'searchModule' ])) {
$filters [ 'module_search_condition' ] = " AND tam.nombre LIKE '% " . $this -> filter [ 'searchModule' ] . " %' " ;
}
2016-01-28 14:38:23 +01:00
2018-08-31 10:51:17 +02:00
$group_acl = " " ;
if ( ! users_can_manage_group_all ( " AR " )) {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$group_acl = " AND (ta.id_grupo IN ( $user_groups_str ) OR tasg.id_group IN ( $user_groups_str )) " ;
}
$sql_model = " SELECT %s FROM
(
SELECT COUNT ( DISTINCT ( ta . id_agente )) AS total , ta . id_os AS g
FROM tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta . id_agente = tasg . id_agent
INNER JOIN tagente_modulo tam
ON ta . id_agente = tam . id_agente
% s % s
WHERE ta . disabled = 0
AND tam . disabled = 0
% s % s % s
% s % s
% s % s
GROUP BY ta . id_os
) x GROUP BY g " ;
$sql_array = array ();
foreach ( $array_array as $s_array ) {
$sql_array [] = sprintf (
$sql_model ,
$s_array [ 'header' ],
$filters [ 'module_status_inner' ], $filters [ 'group_search_inner' ],
$s_array [ 'condition' ], $filters [ 'agent_alias' ], $filters [ 'agent_status' ],
$filters [ 'module_status' ], $filters [ 'module_search_condition' ],
$filters [ 'group_search_condition' ], $group_acl
);
}
$sql = " SELECT $fields , tco.name, tco.id_os AS id, tco.icon_name AS iconHTML FROM ( " . implode ( " UNION ALL " , $sql_array ) . " ) x2
INNER JOIN tconfig_os tco
ON tco . id_os = x2 . g
GROUP BY g
ORDER BY tco . name " ;
$items = db_get_all_rows_sql ( $sql );
//END REFACTOR ME, PLEASE
foreach ( $items as $key => $item ) {
2015-01-28 18:57:33 +01:00
$processed_item = $this -> getProcessedItem ( $item );
$processed_items [] = $processed_item ;
}
}
else {
$servers = metaconsole_get_servers ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$item_list = array ();
foreach ( $servers as $server ) {
if ( metaconsole_connect ( $server ) != NOERR )
continue ;
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$items = $this -> getItems ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = array ();
foreach ( $items as $key => $item ) {
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$counters = $this -> getCounters ( $item [ 'id' ]);
if ( ! empty ( $counters )) {
foreach ( $counters as $type => $value ) {
$item [ $type ] = $value ;
}
}
2016-01-28 14:38:23 +01:00
2015-01-29 21:00:30 +01:00
$processed_item = $this -> getProcessedItem ( $item , $server );
2015-01-28 18:57:33 +01:00
$processed_item [ 'icon' ] = $item [ 'os_icon' ];
$processed_items [] = $processed_item ;
}
$item_list = array_merge ( $item_list , $processed_items );
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
metaconsole_restore_db ();
}
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $this -> getMergedItems ( $item_list );
2015-01-02 09:11:00 +01:00
}
}
2015-01-21 17:37:51 +01:00
// Agents
else {
2015-09-30 18:32:55 +02:00
if ( ! is_metaconsole ()) {
2015-01-28 18:57:33 +01:00
$items = $this -> getItems ();
$this -> processAgents ( $items );
$processed_items = $items ;
}
else {
$rootIDs = $this -> rootID ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$items = array ();
foreach ( $rootIDs as $serverID => $rootID ) {
$server = metaconsole_get_servers ( $serverID );
if ( metaconsole_connect ( $server ) != NOERR )
continue ;
db_clean_cache ();
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$this -> rootID = $rootID ;
$newItems = $this -> getItems ();
2015-01-29 21:00:30 +01:00
$this -> processAgents ( $newItems , $server );
2015-01-28 18:57:33 +01:00
$items = array_merge ( $items , $newItems );
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
metaconsole_restore_db ();
}
$this -> rootID = $rootIDs ;
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
if ( ! empty ( $items ))
usort ( $items , array ( " Tree " , " cmpSortNames " ));
2016-01-28 14:38:23 +01:00
2015-01-28 18:57:33 +01:00
$processed_items = $items ;
2015-01-12 11:07:16 +01:00
}
}
2016-01-28 14:38:23 +01:00
2015-01-21 17:37:51 +01:00
$this -> tree = $processed_items ;
2015-01-12 11:07:16 +01:00
}
2016-01-28 14:38:23 +01:00
2014-12-17 18:58:34 +01:00
public function getJSON () {
$this -> getData ();
2016-01-28 14:38:23 +01:00
2014-12-16 16:39:00 +01:00
return json_encode ( $this -> tree );
}
2016-01-28 14:38:23 +01:00
2014-12-17 18:58:34 +01:00
public function getArray () {
$this -> getData ();
2016-01-28 14:38:23 +01:00
2014-12-17 18:58:34 +01:00
return $this -> tree ;
}
2016-01-28 11:09:09 +01:00
static function processCounters ( & $groups ) {
2016-01-28 14:38:23 +01:00
$all_counters = array ();
2016-01-28 11:09:09 +01:00
foreach ( $groups as $id => $group ) {
2016-01-28 14:38:23 +01:00
$child_counters = array ();
2016-01-28 11:09:09 +01:00
if ( ! empty ( $groups [ $id ][ 'children' ])) {
$child_counters = Tree :: processCounters ( $groups [ $id ][ 'children' ]);
}
if ( ! empty ( $child_counters )) {
foreach ( $child_counters as $type => $value ) {
$groups [ $id ][ 'counters' ][ $type ] += $value ;
}
}
foreach ( $groups [ $id ][ 'counters' ] as $type => $value ) {
$all_counters [ $type ] += $value ;
}
}
return $all_counters ;
}
2017-01-23 12:55:15 +01:00
protected function getProcessedModules ( $modules_tree ) {
$tree_modules = array ();
$new_modules_root = array_filter ( $modules_tree , 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 ));
});
while ( ! empty ( $new_modules_child )) {
foreach ( $new_modules_child as $i => $child ) {
Tree :: recursive_modules_tree_view ( $new_modules_root , $new_modules_child , $i , $child );
}
}
foreach ( $new_modules_root as $m ) {
$tree_modules [] = $m ;
}
return $tree_modules ;
}
2017-10-13 15:10:10 +02:00
protected function getGroupCounters ( $group_id ) {
global $config ;
static $group_stats = false ;
# Do not use the group stat cache when using tags or real time group stats.
2018-08-23 14:49:09 +02:00
if ( $group_stats !== false ) {
return isset ( $group_stats [ $group_id ])
? $group_stats [ $group_id ]
: array (
'total_count' => 0 ,
'total_critical_count' => 0 ,
'total_unknown_count' => 0 ,
'total_warning_count' => 0 ,
'total_not_init_count' => 0 ,
'total_normal_count' => 0 ,
'total_fired_count' => 0
);
}
2017-12-21 16:37:19 +01:00
if ( $config [ 'realtimestats' ] == 1 ||
( isset ( $this -> userGroups [ $group_id ][ 'tags' ]) && $this -> userGroups [ $group_id ][ 'tags' ] != " " ) ||
2018-08-22 16:23:52 +02:00
! empty ( $this -> filter [ 'searchAgent' ]) ) {
$fields = array (
" g AS id_group " ,
2018-08-23 14:49:09 +02:00
" SUM(x_critical) AS critical " ,
" SUM(x_warning) AS warning " ,
" SUM(x_normal) AS normal " ,
" SUM(x_unknown) AS unknown " ,
" SUM(x_not_init) AS `non-init` " ,
" SUM(x_alerts) AS alerts_fired " ,
" SUM(x_total) AS agents "
2018-08-22 16:23:52 +02:00
);
$fields = implode ( " , " , $fields );
$array_array = array (
'warning' => array (
2018-08-23 14:49:09 +02:00
'header' => " 0 AS x_critical, SUM(total) AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
2018-08-22 16:23:52 +02:00
'condition' => " AND ta.warning_count > 0 AND ta.critical_count = 0 "
),
'critical' => array (
2018-08-23 14:49:09 +02:00
'header' => " SUM(total) AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
2018-08-22 16:23:52 +02:00
'condition' => " AND ta.critical_count > 0 "
),
'normal' => array (
2018-08-23 14:49:09 +02:00
'header' => " 0 AS x_critical, 0 AS x_warning, SUM(total) AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
2018-08-22 16:23:52 +02:00
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.normal_count > 0 "
),
'unknown' => array (
2018-08-23 14:49:09 +02:00
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, SUM(total) AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
2018-08-22 16:23:52 +02:00
'condition' => " AND ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0 "
),
'not_init' => array (
2018-08-23 14:49:09 +02:00
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, SUM(total) AS x_not_init, 0 AS x_alerts, 0 AS x_total, g " ,
2018-08-24 12:54:22 +02:00
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " AND ta.total_count = ta.notinit_count " : " AND 1=0 "
2018-08-23 14:49:09 +02:00
),
'alerts' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, SUM(total) AS x_alerts, 0 AS x_total, g " ,
'condition' => " AND ta.fired_count > 0 "
),
'total' => array (
'header' => " 0 AS x_critical, 0 AS x_warning, 0 AS x_normal, 0 AS x_unknown, 0 AS x_not_init, 0 AS x_alerts, SUM(total) AS x_total, g " ,
2018-08-24 12:54:22 +02:00
'condition' => $this -> filter [ 'show_not_init_agents' ] ? " " : " AND ta.total_count <> ta.notinit_count "
2018-08-22 16:23:52 +02:00
)
);
2018-08-24 12:54:22 +02:00
$filters = array (
'agent_alias' => '' ,
'agent_status' => '' ,
2018-08-28 12:52:57 +02:00
'module_status' => '' ,
'module_search' => ''
2018-08-24 12:54:22 +02:00
);
if ( ! empty ( $this -> filter [ 'searchAgent' ])) {
$filters [ 'agent_alias' ] = " AND LOWER(ta.alias) LIKE LOWER('% " . $this -> filter [ 'searchAgent' ] . " %') " ;
}
if ( $this -> filter [ 'statusAgent' ] >= 0 ) {
$filters [ 'agent_status' ] = $this -> getAgentStatusFilter ();
}
if ( $this -> filter [ 'statusModule' ] >= 0 ) {
$filters [ 'module_status' ] = $this -> getModuleStatusFilter ();
}
2018-08-28 12:52:57 +02:00
if ( ! empty ( $this -> filter [ 'searchModule' ])) {
$filters [ '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 " ;
2018-08-28 15:24:35 +02:00
$filters [ 'module_search_condition' ] = " AND tam.disabled = 0 AND tam.nombre LIKE '% " . $this -> filter [ 'searchModule' ] . " %' " . $this -> getModuleStatusFilterFromTestado ();
2018-08-28 12:52:57 +02:00
}
2018-08-24 12:54:22 +02:00
2018-08-29 09:16:07 +02:00
$group_acl = " " ;
$secondary_group_acl = " " ;
if ( ! users_can_manage_group_all ( " AR " )) {
$user_groups_str = implode ( " , " , $this -> userGroupsArray );
$group_acl = " AND ta.id_grupo IN ( $user_groups_str ) " ;
$secondary_group_acl = " AND tasg.id_group IN ( $user_groups_str ) " ;
}
2018-08-23 16:33:20 +02:00
$table = is_metaconsole () ? " tmetaconsole_agent " : " tagente " ;
$table_sec = is_metaconsole () ? " tmetaconsole_agent_secondary_group " : " tagent_secondary_group " ;
2018-08-22 16:23:52 +02:00
$sql_model = " SELECT %s FROM
(
2018-08-28 12:52:57 +02:00
SELECT COUNT ( DISTINCT ( ta . id_agente )) AS total , id_group AS g
2018-08-23 16:33:20 +02:00
FROM $table ta INNER JOIN $table_sec tasg
2018-08-22 16:23:52 +02:00
ON ta . id_agente = tasg . id_agent
2018-08-28 12:52:57 +02:00
% s
2018-08-22 16:23:52 +02:00
WHERE ta . disabled = 0
2018-08-29 09:16:07 +02:00
% s % s % s
% s % s % s
2018-08-22 16:23:52 +02:00
GROUP BY id_group
UNION ALL
2018-08-28 12:52:57 +02:00
SELECT COUNT ( DISTINCT ( ta . id_agente )) AS total , id_grupo AS g
2018-08-23 16:33:20 +02:00
FROM $table ta
2018-08-28 12:52:57 +02:00
% s
2018-08-22 16:23:52 +02:00
WHERE ta . disabled = 0
2018-08-29 09:16:07 +02:00
% s % s % s
% s % s % s
2018-08-22 16:23:52 +02:00
GROUP BY id_grupo
) x GROUP BY g " ;
$sql_array = array ();
foreach ( $array_array as $s_array ) {
$sql_array [] = sprintf (
2018-08-24 12:54:22 +02:00
$sql_model ,
$s_array [ 'header' ],
2018-08-28 12:52:57 +02:00
$filters [ 'module_search_inner' ],
2018-08-29 09:16:07 +02:00
$s_array [ 'condition' ], $filters [ 'agent_alias' ], $filters [ 'agent_status' ],
$filters [ 'module_status' ], $filters [ 'module_search_condition' ], $secondary_group_acl ,
2018-08-28 12:52:57 +02:00
$filters [ 'module_search_inner' ],
2018-08-29 09:16:07 +02:00
$s_array [ 'condition' ], $filters [ 'agent_alias' ], $filters [ 'agent_status' ],
$filters [ 'module_status' ], $filters [ 'module_search_condition' ], $group_acl
2018-08-22 16:23:52 +02:00
);
}
2018-08-29 13:55:50 +02:00
$hierarchy = $this -> getDisplayHierarchy ()
? 'tg.parent'
: '0 as parent' ;
$sql = " SELECT $fields , tg.nombre AS `name`, $hierarchy , tg.icon, tg.id_grupo AS gid FROM ( " . implode ( " UNION ALL " , $sql_array ) . " ) x2 RIGHT JOIN tgrupo tg ON x2.g = tg.id_grupo GROUP BY tg.id_grupo " ;
2018-08-23 14:49:09 +02:00
$stats = db_get_all_rows_sql ( $sql );
}
else {
2017-10-13 15:10:10 +02:00
$stats = db_get_all_rows_sql ( 'SELECT * FROM tgroup_stat' );
2018-08-23 14:49:09 +02:00
}
# Update the group cache (from db or calculated).
$group_stats = array ();
foreach ( $stats as $group ) {
// $group_stats[$group['id_group']]['total_count'] = $group['modules'] > 0 ? $group['agents'] : 0;
2018-08-29 13:55:50 +02:00
$group_stats [ $group [ 'gid' ]][ 'total_count' ] = ( bool ) $group [ 'agents' ] ? $group [ 'agents' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'total_critical_count' ] = $group [ 'critical' ] ? $group [ 'critical' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'total_unknown_count' ] = $group [ 'unknown' ] ? $group [ 'unknown' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'total_warning_count' ] = $group [ 'warning' ] ? $group [ 'warning' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'total_not_init_count' ] = $group [ 'non-init' ] ? $group [ 'non-init' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'total_normal_count' ] = $group [ 'normal' ] ? $group [ 'normal' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'total_fired_count' ] = $group [ 'alerts_fired' ] ? $group [ 'alerts_fired' ] : 0 ;
$group_stats [ $group [ 'gid' ]][ 'name' ] = $group [ 'name' ];
$group_stats [ $group [ 'gid' ]][ 'parent' ] = $group [ 'parent' ];
$group_stats [ $group [ 'gid' ]][ 'icon' ] = $group [ 'icon' ];
$group_stats [ $group [ 'gid' ]][ 'id' ] = $group [ 'gid' ];
$group_stats [ $group [ 'gid' ]] = $this -> getProcessedItem ( $group_stats [ $group [ 'gid' ]]);
2017-10-13 15:10:10 +02:00
}
if ( $group_stats !== false && isset ( $group_stats [ $group_id ])) {
return $group_stats [ $group_id ];
}
2018-08-29 13:55:50 +02:00
if ( $group_stats !== false && $group_id === 0 ) {
return $group_stats ;
}
2017-10-13 15:10:10 +02:00
return $this -> getCounters ( $group_id );
}
2017-01-23 12:55:15 +01:00
static function recursive_modules_tree_view ( & $new_modules , & $new_modules_child , $i , $child ) {
foreach ( $new_modules as $index => $module ) {
if ( $module [ 'id' ] == $child [ 'parent' ]) {
$new_modules [ $index ][ 'children' ][] = $child ;
unset ( $new_modules_child [ $i ]);
break ;
}
else if ( isset ( $new_modules [ $index ][ 'children' ])) {
Tree :: recursive_modules_tree_view ( $new_modules [ $index ][ 'children' ], $new_modules_child , $i , $child );
}
}
}
2014-12-16 16:39:00 +01:00
}
?>