mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-28 00:04:37 +02:00
#10194 first section drawed
This commit is contained in:
parent
7c201d2855
commit
0fdbefa7ee
@ -4842,12 +4842,17 @@ function graph_nodata_image($options)
|
|||||||
return base64_encode($dataImg);
|
return base64_encode($dataImg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$widthImage = '200px';
|
||||||
|
if (isset($options['nodata_image']['width']) === true) {
|
||||||
|
$widthImage = $options['nodata_image']['width'];
|
||||||
|
}
|
||||||
|
|
||||||
return html_print_image(
|
return html_print_image(
|
||||||
'images/image_problem_area.png',
|
'images/image_problem_area.png',
|
||||||
true,
|
true,
|
||||||
[
|
[
|
||||||
'title' => __('No data'),
|
'title' => __('No data'),
|
||||||
'style' => 'width: 200px;',
|
'style' => 'width: '.$widthImage.';',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -53,4 +53,23 @@ class Element
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cut the text to display it on the labels.
|
||||||
|
*
|
||||||
|
* @param string $text Text for cut.
|
||||||
|
* @param integer $length Length max for text cutted.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function controlSizeText(string $text, int $length=14):string
|
||||||
|
{
|
||||||
|
if (mb_strlen($text) > $length) {
|
||||||
|
$newText = mb_substr($text, 0, $length).'...';
|
||||||
|
return $newText;
|
||||||
|
} else {
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,7 @@ class GeneralTacticalView
|
|||||||
];
|
];
|
||||||
|
|
||||||
$elements = [];
|
$elements = [];
|
||||||
|
$elements['welcome'] = $this->getWelcomeMessage();
|
||||||
while (false !== ($file = readdir($handle))) {
|
while (false !== ($file = readdir($handle))) {
|
||||||
try {
|
try {
|
||||||
if (in_array($file, $ignores) === true) {
|
if (in_array($file, $ignores) === true) {
|
||||||
@ -112,4 +113,35 @@ class GeneralTacticalView
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the welcome message.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getWelcomeMessage():string
|
||||||
|
{
|
||||||
|
global $config;
|
||||||
|
$profile = users_get_user_profile($config['id_user']);
|
||||||
|
if (is_array($profile) === true && count($profile) > 0) {
|
||||||
|
$name = $profile[0]['name'];
|
||||||
|
} else {
|
||||||
|
$name = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($name) === true) {
|
||||||
|
$message = __('Welcome back! 👋');
|
||||||
|
} else {
|
||||||
|
$message = __('Welcome back %s! 👋', $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $message,
|
||||||
|
'class' => 'message-welcome',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
309
pandora_console/include/lib/TacticalView/elements/Database.php
Normal file
309
pandora_console/include/lib/TacticalView/elements/Database.php
Normal file
@ -0,0 +1,309 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Database element for tactical view.
|
||||||
|
*
|
||||||
|
* @category General
|
||||||
|
* @package Pandora FMS
|
||||||
|
* @subpackage TacticalView
|
||||||
|
* @version 1.0.0
|
||||||
|
* @license See below
|
||||||
|
*
|
||||||
|
* ______ ___ _______ _______ ________
|
||||||
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||||
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||||
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
* Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es
|
||||||
|
* This code is NOT free software. This code is NOT licenced under GPL2 licence
|
||||||
|
* You cannnot redistribute it without written permission of copyright holder.
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
use PandoraFMS\TacticalView\Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database, this class contain all logic for this section.
|
||||||
|
*/
|
||||||
|
class Database extends Element
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->title = __('Database');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html status of database.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStatus():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
$status = true;
|
||||||
|
|
||||||
|
if ($status === true) {
|
||||||
|
$image_status = html_print_image('images/status_check@svg.svg', true);
|
||||||
|
$text = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => __('Everything’s OK!'),
|
||||||
|
'class' => 'status-text',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$image_status = html_print_image('images/status_error@svg.svg', true);
|
||||||
|
$text = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => __('Something’s wrong'),
|
||||||
|
'class' => 'status-text',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = $image_status.$text;
|
||||||
|
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $output,
|
||||||
|
'class' => 'flex_center margin-top-5',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html records data of database.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDataRecords():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of total events.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEvents():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of total records.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStringRecords():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of total reads database in a graph.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getReadsGraph():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
$dates = [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
];
|
||||||
|
$string_reads = [
|
||||||
|
1,
|
||||||
|
0.5,
|
||||||
|
2,
|
||||||
|
1.5,
|
||||||
|
3,
|
||||||
|
2.5,
|
||||||
|
4,
|
||||||
|
3.5,
|
||||||
|
5,
|
||||||
|
4.5,
|
||||||
|
6,
|
||||||
|
];
|
||||||
|
$total = '9.999.999';
|
||||||
|
$options = [
|
||||||
|
'labels' => $dates,
|
||||||
|
'legend' => [ 'display' => false ],
|
||||||
|
'tooltips' => [ 'display' => false ],
|
||||||
|
'scales' => [
|
||||||
|
'y' => [
|
||||||
|
'grid' => ['display' => false],
|
||||||
|
'ticks' => ['display' => false],
|
||||||
|
'display' => false,
|
||||||
|
],
|
||||||
|
'x' => [
|
||||||
|
'grid' => ['display' => false],
|
||||||
|
'display' => false,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
[
|
||||||
|
'backgroundColor' => '#EC7176',
|
||||||
|
'borderColor' => '#EC7176',
|
||||||
|
'pointBackgroundColor' => '#EC7176',
|
||||||
|
'pointHoverBorderColor' => '#EC7176',
|
||||||
|
'data' => $string_reads,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$graph_area = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => line_graph($data, $options),
|
||||||
|
'class' => 'w100p h100p',
|
||||||
|
'style' => 'max-height: 100px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$total = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $total,
|
||||||
|
'class' => 'text-xl',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$output = $total.$graph_area;
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of total writes database in a graph.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getWritesGraph():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
$dates = [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
];
|
||||||
|
$string_writes = [
|
||||||
|
1,
|
||||||
|
0.5,
|
||||||
|
2,
|
||||||
|
1.5,
|
||||||
|
3,
|
||||||
|
2.5,
|
||||||
|
4,
|
||||||
|
3.5,
|
||||||
|
5,
|
||||||
|
4.5,
|
||||||
|
6,
|
||||||
|
];
|
||||||
|
$total = '9.999.999';
|
||||||
|
$options = [
|
||||||
|
'labels' => $dates,
|
||||||
|
'legend' => [ 'display' => false ],
|
||||||
|
'tooltips' => [ 'display' => false ],
|
||||||
|
'scales' => [
|
||||||
|
'y' => [
|
||||||
|
'grid' => ['display' => false],
|
||||||
|
'ticks' => ['display' => false],
|
||||||
|
'display' => false,
|
||||||
|
],
|
||||||
|
'x' => [
|
||||||
|
'grid' => ['display' => false],
|
||||||
|
'display' => false,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
[
|
||||||
|
'backgroundColor' => '#009D9E',
|
||||||
|
'borderColor' => '#009D9E',
|
||||||
|
'pointBackgroundColor' => '#009D9E',
|
||||||
|
'pointHoverBorderColor' => '#009D9E',
|
||||||
|
'data' => $string_writes,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$graph_area = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => line_graph($data, $options),
|
||||||
|
'class' => 'w100p h100p',
|
||||||
|
'style' => 'max-height: 100px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$total = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $total,
|
||||||
|
'class' => 'text-xl',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$output = $total.$graph_area;
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
215
pandora_console/include/lib/TacticalView/elements/Groups.php
Normal file
215
pandora_console/include/lib/TacticalView/elements/Groups.php
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Groups element for tactical view.
|
||||||
|
*
|
||||||
|
* @category General
|
||||||
|
* @package Pandora FMS
|
||||||
|
* @subpackage TacticalView
|
||||||
|
* @version 1.0.0
|
||||||
|
* @license See below
|
||||||
|
*
|
||||||
|
* ______ ___ _______ _______ ________
|
||||||
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||||
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||||
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
* Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es
|
||||||
|
* This code is NOT free software. This code is NOT licenced under GPL2 licence
|
||||||
|
* You cannnot redistribute it without written permission of copyright holder.
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
use PandoraFMS\TacticalView\Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Groups, this class contain all logic for this section.
|
||||||
|
*/
|
||||||
|
class Groups extends Element
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total groups.
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
*/
|
||||||
|
public $total;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->title = __('Groups');
|
||||||
|
$this->total = $this->calculateTotalGroups();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the total groups.
|
||||||
|
*
|
||||||
|
* @return integer
|
||||||
|
*/
|
||||||
|
public function calculateTotalGroups():int
|
||||||
|
{
|
||||||
|
$total = db_get_num_rows('SELECT * FROM tgrupo;');
|
||||||
|
return $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the status groups in heat map.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStatusHeatMap():string
|
||||||
|
{
|
||||||
|
ui_require_css_file('heatmap');
|
||||||
|
$width = 350;
|
||||||
|
$height = 335;
|
||||||
|
$sql = 'SELECT * FROM tagente a
|
||||||
|
LEFT JOIN tagent_secondary_group g ON g.id_agent = a.id_agente';
|
||||||
|
|
||||||
|
$all_agents = db_get_all_rows_sql($sql);
|
||||||
|
if (empty($all_agents)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$total_agents = count($all_agents);
|
||||||
|
|
||||||
|
// Best square.
|
||||||
|
$high = (float) max($width, $height);
|
||||||
|
$low = 0.0;
|
||||||
|
|
||||||
|
while (abs($high - $low) > 0.000001) {
|
||||||
|
$mid = (($high + $low) / 2.0);
|
||||||
|
$midval = (floor($width / $mid) * floor($height / $mid));
|
||||||
|
if ($midval >= $total_agents) {
|
||||||
|
$low = $mid;
|
||||||
|
} else {
|
||||||
|
$high = $mid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$square_length = min(($width / floor($width / $low)), ($height / floor($height / $low)));
|
||||||
|
// Print starmap.
|
||||||
|
$heatmap = sprintf(
|
||||||
|
'<svg id="svg" style="width: %spx; height: %spx;">',
|
||||||
|
$width,
|
||||||
|
$height
|
||||||
|
);
|
||||||
|
|
||||||
|
$heatmap .= '<g>';
|
||||||
|
$row = 0;
|
||||||
|
$column = 0;
|
||||||
|
$x = 0;
|
||||||
|
$y = 0;
|
||||||
|
$cont = 1;
|
||||||
|
|
||||||
|
foreach ($all_agents as $key => $value) {
|
||||||
|
// Colour by status.
|
||||||
|
$status = agents_get_status_from_counts($value);
|
||||||
|
|
||||||
|
switch ($status) {
|
||||||
|
case 5:
|
||||||
|
// Not init status.
|
||||||
|
$status = 'notinit';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
// Critical status.
|
||||||
|
$status = 'critical';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
// Warning status.
|
||||||
|
$status = 'warning';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
// Normal status.
|
||||||
|
$status = 'normal';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
case -1:
|
||||||
|
default:
|
||||||
|
// Unknown status.
|
||||||
|
$status = 'unknown';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$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_'.$cont,
|
||||||
|
$x,
|
||||||
|
$y,
|
||||||
|
$row,
|
||||||
|
$column,
|
||||||
|
$square_length,
|
||||||
|
$square_length,
|
||||||
|
$status,
|
||||||
|
random_int(1, 10)
|
||||||
|
);
|
||||||
|
|
||||||
|
$y += $square_length;
|
||||||
|
$row++;
|
||||||
|
if ((int) ($y + $square_length) > (int) $height) {
|
||||||
|
$y = 0;
|
||||||
|
$x += $square_length;
|
||||||
|
$row = 0;
|
||||||
|
$column++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((int) ($x + $square_length) > (int) $width) {
|
||||||
|
$x = 0;
|
||||||
|
$y += $square_length;
|
||||||
|
$column = 0;
|
||||||
|
$row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$cont++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$heatmap .= '<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
const total_agents = "'.$total_agents.'";
|
||||||
|
|
||||||
|
function getRandomInteger(min, max) {
|
||||||
|
return Math.floor(Math.random() * max) + min;
|
||||||
|
}
|
||||||
|
|
||||||
|
function oneSquare(solid, time) {
|
||||||
|
var randomPoint = getRandomInteger(1, total_agents);
|
||||||
|
let target = $(`#rect_${randomPoint}`);
|
||||||
|
let class_name = target.attr("class");
|
||||||
|
class_name = class_name.split("_")[0];
|
||||||
|
setTimeout(function() {
|
||||||
|
target.removeClass();
|
||||||
|
target.addClass(`${class_name}_${solid}`);
|
||||||
|
oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900));
|
||||||
|
}, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
let cont = 0;
|
||||||
|
while (cont < Math.ceil(total_agents / 3)) {
|
||||||
|
oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900));
|
||||||
|
cont ++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>';
|
||||||
|
$heatmap .= '</g>';
|
||||||
|
$heatmap .= '</svg>';
|
||||||
|
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $heatmap,
|
||||||
|
'style' => 'margin: 0 auto; width: fit-content;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
141
pandora_console/include/lib/TacticalView/elements/LogStorage.php
Normal file
141
pandora_console/include/lib/TacticalView/elements/LogStorage.php
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* LogStorage element for tactical view.
|
||||||
|
*
|
||||||
|
* @category General
|
||||||
|
* @package Pandora FMS
|
||||||
|
* @subpackage TacticalView
|
||||||
|
* @version 1.0.0
|
||||||
|
* @license See below
|
||||||
|
*
|
||||||
|
* ______ ___ _______ _______ ________
|
||||||
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||||
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||||
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
* Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es
|
||||||
|
* This code is NOT free software. This code is NOT licenced under GPL2 licence
|
||||||
|
* You cannnot redistribute it without written permission of copyright holder.
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
use PandoraFMS\TacticalView\Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LogStorage, this class contain all logic for this section.
|
||||||
|
*/
|
||||||
|
class LogStorage extends Element
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->title = __('Log storage');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html status of log storage.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStatus():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
$status = true;
|
||||||
|
|
||||||
|
if ($status === true) {
|
||||||
|
$image_status = html_print_image('images/status_check@svg.svg', true);
|
||||||
|
$text = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => __('Everything’s OK!'),
|
||||||
|
'class' => 'status-text',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$image_status = html_print_image('images/status_error@svg.svg', true);
|
||||||
|
$text = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => __('Something’s wrong'),
|
||||||
|
'class' => 'status-text',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = $image_status.$text;
|
||||||
|
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $output,
|
||||||
|
'class' => 'flex_center margin-top-5',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of total sources in log storage.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTotalSources():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 0px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of lines in log storage.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStoredData():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 0px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of age of stored data.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAgeOfStoredData():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 0px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -38,4 +38,153 @@ class MonitoringElements extends Element
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of the tags grouped by modules.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTagsGraph():string
|
||||||
|
{
|
||||||
|
$sql = 'SELECT name, count(*) AS total
|
||||||
|
FROM ttag_module t
|
||||||
|
LEFT JOIN ttag ta ON ta.id_tag = t.id_tag
|
||||||
|
GROUP BY t.id_tag';
|
||||||
|
$rows = db_process_sql($sql);
|
||||||
|
|
||||||
|
$labels = [];
|
||||||
|
$data = [];
|
||||||
|
foreach ($rows as $key => $row) {
|
||||||
|
$labels[] = $this->controlSizeText($row['name']);
|
||||||
|
$data[] = $row['total'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'labels' => $labels,
|
||||||
|
'legend' => [
|
||||||
|
'position' => 'bottom',
|
||||||
|
'align' => 'right',
|
||||||
|
],
|
||||||
|
'cutout' => 80,
|
||||||
|
'nodata_image' => ['width' => '100%'],
|
||||||
|
];
|
||||||
|
$pie = ring_graph($data, $options);
|
||||||
|
$output = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $pie,
|
||||||
|
'style' => 'margin: 0 auto; max-width: 60%; max-height: 220px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of the groups grouped by modules.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getModuleGroupGraph():string
|
||||||
|
{
|
||||||
|
$sql = 'SELECT name, count(*) AS total
|
||||||
|
FROM tagente_modulo m
|
||||||
|
LEFT JOIN tmodule_group g ON g.id_mg = m.id_module_group
|
||||||
|
WHERE name <> ""
|
||||||
|
GROUP BY m.id_module_group';
|
||||||
|
$rows = db_process_sql($sql);
|
||||||
|
|
||||||
|
$labels = [];
|
||||||
|
$data = [];
|
||||||
|
foreach ($rows as $key => $row) {
|
||||||
|
$labels[] = $this->controlSizeText($row['name']);
|
||||||
|
$data[] = $row['total'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'labels' => $labels,
|
||||||
|
'legend' => [
|
||||||
|
'position' => 'bottom',
|
||||||
|
'align' => 'right',
|
||||||
|
],
|
||||||
|
'cutout' => 80,
|
||||||
|
'nodata_image' => ['width' => '100%'],
|
||||||
|
];
|
||||||
|
$pie = ring_graph($data, $options);
|
||||||
|
$output = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $pie,
|
||||||
|
'style' => 'margin: 0 auto; max-width: 60%; max-height: 220px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of the agent grouped by modules.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAgentGroupsGraph():string
|
||||||
|
{
|
||||||
|
$sql = 'SELECT gr.nombre, count(*) AS total
|
||||||
|
FROM tagente a
|
||||||
|
LEFT JOIN tagent_secondary_group g ON g.id_agent = a.id_agente
|
||||||
|
LEFT JOIN tgrupo gr ON gr.id_grupo = a.id_grupo
|
||||||
|
GROUP BY a.id_grupo';
|
||||||
|
$rows = db_process_sql($sql);
|
||||||
|
|
||||||
|
$labels = [];
|
||||||
|
$data = [];
|
||||||
|
foreach ($rows as $key => $row) {
|
||||||
|
$labels[] = $this->controlSizeText($row['nombre']);
|
||||||
|
$data[] = $row['total'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'labels' => $labels,
|
||||||
|
'legend' => [
|
||||||
|
'position' => 'bottom',
|
||||||
|
'align' => 'right',
|
||||||
|
],
|
||||||
|
'cutout' => 80,
|
||||||
|
'nodata_image' => ['width' => '100%'],
|
||||||
|
];
|
||||||
|
$pie = ring_graph($data, $options);
|
||||||
|
$output = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $pie,
|
||||||
|
'style' => 'margin: 0 auto; max-width: 60%; max-height: 220px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of monitoring by status.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getMonitoringStatusGraph():string
|
||||||
|
{
|
||||||
|
// TODO add labels.
|
||||||
|
$pie = graph_agent_status(false, '', '', true, true, false, true);
|
||||||
|
$output = html_print_div(
|
||||||
|
[
|
||||||
|
'content' => $pie,
|
||||||
|
'style' => 'margin: 0 auto; max-width: 60%; max-height: 220px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ class Overview extends Element
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getLicenseUsage():string
|
public function getLicenseUsageGraph():string
|
||||||
{
|
{
|
||||||
// TODO connect to automonitorization.
|
// TODO connect to automonitorization.
|
||||||
$options = [
|
$options = [
|
||||||
@ -167,7 +167,7 @@ class Overview extends Element
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getXmlProcessed():string
|
public function getXmlProcessedGraph():string
|
||||||
{
|
{
|
||||||
$sql = 'SELECT
|
$sql = 'SELECT
|
||||||
utimestamp,
|
utimestamp,
|
||||||
@ -184,9 +184,9 @@ class Overview extends Element
|
|||||||
$xml_proccessed = [];
|
$xml_proccessed = [];
|
||||||
$total = 0;
|
$total = 0;
|
||||||
foreach ($rows as $key => $raw_data) {
|
foreach ($rows as $key => $raw_data) {
|
||||||
$dates[] = date('H:i:s', $raw_data['utimestamp']);
|
$dates[] = date('H:00:00', $raw_data['utimestamp']);
|
||||||
$xml_proccessed[] = $raw_data['xml_proccessed'];
|
|
||||||
$total += $raw_data['xml_proccessed'];
|
$total += $raw_data['xml_proccessed'];
|
||||||
|
$xml_proccessed[] = $raw_data['xml_proccessed'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$options = [
|
$options = [
|
||||||
@ -205,7 +205,15 @@ class Overview extends Element
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
$data = [['data' => $xml_proccessed]];
|
$data = [
|
||||||
|
[
|
||||||
|
'backgroundColor' => '#009D9E',
|
||||||
|
'borderColor' => '#009D9E',
|
||||||
|
'pointBackgroundColor' => '#009D9E',
|
||||||
|
'pointHoverBorderColor' => '#009D9E',
|
||||||
|
'data' => $xml_proccessed,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
$graph_area = html_print_div(
|
$graph_area = html_print_div(
|
||||||
[
|
[
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* SnmpTraps element for tactical view.
|
||||||
|
*
|
||||||
|
* @category General
|
||||||
|
* @package Pandora FMS
|
||||||
|
* @subpackage TacticalView
|
||||||
|
* @version 1.0.0
|
||||||
|
* @license See below
|
||||||
|
*
|
||||||
|
* ______ ___ _______ _______ ________
|
||||||
|
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
|
||||||
|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
|
||||||
|
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
* Copyright (c) 2007-2023 Artica Soluciones Tecnologicas, http://www.artica.es
|
||||||
|
* This code is NOT free software. This code is NOT licenced under GPL2 licence
|
||||||
|
* You cannnot redistribute it without written permission of copyright holder.
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
use PandoraFMS\TacticalView\Element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SnmpTraps, this class contain all logic for this section.
|
||||||
|
*/
|
||||||
|
class SnmpTraps extends Element
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->title = __('SNMP Traps');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of queues traps.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getQueues():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the html of total sources traps.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTotalSources():string
|
||||||
|
{
|
||||||
|
// TODO connect to automonitorization.
|
||||||
|
return html_print_div(
|
||||||
|
[
|
||||||
|
'content' => '9.999.999',
|
||||||
|
'class' => 'text-l',
|
||||||
|
'style' => 'margin: 0px 10px 10px 10px;',
|
||||||
|
],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,3 +1,22 @@
|
|||||||
|
#welcome-message {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-welcome {
|
||||||
|
color: #161628;
|
||||||
|
font-size: 32px;
|
||||||
|
line-height: 38px;
|
||||||
|
text-align: left;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle-welcome-message {
|
||||||
|
color: #8a96a6;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 20px;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
.row {
|
.row {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -19,6 +38,7 @@
|
|||||||
border: 1px solid #e5e9ed;
|
border: 1px solid #e5e9ed;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
.br-l {
|
.br-l {
|
||||||
border-left: 1px solid #e5e9ed;
|
border-left: 1px solid #e5e9ed;
|
||||||
@ -33,11 +53,11 @@
|
|||||||
border-bottom: 1px solid #e5e9ed;
|
border-bottom: 1px solid #e5e9ed;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
font-size: 18px;
|
font-size: 18px !important;
|
||||||
color: #161628;
|
color: #161628;
|
||||||
text-align: center;
|
text-align: center !important;
|
||||||
font-weight: bold;
|
font-weight: bold !important;
|
||||||
padding: 15px 0px;
|
padding: 15px 0px !important;
|
||||||
}
|
}
|
||||||
.subtitle {
|
.subtitle {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
@ -52,6 +72,7 @@
|
|||||||
.subtitle.link a {
|
.subtitle.link a {
|
||||||
color: #14524f;
|
color: #14524f;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
.absolute-link::after {
|
.absolute-link::after {
|
||||||
content: "→";
|
content: "→";
|
||||||
@ -69,9 +90,30 @@
|
|||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
line-height: initial;
|
line-height: initial;
|
||||||
}
|
}
|
||||||
|
.text-l {
|
||||||
|
font-size: 27px;
|
||||||
|
color: #6c7587;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
line-height: initial;
|
||||||
|
}
|
||||||
#news-board {
|
#news-board {
|
||||||
min-width: 530px;
|
min-width: 530px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-height: 805px;
|
max-height: 805px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#database .subtitle,
|
||||||
|
#logStorage .subtitle,
|
||||||
|
#SNMPTraps .subtitle {
|
||||||
|
padding: 10px 10px 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.indicative-text {
|
||||||
|
color: #6e7079;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 13px;
|
||||||
|
text-align: left;
|
||||||
|
padding: 0px 10px 10px 10px;
|
||||||
|
}
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
<div id="welcome-message">
|
||||||
|
<?php echo $welcome; ?>
|
||||||
|
<span class="subtitle-welcome-message"><?php echo __('This is the latest data in your tactical view'); ?></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div id="general-overview">
|
<div id="general-overview">
|
||||||
@ -31,7 +36,7 @@
|
|||||||
<span class="subtitle link">
|
<span class="subtitle link">
|
||||||
<?php echo __('License usage'); ?> <a href=""><?php echo __('Info'); ?></a>
|
<?php echo __('License usage'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
</span>
|
</span>
|
||||||
<?php echo $Overview->getLicenseUsage(); ?>
|
<?php echo $Overview->getLicenseUsageGraph(); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -39,7 +44,7 @@
|
|||||||
<div class="subtitle link padding10 padding2">
|
<div class="subtitle link padding10 padding2">
|
||||||
<?php echo __('XML packets processed (last 24 hrs)'); ?> <a href=""><?php echo __('Info'); ?></a>
|
<?php echo __('XML packets processed (last 24 hrs)'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
</div>
|
</div>
|
||||||
<?php echo $Overview->getXmlProcessed(); ?>
|
<?php echo $Overview->getXmlProcessedGraph(); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -51,27 +56,33 @@
|
|||||||
<div class="title">
|
<div class="title">
|
||||||
<?php echo $MonitoringElements->title; ?>
|
<?php echo $MonitoringElements->title; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="content br-t">
|
||||||
<div class="col-6">
|
<div class="row">
|
||||||
<div class="subtitle link padding10 padding2">
|
<div class="col-6 br-r br-b">
|
||||||
<?php echo __('Tags'); ?> <a href=""><?php echo __('Info'); ?></a>
|
<div class="subtitle link padding10 padding2">
|
||||||
|
<?php echo __('Tags'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php echo $MonitoringElements->getTagsGraph(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 br-b">
|
||||||
|
<div class="subtitle link padding10 padding2">
|
||||||
|
<?php echo __('By modules groups'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php echo $MonitoringElements->getModuleGroupGraph(); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="row">
|
||||||
<div class="subtitle link padding10 padding2">
|
<div class="col-6">
|
||||||
<?php echo __('By modules groups'); ?> <a href=""><?php echo __('Info'); ?></a>
|
<div class="subtitle link padding10 padding2">
|
||||||
|
<?php echo __('Status'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php echo $MonitoringElements->getMonitoringStatusGraph(); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-6 br-l">
|
||||||
</div>
|
<div class="subtitle link padding10 padding2">
|
||||||
<div class="row">
|
<?php echo __('Groups'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
<div class="col-6">
|
</div>
|
||||||
<div class="subtitle link padding10 padding2">
|
<?php echo $MonitoringElements->getAgentGroupsGraph(); ?>
|
||||||
<?php echo __('Status'); ?> <a href=""><?php echo __('Info'); ?></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
|
||||||
<div class="subtitle link padding10 padding2">
|
|
||||||
<?php echo __('Groups'); ?> <a href=""><?php echo __('Info'); ?></a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -79,16 +90,134 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5">
|
<div class="col-5">
|
||||||
|
<div class="container" id="database">
|
||||||
|
<div class="title">
|
||||||
|
<?php echo $Database->title; ?>
|
||||||
|
</div>
|
||||||
|
<div class="content br-t">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6 br-r br-b">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Database status'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $Database->getStatus(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 br-b">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Data records'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $Database->getDataRecords(); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('String records'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $Database->getStringRecords(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 br-l">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Events'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $Database->getEvents(); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="br-t">
|
||||||
|
<div class="subtitle link padding10 padding2">
|
||||||
|
<?php echo __('Reads (last 24 hrs)'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php echo $Database->getReadsGraph(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="br-t">
|
||||||
|
<div class="subtitle link padding10 padding2">
|
||||||
|
<?php echo __('Reads (last 24 hrs)'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php echo $Database->getWritesGraph(); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<?php echo $NewsBoard->title; ?>
|
<?php echo $NewsBoard->title; ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $NewsBoard->getNews(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<?php if ($Groups->total < 200) : ?>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="container">
|
||||||
|
<div class="title br-b">
|
||||||
|
<?php echo $Groups->title; ?>
|
||||||
|
</div>
|
||||||
|
<div class="subtitle link padding10 padding2">
|
||||||
|
<?php echo __('Status'); ?> <a href=""><?php echo __('Info'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php echo $Groups->getStatusHeatMap(); ?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php echo $NewsBoard->getNews(); ?>
|
<?php endif; ?>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="container" id="logStorage">
|
||||||
|
<div class="title br-b">
|
||||||
|
<?php echo $LogStorage->title; ?>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6 br-r br-b">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Log storage status'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $LogStorage->getStatus(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 br-b">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Total sources'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $LogStorage->getTotalSources(); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6 br-r">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Stored data'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $LogStorage->getStoredData(); ?>
|
||||||
|
<span class="indicative-text"><?php echo __('Lines'); ?></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Age of stored data'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $LogStorage->getAgeOfStoredData(); ?>
|
||||||
|
<span class="indicative-text"><?php echo __('Days'); ?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container" id="SNMPTraps">
|
||||||
|
<div class="title br-b">
|
||||||
|
<?php echo $SnmpTraps->title; ?>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6 br-r">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Trap queues'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $SnmpTraps->getQueues(); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="subtitle">
|
||||||
|
<?php echo __('Total sources'); ?>
|
||||||
|
</div>
|
||||||
|
<?php echo $SnmpTraps->getTotalSources(); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user