From f78e86b9259db9f4d4e211399a2a13fdb0420a3b Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 25 Oct 2018 17:08:56 +0200 Subject: [PATCH] view cusatom field --- pandora_console/include/ajax/module.php | 11 +- pandora_console/include/functions_agents.php | 317 ++++++++++++++++++- 2 files changed, 326 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/ajax/module.php b/pandora_console/include/ajax/module.php index 275924df36..9f2972b245 100755 --- a/pandora_console/include/ajax/module.php +++ b/pandora_console/include/ajax/module.php @@ -35,7 +35,7 @@ $get_id_tag = (bool) get_parameter('get_id_tag', 0); $get_type = (bool) get_parameter('get_type', 0); $list_modules = (bool) get_parameter('list_modules', 0); $get_agent_modules_json_by_name = (bool) get_parameter('get_agent_modules_json_by_name', 0); - +$get_custom_fields_data = (bool) get_parameter('get_custom_fields_data', 0); if ($get_agent_modules_json_by_name) { $agent_name = get_parameter('agent_name'); @@ -1104,6 +1104,15 @@ if ($get_type) { echo $graph_type; return; } + +if ($get_custom_fields_data){ + $name_custom_fields = get_parameter("name_custom_fields", 0); + $array_custom_fields_data = get_custom_fields_data($name_custom_fields); + echo json_encode($array_custom_fields_data); + return; +} + + } ?> diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index 1f05227779..626e4a4278 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -2774,4 +2774,319 @@ function agents_get_status_clause($state, $show_not_init = true) { // If the state is not an expected state, return no condition return "1=1"; } -?> + +/** + * 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. + */ +function get_custom_fields ($custom_field_id = false, $select = true) { + $fields = ($select) + ? ' tcf.id_field, tcf.name ' + : ' tcf.* '; + + $where = ($custom_field_id) + ? ' WHERE tcf.id_field ='.$custom_field_id + : ''; + + $result_array=array(); + if(!is_metaconsole()){ + $sql = sprintf("SELECT + %s + FROM tagent_custom_fields tcf + %s", + $fields, + $where + ); + + $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(); + // For all nodes + if(isset($metaconsole_connections) && is_array($metaconsole_connections)){ + $result_meta = array(); + foreach ($metaconsole_connections as $metaconsole) { + // Get server connection data + $server_data = metaconsole_get_connection($metaconsole); + + // Establishes connection + if (metaconsole_load_external_db ($server_data) !== NOERR) continue; + + $sql = sprintf("SELECT + %s + FROM tagent_custom_fields tcf + %s", + $fields, + $where + ); + + $result[]= db_get_all_rows_sql($sql); + + // Restore connection to root node + 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; +} + +/** + * Returns custom field data. + * + * @param integer custom_field_id id. + * + * @return array custom fields data. + */ +function get_custom_fields_data ($custom_field_name) { + if(!isset($custom_field_name)){ + return false; + } + + //XXX ACL GROUP + /* + $where_group = ($id_group) + ? ' AND ta.id_grupo IN ($id_group)' + : ''; + */ + + if(!is_metaconsole()){ + $sql = sprintf("SELECT tcf.id_field, tcf.name, tcd.description + 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", $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(); + // For all nodes + if(isset($metaconsole_connections) && is_array($metaconsole_connections)){ + $result_meta = array(); + foreach ($metaconsole_connections as $metaconsole) { + // Get server connection data + $server_data = metaconsole_get_connection($metaconsole); + + // Establishes connection + if (metaconsole_load_external_db ($server_data) !== NOERR) continue; + + $sql = sprintf("SELECT tcf.id_field, tcf.name, tcd.description + 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", $custom_field_name + ); + + $result_meta[]= db_get_all_rows_sql($sql); + + // Restore connection to root node + metaconsole_restore_db(); + } + + $array_result = array(); + if(isset($result_meta) && is_array($result_meta)){ + foreach ($result_meta as $result) { + foreach ($result as $k => $v) { + $array_result[$v['description']] = $v['description']; + } + } + } + } + else{ + $array_result = false; + } + } + return $array_result; +} + +function agent_counters_custom_fields($filters){ + + //filter group and check ACL groups + $groups_and = ""; + if (!users_can_manage_group_all("AR")) { + if(!$filters['group']){ + $id_groups = explode(", ", array_keys(users_get_groups())); + $groups_and = " AND (ta.id_grupo IN ($id_groups) OR tasg.id_group IN($id_groups))"; + } + } + + if($filters['group']){ + $groups_and = " AND (ta.id_grupo =". $filters['group']." OR tasg.id_group =". $filters['group'].")"; + } + + //filter custom data + $custom_data_and = ''; + if(!in_array(0, $filters['id_custom_fields_data'])){ + $custom_data_array = implode("', '", $filters['id_custom_fields_data']); + $custom_data_and = "AND tcd.description IN ('.$custom_data_array.')"; + } + + //filter custom name + $custom_field_name = $filters['id_custom_fields']; + + if(is_metaconsole()){ + $metaconsole_connections = metaconsole_get_connection_names(); + // For all nodes + if(isset($metaconsole_connections) && is_array($metaconsole_connections)){ + $result_meta = array(); + foreach ($metaconsole_connections as $metaconsole) { + // Get server connection data + $server_data = metaconsole_get_connection($metaconsole); + // Establishes connection + if (metaconsole_load_external_db ($server_data) !== NOERR) continue; + + $query = sprintf("SELECT + tcd.description as name_data, + SUM(ta.normal_count) AS m_normal, + SUM(ta.critical_count) AS m_critical, + SUM(ta.warning_count) AS m_warning, + SUM(ta.unknown_count) AS m_unknown, + SUM(ta.notinit_count) AS m_not_init, + SUM(ta.fired_count) AS m_alerts, + SUM(ta.total_count) AS m_total, + SUM(IF(ta.critical_count > 0, 1, 0)) AS a_critical, + SUM(IF(ta.critical_count = 0 AND ta.warning_count > 0, 1, 0)) AS a_warning, + SUM(IF(ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count > 0, 1, 0)) AS a_unknown, + SUM(IF(ta.critical_count = 0 AND ta.warning_count = 0 AND ta.unknown_count = 0 AND ta.notinit_count <> ta.total_count, 1, 0)) AS a_normal, + SUM(IF(ta.total_count = ta.notinit_count, 1, 0)) AS a_not_init, + COUNT(ta.id_agente) AS a_agents, + GROUP_CONCAT(DISTINCT(ta.id_agente) SEPARATOR ',') as ids + FROM tagente ta + 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 + LEFT JOIN tagent_secondary_group tasg + ON ta.id_agente = tasg.id_agent + WHERE ta.disabled = 0 + AND tcf.name = '%s' + AND tcd.description <> '' + %s + %s + GROUP BY tcd.description", + $custom_field_name, + $custom_data_and, + $groups_and + ); + + $result_meta[$server_data['id']] = db_get_all_rows_sql($query); + + // Restore connection to root node + metaconsole_restore_db(); + } + } + + $final_result = array(); + $array_data = array(); + + if(isset($result_meta) && is_array($result_meta)){ + //initialize counters + $final_result['counters_total'] = array( + '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) { + foreach ($nodo as $key => $value) { + //Sum counters total + $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']; + + //Sum counters for data + $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; + } + } + else{ + //TODO + $final_result = false; + } + + return $final_result; +} +?> \ No newline at end of file