Merge remote-tracking branch 'origin/develop' into ent-9662-second-round

This commit is contained in:
daniel 2023-03-27 21:22:06 +02:00
commit ebffb004e9
64 changed files with 1379 additions and 421 deletions

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, AIX version # Version 7.0NG.770, AIX version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, FreeBSD Version # Version 7.0NG.770, FreeBSD Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, HP-UX Version # Version 7.0NG.770, HP-UX Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, GNU/Linux # Version 7.0NG.770, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, GNU/Linux # Version 7.0NG.770, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, Solaris Version # Version 7.0NG.770, Solaris Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent # Base config file for Pandora FMS Windows Agent
# (c) 2006-2021 Artica Soluciones Tecnologicas # (c) 2006-2021 Artica Soluciones Tecnologicas
# Version 7.0NG.769 # Version 7.0NG.770
# This program is Free Software, you can redistribute it and/or modify it # This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software # under the terms of the GNU General Public Licence as published by the Free Software
# Foundation; either version 2 of the Licence or any later version # Foundation; either version 2 of the Licence or any later version

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.769, AIX version # Version 7.0NG.770, AIX version
# General Parameters # General Parameters
# ================== # ==================

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.769 # Version 7.0NG.770
# FreeBSD/IPSO version # FreeBSD/IPSO version
# Licenced under GPL licence, 2003-2007 Sancho Lerena # Licenced under GPL licence, 2003-2007 Sancho Lerena

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.769, HPUX Version # Version 7.0NG.770, HPUX Version
# General Parameters # General Parameters
# ================== # ==================

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769 # Version 7.0NG.770
# Licensed under GPL license v2, # Licensed under GPL license v2,
# (c) 2003-2021 Artica Soluciones Tecnologicas # (c) 2003-2021 Artica Soluciones Tecnologicas
# please visit http://pandora.sourceforge.net # please visit http://pandora.sourceforge.net

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769 # Version 7.0NG.770
# Licensed under GPL license v2, # Licensed under GPL license v2,
# (c) 2003-2021 Artica Soluciones Tecnologicas # (c) 2003-2021 Artica Soluciones Tecnologicas
# please visit http://pandora.sourceforge.net # please visit http://pandora.sourceforge.net

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769 # Version 7.0NG.770
# Licensed under GPL license v2, # Licensed under GPL license v2,
# please visit http://pandora.sourceforge.net # please visit http://pandora.sourceforge.net

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.769, Solaris version # Version 7.0NG.770, Solaris version
# General Parameters # General Parameters
# ================== # ==================

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, AIX version # Version 7.0NG.770, AIX version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix package: pandorafms-agent-unix
Version: 7.0NG.769-230327 Version: 7.0NG.770
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.769-230327" pandora_version="7.0NG.770"
echo "Test if you has the tools for to make the packages." echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null

View File

@ -31,7 +31,7 @@ fi
if [ "$#" -ge 2 ]; then if [ "$#" -ge 2 ]; then
VERSION="$2" VERSION="$2"
else else
VERSION="7.0NG.769" VERSION="7.0NG.770"
fi fi
# Path for the generated DMG file # Path for the generated DMG file

View File

