2018-11-15 19:16:49 +01:00
|
|
|
<?php
|
2019-04-26 14:25:51 +02:00
|
|
|
/**
|
|
|
|
* Extension to manage a list of gateways and the node address where they should
|
|
|
|
* point to.
|
|
|
|
*
|
|
|
|
* @category Custom fields View
|
|
|
|
* @package Pandora FMS
|
|
|
|
* @subpackage Community
|
|
|
|
* @version 1.0.0
|
|
|
|
* @license See below
|
|
|
|
*
|
|
|
|
* ______ ___ _______ _______ ________
|
|
|
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
|
|
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
|
|
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
|
|
|
*
|
|
|
|
* ============================================================================
|
|
|
|
* Copyright (c) 2005-2019 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 General Public License
|
|
|
|
* as published by the Free Software Foundation for 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.
|
|
|
|
* ============================================================================
|
|
|
|
*/
|
2018-11-15 19:16:49 +01:00
|
|
|
|
2019-01-30 16:18:44 +01:00
|
|
|
|
2018-11-15 19:16:49 +01:00
|
|
|
/**
|
|
|
|
* Returns custom field all or 1.
|
|
|
|
*
|
|
|
|
* @param integer custom_field_id id.
|
|
|
|
* @param bool Prepare for select or return all rows.
|
|
|
|
*
|
|
|
|
* @return array custom fields data.
|
|
|
|
*/
|
2019-01-30 16:18:44 +01:00
|
|
|
function get_custom_fields($custom_field_id=false, $select=true, $display_on_front=false)
|
|
|
|
{
|
|
|
|
$fields = ($select) ? ' tcf.id_field, tcf.name ' : ' tcf.* ';
|
|
|
|
|
|
|
|
$where = ($custom_field_id) ? ' WHERE tcf.id_field ='.$custom_field_id : ' WHERE 1=1';
|
|
|
|
|
|
|
|
$display = ($display_on_front) ? ' AND tcf.display_on_front = 1' : '';
|
|
|
|
|
|
|
|
$result_array = [];
|
|
|
|
if (!is_metaconsole()) {
|
|
|
|
$sql = sprintf(
|
|
|
|
'SELECT
|
2018-11-15 19:16:49 +01:00
|
|
|
%s
|
|
|
|
FROM tagent_custom_fields tcf
|
|
|
|
%s
|
|
|
|
%s
|
2019-01-30 16:18:44 +01:00
|
|
|
',
|
|
|
|
$fields,
|
|
|
|
$where,
|
|
|
|
$display
|
|
|
|
);
|
|
|
|
|
|
|
|
$result = db_get_all_rows_sql($sql);
|
|
|
|
|
|
|
|
if (isset($result) && is_array($result)) {
|
|
|
|
foreach ($result as $key => $value) {
|
|
|
|
if ($select) {
|
|
|
|
$result_array[$value['name']] = $value['name'];
|
|
|
|
} else {
|
|
|
|
$result_array[$value['name']] = $value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$metaconsole_connections = metaconsole_get_connection_names();
|
2019-04-26 14:25:51 +02:00
|
|
|
// For all nodes.
|
2019-01-30 16:18:44 +01:00
|
|
|
if (isset($metaconsole_connections) && is_array($metaconsole_connections)) {
|
|
|
|
$result_meta = [];
|
|
|
|
foreach ($metaconsole_connections as $metaconsole) {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Get server connection data.
|
2019-01-30 16:18:44 +01:00
|
|
|
$server_data = metaconsole_get_connection($metaconsole);
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Establishes connection.
|
2019-01-30 16:18:44 +01:00
|
|
|
if (metaconsole_load_external_db($server_data) !== NOERR) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$sql = sprintf(
|
|
|
|
'SELECT
|
2018-11-15 19:16:49 +01:00
|
|
|
%s
|
|
|
|
FROM tagent_custom_fields tcf
|
|
|
|
%s
|
|
|
|
%s
|
2019-01-30 16:18:44 +01:00
|
|
|
',
|
|
|
|
$fields,
|
|
|
|
$where,
|
|
|
|
$display
|
|
|
|
);
|
|
|
|
|
|
|
|
$result[] = db_get_all_rows_sql($sql);
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Restore connection to root node.
|
2019-01-30 16:18:44 +01:00
|
|
|
metaconsole_restore_db();
|
|
|
|
|
|
|
|
if (isset($result) && is_array($result)) {
|
|
|
|
foreach ($result as $custom) {
|
|
|
|
foreach ($custom as $key => $value) {
|
|
|
|
if ($select) {
|
|
|
|
$result_array[$value['name']] = $value['name'];
|
|
|
|
} else {
|
|
|
|
$result_array[$value['name']] = $value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$result_array = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $result_array;
|
2018-11-15 19:16:49 +01:00
|
|
|
}
|
|
|
|
|
2019-01-30 16:18:44 +01:00
|
|
|
|
2018-11-15 19:16:49 +01:00
|
|
|
/**
|
|
|
|
* Returns custom field data.
|
|
|
|
*
|
2019-04-26 14:25:51 +02:00
|
|
|
* @param integer $custom_field_name Custom_field_id id.
|
2018-11-15 19:16:49 +01:00
|
|
|
*
|
|
|
|
* @return array custom fields data.
|
|
|
|
*/
|
2019-01-30 16:18:44 +01:00
|
|
|
function get_custom_fields_data($custom_field_name)
|
|
|
|
{
|
|
|
|
if (!isset($custom_field_name)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!is_metaconsole()) {
|
|
|
|
$sql = sprintf(
|
|
|
|
"SELECT tcf.id_field, tcf.name, tcd.description
|
2018-11-15 19:16:49 +01:00
|
|
|
FROM tagent_custom_fields tcf
|
|
|
|
INNER JOIN tagent_custom_data tcd
|
|
|
|
ON tcf.id_field = tcd.id_field
|
|
|
|
INNER JOIN tagente ta
|
|
|
|
ON tcd.id_agent = ta.id_agente
|
|
|
|
WHERE tcd.description <> ''
|
|
|
|
AND tcf.name = '%s'
|
|
|
|
GROUP BY tcf.id_field, tcd.description",
|
2019-01-30 16:18:44 +01:00
|
|
|
$custom_field_name
|
|
|
|
);
|
|
|
|
|
|
|
|
$result = db_get_all_rows_sql($sql);
|
|
|
|
if (isset($result) && is_array($result)) {
|
|
|
|
foreach ($result as $k => $v) {
|
|
|
|
$array_result[$v['description']] = $v['description'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$metaconsole_connections = metaconsole_get_connection_names();
|
2019-04-26 14:25:51 +02:00
|
|
|
// For all nodes.
|
2019-01-30 16:18:44 +01:00
|
|
|
if (isset($metaconsole_connections) && is_array($metaconsole_connections)) {
|
|
|
|
$result_meta = [];
|
|
|
|
foreach ($metaconsole_connections as $metaconsole) {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Get server connection data.
|
2019-01-30 16:18:44 +01:00
|
|
|
$server_data = metaconsole_get_connection($metaconsole);
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Establishes connection.
|
2019-01-30 16:18:44 +01:00
|
|
|
if (metaconsole_load_external_db($server_data) !== NOERR) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$sql = sprintf(
|
|
|
|
"SELECT tcf.id_field, tcf.name, tcd.description
|
2018-11-15 19:16:49 +01:00
|
|
|
FROM tagent_custom_fields tcf
|
|
|
|
INNER JOIN tagent_custom_data tcd
|
|
|
|
ON tcf.id_field = tcd.id_field
|
|
|
|
INNER JOIN tagente ta
|
|
|
|
ON tcd.id_agent = ta.id_agente
|
|
|
|
WHERE tcd.description <> ''
|
|
|
|
AND tcf.name = '%s'
|
2019-01-30 16:18:44 +01:00
|
|
|
GROUP BY tcf.id_field, tcd.description",
|
|
|
|
$custom_field_name
|
|
|
|
);
|
|
|
|
|
|
|
|
$result_meta[] = db_get_all_rows_sql($sql);
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Restore connection to root node.
|
2019-01-30 16:18:44 +01:00
|
|
|
metaconsole_restore_db();
|
|
|
|
}
|
|
|
|
|
|
|
|
$array_result = [];
|
2019-06-04 17:28:55 +02:00
|
|
|
if (isset($result_meta) === true
|
|
|
|
&& is_array($result_meta) === true
|
|
|
|
) {
|
2019-01-30 16:18:44 +01:00
|
|
|
foreach ($result_meta as $result) {
|
2019-06-04 17:28:55 +02:00
|
|
|
if (isset($result) === true
|
|
|
|
&& is_array($result) === true
|
|
|
|
) {
|
|
|
|
foreach ($result as $k => $v) {
|
|
|
|
$array_result[$v['description']] = $v['description'];
|
|
|
|
}
|
2019-01-30 16:18:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$array_result = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $array_result;
|
2018-11-15 19:16:49 +01:00
|
|
|
}
|
|
|
|
|
2019-01-30 16:18:44 +01:00
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
/**
|
|
|
|
* Function for custom field view return all conter for agents
|
|
|
|
*
|
|
|
|
* @param array $filters Params for search.
|
|
|
|
* @return void False or array.
|
|
|
|
*/
|
2019-01-30 16:18:44 +01:00
|
|
|
function agent_counters_custom_fields($filters)
|
|
|
|
{
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filter by status agent.
|
2019-01-30 16:18:44 +01:00
|
|
|
$and_status = '';
|
|
|
|
|
|
|
|
$agent_state_normal = 0;
|
|
|
|
$agent_state_critical = 0;
|
|
|
|
$agent_state_warning = 0;
|
|
|
|
$agent_state_unknown = 0;
|
|
|
|
$agent_state_notinit = 0;
|
|
|
|
$agent_state_total = 0;
|
|
|
|
if (is_array($filters['id_status'])) {
|
|
|
|
if (!in_array(-1, $filters['id_status'])) {
|
|
|
|
if (!in_array(AGENT_MODULE_STATUS_NOT_NORMAL, $filters['id_status'])) {
|
|
|
|
if (count($filters['id_status']) > 0) {
|
|
|
|
$and_status = ' AND ( ';
|
|
|
|
foreach ($filters['id_status'] as $key => $value) {
|
|
|
|
$and_status .= ($key != 0) ? ' OR ' : ' ';
|
|
|
|
switch ($value) {
|
|
|
|
default:
|
|
|
|
case AGENT_STATUS_NORMAL:
|
|
|
|
$agent_state_normal = agents_get_status_clause(AGENT_STATUS_NORMAL);
|
|
|
|
$and_status .= agents_get_status_clause(AGENT_STATUS_NORMAL);
|
|
|
|
break;
|
|
|
|
case AGENT_STATUS_CRITICAL:
|
|
|
|
$and_status .= agents_get_status_clause(AGENT_STATUS_CRITICAL);
|
|
|
|
$agent_state_critical = agents_get_status_clause(AGENT_STATUS_CRITICAL);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_WARNING:
|
|
|
|
$and_status .= agents_get_status_clause(AGENT_STATUS_WARNING);
|
|
|
|
$agent_state_warning = agents_get_status_clause(AGENT_STATUS_WARNING);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_UNKNOWN:
|
|
|
|
$and_status .= agents_get_status_clause(AGENT_STATUS_UNKNOWN);
|
|
|
|
$agent_state_unknown = agents_get_status_clause(AGENT_STATUS_UNKNOWN);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_NOT_INIT:
|
|
|
|
$and_status .= agents_get_status_clause(AGENT_STATUS_NOT_INIT);
|
|
|
|
$agent_state_notinit = agents_get_status_clause(AGENT_STATUS_NOT_INIT);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$and_status .= ' ) ';
|
|
|
|
$agent_state_total = agents_get_status_clause(AGENT_STATUS_ALL);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$and_status = ' AND (
|
2018-11-15 19:16:49 +01:00
|
|
|
( ta.critical_count > 0 )
|
|
|
|
OR ( ta.critical_count = 0 AND ta.warning_count > 0 )
|
|
|
|
OR ( ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0 )
|
|
|
|
OR ( ta.total_count = ta.notinit_count )
|
2019-01-30 16:18:44 +01:00
|
|
|
) ';
|
|
|
|
|
|
|
|
$agent_state_critical = agents_get_status_clause(AGENT_STATUS_CRITICAL);
|
|
|
|
$agent_state_warning = agents_get_status_clause(AGENT_STATUS_WARNING);
|
|
|
|
$agent_state_unknown = agents_get_status_clause(AGENT_STATUS_UNKNOWN);
|
|
|
|
$agent_state_notinit = agents_get_status_clause(AGENT_STATUS_NOT_INIT);
|
|
|
|
$agent_state_total = agents_get_status_clause(AGENT_STATUS_ALL);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$agent_state_normal = agents_get_status_clause(AGENT_STATUS_NORMAL);
|
|
|
|
$agent_state_critical = agents_get_status_clause(AGENT_STATUS_CRITICAL);
|
|
|
|
$agent_state_warning = agents_get_status_clause(AGENT_STATUS_WARNING);
|
|
|
|
$agent_state_unknown = agents_get_status_clause(AGENT_STATUS_UNKNOWN);
|
|
|
|
$agent_state_notinit = agents_get_status_clause(AGENT_STATUS_NOT_INIT);
|
|
|
|
$agent_state_total = agents_get_status_clause(AGENT_STATUS_ALL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filter by status module.
|
2019-01-30 16:18:44 +01:00
|
|
|
$empty_agents_count = "UNION ALL
|
2018-12-10 09:18:04 +01:00
|
|
|
SELECT ta.id_agente,
|
|
|
|
0 AS c_m_total,
|
|
|
|
0 AS mm_normal,
|
|
|
|
0 AS mm_critical,
|
|
|
|
0 AS mm_warning,
|
|
|
|
0 AS mm_unknown,
|
|
|
|
0 AS mm_not_init,
|
|
|
|
0 AS mm_total
|
|
|
|
FROM tagente ta
|
|
|
|
LEFT JOIN tagent_secondary_group tasg
|
|
|
|
ON ta.id_agente = tasg.id_agent
|
|
|
|
WHERE ta.disabled = 0
|
|
|
|
AND ta.total_count = 0
|
|
|
|
$groups_and";
|
|
|
|
|
2019-01-30 16:18:44 +01:00
|
|
|
$and_module_status = '';
|
|
|
|
if (is_array($filters['module_status'])) {
|
|
|
|
if (!in_array(-1, $filters['module_status'])) {
|
|
|
|
$empty_agents_count = '';
|
|
|
|
if (!in_array(AGENT_MODULE_STATUS_NOT_NORMAL, $filters['module_status'])) {
|
|
|
|
if (count($filters['module_status']) > 0) {
|
|
|
|
$and_module_status = ' AND ( ';
|
|
|
|
foreach ($filters['module_status'] as $key => $value) {
|
|
|
|
$and_module_status .= ($key != 0) ? ' OR (' : ' (';
|
|
|
|
switch ($value) {
|
|
|
|
default:
|
|
|
|
case AGENT_STATUS_NORMAL:
|
|
|
|
$and_module_status .= ' tae.estado = 0 OR tae.estado = 300 ) ';
|
|
|
|
break;
|
|
|
|
case AGENT_STATUS_CRITICAL:
|
|
|
|
$and_module_status .= ' tae.estado = 1 OR tae.estado = 100 ) ';
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_WARNING:
|
|
|
|
$and_module_status .= ' tae.estado = 2 OR tae.estado = 200 ) ';
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_UNKNOWN:
|
|
|
|
$and_module_status .= ' tae.estado = 3 ) ';
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_NOT_INIT:
|
|
|
|
$and_module_status .= ' tae.estado = 4 OR tae.estado = 5 ) ';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$and_module_status .= ' ) ';
|
|
|
|
}
|
|
|
|
} else {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Not normal.
|
2019-01-30 16:18:44 +01:00
|
|
|
$and_module_status = 'AND tae.estado <> 0 AND tae.estado <> 300 ';
|
|
|
|
$empty_agents_count = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filters module.
|
2019-01-30 16:18:44 +01:00
|
|
|
if ($filters['module_search']) {
|
|
|
|
$and_module_search = 'AND tam.nombre LIKE "%'.$filters['module_search'].'%"';
|
|
|
|
$empty_agents_count = '';
|
|
|
|
}
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filter group and check ACL groups.
|
2019-01-30 16:18:44 +01:00
|
|
|
$groups_and = '';
|
|
|
|
if (!users_can_manage_group_all('AR')) {
|
|
|
|
if ($filters['group']) {
|
|
|
|
$user_groups = array_keys(users_get_groups());
|
|
|
|
$id_groups = implode(', ', $user_groups);
|
|
|
|
$groups_and = " AND (ta.id_grupo IN ($id_groups) OR tasg.id_group IN($id_groups))";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($filters['group']) {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Recursion check acl.
|
2019-01-30 16:18:44 +01:00
|
|
|
if ($filters['recursion']) {
|
2020-10-21 11:38:57 +02:00
|
|
|
$recursion_groups = groups_get_children_ids($filters['group'], true);
|
2019-01-30 16:18:44 +01:00
|
|
|
if (!users_can_manage_group_all('AR')) {
|
|
|
|
if (isset($user_groups) && is_array($user_groups)) {
|
|
|
|
$groups_intersect = array_intersect($user_groups, $recursion_groups);
|
|
|
|
if (isset($groups_intersect) && is_array($groups_intersect)) {
|
|
|
|
$groups_intersect = implode(', ', $groups_intersect);
|
|
|
|
$groups_and = " AND (ta.id_grupo IN ($groups_intersect) OR tasg.id_group IN($groups_intersect))";
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$recursion_groups = implode(', ', $recursion_groups);
|
|
|
|
$groups_and = " AND (ta.id_grupo IN ($recursion_groups) OR tasg.id_group IN($recursion_groups))";
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$groups_and = ' AND (ta.id_grupo ='.$filters['group'].' OR tasg.id_group ='.$filters['group'].')';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filter custom data.
|
2019-01-30 16:18:44 +01:00
|
|
|
$custom_data_and = '';
|
2019-06-04 17:28:55 +02:00
|
|
|
if (isset($filters['id_custom_fields_data']) === true
|
|
|
|
&& is_array($filters['id_custom_fields_data']) === true
|
|
|
|
) {
|
|
|
|
if (!in_array(-1, $filters['id_custom_fields_data'])) {
|
|
|
|
$custom_data_array = implode("', '", $filters['id_custom_fields_data']);
|
|
|
|
$custom_data_and = "AND tcd.description IN ('".$custom_data_array."')";
|
|
|
|
}
|
2019-01-30 16:18:44 +01:00
|
|
|
}
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filter custom name.
|
2019-01-30 16:18:44 +01:00
|
|
|
$custom_field_name = $filters['id_custom_fields'];
|
|
|
|
|
|
|
|
if (is_metaconsole()) {
|
|
|
|
$metaconsole_connections = metaconsole_get_connection_names();
|
2019-04-26 14:25:51 +02:00
|
|
|
// For all nodes.
|
2019-01-30 16:18:44 +01:00
|
|
|
if (isset($metaconsole_connections) && is_array($metaconsole_connections)) {
|
|
|
|
$result_meta = [];
|
|
|
|
$data = [];
|
|
|
|
foreach ($metaconsole_connections as $metaconsole) {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Get server connection data.
|
2019-01-30 16:18:44 +01:00
|
|
|
$server_data = metaconsole_get_connection($metaconsole);
|
2019-04-26 14:25:51 +02:00
|
|
|
// Establishes connection.
|
2019-01-30 16:18:44 +01:00
|
|
|
if (metaconsole_load_external_db($server_data) !== NOERR) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$query = sprintf(
|
|
|
|
"SELECT tcd.description AS name_data,
|
2018-12-10 09:18:04 +01:00
|
|
|
SUM(IF($agent_state_total, 1, 0)) AS a_agents,
|
|
|
|
SUM(IF($agent_state_critical, 1, 0)) AS a_critical,
|
|
|
|
SUM(IF($agent_state_warning, 1, 0)) AS a_warning,
|
|
|
|
SUM(IF($agent_state_unknown, 1, 0)) AS a_unknown,
|
|
|
|
SUM(IF($agent_state_normal, 1, 0)) AS a_normal,
|
|
|
|
SUM(IF($agent_state_notinit, 1, 0)) AS a_not_init,
|
|
|
|
SUM(tagent_counters.mm_normal) AS m_normal,
|
|
|
|
SUM(tagent_counters.mm_critical) AS m_critical,
|
|
|
|
SUM(tagent_counters.mm_warning) AS m_warning,
|
|
|
|
SUM(tagent_counters.mm_unknown) AS m_unknown,
|
|
|
|
SUM(tagent_counters.mm_not_init) AS m_not_init,
|
|
|
|
SUM(tagent_counters.mm_total) AS m_total
|
|
|
|
FROM tagent_custom_data tcd
|
2018-11-15 19:16:49 +01:00
|
|
|
INNER JOIN tagent_custom_fields tcf
|
|
|
|
ON tcd.id_field = tcf.id_field
|
2018-12-10 09:18:04 +01:00
|
|
|
INNER JOIN (
|
|
|
|
SELECT ta.id_agente,
|
|
|
|
ta.total_count AS c_m_total,
|
|
|
|
SUM( IF(tae.estado = 0, 1, 0) ) AS mm_normal,
|
|
|
|
SUM( IF(tae.estado = 1, 1, 0) ) AS mm_critical,
|
|
|
|
SUM( IF(tae.estado = 2, 1, 0) ) AS mm_warning,
|
|
|
|
SUM( IF(tae.estado = 3, 1, 0) ) AS mm_unknown,
|
|
|
|
SUM( IF(tae.estado = 4 OR tae.estado = 5, 1, 0) ) AS mm_not_init,
|
|
|
|
COUNT(tam.id_agente_modulo) AS mm_total
|
|
|
|
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 tagente_estado tae
|
|
|
|
ON tam.id_agente = tae.id_agente
|
|
|
|
AND tam.id_agente_modulo = tae.id_agente_modulo
|
|
|
|
WHERE ta.disabled = 0
|
|
|
|
AND tam.disabled = 0
|
|
|
|
%s
|
|
|
|
%s
|
|
|
|
%s
|
|
|
|
%s
|
|
|
|
GROUP by ta.id_agente
|
|
|
|
%s
|
|
|
|
) AS tagent_counters
|
|
|
|
ON tcd.id_agent = tagent_counters.id_agente
|
|
|
|
INNER JOIN tagente ta
|
|
|
|
ON ta.id_agente = tagent_counters.id_agente
|
|
|
|
WHERE tcf.name = '%s'
|
2018-11-15 19:16:49 +01:00
|
|
|
AND tcd.description <> ''
|
|
|
|
%s
|
|
|
|
GROUP BY tcd.description",
|
2019-01-30 16:18:44 +01:00
|
|
|
$groups_and,
|
|
|
|
$and_status,
|
|
|
|
$and_module_search,
|
|
|
|
$and_module_status,
|
|
|
|
$empty_agents_count,
|
|
|
|
$custom_field_name,
|
|
|
|
$custom_data_and
|
|
|
|
);
|
|
|
|
|
|
|
|
$result_meta[$server_data['id']] = db_get_all_rows_sql($query);
|
|
|
|
|
|
|
|
$query_data = sprintf(
|
|
|
|
"SELECT
|
2018-11-15 19:16:49 +01:00
|
|
|
tcd.description,
|
|
|
|
ta.id_agente,
|
2018-12-11 10:00:05 +01:00
|
|
|
%d AS id_server,
|
|
|
|
(CASE
|
|
|
|
WHEN ta.critical_count > 0
|
|
|
|
THEN 1
|
|
|
|
WHEN ta.critical_count = 0
|
|
|
|
AND ta.warning_count > 0
|
|
|
|
THEN 2
|
|
|
|
WHEN ta.critical_count = 0
|
|
|
|
AND ta.warning_count = 0
|
|
|
|
AND ta.unknown_count > 0
|
|
|
|
THEN 3
|
|
|
|
WHEN ta.critical_count = 0
|
|
|
|
AND ta.warning_count = 0
|
|
|
|
AND ta.unknown_count = 0
|
|
|
|
AND ta.notinit_count <> ta.total_count
|
|
|
|
THEN 0
|
|
|
|
WHEN ta.total_count = ta.notinit_count
|
|
|
|
THEN 5
|
|
|
|
ELSE 0
|
2019-04-26 14:25:51 +02:00
|
|
|
END) AS `status`,
|
|
|
|
ta.critical_count,
|
|
|
|
ta.warning_count,
|
|
|
|
ta.unknown_count,
|
|
|
|
ta.notinit_count,
|
|
|
|
ta.normal_count,
|
|
|
|
ta.total_count
|
2018-11-15 19:16:49 +01:00
|
|
|
FROM tagente ta
|
|
|
|
LEFT JOIN tagent_secondary_group tasg
|
|
|
|
ON ta.id_agente = tasg.id_agent
|
2018-12-10 09:18:04 +01:00
|
|
|
INNER JOIN tagente_modulo tam
|
|
|
|
ON ta.id_agente = tam.id_agente
|
|
|
|
INNER JOIN tagente_estado tae
|
|
|
|
ON tam.id_agente = tae.id_agente
|
|
|
|
AND tam.id_agente_modulo = tae.id_agente_modulo
|
2018-11-15 19:16:49 +01:00
|
|
|
INNER JOIN tagent_custom_data tcd
|
|
|
|
ON tcd.id_agent = ta.id_agente
|
|
|
|
INNER JOIN tagent_custom_fields tcf
|
|
|
|
ON tcd.id_field = tcf.id_field
|
|
|
|
WHERE ta.disabled = 0
|
|
|
|
AND tcf.name = '%s'
|
|
|
|
AND tcd.description <> ''
|
2018-12-10 09:18:04 +01:00
|
|
|
AND tam.disabled = 0
|
|
|
|
%s
|
2018-11-15 19:16:49 +01:00
|
|
|
%s
|
|
|
|
%s
|
|
|
|
%s
|
|
|
|
%s
|
2018-12-10 09:18:04 +01:00
|
|
|
GROUP BY ta.id_agente
|
2018-11-15 19:16:49 +01:00
|
|
|
",
|
2019-01-30 16:18:44 +01:00
|
|
|
$server_data['id'],
|
|
|
|
$custom_field_name,
|
|
|
|
$custom_data_and,
|
|
|
|
$groups_and,
|
|
|
|
$and_status,
|
|
|
|
$and_module_search,
|
|
|
|
$and_module_status
|
|
|
|
);
|
|
|
|
|
|
|
|
$node_result = db_get_all_rows_sql($query_data);
|
|
|
|
|
|
|
|
if (empty($node_result)) {
|
|
|
|
$node_result = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = array_merge($data, $node_result);
|
2019-04-26 14:25:51 +02:00
|
|
|
// Restore connection to root node.
|
2019-01-30 16:18:44 +01:00
|
|
|
metaconsole_restore_db();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$final_result = [];
|
|
|
|
$array_data = [];
|
|
|
|
|
|
|
|
if (isset($result_meta) && is_array($result_meta)) {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Initialize counters.
|
2019-01-30 16:18:44 +01:00
|
|
|
$final_result['counters_total'] = [
|
|
|
|
't_m_normal' => 0,
|
|
|
|
't_m_critical' => 0,
|
|
|
|
't_m_warning' => 0,
|
|
|
|
't_m_unknown' => 0,
|
|
|
|
't_m_not_init' => 0,
|
|
|
|
't_m_alerts' => 0,
|
|
|
|
't_m_total' => 0,
|
|
|
|
't_a_critical' => 0,
|
|
|
|
't_a_warning' => 0,
|
|
|
|
't_a_unknown' => 0,
|
|
|
|
't_a_normal' => 0,
|
|
|
|
't_a_not_init' => 0,
|
|
|
|
't_a_agents' => 0,
|
|
|
|
];
|
|
|
|
foreach ($result_meta as $k => $nodo) {
|
|
|
|
if (isset($nodo) && is_array($nodo)) {
|
|
|
|
foreach ($nodo as $key => $value) {
|
2019-04-26 14:25:51 +02:00
|
|
|
// Sum counters total.
|
2019-01-30 16:18:44 +01:00
|
|
|
$final_result['counters_total']['t_m_normal'] += $value['m_normal'];
|
|
|
|
$final_result['counters_total']['t_m_critical'] += $value['m_critical'];
|
|
|
|
$final_result['counters_total']['t_m_warning'] += $value['m_warning'];
|
|
|
|
$final_result['counters_total']['t_m_unknown'] += $value['m_unknown'];
|
|
|
|
$final_result['counters_total']['t_m_not_init'] += $value['m_not_init'];
|
|
|
|
$final_result['counters_total']['t_m_alerts'] += $value['m_alerts'];
|
|
|
|
$final_result['counters_total']['t_m_total'] += $value['m_total'];
|
|
|
|
$final_result['counters_total']['t_a_critical'] += $value['a_critical'];
|
|
|
|
$final_result['counters_total']['t_a_warning'] += $value['a_warning'];
|
|
|
|
$final_result['counters_total']['t_a_unknown'] += $value['a_unknown'];
|
|
|
|
$final_result['counters_total']['t_a_normal'] += $value['a_normal'];
|
|
|
|
$final_result['counters_total']['t_a_not_init'] += $value['a_not_init'];
|
|
|
|
$final_result['counters_total']['t_a_agents'] += $value['a_agents'];
|
|
|
|
|
2019-04-26 14:25:51 +02:00
|
|
|
// Sum counters for data.
|
2019-01-30 16:18:44 +01:00
|
|
|
$array_data[$value['name_data']]['m_normal'] += $value['m_normal'];
|
|
|
|
$array_data[$value['name_data']]['m_critical'] += $value['m_critical'];
|
|
|
|
$array_data[$value['name_data']]['m_warning'] += $value['m_warning'];
|
|
|
|
$array_data[$value['name_data']]['m_unknown'] += $value['m_unknown'];
|
|
|
|
$array_data[$value['name_data']]['m_not_init'] += $value['m_not_init'];
|
|
|
|
$array_data[$value['name_data']]['m_alerts'] += $value['m_alerts'];
|
|
|
|
$array_data[$value['name_data']]['m_total'] += $value['m_total'];
|
|
|
|
$array_data[$value['name_data']]['a_critical'] += $value['a_critical'];
|
|
|
|
$array_data[$value['name_data']]['a_warning'] += $value['a_warning'];
|
|
|
|
$array_data[$value['name_data']]['a_unknown'] += $value['a_unknown'];
|
|
|
|
$array_data[$value['name_data']]['a_normal'] += $value['a_normal'];
|
|
|
|
$array_data[$value['name_data']]['a_not_init'] += $value['a_not_init'];
|
|
|
|
$array_data[$value['name_data']]['a_agents'] += $value['a_agents'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$final_result['counters_name'] = $array_data;
|
|
|
|
}
|
|
|
|
|
|
|
|
$final_result['indexed_descriptions'] = $data;
|
|
|
|
} else {
|
2019-04-26 14:25:51 +02:00
|
|
|
// TODO.
|
2019-01-30 16:18:44 +01:00
|
|
|
$final_result = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $final_result;
|
2018-11-15 19:16:49 +01:00
|
|
|
}
|
|
|
|
|
2018-12-03 18:00:41 +01:00
|
|
|
|
2019-01-30 16:18:44 +01:00
|
|
|
function get_filters_custom_fields_view($id=0, $for_select=false, $name='')
|
|
|
|
{
|
2019-04-26 14:25:51 +02:00
|
|
|
// Filter group and check ACL groups.
|
2019-01-30 16:18:44 +01:00
|
|
|
$groups_and = '';
|
|
|
|
if (!users_can_manage_group_all()) {
|
|
|
|
$user_groups = array_keys(users_get_groups(false, 'AR', false));
|
|
|
|
$id_groups = implode(', ', $user_groups);
|
|
|
|
$groups_and = " AND (group_search IN ($id_groups)) ";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($for_select) {
|
|
|
|
$query = 'SELECT id, `name` FROM tagent_custom_fields_filter WHERE 1=1'.$groups_and;
|
|
|
|
$rs = db_get_all_rows_sql($query);
|
|
|
|
if (isset($rs) && is_array($rs)) {
|
|
|
|
foreach ($rs as $key => $value) {
|
|
|
|
$result[$value['id']] = $value['name'];
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$result = false;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$query = 'SELECT * FROM tagent_custom_fields_filter WHERE 1=1'.$groups_and;
|
|
|
|
|
|
|
|
if ($id) {
|
|
|
|
$query .= ' AND id = '.$id;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($name) {
|
|
|
|
$query .= " AND `name` = '".$name."'";
|
|
|
|
}
|
|
|
|
|
|
|
|
$result = db_get_all_rows_sql($query);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $result;
|
2018-12-03 18:00:41 +01:00
|
|
|
}
|
|
|
|
|
2019-01-30 16:18:44 +01:00
|
|
|
|
|
|
|
function get_group_filter_custom_field_view($id)
|
|
|
|
{
|
|
|
|
if (isset($id)) {
|
|
|
|
$res = db_get_row_filter('tagent_custom_fields_filter', ['id' => $id]);
|
|
|
|
return $res;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2019-04-29 15:43:51 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function for print counters agents or modules.
|
|
|
|
*
|
|
|
|
* @param array $status_array Array need value, image, title, color, counter.
|
|
|
|
* @param string $id_form Id form default value ''.
|
|
|
|
* @param string $id_input Id input default value ''.
|
|
|
|
*
|
|
|
|
* @return array Return html print div container counters.
|
|
|
|
*/
|
|
|
|
function print_counters_cfv(
|
|
|
|
array $status_array,
|
|
|
|
string $id_form='',
|
|
|
|
string $id_input=''
|
|
|
|
) {
|
|
|
|
$html_result = '<form class = "cfv_status_agent" id="'.$id_form.'">';
|
|
|
|
foreach ($status_array as $key => $value) {
|
|
|
|
$checked = ($value['checked'] === 1) ? 'checked=true' : '';
|
|
|
|
$disabled = ($value['counter'] === 0) ? 'disabled=true' : '';
|
|
|
|
|
|
|
|
$html_result .= '<input id="lists_'.$id_input.'['.$key.']" '.$checked.' '.$disabled.' type="checkbox" name="lists_'.$id_input.'['.$key.']" />';
|
|
|
|
$html_result .= '<label for="lists_'.$id_input.'['.$key.']" style="background-color:'.$value['color'].';">';
|
|
|
|
$html_result .= html_print_image(
|
|
|
|
$value['image'],
|
|
|
|
true,
|
|
|
|
['title' => $value['title']]
|
|
|
|
);
|
|
|
|
$html_result .= $value['counter'];
|
|
|
|
$html_result .= '</label>';
|
|
|
|
}
|
|
|
|
|
|
|
|
$html_result .= '</form>';
|
|
|
|
return $html_result;
|
|
|
|
}
|
2019-06-04 17:28:55 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2019-06-06 10:39:09 +02:00
|
|
|
* Function for export a csv file from Custom Fields View
|
2019-06-04 17:28:55 +02:00
|
|
|
*
|
2019-06-06 10:39:09 +02:00
|
|
|
* @param array $filters Status counters for agents and modules.
|
|
|
|
* @param array $id_status Agent status.
|
|
|
|
* @param array $module_status Module status.
|
|
|
|
*
|
|
|
|
* @return array Returns the data that will be saved in the csv file
|
2019-06-04 17:28:55 +02:00
|
|
|
*/
|
2019-06-06 10:39:09 +02:00
|
|
|
function export_custom_fields_csv($filters, $id_status, $module_status)
|
2019-06-04 17:28:55 +02:00
|
|
|
{
|
|
|
|
$data = agent_counters_custom_fields($filters);
|
|
|
|
$indexed_descriptions = $data['indexed_descriptions'];
|
|
|
|
|
|
|
|
// Table temporary for save array in table
|
|
|
|
// by order and search custom_field data.
|
|
|
|
$table_temporary = 'CREATE TEMPORARY TABLE temp_custom_fields (
|
|
|
|
id_server int(10),
|
|
|
|
id_agent int(10),
|
|
|
|
name_custom_fields varchar(2048),
|
|
|
|
critical_count int,
|
|
|
|
warning_count int,
|
|
|
|
unknown_count int,
|
|
|
|
notinit_count int,
|
|
|
|
normal_count int,
|
|
|
|
total_count int,
|
|
|
|
`status` int(2),
|
|
|
|
KEY `data_index_temp_1` (`id_server`, `id_agent`)
|
|
|
|
)';
|
|
|
|
db_process_sql($table_temporary);
|
|
|
|
|
|
|
|
// Insert values array in table temporary.
|
|
|
|
$values_insert = [];
|
|
|
|
foreach ($indexed_descriptions as $key => $value) {
|
|
|
|
$values_insert[] = '('.$value['id_server'].', '.$value['id_agente'].", '".$value['description']."', '".$value['critical_count']."', '".$value['warning_count']."', '".$value['unknown_count']."', '".$value['notinit_count']."', '".$value['normal_count']."', '".$value['total_count']."', ".$value['status'].')';
|
|
|
|
}
|
|
|
|
|
|
|
|
$values_insert_implode = implode(',', $values_insert);
|
|
|
|
$query_insert = 'INSERT INTO temp_custom_fields VALUES '.$values_insert_implode;
|
|
|
|
db_process_sql($query_insert);
|
|
|
|
|
2019-06-06 10:39:09 +02:00
|
|
|
// Search for status module.
|
|
|
|
$status_agent_search = '';
|
|
|
|
if (isset($id_status) === true && is_array($id_status) === true) {
|
|
|
|
if (in_array(-1, $id_status) === false) {
|
|
|
|
if (in_array(AGENT_MODULE_STATUS_NOT_NORMAL, $id_status) === false) {
|
|
|
|
$status_agent_search = ' AND temp.status IN ('.implode(',', $id_status).')';
|
|
|
|
} else {
|
|
|
|
// Not normal statuses.
|
|
|
|
$status_agent_search = ' AND temp.status IN (1,2,3,4,5)';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Search for status module.
|
|
|
|
$status_module_search = '';
|
|
|
|
if (isset($module_status) === true && is_array($module_status) === true) {
|
|
|
|
if (in_array(-1, $module_status) === false) {
|
|
|
|
if (in_array(AGENT_MODULE_STATUS_NOT_NORMAL, $module_status) === false) {
|
|
|
|
if (count($module_status) > 0) {
|
|
|
|
$status_module_search = ' AND ( ';
|
|
|
|
foreach ($module_status as $key => $value) {
|
|
|
|
$status_module_search .= ($key != 0) ? ' OR (' : ' (';
|
|
|
|
switch ($value) {
|
|
|
|
default:
|
|
|
|
case AGENT_STATUS_NORMAL:
|
|
|
|
$status_module_search .= ' temp.normal_count > 0) ';
|
|
|
|
break;
|
|
|
|
case AGENT_STATUS_CRITICAL:
|
|
|
|
$status_module_search .= ' temp.critical_count > 0) ';
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_WARNING:
|
|
|
|
$status_module_search .= ' temp.warning_count > 0) ';
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_UNKNOWN:
|
|
|
|
$status_module_search .= ' temp.unknown_count > 0) ';
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGENT_STATUS_NOT_INIT:
|
|
|
|
$status_module_search .= ' temp.notinit_count > 0) ';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$status_module_search .= ' ) ';
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// Not normal.
|
|
|
|
$status_module_search = ' AND ( temp.critical_count > 0 OR temp.warning_count > 0 OR temp.unknown_count > 0 AND temp.notinit_count > 0 )';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-04 17:28:55 +02:00
|
|
|
// Query all fields result.
|
|
|
|
$query = sprintf(
|
|
|
|
'SELECT
|
2019-06-06 10:39:09 +02:00
|
|
|
temp.name_custom_fields,
|
2019-06-04 17:28:55 +02:00
|
|
|
tma.alias,
|
|
|
|
tma.direccion,
|
|
|
|
tma.server_name,
|
|
|
|
temp.status
|
|
|
|
FROM tmetaconsole_agent tma
|
|
|
|
INNER JOIN temp_custom_fields temp
|
|
|
|
ON temp.id_agent = tma.id_tagente
|
2019-06-06 10:39:09 +02:00
|
|
|
AND temp.id_server = tma.id_tmetaconsole_setup
|
|
|
|
WHERE tma.disabled = 0
|
|
|
|
%s
|
|
|
|
%s
|
|
|
|
',
|
|
|
|
$status_agent_search,
|
|
|
|
$status_module_search
|
2019-06-04 17:28:55 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
$result = db_get_all_rows_sql($query);
|
|
|
|
return $result;
|
|
|
|
}
|