#12376 multiple changes in general tactical view

This commit is contained in:
Daniel Cebrian 2023-11-07 13:18:44 +01:00
parent 96d8fe33f3
commit 8f8e5ecf45
16 changed files with 378 additions and 96 deletions

View File

@ -1387,7 +1387,7 @@ $table_advanced->data['made_enabled'][0] = html_print_checkbox_switch(
'made_enabled',
1,
(bool) $made_enabled,
false,
true,
false,
'',
false,

View File

@ -2129,6 +2129,15 @@ $table_other->data[$row][] = html_print_label_input_block(
__('Data multiplier to use in graphs/data'),
html_print_select($options_data_multiplier, 'use_data_multiplier', $config['use_data_multiplier'], '', '', 1, true, false, false)
);
$table_other->data[$row][] = html_print_label_input_block(
__('Disable general statistics in main tactical view'),
html_print_checkbox_switch(
'disable_general_statistics',
1,
$config['disable_general_statistics'],
true
)
);
$row++;
/*

View File

@ -1568,6 +1568,10 @@ function config_update_config()
$error_update[] = __('Use data multiplier');
}
if (config_update_value('disable_general_statistics', get_parameter('disable_general_statistics', 0), true) === false) {
$error_update[] = __('Disable general statistics');
}
if (config_update_value('decimal_separator', (string) get_parameter('decimal_separator', '.'), true) === false) {
$error_update[] = __('Decimal separator');
} else {
@ -3703,6 +3707,10 @@ function config_process_config()
config_update_value('use_data_multiplier', '1');
}
if (!isset($config['disable_general_statistics'])) {
config_update_value('disable_general_statistics', 0);
}
if (!isset($config['command_snapshot'])) {
config_update_value('command_snapshot', 1);
}

View File

@ -27,6 +27,8 @@
* ============================================================================
*/
use Models\VisualConsole\Items\Percentile;
require_once $config['homedir'].'/include/graphs/fgraph.php';
require_once $config['homedir'].'/include/functions_reporting.php';
require_once $config['homedir'].'/include/functions_agents.php';
@ -2686,7 +2688,9 @@ function graph_agent_status(
$return=false,
$show_not_init=false,
$data_agents=false,
$donut_narrow_graph=false
$donut_narrow_graph=false,
$onClick='',
$data_in_percentage=false,
) {
global $config;
@ -2766,6 +2770,25 @@ function graph_agent_status(
'labels' => array_keys($data),
];
if (empty($onClick) === false) {
$options['onClick'] = $onClick;
}
if ($data_in_percentage === true) {
$percentages = [];
$total = array_sum($data);
foreach ($data as $key => $value) {
$percentage = (($value / $total) * 100);
if ($percentage < 1 && $percentage > 0) {
$percentage = 1;
}
$percentages[$key] = format_numeric($percentage, 0);
}
$data = $percentages;
}
if ($donut_narrow_graph == true) {
$out = ring_graph(
$data,
@ -4625,9 +4648,15 @@ function graph_nodata_image($options)
return base64_encode($dataImg);
}
$widthImage = '200px';
$style = '';
if (isset($options['nodata_image']['width']) === true) {
$widthImage = $options['nodata_image']['width'];
$style .= 'width: '.$options['nodata_image']['width'].'; ';
} else {
$style .= 'width: 200px; ';
}
if (isset($options['nodata_image']['height']) === true) {
$style .= 'height: '.$options['nodata_image']['height'].'; ';
}
return html_print_image(
@ -4635,7 +4664,7 @@ function graph_nodata_image($options)
true,
[
'title' => __('No data'),
'style' => 'width: '.$widthImage.';',
'style' => $style,
]
);
}

View File

@ -669,6 +669,12 @@ function get_build_setup_charts($type, $options, $data)
$chart->setId($id);
if (isset($options['onClick']) === true
&& empty($options['onClick']) === false
) {
$chart->options()->setOnClick($options['onClick']);
}
// Height is null maximum possible.
if (isset($options['height']) === true
&& empty($options['height']) === false

View File

@ -73,8 +73,40 @@ $(document).ready(function() {
$("#heatmap-title").html($(title).html());
}
});
rescaling();
$(window).on("resize", function() {
rescaling();
});
});
function showLabel(element, event, label) {
$(".label_heatmap").remove();
const tooltip = $(document.createElement("div"));
tooltip.html(label);
tooltip.attr("class", "label_heatmap");
$("#heatmap-group").append(tooltip);
var x = event.clientX;
var y = event.clientY;
tooltip.attr(
"style",
"position: fixed; top:" + (y + 15) + "px; left:" + (x + 20) + "px;"
);
}
function hideLabel() {
$(".label_heatmap").remove();
}
function rescaling() {
if (window.innerWidth < 1300) {
$(".trigger-100").attr("style", "width: 100%;");
$(".trigger-100").addClass("br-b");
} else {
$(".trigger-100").removeAttr("style");
$(".trigger-100").removeClass("br-b");
}
}
function autoRefresh(interval, id, method, php_class) {
setInterval(() => {
$.ajax({
@ -92,3 +124,108 @@ function autoRefresh(interval, id, method, php_class) {
});
}, interval);
}
function redirectStatus(e, element) {
if (element.length > 0) {
switch (e.chart.legend.legendItems[element[0].index].text) {
case "Critical":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/status_monitor&refr=0&ag_group=0&ag_freestring=&module_option=1&ag_modulename=&moduletype=&datatype=&status=1&sort_field=&sort=none&pure=`
);
break;
case "Warning":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/status_monitor&refr=0&ag_group=0&ag_freestring=&module_option=1&ag_modulename=&moduletype=&datatype=&status=2&sort_field=&sort=none&pure=`
);
break;
case "Unknown":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/status_monitor&refr=0&ag_group=0&ag_freestring=&module_option=1&ag_modulename=&moduletype=&datatype=&status=3&sort_field=&sort=none&pure=`
);
break;
case "Not init":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/status_monitor&refr=0&ag_group=0&ag_freestring=&module_option=1&ag_modulename=&moduletype=&datatype=&status=5&sort_field=&sort=none&pure=`
);
break;
default:
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/status_monitor&refr=0&ag_group=0&ag_freestring=&module_option=1&ag_modulename=&moduletype=&datatype=&status=-1&sort_field=&sort=none&pure=`
);
break;
}
}
}
function redirectHeatmap(view, id, id_agente = 0) {
switch (view) {
case "group":
window.location.assign(
`index.php?sec=view&sec2=godmode/groups/tactical&id_group=${id}`
);
break;
case "agent":
window.location.assign(
`index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=${id}`
);
break;
case "module":
if (id_agente > 0) {
window.location.assign(
`index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente=${id_agente}&tab=module&id_agent_module=${id}&edit_module=1`
);
}
break;
default:
break;
}
}
function redirectAgentStatus(e, element) {
if (element.length > 0) {
switch (e.chart.legend.legendItems[element[0].index].text) {
case "No monitors":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/estado_agente`
);
break;
case "CRITICAL":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/estado_agente&status=1`
);
break;
case "WARNING":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/estado_agente&status=2`
);
break;
case "UKNOWN":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/estado_agente&status=3`
);
break;
case "NORMAL":
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/estado_agente&status=0`
);
break;
default:
window.location.assign(
`index.php?sec=view&sec2=operation/agentes/estado_agente`
);
break;
}
}
}

