#11206 Add custom field view in nodes

This commit is contained in:
miguel angel rasteu 2023-07-11 16:52:39 +02:00
parent 01de48631c
commit e3496a44b6
9 changed files with 1663 additions and 70 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

View File

@ -65,6 +65,7 @@ if (check_login()) {
}
}
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);
@ -110,30 +111,51 @@ if (check_login()) {
// 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);
if (is_metaconsole() === true) {
$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`)
)';
} else {
$table_temporary = 'CREATE TEMPORARY TABLE temp_custom_fields (
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_agent`)
)';
}
$resul_tab_temp = 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'].')';
if (is_metaconsole() === true) {
$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'].')';
} else {
$values_insert[] = '('.$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);
$result_temp = db_process_sql($query_insert);
// Search table for alias, custom field data, server_name, direction.
$search_query = '';
@ -199,41 +221,17 @@ if (check_login()) {
}
// Query all fields result.
$query = sprintf(
'SELECT
tma.id_agente,
tma.id_tagente,
tma.id_tmetaconsole_setup,
tma.alias,
tma.direccion,
tma.server_name,
temp.name_custom_fields,
temp.status
FROM tmetaconsole_agent tma
INNER JOIN temp_custom_fields temp
ON temp.id_agent = tma.id_tagente
AND temp.id_server = tma.id_tmetaconsole_setup
WHERE tma.disabled = 0
%s
%s
%s
%s
LIMIT %d OFFSET %d
',
$search_query,
$status_agent_search,
$status_module_search,
$order_by,
$length,
$start
);
$result = db_get_all_rows_sql($query);
// Query count.
$query_count = sprintf(
'SELECT
COUNT(tma.id_agente) AS `count`
if (is_metaconsole() === true) {
$query = sprintf(
'SELECT
tma.id_agente,
tma.id_tagente,
tma.id_tmetaconsole_setup,
tma.alias,
tma.direccion,
tma.server_name,
temp.name_custom_fields,
temp.status
FROM tmetaconsole_agent tma
INNER JOIN temp_custom_fields temp
ON temp.id_agent = tma.id_tagente
@ -242,16 +240,87 @@ if (check_login()) {
%s
%s
%s
%s
LIMIT %d OFFSET %d
',
$search_query,
$status_agent_search,
$status_module_search
);
$search_query,
$status_agent_search,
$status_module_search,
$order_by,
$length,
$start
);
} else {
$query = sprintf(
'SELECT
tma.id_agente,
tma.alias,
tma.direccion,
tma.server_name,
temp.name_custom_fields,
temp.status
FROM tagente as tma
INNER JOIN temp_custom_fields temp
ON temp.id_agent = tma.id_agente
WHERE tma.disabled = 0
%s
%s
%s
%s
LIMIT %d OFFSET %d
',
$search_query,
$status_agent_search,
$status_module_search,
$order_by,
$length,
$start
);
}
$result = db_get_all_rows_sql($query);
// Query count.
if (is_metaconsole() === true) {
$query_count = sprintf(
'SELECT
COUNT(tma.id_agente) AS `count`
FROM tmetaconsole_agent tma
INNER JOIN temp_custom_fields temp
ON temp.id_agent = tma.id_tagente
AND temp.id_server = tma.id_tmetaconsole_setup
WHERE tma.disabled = 0
%s
%s
%s
',
$search_query,
$status_agent_search,
$status_module_search
);
} else {
$query_count = sprintf(
'SELECT
COUNT(tma.id_agente) AS `count`
FROM tagente tma
INNER JOIN temp_custom_fields temp
ON temp.id_agent = tma.id_agente
WHERE tma.disabled = 0
%s
%s
%s
',
$search_query,
$status_agent_search,
$status_module_search
);
}
$count = db_get_sql($query_count);
// For link nodes.
$array_nodes = metaconsole_get_connections();
if (is_metaconsole() === true) {
$array_nodes = metaconsole_get_connections();
}
if (isset($array_nodes) && is_array($array_nodes)) {
$hash_array_nodes = [];
foreach ($array_nodes as $key => $server) {
@ -280,19 +349,24 @@ if (check_login()) {
$data = [];
foreach ($result as $values) {
$image_status = agents_get_image_status($values['status']);
// Link nodes.
$agent_link = '<a href="'.$hash_array_nodes[$values['id_tmetaconsole_setup']]['server_url'].'/index.php?sec=estado&amp;sec2=operation/agentes/ver_agente&amp;id_agente='.$values['id_tagente'].$hash_array_nodes[$values['id_tmetaconsole_setup']]['hashurl'].'">';
if (is_metaconsole() === true) {
$agent_link = '<a href="'.$hash_array_nodes[$values['id_tmetaconsole_setup']]['server_url'].'/index.php?sec=estado&amp;sec2=operation/agentes/ver_agente&amp;id_agente='.$values['id_tagente'].$hash_array_nodes[$values['id_tmetaconsole_setup']]['hashurl'].'">';
$agent_alias = ui_print_truncate_text(
$values['alias'],
'agent_small',
false,
true,
true,
'[&hellip;]',
'font-size:7.5pt;'
);
} else {
$agent_link = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$values['id_agente'].'"/>';
$agent_alias = $values['alias'];
}
$agent_alias = ui_print_truncate_text(
$values['alias'],
'agent_small',
false,
true,
true,
'[&hellip;]',
'font-size:7.5pt;'
);
if (can_user_access_node()) {
$agent = $agent_link.'<b>'.$agent_alias.'</b></a>';

View File

@ -613,8 +613,198 @@ function agent_counters_custom_fields($filters)
$final_result['indexed_descriptions'] = $data;
} else {
// TODO.
$final_result = false;
$result_meta = [];
$data = [];
$query = sprintf(
"SELECT tcd.description AS name_data,
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
INNER JOIN tagent_custom_fields tcf
ON tcd.id_field = tcf.id_field
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'
AND tcd.description <> ''
%s
GROUP BY tcd.description",
$groups_and,
$and_status,
$and_module_search,
$and_module_status,
$empty_agents_count,
$custom_field_name,
$custom_data_and
);
$result_meta[] = db_get_all_rows_sql($query);
$query_data = sprintf(
"SELECT
tcd.description,
ta.id_agente,
%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
END) AS `status`,
ta.critical_count,
ta.warning_count,
ta.unknown_count,
ta.notinit_count,
ta.normal_count,
ta.total_count
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
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 <> ''
AND tam.disabled = 0
%s
%s
%s
%s
%s
GROUP BY ta.id_agente
",
$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);
$final_result = [];
$array_data = [];
if (isset($result_meta) && is_array($result_meta)) {
// Initialize counters.
$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) {
// 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;
}
$final_result['indexed_descriptions'] = $data;
}
return $final_result;

View File

@ -12341,3 +12341,71 @@ tr[id^="network_component-plugin-wmi-fields-dynamicMacroRow-"] input,
tr[id^="network_component-plugin-snmp-fields-dynamicMacroRow-"] input {
width: 100% !important;
}
form.cfv_status_agent {
margin: 0 auto;
display: flex;
justify-content: space-around;
}
form.cfv_status_agent label {
display: block;
line-height: 35px;
height: 40px;
width: 19%;
-webkit-font-smoothing: antialiased;
margin-top: 10px;
color: #ffffff;
text-align: center;
cursor: pointer;
opacity: 0.3;
font-size: 13pt;
}
form.cfv_status_agent label img {
vertical-align: middle;
margin-right: 8px;
}
form.cfv_status_agent input[type="checkbox"] {
display: none;
}
form.cfv_status_agent input:checked + label {
opacity: 1;
}
form.cfv_status_agent input:checked + label:before {
content: "✓ ";
}
/* --- Custom fields view --- */
.custom_fields_view_layout {
margin-top: 15px;
}
.custom_fields_view {
width: 30%;
float: left;
margin-left: 10px;
padding-right: 10px;
max-height: 890px;
overflow: auto;
background-color: #f9f9f9;
}
.agents_custom_fields {
width: 100%;
margin-bottom: 15px;
padding: 25px 5px;
}
div.agents_custom_fields #datatables_wrapper div.top,
div.agents_custom_fields #datatables_wrapper div.bottom {
background-color: #414141;
color: #ffffff;
border: none;
padding: 5px;
height: 38px;
width: 99%;
}

File diff suppressed because it is too large Load Diff

View File

@ -205,6 +205,10 @@ if ($access_console_node === true) {
$sub['operation/inventory/inventory']['refr'] = 0;
}
$sub['operation/custom_fields/custom_fields_view']['text'] = __('Custom fields view');
$sub['operation/custom_fields/custom_fields_view']['id'] = 'Custom fields view';
$sub['operation/custom_fields/custom_fields_view']['refr'] = 0;
if ($config['activate_netflow'] || $config['activate_sflow']) {
$sub['network_traffic'] = [
'text' => __('Network'),