pandorafms/pandora_console/include/lib/TacticalView/elements/Overview.php

346 lines
10 KiB
PHP
Raw Normal View History

<?php
/**
* Overview 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;
/**
* Overview, this class contain all logic for this section.
*/
class Overview extends Element
{
/**
* Constructor
*/
public function __construct()
{
2023-10-09 16:42:39 +02:00
global $config;
2023-09-27 13:30:56 +02:00
parent::__construct();
2023-10-09 16:42:39 +02:00
if (is_ajax() === true) {
include_once $config['homedir'].'/include/functions_servers.php';
}
$this->title = __('General overview');
$this->ajaxMethods = [
'getLogSizeStatus',
2023-10-09 16:42:39 +02:00
'getServerStatus',
2023-10-10 15:15:43 +02:00
'getCPULoadGraph',
];
$this->interval = 300000;
$this->refreshConfig = [
2023-10-09 16:42:39 +02:00
'logSizeStatus' => [
'id' => 'status-log-size',
'method' => 'getLogSizeStatus',
],
2023-10-09 16:42:39 +02:00
'ServerStatus' => [
'id' => 'status-servers',
'method' => 'getServerStatus',
],
2023-10-10 15:15:43 +02:00
'cpuStatus' => [
'id' => 'status-cpu',
'method' => 'getCPULoadGraph',
],
];
}
/**
* Return the html log size status.
*
* @return string
*/
public function getLogSizeStatus():string
{
$size = $this->valueMonitoring('console_log_size');
$status = ($size[0]['datos'] < 1000) ? true : false;
if ($status === true) {
$image_status = html_print_image('images/status_check@svg.svg', true);
$text = html_print_div(
[
'content' => __('Everythings OK!'),
'class' => 'status-text',
],
true
);
} else {
$image_status = html_print_image('images/status_error@svg.svg', true);
$text = html_print_div(
[
'content' => __('Too size log size'),
'class' => 'status-text',
],
true
);
}
$output = $image_status.$text;
return html_print_div(
[
'content' => $output,
2023-10-09 16:42:39 +02:00
'class' => 'margin-top-5 flex_center',
'id' => 'status-log-size',
],
true
);
}
/**
2023-10-09 16:42:39 +02:00
* Return the html Servers status.
*
* @return string
*/
2023-10-09 16:42:39 +02:00
public function getServerStatus():string
{
2023-10-09 16:42:39 +02:00
$status = check_all_servers_up();
if ($status === true) {
$image_status = html_print_image('images/status_check@svg.svg', true);
$text = html_print_div(
[
'content' => __('Everythings OK!'),
'class' => 'status-text',
],
true
);
} else {
$image_status = html_print_image('images/status_error@svg.svg', true);
$text = html_print_div(
[
'content' => __('Somethings wrong'),
'class' => 'status-text',
],
true
);
}
$output = $image_status.$text;
return html_print_div(
[
'content' => $output,
'class' => 'flex_center margin-top-5',
2023-10-09 16:42:39 +02:00
'id' => 'status-servers',
],
true
);
}
/**
* Returns the html of the used licenses.
*
* @return string
*/
2023-09-25 13:52:28 +02:00
public function getLicenseUsageGraph():string
{
2023-10-10 15:15:43 +02:00
if (enterprise_installed() === true) {
$info = license_get_info();
if ($info['limit'] > $info['count']) {
$used = round(($info['count'] / $info['limit']) * 100);
$free = (100 - $used);
} else {
$free = 100;
$used = 0;
}
$data = [
'agents_used' => [
'label' => __('% Agents used'),
'perc' => $used,
'color' => '#1C4E6B',
],
'free_agents' => [
'label' => __('% Free agents'),
'perc' => $free,
'color' => '#5C63A2',
],
];
} else {
$agents = agents_get_agents();
$enabled_agents = agents_get_agents(
false,
false,
'AR',
[
'field' => 'nombre',
'order' => 'ASC',
],
false,
1
);
if (is_array($agents) === true) {
$total = count($agents);
} else {
$total = 0;
}
if ($total > 0 && is_array($enabled_agents) === true) {
$total_disabled_agents = round((($total - count($enabled_agents)) * 100) / $total);
$total_enabled_agents = round((count($enabled_agents) * 100) / $total);
} else {
$total_disabled_agents = 0;
$total_enabled_agents = 100;
2023-10-10 15:15:43 +02:00
}
$data = [
'agents_enabled' => [
'label' => __('% Agents enabled'),
'perc' => $total_enabled_agents,
'color' => '#1C4E6B',
],
'agents_disabled' => [
'label' => __('% Agents disabled'),
'perc' => $total_disabled_agents,
'color' => '#5C63A2',
],
];
}
$bar = $this->printHorizontalBar($data);
$output = html_print_div(
[
'content' => $bar,
'style' => 'margin: 0 auto;',
],
true
);
return $output;
}
/**
* Print horizontal bar divided by percentage.
*
* @param array $data Required [perc, color, label].
*
* @return string
*/
private function printHorizontalBar(array $data):string
{
$output = '<div id="horizontalBar">';
$output .= '<div class="labels">';
foreach ($data as $key => $value) {
$output .= html_print_div(
[
'content' => '<div style="background: '.$value['color'].'"></div>'.$value['label'],
'class' => 'label',
],
true
);
}
$output .= '</div>';
$output .= '<div class="bar">';
foreach ($data as $key => $value) {
$output .= html_print_div(
[
'content' => $value['perc'].' %',
'style' => 'width: '.$value['perc'].'%; background-color: '.$value['color'].';',
],
true
);
}
$output .= '</div>';
$output .= '
<div class="marks">
2023-10-10 15:15:43 +02:00
<div class="mark"><div class="line mark0"></div><span class="number">0 %</span></div>
<div class="mark"><div class="line mark20"></div><span class="number number20">20 %</span></div>
<div class="mark"><div class="line mark40"></div><span class="number number40">40 %</span></div>
<div class="mark"><div class="line mark60"></div><span class="number number60">60 %</span></div>
<div class="mark"><div class="line mark80"></div><span class="number number80">80 %</span></div>
<div class="mark"><div class="line mark100"></div><span class="number number100">100 %</span></div>
</div>';
$output .= '</div>';
return $output;
}
/**
* Returns the html of a graph with the cpu load.
*
* @return string
*/
public function getCPULoadGraph():string
{
$data_last24h = $this->valueMonitoring('CPU Load', (time() - 86400), time());
$dates = [];
$cpu_load = [];
foreach ($data_last24h as $key => $raw_data) {
$dates[] = date('H:m:s', $raw_data['utimestamp']);
$cpu_load[] = $raw_data['datos'];
}
$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,
],
],
2023-10-10 15:51:48 +02:00
'elements' => [ 'point' => [ 'radius' => 0 ] ],
];
2023-09-25 13:52:28 +02:00
$data = [
[
'backgroundColor' => '#009D9E',
'borderColor' => '#009D9E',
'pointBackgroundColor' => '#009D9E',
'pointHoverBorderColor' => '#009D9E',
'data' => $cpu_load,
2023-09-25 13:52:28 +02:00
],
];
$graph_area = html_print_div(
[
'content' => line_graph($data, $options),
'class' => 'margin-top-5 w100p h100p',
'style' => 'max-height: 50px;',
2023-10-10 15:15:43 +02:00
'id' => 'status-cpu',
],
true
);
$output = $graph_area;
return $output;
}
}