View File

@ -50,6 +50,22 @@ class GeneralTacticalView
}
/**
* Returns whether general statistics are disabled.
*
* @return boolean
*/
public function disableGeneralStatistics():bool
{
global $config;
if (users_is_admin($config['id_user']) === true) {
return false;
} else {
return (bool) $config['disable_general_statistics'];
}
}
/**
* Instantiate all the elements that will build the dashboard
*
@ -109,6 +125,7 @@ class GeneralTacticalView
{
$data = [];
$data['javascript'] = $this->javascript();
$data['disableGeneralStatistics'] = $this->disableGeneralStatistics();
$data = array_merge($data, $this->elements);
View::render(
'tacticalView/view',

View File

@ -429,12 +429,29 @@ class Agents extends Element
'cutout' => 80,
'nodata_image' => ['width' => '80%'],
'colors' => $colors,
'onClick' => 'redirectAgentStatus',
];
// To avoid that if a value is too small it is not seen.
$percentages = [];
$total = array_sum($data);
foreach ($data as $key => $value) {
$percentage = (($value / $total) * 100);
if ($percentage < 1 && $percentage > 0) {
$percentage = 1;
}
$percentages[$key] = format_numeric($percentage, 0);
}
$data = $percentages;
$pie = ring_graph($data, $options);
$output = html_print_div(
[
'content' => $pie,
'style' => 'margin: 0 auto; max-width: 80%; max-height: 220px;',
'class' => 'clickable',
],
true
);

View File

@ -34,7 +34,9 @@ class Database extends Element
*/
public function __construct()
{
global $config;
parent::__construct();
include_once $config['homedir'].'/include/graphs/fgraph.php';
$this->title = __('Database');
$this->ajaxMethods = [
'getStatus',

View File

@ -57,23 +57,13 @@ class Events extends Element
{
global $config;
$id_groups = array_keys(users_get_groups($config['id_user'], 'AR', false));
if (in_array(0, $id_groups) === false) {
foreach ($id_groups as $key => $id_group) {
if ((bool) check_acl_restricted_all($config['id_user'], $id_group, 'AR') === false) {
unset($id_groups[$key]);
}
}
}
if (users_can_manage_group_all() === true) {
$id_groups[] = 0;
}
$id_groups = implode(',', $id_groups);
$event_view_h = (int) ($config['event_view_hr'] > 24) ? 24 : $config['event_view_hr'];
$time_events = ($event_view_h * 3600);
$intervalh = (time() - $time_events);
$sql = 'SELECT utimestamp from tevento WHERE utimestamp >= '.$intervalh.' ORDER BY utimestamp DESC;';
$sql = 'SELECT utimestamp
FROM tevento
WHERE utimestamp >= '.$intervalh.' AND id_grupo IN ('.$id_groups.') ORDER BY utimestamp DESC;';
$rows = db_process_sql($sql);
$cut_seconds = ($time_events / 24);
$now = (time() - 300);
@ -377,6 +367,13 @@ class Events extends Element
$data = [];
$colors = [];
foreach ($rows as $key => $row) {
if ($row['criticity'] != EVENT_CRIT_CRITICAL
&& $row['criticity'] != EVENT_CRIT_NORMAL
&& $row['criticity'] != EVENT_CRIT_WARNING
) {
continue;
}
switch ($row['criticity']) {
case EVENT_CRIT_CRITICAL:
$label = __('CRITICAL');
@ -394,9 +391,7 @@ class Events extends Element
break;
default:
$colors[] = COL_UNKNOWN;
$label = __('UNKNOWN');
break;
continue;
}
$labels[] = $this->controlSizeText($label);
@ -410,6 +405,21 @@ class Events extends Element
'nodata_image' => ['width' => '100%'],
'colors' => $colors,
];
// To avoid that if a value is too small it is not seen.
$percentages = [];
$total = array_sum($data);
foreach ($data as $key => $value) {
$percentage = (($value / $total) * 100);
if ($percentage < 1 && $percentage > 0) {
$percentage = 1;
}
$percentages[$key] = format_numeric($percentage, 0);
}
$data = $percentages;
$pie = ring_graph($data, $options);
$output = html_print_div(
[
@ -448,9 +458,10 @@ class Events extends Element
'style' => 'width: 90%;',
'ajax_url' => 'operation/events/events',
'ajax_data' => [
'get_events' => 1,
'compact_date' => 1,
'external_url' => 1,
'get_events' => 1,
'compact_date' => 1,
'external_url' => 1,
'compact_name_event' => 1,
],
'order' => [
'field' => 'timestamp',

View File

@ -118,7 +118,6 @@ class Groups extends Element
return graph_nodata_image(['width' => '400']);
}
$groups = $modules;
// Best square.
$high = (float) max($width, $height);
$low = 0.0;
@ -147,7 +146,7 @@ class Groups extends Element
$x = 0;
$y = 0;
$cont = 1;
foreach ($groups as $key => $value) {
foreach ($modules as $key => $value) {
$module_id = $value['id_agente_modulo'];
$db_status = modules_get_agentmodule_status($module_id);
$module_value = modules_get_last_value($module_id);
@ -183,10 +182,16 @@ class Groups extends Element
break;
}
$redirect = '';
if (check_acl($config['id_user'], 0, 'AW')) {
$redirect = 'onclick="redirectHeatmap(\'module\', '.$module_id.', '.$value['id_agente'].')"';
}
$heatmap .= sprintf(
'<rect id="%s" x="%s" style="stroke-width:1;stroke:#ffffff" y="%s" row="%s" rx="3" ry="3" col="%s" width="%s" height="%s" class="scuare-status %s_%s"></rect>',
'<rect id="%s" x="%s" onmousemove="showLabel(this, event, \'%s\')" onmouseleave="hideLabel()" '.$redirect.' style="stroke-width:1;stroke:#ffffff" y="%s" row="%s" rx="3" ry="3" col="%s" width="%s" height="%s" class="scuare-status %s_%s"></rect>',
'rect_'.$cont,
$x,
$value['nombre'],
$y,
$row,
$column,
@ -350,9 +355,10 @@ class Groups extends Element
}
$heatmap .= sprintf(
'<rect id="%s" x="%s" style="stroke-width:1;stroke:#ffffff" y="%s" row="%s" rx="3" ry="3" col="%s" width="%s" height="%s" class="scuare-status %s_%s"></rect>',
'<rect id="%s" x="%s" onmousemove="showLabel(this, event, \'%s\')" onmouseleave="hideLabel()" onclick="redirectHeatmap(\'agent\', '.$value['id_agente'].')" style="stroke-width:1;stroke:#ffffff" y="%s" row="%s" rx="3" ry="3" col="%s" width="%s" height="%s" class="scuare-status %s_%s"></rect>',
'rect_'.$cont,
$x,
$value['alias'],
$y,
$row,
$column,
@ -490,9 +496,10 @@ class Groups extends Element
}
$heatmap .= sprintf(
'<rect id="%s" x="%s" style="stroke-width:1;stroke:#ffffff" y="%s" row="%s" rx="3" ry="3" col="%s" width="%s" height="%s" class="scuare-status %s_%s"></rect>',
'<rect id="%s" x="%s" onmousemove="showLabel(this, event, \'%s\')" onmouseleave="hideLabel()" onclick="redirectHeatmap(\'group\', '.$value['_id_'].')" style="stroke-width:1;stroke:#ffffff" y="%s" row="%s" rx="3" ry="3" col="%s" width="%s" height="%s" class="scuare-status %s_%s"></rect>',
'rect_'.$cont,
$x,
$value['_name_'],
$y,
$row,
$column,

View File

@ -75,7 +75,10 @@ class MonitoringElements extends Element
'display' => false,
],
'cutout' => 80,
'nodata_image' => ['width' => '100%'],
'nodata_image' => [
'width' => '100%',
'height' => '90%',
],
];
$pie = ring_graph($data, $options);
$output = html_print_div(
@ -139,7 +142,10 @@ class MonitoringElements extends Element
'display' => false,
],
'cutout' => 80,
'nodata_image' => ['width' => '100%'],
'nodata_image' => [
'width' => '100%',
'height' => '90%',
],
];
$pie = ring_graph($data, $options);
$output = html_print_div(
@ -208,7 +214,10 @@ class MonitoringElements extends Element
'display' => false,
],
'cutout' => 80,
'nodata_image' => ['width' => '100%'],
'nodata_image' => [
'width' => '100%',
'height' => '90%',
],
];
$pie = ring_graph($data, $options);
$output = html_print_div(
@ -230,11 +239,12 @@ class MonitoringElements extends Element
*/
public function getMonitoringStatusGraph():string
{
$pie = graph_agent_status(false, '', '', true, true, false, true);
$pie = graph_agent_status(false, '', '', true, true, false, true, 'redirectStatus', true);
$output = html_print_div(
[
'content' => $pie,
'style' => 'margin: 0 auto; max-width: 80%; max-height: 220px;',
'class' => 'clickable',
],
true
);

View File

@ -36,6 +36,7 @@ class Overview extends Element
{
global $config;
parent::__construct();
include_once $config['homedir'].'/include/graphs/fgraph.php';
if (is_ajax() === true) {
include_once $config['homedir'].'/include/functions_servers.php';
}
@ -163,6 +164,9 @@ class Overview extends Element
if ($info['limit'] > $info['count']) {
$used = round(($info['count'] / $info['limit']) * 100);
$free = (100 - $used);
} else if ($info['limit'] <= $info['count']) {
$free = 0;
$used = 100;
} else {
$free = 100;
$used = 0;

View File

@ -23,11 +23,12 @@
align-items: stretch;
}
.col-12 {
width: 100%;
width: 99%;
}
.col-6,
.col-xl-6 {
width: 50%;
flex: 1;
display: flex;
flex-wrap: nowrap;
flex-direction: column;
@ -58,6 +59,9 @@
border-radius: 10px;
height: 100%;
max-width: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
}
.br-l {
border-left: 1px solid #e5e9ed;
@ -325,6 +329,22 @@ table.dataTable thead th {
background-color: #ec7176;
}
#svg rect {
cursor: pointer;
}
.trigger-100 {
display: flex;
flex-direction: column;
}
.label_heatmap {
position: absolute;
background-color: #757575;
color: white;
padding: 2px 5px;
border-radius: 5px;
}
@media (max-width: 1636px) {
.col-xl-6 {
width: 100%;
@ -344,9 +364,7 @@ table.dataTable thead th {
.col-7 {
width: 56%;
}
.col-5 {
width: 41%;
}
.flex-nowrap {
flex-wrap: nowrap !important;
}

View File

@ -342,6 +342,7 @@ if (is_ajax() === true) {
$table_id = get_parameter('table_id', '');
$groupRecursion = (bool) get_parameter('groupRecursion', false);
$compact_date = (int) get_parameter('compact_date', 0);
$compact_name_event = (int) get_parameter('compact_name_event', 0);
// Datatables offset, limit.
$start = (int) get_parameter('start', 0);
@ -471,7 +472,7 @@ if (is_ajax() === true) {
$data = array_reduce(
$events,
function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url) {
function ($carry, $item) use ($table_id, &$redirection_form_id, $filter, $compact_date, $external_url, $compact_name_event) {
global $config;
$tmp = (object) $item;
@ -518,7 +519,7 @@ if (is_ajax() === true) {
$tmp->evento = ui_print_truncate_text(
$tmp->evento,
'description',
(empty($compact_name_event) === true) ? 'description' : GENERIC_SIZE_TEXT,
false,
true,
false,

View File

@ -41,32 +41,34 @@
</div>
</div>
</div>
<div class="br-t">
<div class="padding10">
<span class="subtitle">
<?php echo __('License usage'); ?>
</span>
<?php echo $Overview->getLicenseUsageGraph(); ?>
<?php if ($disableGeneralStatistics === false) : ?>
<div class="br-t">
<div class="padding10">
<span class="subtitle">
<?php echo __('License usage'); ?>
</span>
<?php echo $Overview->getLicenseUsageGraph(); ?>
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
<div class="row flex-nowrap">
<div class="row flex-nowrap height_100p">
<div class="col-7 pdd_5px">
<div class="container">
<div class="title">
<?php echo $MonitoringElements->title; ?>
</div>
<div class="content br-t">
<div class="row">
<div class="content br-t height_100p">
<div class="row height_50p">
<div class="col-6 br-r br-b">
<div class="subtitle link padding10 padding2">
<?php echo __('Top-10 Tags'); ?> <a href="index.php?sec=gusuarios&sec2=godmode/tag/tag"><?php echo __('Info'); ?></a>
<?php echo __('Status (%)'); ?> <a href="index.php?sec=view&sec2=operation/agentes/estado_agente"><?php echo __('Info'); ?></a>
</div>
<?php echo $MonitoringElements->getTagsGraph(); ?>
<?php echo $MonitoringElements->getMonitoringStatusGraph(); ?>
</div>
<div class="col-6 br-b">
<div class="subtitle link padding10 padding2">
@ -75,12 +77,12 @@
<?php echo $MonitoringElements->getModuleGroupGraph(); ?>
</div>
</div>
<div class="row">
<div class="row height_50p">
<div class="col-6">
<div class="subtitle link padding10 padding2">
<?php echo __('Status'); ?> <a href="index.php?sec=view&sec2=operation/agentes/estado_agente"><?php echo __('Info'); ?></a>
<?php echo __('Top-10 Tags'); ?> <a href="index.php?sec=gusuarios&sec2=godmode/tag/tag"><?php echo __('Info'); ?></a>
</div>
<?php echo $MonitoringElements->getMonitoringStatusGraph(); ?>
<?php echo $MonitoringElements->getTagsGraph(); ?>
</div>
<div class="col-6 br-l">
<div class="subtitle link padding10 padding2">
@ -165,6 +167,7 @@
</div>
</div>
</div>
<?php if ($disableGeneralStatistics === false) : ?>
<div class="col-6">
<div class="container mrgn_5px" id="logStorage">
<div class="title br-b">
@ -184,7 +187,7 @@
<?php echo $LogStorage->getTotalSources(); ?>
</div>
</div>
<div class="row">
<div class="row height_100p">
<div class="col-6 br-r">
<div class="subtitle">
<?php echo __('Stored data'); ?>
@ -221,6 +224,7 @@
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
@ -236,13 +240,13 @@
<div class="subtitle">
<?php echo __('Currently triggered'); ?>
</div>
<?php echo $Alerts->getCurrentlyTriggered(); ?>
<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_list&status_alert=fired"><?php echo $Alerts->getCurrentlyTriggered(); ?></a>
</div>
<div class="col-6 br-l">
<div class="subtitle">
<?php echo __('Active alerts'); ?>
</div>
<?php echo $Alerts->getActiveAlerts(); ?>
<a href="index.php?sec=galertas&sec2=godmode/alerts/alert_list"><?php echo $Alerts->getActiveAlerts(); ?></a>
</div>
</div>
<?php if ($Alerts->checkAclUserList() === true) : ?>
@ -261,13 +265,13 @@
<div class="title br-b">
<?php echo $Events->title; ?>
</div>
<div class="row">
<div class="col-8 br-r">
<div class="row" id="auto-rescaling">
<div class="col-8 br-r trigger-100">
<div class="subtitle link padding10 padding2">
<?php echo __('Number of events per hour ('.$config['event_view_hr'].' hrs)'); ?></b> <a href="index.php?sec=eventos&sec2=operation/events/events&filter[event_view_hr]=24&filter[tag_with]=WyIwIl0=&filter[tag_without]=WyIwIl0="><?php echo __('Info'); ?></a>
</div>
<div id="events-last-24"><?php echo $Events->loading(); ?></div>
<div class="row br-t h100p">
<div class="row br-t h100p observer">
<div class="col-4 br-r">
<div class="subtitle padding10 padding2">
<?php echo __('Criticality'); ?></b>
@ -276,7 +280,7 @@
</div>
<div class="col-4 br-r">
<div class="subtitle padding10 padding2">
<?php echo __('Status'); ?></b>
<?php echo __('Status (%)'); ?></b>
</div>
<div id="events-status-validate"><?php echo $Events->loading(); ?></div>
</div>
@ -288,7 +292,7 @@
</div>
</div>
</div>
<div class="col-4">
<div class="col-4 trigger-100">
<div class="subtitle link padding10 padding2">
<?php echo __('Active events ('.$config['event_view_hr'].' hrs)'); ?></b> <a href="index.php?sec=eventos&sec2=operation/events/events"><?php echo __('Info'); ?></a>
</div>
@ -333,7 +337,7 @@
</div>
<?php echo $Agents->getOperatingSystemGraph(); ?>
<div class="subtitle padding10 padding2 br-t">
<?php echo __('Status'); ?></b>
<?php echo __('Status (%)'); ?></b>
</div>
<?php echo $Agents->getStatusGraph(); ?>
</div>
@ -341,41 +345,43 @@
</div>
</div>
<div class="col-xl-6">
<div class="container mrgn_5px">
<div class="title br-b">
<?php echo $Configurations->title; ?>
</div>
<div class="row br-b flex-nowrap">
<a href="index.php?sec=view&sec2=operation/agentes/group_view" class="col-3 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalGroups(); ?>
</a>
<a href="index.php?sec=view&sec2=extensions/agents_modules" class="col-3 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalModules(); ?>
</a>
<?php if (enterprise_installed() === true) : ?>
<a href="index.php?sec=gmodules&sec2=enterprise/godmode/policies/policies" class="col-3 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalPolicies(); ?>
<?php if ($disableGeneralStatistics === false) : ?>
<div class="container mrgn_5px">
<div class="title br-b">
<?php echo $Configurations->title; ?>
</div>
<div class="row br-b flex-nowrap">
<a href="index.php?sec=view&sec2=operation/agentes/group_view" class="col-3 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalGroups(); ?>
</a>
<?php endif; ?>
<a href="index.php?sec=gservers&sec2=godmode/servers/plugin" class="col-3 flex flex-column center pdd_20px">
<?php echo $Configurations->getTotalRemotePlugins(); ?>
</a>
<a href="index.php?sec=view&sec2=extensions/agents_modules" class="col-3 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalModules(); ?>
</a>
<?php if (enterprise_installed() === true) : ?>
<a href="index.php?sec=gmodules&sec2=enterprise/godmode/policies/policies" class="col-3 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalPolicies(); ?>
</a>
<?php endif; ?>
<a href="index.php?sec=gservers&sec2=godmode/servers/plugin" class="col-3 flex flex-column center pdd_20px">
<?php echo $Configurations->getTotalRemotePlugins(); ?>
</a>
</div>
<div class="row flex-nowrap br-b">
<a href="index.php?sec=templates&sec2=godmode/modules/manage_module_templates" class="col-4 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalModuleTemplate(); ?>
</a>
<a href="index.php?sec=view&sec2=operation/agentes/estado_agente&status=5" class="col-4 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getNotInitModules(); ?>
</a>
<a href="index.php?sec=view&sec2=operation/agentes/estado_agente&status=3" class="col-4 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalUnknowAgents(); ?>
</a>
<a href="index.php?sec=eventos&sec2=operation/events/events" class="col-4 flex flex-column center pdd_20px">
<?php echo $Configurations->getTotalEvents(); ?>
</a>
</div>
</div>
<div class="row flex-nowrap br-b">
<a href="index.php?sec=templates&sec2=godmode/modules/manage_module_templates" class="col-4 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalModuleTemplate(); ?>
</a>
<a href="index.php?sec=view&sec2=operation/agentes/estado_agente&status=5" class="col-4 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getNotInitModules(); ?>
</a>
<a href="index.php?sec=view&sec2=operation/agentes/estado_agente&status=3" class="col-4 flex flex-column center pdd_20px br-r">
<?php echo $Configurations->getTotalUnknowAgents(); ?>
</a>
<a href="index.php?sec=eventos&sec2=operation/events/events" class="col-4 flex flex-column center pdd_20px">
<?php echo $Configurations->getTotalEvents(); ?>
</a>
</div>
</div>
<?php endif; ?>
<?php if ($ScheduledDowntime->checkAcl() === true) : ?>
<div class="container mrgn_5px">
<div class="title br-b">