@ -19,11 +19,11 @@
<choice id="com.pandorafms.pandorafms_src" visible="false"> <choice id="com.pandorafms.pandorafms_src" visible="false">
<pkg-ref id="com.pandorafms.pandorafms_src"/> <pkg-ref id="com.pandorafms.pandorafms_src"/>
</choice> </choice>
<pkg-ref id="com.pandorafms.pandorafms_src" version="7.0NG.769" onConclusion="none">pandorafms_src.pdk</pkg-ref> <pkg-ref id="com.pandorafms.pandorafms_src" version="7.0NG.770" onConclusion="none">pandorafms_src.pdk</pkg-ref>
<choice id="com.pandorafms.pandorafms_uninstall" visible="true" customLocation="/Applications"> <choice id="com.pandorafms.pandorafms_uninstall" visible="true" customLocation="/Applications">
<pkg-ref id="com.pandorafms.pandorafms_uninstall"/> <pkg-ref id="com.pandorafms.pandorafms_uninstall"/>
</choice> </choice>
<pkg-ref id="com.pandorafms.pandorafms_uninstall" version="7.0NG.769" onConclusion="none">pandorafms_uninstall.pdk</pkg-ref> <pkg-ref id="com.pandorafms.pandorafms_uninstall" version="7.0NG.770" onConclusion="none">pandorafms_uninstall.pdk</pkg-ref>
<!-- <installation-check script="check()" /> <!-- <installation-check script="check()" />
<script> <script>
<![CDATA[ <![CDATA[

View File

@ -5,9 +5,9 @@
<key>CFBundleIconFile</key> <string>pandorafms.icns</string> <key>CFBundleIconFile</key> <string>pandorafms.icns</string>
<key>CFBundleIdentifier</key> <string>com.pandorafms.pandorafms_uninstall</string> <key>CFBundleIdentifier</key> <string>com.pandorafms.pandorafms_uninstall</string>
<key>CFBundleVersion</key> <string>7.0NG.769</string> <key>CFBundleVersion</key> <string>7.0NG.770</string>
<key>CFBundleGetInfoString</key> <string>7.0NG.769 Pandora FMS Agent uninstaller for MacOS by Artica ST on Aug 2020</string> <key>CFBundleGetInfoString</key> <string>7.0NG.770 Pandora FMS Agent uninstaller for MacOS by Artica ST on Aug 2020</string>
<key>CFBundleShortVersionString</key> <string>7.0NG.769</string> <key>CFBundleShortVersionString</key> <string>7.0NG.770</string>
<key>NSPrincipalClass</key><string>NSApplication</string> <key>NSPrincipalClass</key><string>NSApplication</string>
<key>NSMainNibFile</key><string>MainMenu</string> <key>NSMainNibFile</key><string>MainMenu</string>

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, GNU/Linux # Version 7.0NG.770, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, FreeBSD Version # Version 7.0NG.770, FreeBSD Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, HP-UX Version # Version 7.0NG.770, HP-UX Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, GNU/Linux # Version 7.0NG.770, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, GNU/Linux # Version 7.0NG.770, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, NetBSD Version # Version 7.0NG.770, NetBSD Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.769, Solaris Version # Version 7.0NG.770, Solaris Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2021 Artica Soluciones Tecnologicas # Copyright (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1022,7 +1022,7 @@ my $Sem = undef;
# Semaphore used to control the number of threads # Semaphore used to control the number of threads
my $ThreadSem = undef; my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.769'; use constant AGENT_VERSION => '7.0NG.770';
use constant AGENT_BUILD => '230327'; use constant AGENT_BUILD => '230327';
# Agent log default file size maximum and instances # Agent log default file size maximum and instances

View File

@ -3,8 +3,8 @@
# #
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_agent_linux %define name pandorafms_agent_linux
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -3,8 +3,8 @@
# #
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_agent_linux %define name pandorafms_agent_linux
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -9,7 +9,7 @@
# Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license. # Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license.
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.769" PI_VERSION="7.0NG.770"
PI_BUILD="230327" PI_BUILD="230327"
OS_NAME=`uname -s` OS_NAME=`uname -s`

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent # Base config file for Pandora FMS Windows Agent
# (c) 2006-2021 Artica Soluciones Tecnologicas # (c) 2006-2021 Artica Soluciones Tecnologicas
# Version 7.0NG.769 # Version 7.0NG.770
# This program is Free Software, you can redistribute it and/or modify it # This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software # under the terms of the GNU General Public Licence as published by the Free Software
# Foundation; either version 2 of the Licence or any later version # Foundation; either version 2 of the Licence or any later version

View File

@ -3,7 +3,7 @@ AllowLanguageSelection
{Yes} {Yes}
AppName AppName
{Pandora FMS Windows Agent v7.0NG.769} {Pandora FMS Windows Agent v7.0NG.770}
ApplicationID ApplicationID
{17E3D2CF-CA02-406B-8A80-9D31C17BD08F} {17E3D2CF-CA02-406B-8A80-9D31C17BD08F}
@ -2387,7 +2387,7 @@ Windows,BuildSeparateArchives
{No} {No}
Windows,Executable Windows,Executable
{<%AppName%>-<%Version%>-Setup<%Ext%>} {<%AppName%>-Setup<%Ext%>}
Windows,FileDescription Windows,FileDescription
{<%AppName%> <%Version%> Setup} {<%AppName%> <%Version%> Setup}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils; using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1 #define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.769 Build 230327") #define PANDORA_VERSION ("7.0NG.770 Build 230327")
string pandora_path; string pandora_path;
string pandora_dir; string pandora_dir;

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST" VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent" VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.769(Build 230327))" VALUE "ProductVersion", "(7.0NG.770(Build 230327))"
VALUE "FileVersion", "1.0.0.0" VALUE "FileVersion", "1.0.0.0"
END END
END END

View File

@ -1,5 +1,5 @@
package: pandorafms-console package: pandorafms-console
Version: 7.0NG.769-230327 Version: 7.0NG.770
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.769-230327" pandora_version="7.0NG.770"
package_pear=0 package_pear=0
package_pandora=1 package_pandora=1

View File

@ -1263,12 +1263,14 @@ if ($new_user) {
if (is_metaconsole() === false) { if (is_metaconsole() === false) {
// User only can change skins if has more than one group. // User only can change skins if has more than one group.
if (function_exists('skins_print_select')) {
if (count($usr_groups) > 1) { if (count($usr_groups) > 1) {
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').'</p>'; $skin = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').'</p>';
$skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>'; $skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
} }
} }
}
} }
if (is_metaconsole() === true) { if (is_metaconsole() === true) {

View File

@ -572,8 +572,10 @@ if (is_metaconsole() === true) {
$userManagementTable->data['line2_looknfeel'][1] = $outputMetaAccess[1]; $userManagementTable->data['line2_looknfeel'][1] = $outputMetaAccess[1];
} }
} else { } else {
if (function_exists('skins_print_select')) {
$userManagementTable->data['line1_looknfeel'][1] = __('User color scheme'); $userManagementTable->data['line1_looknfeel'][1] = __('User color scheme');
$userManagementTable->data['line2_looknfeel'][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true); $userManagementTable->data['line2_looknfeel'][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true);
}
} }
$userManagementTable->rowclass['captions_blocksize_eventfilter'] = 'field_half_width'; $userManagementTable->rowclass['captions_blocksize_eventfilter'] = 'field_half_width';

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -26,6 +26,8 @@
* ============================================================================ * ============================================================================
*/ */
use PandoraFMS\Enterprise\Metaconsole\Node;
if (is_ajax() === true) { if (is_ajax() === true) {
global $config; global $config;
@ -216,6 +218,12 @@ if (is_ajax() === true) {
if ($getInfo === true) { if ($getInfo === true) {
enterprise_include_once('include/functions_agents.php'); enterprise_include_once('include/functions_agents.php');
$id = get_parameter('id', 0); $id = get_parameter('id', 0);
$id_server = get_parameter('id_server', 0);
if (empty($id_server) === false) {
$nd = new Node($id_server);
$nd->connect();
}
switch ($type) { switch ($type) {
case 3: case 3:
case 2: case 2:
@ -375,6 +383,10 @@ if (is_ajax() === true) {
} }
break; break;
} }
if (empty($id_server) === false) {
$nd->disconnect();
}
} }
return; return;

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* Heatmap class. * Heatmap class.
* *
@ -14,7 +15,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
* *
* ============================================================================ * ============================================================================
* Copyright (c) 2005-2022 Artica Soluciones Tecnologicas * Copyright (c) 2005-2023 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list * Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -25,6 +26,11 @@
* GNU General Public License for more details. * GNU General Public License for more details.
* ============================================================================ * ============================================================================
*/ */
namespace PandoraFMS;
use PandoraFMS\Enterprise\Metaconsole\Node;
class Heatmap class Heatmap
{ {
@ -95,6 +101,13 @@ class Heatmap
*/ */
protected $group = null; protected $group = null;
/**
* Heatmap group.
*
* @var boolean
*/
protected $dashboard = null;
/** /**
* Constructor function * Constructor function
@ -107,6 +120,7 @@ class Heatmap
* @param integer $height Height. * @param integer $height Height.
* @param string $search Heatmap search. * @param string $search Heatmap search.
* @param integer $group Heatmap group. * @param integer $group Heatmap group.
* @param boolean $dashboard Dashboard widget.
*/ */
public function __construct( public function __construct(
int $type=0, int $type=0,
@ -116,7 +130,8 @@ class Heatmap
int $width=0, int $width=0,
int $height=0, int $height=0,
string $search=null, string $search=null,
int $group=1 int $group=1,
bool $dashboard=false
) { ) {
$this->type = $type; $this->type = $type;
$this->filter = $filter; $this->filter = $filter;
@ -126,6 +141,7 @@ class Heatmap
$this->height = $height; $this->height = $height;
$this->search = $search; $this->search = $search;
$this->group = $group; $this->group = $group;
$this->dashboard = $dashboard;
} }
@ -156,19 +172,32 @@ class Heatmap
'refresh' => $this->refresh, 'refresh' => $this->refresh,
'search' => $this->search, 'search' => $this->search,
'group' => $this->group, 'group' => $this->group,
'dashboard' => (int) $this->dashboard,
], ],
]; ];
echo '<div id="div_'.$this->randomId.'" class="mainDiv">'; $style_dashboard = '';
if ($this->dashboard === true) {
$style_dashboard = 'min-height: 0px';
}
echo '<div id="div_'.$this->randomId.'" class="mainDiv" style="width: 100%;height: 100%;'.$style_dashboard.'">';
?> ?>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
const randomId = '<?php echo $this->randomId; ?>'; const randomId = '<?php echo $this->randomId; ?>';
const refresh = '<?php echo $this->refresh; ?>'; const refresh = '<?php echo $this->refresh; ?>';
const dashboard = '<?php echo $this->dashboard; ?>';
let setting = <?php echo json_encode($settings); ?>; let setting = <?php echo json_encode($settings); ?>;
setting['data']['height'] = $(`#div_${randomId}`).height() + 10; setting['data']['height'] = $(`#div_${randomId}`).height() + 10;
setting['data']['width'] = $(`#div_${randomId}`).width(); setting['data']['width'] = $(`#div_${randomId}`).width();
if (dashboard === '1') {
setting['data']['width'] -= 10;
setting['data']['height'] -= 10;
}
var totalModules = 0; var totalModules = 0;
// Initial charge. // Initial charge.
@ -183,7 +212,7 @@ class Heatmap
let cont = 0; let cont = 0;
while (cont < Math.ceil(totalModules / 10)) { while (cont < Math.ceil(totalModules / 10)) {
oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900)); oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900));
cont ++; cont++;
} }
} }
}); });
@ -197,11 +226,13 @@ class Heatmap
let target = $(`#${randomId}_${randomPoint}`); let target = $(`#${randomId}_${randomPoint}`);
setTimeout(function() { setTimeout(function() {
let class_name = target.attr('class'); let class_name = target.attr('class');
if (typeof class_name !== 'undefined') {
class_name = class_name.split(' ')[0]; class_name = class_name.split(' ')[0];
const newClassName = class_name.split('_')[0]; const newClassName = class_name.split('_')[0];
target.removeClass(`${class_name} hover`); target.removeClass(`${class_name} hover`);
target.addClass(`${newClassName}_${solid} hover`); target.addClass(`${newClassName}_${solid} hover`);
oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900)); oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900));
}
}, time); }, time);
} }
@ -234,7 +265,9 @@ class Heatmap
// Object to array. // Object to array.
let lista = Object.values(data); let lista = Object.values(data);
// randomly sort. // randomly sort.
lista = lista.sort(function() {return Math.random() - 0.5}); lista = lista.sort(function() {
return Math.random() - 0.5
});
let countPerSecond = total / refresh; let countPerSecond = total / refresh;
if (countPerSecond < 1) { if (countPerSecond < 1) {
@ -249,6 +282,7 @@ class Heatmap
while (cont <= limit) { while (cont <= limit) {
if (typeof lista[cont] !== 'undefined') { if (typeof lista[cont] !== 'undefined') {
const rect = document.getElementsByName(`${lista[cont]['id']}`); const rect = document.getElementsByName(`${lista[cont]['id']}`);
console.log(rect[0]);
$(`#${rect[0].id}`).removeClass(); $(`#${rect[0].id}`).removeClass();
$(`#${rect[0].id}`).addClass(`${lista[cont]['status']} hover`); $(`#${rect[0].id}`).addClass(`${lista[cont]['status']} hover`);
} }
@ -261,7 +295,7 @@ class Heatmap
); );
setTimeout( setTimeout(
function(){ function() {
clearInterval(timer); clearInterval(timer);
}, },
(refresh * 1000) (refresh * 1000)
@ -336,6 +370,8 @@ class Heatmap
*/ */
protected function getAllAgents() protected function getAllAgents()
{ {
global $config;
$filter['disabled'] = 0; $filter['disabled'] = 0;
$alias = ''; $alias = '';
@ -343,8 +379,16 @@ class Heatmap
$alias = ' AND alias LIKE "%'.$this->search.'%"'; $alias = ' AND alias LIKE "%'.$this->search.'%"';
} }
$id_user_groups = '';
if (users_is_admin() === false) {
$user_groups = array_keys(users_get_groups($config['user'], 'AR', false));
if (empty($user_groups) === false) {
$id_user_groups = ' AND id_grupo IN ('.implode(',', $user_groups).')';
}
}
$id_grupo = ''; $id_grupo = '';
if (empty($this->filter) === false && current($this->filter) != 0) { if (empty($this->filter) === false && empty(current($this->filter)) === false) {
$id_grupo = ' AND id_grupo IN ('.implode(',', $this->filter).')'; $id_grupo = ' AND id_grupo IN ('.implode(',', $this->filter).')';
} }
@ -354,14 +398,78 @@ class Heatmap
unknown_count,notinit_count,total_count,fired_count, unknown_count,notinit_count,total_count,fired_count,
(SELECT last_status_change FROM tagente_estado WHERE id_agente = tagente.id_agente (SELECT last_status_change FROM tagente_estado WHERE id_agente = tagente.id_agente
ORDER BY last_status_change DESC LIMIT 1) AS last_status_change ORDER BY last_status_change DESC LIMIT 1) AS last_status_change
FROM tagente WHERE `disabled` = 0 %s %s ORDER BY id_grupo,id_agente ASC', FROM tagente WHERE `disabled` = 0 %s %s %s ORDER BY id_grupo,id_agente ASC',
$alias, $alias,
$id_user_groups,
$id_grupo $id_grupo
); );
$agents = [];
if (is_metaconsole() === true) {
$nodes = metaconsole_get_connections();
$cont = 0;
foreach ($nodes as $node) {
try {
$nd = new Node($node['id']);
$nd->connect();
$result = db_get_all_rows_sql($sql);
// Agent status.
foreach ($result as $agent) {
if ($agent['total_count'] === 0 || $agent['total_count'] === $agent['notinit_count']) {
$status = 'notinit';
} else if ($agent['critical_count'] > 0) {
$status = 'critical';
} else if ($agent['warning_count'] > 0) {
$status = 'warning';
} else if ($agent['unknown_count'] > 0) {
$status = 'unknown';
} else {
$status = 'normal';
}
if ($agent['last_status_change'] != 0) {
$seconds = (time() - $agent['last_status_change']);
if ($seconds >= SECONDS_1DAY) {
$status .= '_10';
} else if ($seconds >= 77760) {
$status .= '_9';
} else if ($seconds >= 69120) {
$status .= '_8';
} else if ($seconds >= 60480) {
$status .= '_7';
} else if ($seconds >= 51840) {
$status .= '_6';
} else if ($seconds >= 43200) {
$status .= '_5';
} else if ($seconds >= 34560) {
$status .= '_4';
} else if ($seconds >= 25920) {
$status .= '_3';
} else if ($seconds >= 17280) {
$status .= '_2';
} else if ($seconds >= 8640) {
$status .= '_1';
}
}
$agents[$cont] = $agent;
$agents[$cont]['status'] = $status;
$agents[$cont]['server'] = $node['id'];
++$cont;
}
} catch (\Exception $e) {
$nd->disconnect();
$agents = [];
} finally {
$nd->disconnect();
}
}
} else {
$result = db_get_all_rows_sql($sql); $result = db_get_all_rows_sql($sql);
$agents = [];
// Agent status. // Agent status.
foreach ($result as $key => $agent) { foreach ($result as $key => $agent) {
if ($agent['total_count'] === 0 || $agent['total_count'] === $agent['notinit_count']) { if ($agent['total_count'] === 0 || $agent['total_count'] === $agent['notinit_count']) {
@ -405,6 +513,7 @@ class Heatmap
$agents[$key] = $agent; $agents[$key] = $agent;
$agents[$key]['status'] = $status; $agents[$key]['status'] = $status;
} }
}
return $agents; return $agents;
} }
@ -417,6 +526,8 @@ class Heatmap
*/ */
protected function getAllModulesByGroup() protected function getAllModulesByGroup()
{ {
global $config;
$filter_group = ''; $filter_group = '';
if (empty($this->filter) === false && current($this->filter) != -1) { if (empty($this->filter) === false && current($this->filter) != -1) {
$filter_group = 'AND am.id_module_group IN ('.implode(',', $this->filter).')'; $filter_group = 'AND am.id_module_group IN ('.implode(',', $this->filter).')';
@ -427,16 +538,115 @@ class Heatmap
$filter_name = 'AND nombre LIKE "%'.$this->search.'%"'; $filter_name = 'AND nombre LIKE "%'.$this->search.'%"';
} }
$id_user_groups = '';
if (users_is_admin() === false) {
$user_groups = array_keys(users_get_groups($config['user'], 'AR', false));
if (empty($user_groups) === false) {
$id_user_groups = sprintf(
'INNER JOIN tagente a ON a.id_agente = ae.id_agente
AND a.id_grupo IN (%s)',
implode(',', $user_groups)
);
}
}
// All modules. // All modules.
$sql = sprintf( $sql = sprintf(
'SELECT am.id_agente_modulo AS id, ae.estado AS `status`, am.id_module_group AS id_grupo, 'SELECT am.id_agente_modulo AS id, ae.estado AS `status`, am.id_module_group AS id_grupo,
ae.last_status_change FROM tagente_modulo am ae.last_status_change FROM tagente_modulo am
INNER JOIN tagente_estado ae ON am.id_agente_modulo = ae.id_agente_modulo INNER JOIN tagente_estado ae ON am.id_agente_modulo = ae.id_agente_modulo
%s
WHERE am.disabled = 0 %s %s GROUP BY am.id_module_group, am.id_agente_modulo', WHERE am.disabled = 0 %s %s GROUP BY am.id_module_group, am.id_agente_modulo',
$id_user_groups,
$filter_group, $filter_group,
$filter_name $filter_name
); );
if (is_metaconsole() === true) {
$nodes = metaconsole_get_connections();
$cont = 0;
$result = [];
foreach ($nodes as $node) {
try {
$nd = new Node($node['id']);
$nd->connect();
$modules = db_get_all_rows_sql($sql);
// Module status.
foreach ($modules as $key => $module) {
$status = '';
switch ($module['status']) {
case AGENT_MODULE_STATUS_CRITICAL_BAD:
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
case 1:
case 100:
$status = 'critical';
break;
case AGENT_MODULE_STATUS_NORMAL:
case AGENT_MODULE_STATUS_NORMAL_ALERT:
case 0:
case 300:
$status = 'normal';
break;
case AGENT_MODULE_STATUS_WARNING:
case AGENT_MODULE_STATUS_WARNING_ALERT:
case 2:
case 200:
$status = 'warning';
break;
default:
case AGENT_MODULE_STATUS_UNKNOWN:
case 3:
$status = 'unknown';
break;
case AGENT_MODULE_STATUS_NOT_INIT:
case 5:
$status = 'notinit';
break;
}
if ($module['last_status_change'] != 0) {
$seconds = (time() - $module['last_status_change']);
if ($seconds >= SECONDS_1DAY) {
$status .= '_10';
} else if ($seconds >= 77760) {
$status .= '_9';
} else if ($seconds >= 69120) {
$status .= '_8';
} else if ($seconds >= 60480) {
$status .= '_7';
} else if ($seconds >= 51840) {
$status .= '_6';
} else if ($seconds >= 43200) {
$status .= '_5';
} else if ($seconds >= 34560) {
$status .= '_4';
} else if ($seconds >= 25920) {
$status .= '_3';
} else if ($seconds >= 17280) {
$status .= '_2';
} else if ($seconds >= 8640) {
$status .= '_1';
}
}
$result[$cont] = $module;
$result[$cont]['status'] = $status;
$result[$cont]['server'] = $node['id'];
++$cont;
}
} catch (\Exception $e) {
$nd->disconnect();
} finally {
$nd->disconnect();
}
}
} else {
$result = db_get_all_rows_sql($sql); $result = db_get_all_rows_sql($sql);
// Module status. // Module status.
@ -503,6 +713,7 @@ class Heatmap
$result[$key]['status'] = $status; $result[$key]['status'] = $status;
} }
}
return $result; return $result;
} }
@ -515,6 +726,8 @@ class Heatmap
*/ */
protected function getAllModulesByTag() protected function getAllModulesByTag()
{ {
global $config;
$filter_tag = ''; $filter_tag = '';
if (empty($this->filter) === false && $this->filter[0] !== '0') { if (empty($this->filter) === false && $this->filter[0] !== '0') {
$tags = implode(',', $this->filter); $tags = implode(',', $this->filter);
@ -526,16 +739,115 @@ class Heatmap
$filter_name = 'AND nombre LIKE "%'.$this->search.'%"'; $filter_name = 'AND nombre LIKE "%'.$this->search.'%"';
} }
$id_user_groups = '';
if (users_is_admin() === false) {
$user_groups = array_keys(users_get_groups($config['user'], 'AR', false));
if (empty($user_groups) === false) {
$id_user_groups = sprintf(
'INNER JOIN tagente a ON a.id_agente = ae.id_agente
AND a.id_grupo IN (%s)',
implode(',', $user_groups)
);
}
}
// All modules. // All modules.
$sql = sprintf( $sql = sprintf(
'SELECT ae.id_agente_modulo AS id, ae.estado AS `status`, tm.id_tag AS id_grupo, 'SELECT ae.id_agente_modulo AS id, ae.estado AS `status`, tm.id_tag AS id_grupo,
ae.last_status_change FROM tagente_estado ae ae.last_status_change FROM tagente_estado ae
%s
INNER JOIN ttag_module tm ON tm.id_agente_modulo = ae.id_agente_modulo INNER JOIN ttag_module tm ON tm.id_agente_modulo = ae.id_agente_modulo
WHERE 1=1 %s %s GROUP BY tm.id_tag, ae.id_agente_modulo', WHERE 1=1 %s %s GROUP BY ae.id_agente_modulo',
$id_user_groups,
$filter_tag, $filter_tag,
$filter_name $filter_name
); );
if (is_metaconsole() === true) {
$nodes = metaconsole_get_connections();
$result = [];
$cont = 0;
foreach ($nodes as $node) {
try {
$nd = new Node($node['id']);
$nd->connect();
$modules = db_get_all_rows_sql($sql);
// Module status.
foreach ($modules as $key => $module) {
$status = '';
switch ($module['status']) {
case AGENT_MODULE_STATUS_CRITICAL_BAD:
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
case 1:
case 100:
$status = 'critical';
break;
case AGENT_MODULE_STATUS_NORMAL:
case AGENT_MODULE_STATUS_NORMAL_ALERT:
case 0:
case 300:
$status = 'normal';
break;
case AGENT_MODULE_STATUS_WARNING:
case AGENT_MODULE_STATUS_WARNING_ALERT:
case 2:
case 200:
$status = 'warning';
break;
default:
case AGENT_MODULE_STATUS_UNKNOWN:
case 3:
$status = 'unknown';
break;
case AGENT_MODULE_STATUS_NOT_INIT:
case 5:
$status = 'notinit';
break;
}
if ($module['last_status_change'] != 0) {
$seconds = (time() - $module['last_status_change']);
if ($seconds >= SECONDS_1DAY) {
$status .= '_10';
} else if ($seconds >= 77760) {
$status .= '_9';
} else if ($seconds >= 69120) {
$status .= '_8';
} else if ($seconds >= 60480) {
$status .= '_7';
} else if ($seconds >= 51840) {
$status .= '_6';
} else if ($seconds >= 43200) {
$status .= '_5';
} else if ($seconds >= 34560) {
$status .= '_4';
} else if ($seconds >= 25920) {
$status .= '_3';
} else if ($seconds >= 17280) {
$status .= '_2';
} else if ($seconds >= 8640) {
$status .= '_1';
}
}
$result[$cont] = $module;
$result[$cont]['status'] = $status;
$result[$cont]['server'] = $node['id'];
++$cont;
}
} catch (\Exception $e) {
$nd->disconnect();
} finally {
$nd->disconnect();
}
}
} else {
$result = db_get_all_rows_sql($sql); $result = db_get_all_rows_sql($sql);
// Module status. // Module status.
@ -602,6 +914,7 @@ class Heatmap
$result[$key]['status'] = $status; $result[$key]['status'] = $status;
} }
}
return $result; return $result;
} }
@ -614,20 +927,121 @@ class Heatmap
*/ */
protected function getAllModulesByAgents() protected function getAllModulesByAgents()
{ {
global $config;
$filter_name = ''; $filter_name = '';
if (empty($this->search) === false) { if (empty($this->search) === false) {
$filter_name = 'AND nombre LIKE "%'.$this->search.'%"'; $filter_name = 'AND nombre LIKE "%'.$this->search.'%"';
} }
$id_user_groups = '';
if (users_is_admin() === false) {
$user_groups = array_keys(users_get_groups($config['user'], 'AR', false));
if (empty($user_groups) === false) {
$id_user_groups = sprintf(
'INNER JOIN tagente a ON a.id_agente = ae.id_agente
AND a.id_grupo IN (%s)',
implode(',', $user_groups)
);
}
}
// All modules. // All modules.
$sql = sprintf( $sql = sprintf(
'SELECT am.id_agente_modulo AS id, ae.estado AS `status`, am.id_agente AS id_grupo, 'SELECT am.id_agente_modulo AS id, ae.estado AS `status`, am.id_agente AS id_grupo,
ae.last_status_change FROM tagente_modulo am ae.last_status_change FROM tagente_modulo am
INNER JOIN tagente_estado ae ON am.id_agente_modulo = ae.id_agente_modulo INNER JOIN tagente_estado ae ON am.id_agente_modulo = ae.id_agente_modulo
%s
WHERE am.disabled = 0 %s GROUP BY ae.id_agente_modulo ORDER BY id_grupo', WHERE am.disabled = 0 %s GROUP BY ae.id_agente_modulo ORDER BY id_grupo',
$id_user_groups,
$filter_name $filter_name
); );
if (is_metaconsole() === true) {
$result = [];
$nodes = metaconsole_get_connections();
$cont = 0;
foreach ($nodes as $node) {
try {
$nd = new Node($node['id']);
$nd->connect();
$modules = db_get_all_rows_sql($sql);
// Module status.
foreach ($modules as $key => $module) {
$status = '';
switch ($module['status']) {
case AGENT_MODULE_STATUS_CRITICAL_BAD:
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
case 1:
case 100:
$status = 'critical';
break;
case AGENT_MODULE_STATUS_NORMAL:
case AGENT_MODULE_STATUS_NORMAL_ALERT:
case 0:
case 300:
$status = 'normal';
break;
case AGENT_MODULE_STATUS_WARNING:
case AGENT_MODULE_STATUS_WARNING_ALERT:
case 2:
case 200:
$status = 'warning';
break;
default:
case AGENT_MODULE_STATUS_UNKNOWN:
case 3:
$status = 'unknown';
break;
case AGENT_MODULE_STATUS_NOT_INIT:
case 5:
$status = 'notinit';
break;
}
if ($module['last_status_change'] != 0) {
$seconds = (time() - $module['last_status_change']);
if ($seconds >= SECONDS_1DAY) {
$status .= '_10';
} else if ($seconds >= 77760) {
$status .= '_9';
} else if ($seconds >= 69120) {
$status .= '_8';
} else if ($seconds >= 60480) {
$status .= '_7';
} else if ($seconds >= 51840) {
$status .= '_6';
} else if ($seconds >= 43200) {
$status .= '_5';
} else if ($seconds >= 34560) {
$status .= '_4';
} else if ($seconds >= 25920) {
$status .= '_3';
} else if ($seconds >= 17280) {
$status .= '_2';
} else if ($seconds >= 8640) {
$status .= '_1';
}
}
$result[$cont] = $module;
$result[$cont]['status'] = $status;
$result[$cont]['server'] = $node['id'];
++$cont;
}
} catch (\Exception $e) {
$nd->disconnect();
$result = [];
} finally {
$nd->disconnect();
}
}
} else {
$result = db_get_all_rows_sql($sql); $result = db_get_all_rows_sql($sql);
// Module status. // Module status.
@ -694,6 +1108,7 @@ class Heatmap
$result[$key]['status'] = $status; $result[$key]['status'] = $status;
} }
}
return $result; return $result;
} }
@ -790,7 +1205,6 @@ class Heatmap
{ {
$yAxis = sqrt(($total / $relation)); $yAxis = sqrt(($total / $relation));
return $yAxis; return $yAxis;
} }
@ -801,7 +1215,7 @@ class Heatmap
* *
* @return boolean True allowed, false not. * @return boolean True allowed, false not.
*/ */
public function ajaxMethod(string $method):bool public function ajaxMethod(string $method): bool
{ {
return in_array($method, $this->AJAXMethods); return in_array($method, $this->AJAXMethods);
} }
@ -847,8 +1261,13 @@ class Heatmap
$contY = 0; $contY = 0;
$cont = 1; $cont = 1;
foreach ($result as $value) { foreach ($result as $value) {
$name = $value['id'];
if (empty($value['server']) === false) {
$name .= '|'.$value['server'];
}
echo '<rect id="'.$this->randomId.'_'.$cont.'" class="'.$value['status'].' hover" echo '<rect id="'.$this->randomId.'_'.$cont.'" class="'.$value['status'].' hover"
width="1" height="1" x ="'.$contX.' "y="'.$contY.'" name="'.$value['id'].'" />'; width="1" height="1" x ="'.$contX.' "y="'.$contY.'" name="'.$name.'" />';
$contX++; $contX++;
if ($contX >= $Xaxis) { if ($contX >= $Xaxis) {
@ -869,7 +1288,9 @@ class Heatmap
<script type="text/javascript"> <script type="text/javascript">
$('rect').click(function() { $('rect').click(function() {
const type = <?php echo $this->type; ?>; const type = <?php echo $this->type; ?>;
const id = $(`#${this.id}`).attr("name"); const name = $(`#${this.id}`).attr("name");
const id = name.split('|')[0];
const server = name.split('|')[1];
$("#info_dialog").dialog({ $("#info_dialog").dialog({
resizable: true, resizable: true,
@ -888,6 +1309,7 @@ class Heatmap
getInfo: 1, getInfo: 1,
type: type, type: type,
id: id, id: id,
id_server: server,
}, },
dataType: 'html', dataType: 'html',
success: function(data) { success: function(data) {
@ -900,7 +1322,7 @@ class Heatmap
}); });
</script> </script>
<?php <?php
if (count($groups) > 1 && $this->group === 1) { if (count($groups) > 1 && $this->group === 1 && $this->dashboard === false) {
$x_back = 0; $x_back = 0;
$y_back = 0; $y_back = 0;
@ -1099,7 +1521,7 @@ class Heatmap
echo '</svg>'; echo '</svg>';
// Dialog. // Dialog.
echo '<div id="info_dialog" style="padding:15px" class="invisible"></div>'; echo '<div id="info_dialog"></div>';
} }

View File

@ -21,7 +21,7 @@
* Pandora build version and version * Pandora build version and version
*/ */
$build_version = 'PC230327'; $build_version = 'PC230327';
$pandora_version = 'v7.0NG.769'; $pandora_version = 'v7.0NG.770';
// Do not overwrite default timezone set if defined. // Do not overwrite default timezone set if defined.
$script_tz = @date_default_timezone_get(); $script_tz = @date_default_timezone_get();

View File

@ -281,6 +281,7 @@ function menu_print_menu(&$menu)
if (($sec2 == $subsec2 || $allsec2 == $subsec2 if (($sec2 == $subsec2 || $allsec2 == $subsec2
|| $selected_submenu2) && isset($sub[$subsec2]['options']) || $selected_submenu2) && isset($sub[$subsec2]['options'])
&& (get_parameter_get($sub[$subsec2]['options']['name']) == $sub[$subsec2]['options']['value']) && (get_parameter_get($sub[$subsec2]['options']['name']) == $sub[$subsec2]['options']['value'])
&& $main['id'] !== 'fav-menu'
) { ) {
// If the subclass is selected and there are options and that options value is true. // If the subclass is selected and there are options and that options value is true.
$class .= 'submenu_selected selected'; $class .= 'submenu_selected selected';
@ -288,7 +289,7 @@ function menu_print_menu(&$menu)
$menu2_selected = $sub['id']; $menu2_selected = $sub['id'];
$selected = true; $selected = true;
$visible = true; $visible = true;
} else if (($sec2 === $subsec2 || $allsec2 === $subsec2 || $selected_submenu2 === true) && isset($sub[$subsec2]['options']) === false) { } else if (($sec2 === $subsec2 || $allsec2 === $subsec2 || $selected_submenu2 === true) && isset($sub[$subsec2]['options']) === false && $main['id'] !== 'fav-menu') {
$class .= 'submenu_selected selected'; $class .= 'submenu_selected selected';
$selected = true; $selected = true;
$menu_selected = true; $menu_selected = true;
@ -410,7 +411,7 @@ function menu_print_menu(&$menu)
$class = 'sub_subMenu'; $class = 'sub_subMenu';
if ($key == $sec2) { if ($key == $sec2 && $main['id'] !== 'fav-menu') {
$class .= ' selected'; $class .= ' selected';
} }

View File

@ -1562,3 +1562,36 @@ function showManualThresholds(element) {
$(".dashboard-input-threshold-critical").addClass("invisible_important"); $(".dashboard-input-threshold-critical").addClass("invisible_important");
} }
} }
/**
* @return {void}
*/
// eslint-disable-next-line no-unused-vars
function type_change() {
var type = document.getElementById("type").value;
switch (type) {
case "3":
$("#li_tags").hide();
$("#li_groups").hide();
$("#li_module_groups").hide();
break;
case "2":
$("#li_tags").hide();
$("#li_groups").hide();
$("#li_module_groups").show();
break;
case "1":
$("#li_tags").show();
$("#li_groups").hide();
$("#li_module_groups").hide();
break;
default:
case "0":
$("#li_tags").hide();
$("#li_groups").show();
$("#li_module_groups").hide();
break;
}
}

View File

@ -426,6 +426,10 @@ class Widget
$className .= '\\'.$name; $className .= '\\'.$name;
break; break;
case 'heatmap':
$className .= '\HeatmapWidget';
break;
default: default:
$className = false; $className = false;
break; break;

View File

@ -0,0 +1,478 @@
<?php
/**
* Widget Heatmap Pandora FMS Console
*
* @category Console Class
* @package Pandora FMS
* @subpackage Widget Heatmap
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2023 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
namespace PandoraFMS\Dashboard;
global $config;
require_once $config['homedir'].'/include/class/Heatmap.class.php';
use PandoraFMS\Heatmap;
/**
* Heatmap Widgets.
*/
class HeatmapWidget extends Widget
{
/**
* Name widget.
*
* @var string
*/
protected $name;
/**
* Title widget.
*
* @var string
*/
protected $title;
/**
* Page widget;
*
* @var string
*/
protected $page;
/**
* Class name widget.
*
* @var [type]
*/
protected $className;
/**
* Values options for each widget.
*
* @var [type]
*/
protected $values;
/**
* Configuration required.
*
* @var boolean
*/
protected $configurationRequired;
/**
* Error load widget.
*
* @var boolean
*/
protected $loadError;
/**
* Width.
*
* @var integer
*/
protected $width;
/**
* Heigth.
*
* @var integer
*/
protected $height;
/**
* Dashboard ID.
*
* @var integer
*/
protected $dashboardId;
/**
* Cell ID.
*
* @var integer
*/
protected $cellId;
/**
* Construct.
*
* @param integer $cellId Cell ID.
* @param integer $dashboardId Dashboard ID.
* @param integer $widgetId Widget ID.
* @param integer|null $width New width.
* @param integer|null $height New height.
*/
public function __construct(
int $cellId,
int $dashboardId=0,
int $widgetId=0,
?int $width=0,
?int $height=0
) {
global $config;
// Includes.
// WARNING: Do not edit. This chunk must be in the constructor.
parent::__construct(
$cellId,
$dashboardId,
$widgetId
);
// Width.
$this->width = $width;
// Height.
$this->height = $height;
// Cell Id.
$this->cellId = $cellId;
// Widget ID.
$this->widgetId = $widgetId;
// Dashboard ID.
$this->dashboardId = $dashboardId;
// Options.
$this->values = $this->decoders($this->getOptionsWidget());
// Page.
$this->page = basename(__FILE__);
// ClassName.
$class = new \ReflectionClass($this);
$this->className = $class->getShortName();
// Title.
$this->title = __('Heatmap');
// Name.
if (empty($this->name) === true) {
$this->name = 'heatmap';
}
}
/**
* Decoders hack for retrocompability.
*
* @param array $decoder Values.
*
* @return array Returns the values with the correct key.
*/
public function decoders(array $decoder): array
{
$values = [];
// Retrieve global - common inputs.
$values = parent::decoders($decoder);
if (isset($decoder['search']) === true) {
$values['search'] = $decoder['search'];
}
if (isset($decoder['type']) === true) {
$values['type'] = $decoder['type'];
}
if (isset($decoder['groups']) === true) {
$values['groups'] = $decoder['groups'];
}
if (isset($decoder['tags']) === true) {
$values['tags'] = $decoder['tags'];
}
if (isset($decoder['module_groups']) === true) {
$values['module_groups'] = $decoder['module_groups'];
}
return $values;
}
/**
* Generates inputs for form (specific).
*
* @return array Of inputs.
*
* @throws Exception On error.
*/
public function getFormInputs(): array
{
global $config;
// Retrieve global - common inputs.
$inputs = parent::getFormInputs();
$values = $this->values;
// Search.
$inputs[] = [
'label' => \__('Search'),
'arguments' => [
'name' => 'search',
'type' => 'text',
'class' => 'event-widget-input',
'value' => $values['search'],
'return' => true,
'size' => 30,
],
];
$inputs[] = [
'label' => __('Type'),
'arguments' => [
'type' => 'select',
'fields' => [
0 => __('Group agents'),
1 => __('Group modules by tag'),
2 => __('Group modules by module group'),
3 => __('Group modules by agents'),
],
'name' => 'type',
'selected' => $values['type'],
'script' => 'type_change()',
'return' => true,
],
];
// Filters.
$inputs[] = [
'label' => __('Groups'),
'style' => ($values['type'] === '0') ? '' : 'display:none',
'id' => 'li_groups',
'arguments' => [
'type' => 'select_groups',
'name' => 'groups[]',
'returnAllGroup' => true,
'privilege' => 'AR',
'selected' => explode(',', $values['groups'][0]),
'return' => true,
'multiple' => true,
],
];
if (tags_has_user_acl_tags($config['id_user']) === false) {
$tags = db_get_all_rows_sql(
'SELECT id_tag, name FROM ttag WHERE id_tag ORDER BY name'
);
} else {
$user_tags = tags_get_user_tags($config['id_user'], 'AR');
if (empty($user_tags) === false) {
$id_user_tags = array_keys($user_tags);
$tags = db_get_all_rows_sql(
'SELECT id_tag, name FROM ttag
WHERE id_tag IN ('.implode(',', $id_user_tags).')
ORDER BY name'
);
} else {
$tags = db_get_all_rows_sql(
'SELECT id_tag, name FROM ttag WHERE id_tag ORDER BY name'
);
}
}
$inputs[] = [
'label' => __('Tag'),
'style' => ($values['type'] === '1') ? '' : 'display:none',
'id' => 'li_tags',
'arguments' => [
'type' => 'select',
'fields' => $tags,
'name' => 'tags[]',
'selected' => explode(',', $values['tags'][0]),
'return' => true,
'multiple' => true,
],
];
$module_groups_aux = db_get_all_rows_sql(
'SELECT id_mg, name FROM tmodule_group ORDER BY name'
);
$module_groups = [];
foreach ($module_groups_aux as $key => $module_group) {
$module_groups[$module_group['id_mg']] = $module_group['name'];
}
$inputs[] = [
'label' => __('Module group'),
'style' => ($values['type'] === '2') ? '' : 'display:none',
'id' => 'li_module_groups',
'arguments' => [
'type' => 'select',
'fields' => $module_groups,
'name' => 'module_groups[]',
'selected' => explode(',', $values['module_groups'][0]),
'return' => true,
'multiple' => true,
'nothing' => __('Not assigned'),
'nothing_value' => 0,
],
];
return $inputs;
}
/**
* Get Post for widget.
*
* @return array
*/
public function getPost(): array
{
// Retrieve global - common inputs.
$values = parent::getPost();
$values['search'] = \get_parameter('search', '');
$values['type'] = \get_parameter('type', 0);
switch ((int) $values['type']) {
case 2:
$values['module_groups'] = \get_parameter('module_groups', 0);
break;
case 1:
$values['tags'] = \get_parameter('tags', 0);
break;
case 0:
$values['groups'] = \get_parameter('groups', 0);
break;
default:
// Do nothing.
break;
}
return $values;
}
/**
* Get description.
*
* @return string.
*/
public static function getDescription()
{
return __('Heatmap');
}
/**
* Get Name.
*
* @return string.
*/
public static function getName()
{
return 'heatmap';
}
/**
* Get size Modal Configuration.
*
* @return array
*/
public function getSizeModalConfiguration(): array
{
$size = [
'width' => 500,
'height' => 300,
];
return $size;
}
/**
* Draw widget.
*
* @return string;
*/
public function load()
{
global $config;
\ui_require_css_file('heatmap', 'include/styles/', true);
$values = $this->values;
$search = (empty($values['search']) === false) ? $values['search'] : '';
$type = (empty($values['type']) === false) ? $values['type'] : 0;
$filter = [];
if (isset($values['groups'])) {
$filter = explode(',', $values['groups'][0]);
}
if (isset($values['tags'])) {
$filter = explode(',', $values['tags'][0]);
}
if (isset($values['module_groups'])) {
$filter = explode(',', $values['module_groups'][0]);
}
// Control call flow.
$heatmap = new Heatmap($type, $filter, null, 300, 400, 200, $search, 0, true);
// AJAX controller.
if (is_ajax() === true) {
$method = get_parameter('method');
if ($method === 'drawWidget') {
// Run.
$heatmap->run();
} else {
if (method_exists($heatmap, $method) === true) {
if ($heatmap->ajaxMethod($method) === true) {
$heatmap->{$method}();
} else {
echo 'Unavailable method';
}
} else {
echo 'Method not found';
}
// Stop any execution.
exit;
}
} else {
// Run.
$heatmap->run();
// Dialog.
echo '<div id="config_dialog" style="padding:15px" class="invisible"></div>';
}
return '';
}
}

View File

@ -130,7 +130,7 @@
</div> </div>
<div style='padding-bottom: 50px'> <div style='padding-bottom: 50px'>
<?php <?php
$version = '7.0NG.769'; $version = '7.0NG.770';
$build = '230327'; $build = '230327';
$banner = "v$version Build $build"; $banner = "v$version Build $build";
error_reporting(0); error_reporting(0);

View File

@ -41,6 +41,7 @@ if ($agent_a === false && $agent_w === false) {
} }
require_once $config['homedir'].'/include/class/Heatmap.class.php'; require_once $config['homedir'].'/include/class/Heatmap.class.php';
use PandoraFMS\Heatmap;
$pure = (bool) get_parameter('pure', false); $pure = (bool) get_parameter('pure', false);
$type = get_parameter('type', 0); $type = get_parameter('type', 0);
@ -61,6 +62,8 @@ if ($group_sent === true) {
$group = (int) get_parameter('group', true); $group = (int) get_parameter('group', true);
} }
$dashboard = (bool) get_parameter('dashboard', false);
$is_ajax = is_ajax(); $is_ajax = is_ajax();
if ($is_ajax === false && $pure === false) { if ($is_ajax === false && $pure === false) {
$viewtab['config'] = '<a id="config" href="">'.html_print_image( $viewtab['config'] = '<a id="config" href="">'.html_print_image(
@ -191,6 +194,7 @@ if ($is_ajax === false && $pure === true) {
html_print_input_hidden('type', $type); html_print_input_hidden('type', $type);
html_print_input_hidden('search', $search); html_print_input_hidden('search', $search);
html_print_input_hidden('filter', implode(',', $filter)); html_print_input_hidden('filter', implode(',', $filter));
html_print_input_hidden('dashboard', $dashboard);
echo '</form>'; echo '</form>';
echo '</div>'; echo '</div>';
echo '</div>'; echo '</div>';
@ -229,7 +233,7 @@ if ($is_ajax === false && $pure === true) {
// Control call flow. // Control call flow.
try { try {
// Heatmap construct. // Heatmap construct.
$heatmap = new Heatmap($type, $filter, $randomId, $refresh, $width, $height, $search, $group); $heatmap = new Heatmap($type, $filter, $randomId, $refresh, $width, $height, $search, $group, $dashboard);
} catch (Exception $e) { } catch (Exception $e) {
if (is_ajax() === true) { if (is_ajax() === true) {
echo json_encode(['error' => '[Heatmap]'.$e->getMessage() ]); echo json_encode(['error' => '[Heatmap]'.$e->getMessage() ]);

View File

@ -618,7 +618,7 @@ if ($favorite_menu !== false) {
$sub[$section]['text'] = __(str_replace('_', ' ', $section)); $sub[$section]['text'] = __(str_replace('_', ' ', $section));
$sub[$section]['type'] = 'direct'; $sub[$section]['type'] = 'direct';
$sub[$section]['subtype'] = 'nolink'; $sub[$section]['subtype'] = 'nolink';
$sub[$section]['id'] = $row['section']; $sub[$section]['id'] = $row['section'].'-fav-menu';
$sub2[$row['url']]['text'] = io_safe_output($row['label']); $sub2[$row['url']]['text'] = io_safe_output($row['label']);
$sub[$section]['sub2'] = $sub2; $sub[$section]['sub2'] = $sub2;

View File

@ -2,8 +2,8 @@
# Pandora FMS Console # Pandora FMS Console
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name httpd %define httpd_name httpd

View File

@ -2,8 +2,8 @@
# Pandora FMS Console # Pandora FMS Console
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name httpd %define httpd_name httpd

View File

@ -2,8 +2,8 @@
# Pandora FMS Console # Pandora FMS Console
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
%define httpd_name httpd %define httpd_name httpd
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name apache2 %define httpd_name apache2

View File

@ -9,7 +9,7 @@
# This code is licensed under GPL 2.0 license. # This code is licensed under GPL 2.0 license.
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.769" PI_VERSION="7.0NG.770"
FORCE=0 FORCE=0
DESTDIR="" DESTDIR=""
LOG_TIMESTAMP=`date +"%Y/%m/%d %H:%M:%S"` LOG_TIMESTAMP=`date +"%Y/%m/%d %H:%M:%S"`

View File

@ -1,5 +1,5 @@
package: pandorafms-server package: pandorafms-server
Version: 7.0NG.769-230327 Version: 7.0NG.770
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.769-230327" pandora_version="7.0NG.770"
package_cpan=0 package_cpan=0
package_pandora=1 package_pandora=1

View File

@ -1,7 +1,7 @@
############################################################################# #############################################################################
# Pandora FMS Server Parameters # Pandora FMS Server Parameters
# Pandora FMS, the Flexible Monitoring System. # Pandora FMS, the Flexible Monitoring System.
# Version 7.0NG.769 # Version 7.0NG.770
# Licensed under GPL license v2, # Licensed under GPL license v2,
# (c) 2003-2021 Artica Soluciones Tecnologicas # (c) 2003-2021 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -45,7 +45,7 @@ our @EXPORT = qw(
); );
# version: Defines actual version of Pandora Server for this module only # version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.769"; my $pandora_version = "7.0NG.770";
my $pandora_build = "230327"; my $pandora_build = "230327";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;

View File

@ -33,7 +33,7 @@ use base 'Exporter';
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only # version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.769"; my $pandora_version = "7.0NG.770";
my $pandora_build = "230327"; my $pandora_build = "230327";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;

View File

@ -3,8 +3,8 @@
# #
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

@ -3,8 +3,8 @@
# #
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.769 %define version 7.0NG.770
%define release 230327 %define release 1
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

@ -8,7 +8,7 @@
# This code is licensed under GPL 2.0 license. # This code is licensed under GPL 2.0 license.
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.769" PI_VERSION="7.0NG.770"
PI_BUILD="230327" PI_BUILD="230327"
MODE=$1 MODE=$1

View File

@ -35,7 +35,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB; use PandoraFMS::DB;
# version: define current version # version: define current version
my $version = "7.0NG.769 Build 230327"; my $version = "7.0NG.770 Build 230327";
# Pandora server configuration # Pandora server configuration
my %conf; my %conf;

View File

@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv; Encode::Locale::decode_argv;
# version: define current version # version: define current version
my $version = "7.0NG.769 Build 230327"; my $version = "7.0NG.770 Build 230327";
# save program name for logging # save program name for logging
my $progname = basename($0); my $progname = basename($0);