Merge remote-tracking branch 'origin/develop' into ent-2323-Modo-Debug-instantáneo

Update
This commit is contained in:
Jose Gonzalez 2020-10-15 12:27:59 +02:00
commit dc15125cd8
89 changed files with 1398 additions and 767 deletions

View File

@ -1,20 +1,27 @@
FROM centos:centos7
FROM centos:centos8
MAINTAINER Pandora FMS Team <info@pandorafms.com>
# Add Pandora FMS agent installer
ADD unix /tmp/pandora_agent/unix
ADD unix /opt/pandora/pandora_agent/unix
RUN export LC_ALL=C
RUN dnf install -y dnf-plugins-core; dnf config-manager --set-enabled PowerTools
# Install dependencies
RUN yum -y install \
RUN dnf -y install \
epel-release \
unzip \
perl \
python3 \
sed \
"perl(Sys::Syslog)"
perl-YAML-Tiny \
"perl(Sys::Syslog)" \
&& dnf clean all
# Install Pandora FMS agent
RUN cd /tmp/pandora_agent/unix \
RUN cd /opt/pandora/pandora_agent/unix \
&& chmod +x pandora_agent_installer \
&& ./pandora_agent_installer --install
@ -41,8 +48,7 @@ if [ $TIMEZONE != "" ]; then\n \
\tln -sfn /usr/share/zoneinfo/$TIMEZONE /etc/localtime\n \
fi\n \
/etc/init.d/pandora_agent_daemon start\n \
rm -f $0\n \
tail -f /var/log/pandora/pandora_agent.log' \
tail -F /var/log/pandora/pandora_agent.log' \
>> /entrypoint.sh && \
chmod +x /entrypoint.sh

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent
# (c) 2006-2010 Artica Soluciones Tecnologicas
# Version 7.0NG.749
# Version 7.0NG.750
# 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.749-201006
Version: 7.0NG.750
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -22,9 +22,9 @@ fi
# DMG package version
if [ "$#" -ge 2 ]; then
VERSION="7.0NG.749"
VERSION="7.0NG.750"
else
VERSION="7.0NG.749"
VERSION="7.0NG.750"
fi
# Path for the generated DMG file

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -54,8 +54,8 @@ my $Sem = undef;
# Semaphore used to control the number of threads
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.749';
use constant AGENT_BUILD => '201006';
use constant AGENT_VERSION => '7.0NG.750';
use constant AGENT_BUILD => '201015';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -2,8 +2,8 @@
#Pandora FMS Linux Agent
#
%define name pandorafms_agent_unix
%define version 7.0NG.749
%define release 201006
%define version 7.0NG.750
%define release 1
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -2,8 +2,8 @@
#Pandora FMS Linux Agent
#
%define name pandorafms_agent_unix
%define version 7.0NG.749
%define release 201006
%define version 7.0NG.750
%define release 1
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -9,8 +9,8 @@
# Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license.
# **********************************************************************
PI_VERSION="7.0NG.749"
PI_BUILD="201006"
PI_VERSION="7.0NG.750"
PI_BUILD="201015"
OS_NAME=`uname -s`
FORCE=0

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent
# (c) 2006-2017 Artica Soluciones Tecnologicas
# Version 7.0NG.749
# Version 7.0NG.750
# 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

View File

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

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.749(Build 201006)")
#define PANDORA_VERSION ("7.0NG.750(Build 201015)")
string pandora_path;
string pandora_dir;

View File

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

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.749-201006
Version: 7.0NG.750
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -25,4 +25,10 @@ ALTER TABLE talert_actions ADD COLUMN `field20_recovery` TEXT NOT NULL DEFAULT "
ALTER TABLE `treport_content` add column `graph_render` tinyint(1) UNSIGNED NOT NULL default 0;
ALTER TABLE `treport_content_template` add column `graph_render` tinyint(1) UNSIGNED NOT NULL default 0;
ALTER TABLE `treport` ADD COLUMN `cover_page_render` tinyint(1) NOT NULL DEFAULT 1;
ALTER TABLE `treport` ADD COLUMN `index_render` tinyint(1) NOT NULL DEFAULT 1;
ALTER TABLE `treport_template` ADD COLUMN `cover_page_render` tinyint(1) NOT NULL DEFAULT 1;
ALTER TABLE `treport_template` ADD COLUMN `index_render` tinyint(1) NOT NULL DEFAULT 1;
COMMIT;

View File

@ -770,7 +770,8 @@ CREATE TABLE IF NOT EXISTS `treport_template` (
`custom_font` varchar(200) default NULL,
`metaconsole` tinyint(1) DEFAULT 0,
`agent_regex` varchar(600) NOT NULL default '',
`cover_page_render` tinyint(1) NOT NULL DEFAULT 1,
`index_render` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY(`id_report`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
@ -2228,13 +2229,15 @@ INSERT INTO tlog_graph_models VALUES (6, 'Pages&#x20;with&#x20;warnings',
INSERT INTO tlog_graph_models VALUES (7, 'Users&#x20;login',
'Starting&#x20;Session&#x20;&#92;d+&#92;&#x20;of&#x20;user&#x20;&#40;.*&#41;',
'user', 0);
-- -----------------------------------------------------
-- Add column in table `treport`
-- -----------------------------------------------------
ALTER TABLE `treport` ADD COLUMN `hidden` tinyint(1) NOT NULL DEFAULT 0;
ALTER TABLE `treport` ADD COLUMN `orientation` varchar(25) NOT NULL default 'vertical';
ALTER TABLE `treport` MODIFY COLUMN `hidden` tinyint(1) NULL DEFAULT '0' AFTER `non_interactive`;
ALTER TABLE `treport` ADD COLUMN `cover_page_render` tinyint(1) NOT NULL DEFAULT 1;
ALTER TABLE `treport` ADD COLUMN `index_render` tinyint(1) NOT NULL DEFAULT 1;
ALTER TABLE `trecon_task` ADD COLUMN `snmp_version` varchar(5) NOT NULL default '1';
ALTER TABLE `trecon_task` ADD COLUMN `snmp_auth_user` varchar(255) NOT NULL default '';

View File

@ -548,7 +548,24 @@ $table->data[0][1] .= '<b>'.__('Cascade protection').'</b>'.html_print_select(
$table->data[0][1] .= '&nbsp;&nbsp;'.__('Module').'&nbsp;'.html_print_select($modules, 'cascade_protection_module', $cascade_protection_module, '', '', 0, true);
$table->data[1][0] = __('Group');
$table->data[1][1] = html_print_select_groups(false, 'AR', false, 'group', $group, '', __('No change'), -1, true, false, true, '', false, 'width: 150px;');
$table->data[1][1] = '<div class="w290px inline">';
$table->data[1][1] .= html_print_select_groups(
false,
'AR',
false,
'group',
$group,
'',
__('No change'),
-1,
true,
false,
true,
'',
false,
'width: 150px;'
);
$table->data[1][1] .= '</div>';
$table->data[2][0] = __('Interval');

View File

@ -1,18 +1,28 @@
<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2010 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.
/**
* Reporting builder main.
*
* @category Options reports.
* @package Pandora FMS
* @subpackage Enterprise
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2007-2019 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.
* ============================================================================
*/
global $config;
// Login check
// Login check.
check_login();
if (! check_acl($config['id_user'], 0, 'RW')) {
@ -29,6 +39,7 @@ require_once $config['homedir'].'/include/functions_users.php';
$groups = users_get_groups();
switch ($action) {
default:
case 'new':
$actionButtonHtml = html_print_submit_button(
__('Save'),
@ -39,7 +50,6 @@ switch ($action) {
);
$hiddenFieldAction = 'save';
break;
case 'update':
case 'edit':
$actionButtonHtml = html_print_submit_button(
@ -59,7 +69,7 @@ $table->id = 'add_alert_table';
$table->class = 'databox filters';
$table->head = [];
if (is_metaconsole()) {
if (is_metaconsole() === true) {
$table->head[0] = __('Main data');
$table->head_colspan[0] = 4;
$table->headstyle[0] = 'text-align: center';
@ -70,7 +80,7 @@ $table->size = [];
$table->size = [];
$table->size[0] = '15%';
$table->size[1] = '90%';
if (!is_metaconsole()) {
if (is_metaconsole() === false) {
$table->style[0] = 'font-weight: bold; vertical-align: top;';
} else {
$table->style[0] = 'font-weight: bold;';
@ -89,14 +99,18 @@ $table->data['name'][1] = html_print_input_text(
);
$table->data['group'][0] = __('Group');
$write_groups = users_get_groups_for_select(false, 'AR', true, true, false, 'id_grupo');
$write_groups = users_get_groups_for_select(
false,
'AR',
true,
true,
false,
'id_grupo'
);
// If the report group is not among the RW groups (special permission) we add it
if (!isset($write_groups[$idGroupReport]) && $idGroupReport) {
// If the report group is not among the
// RW groups (special permission) we add it.
if (isset($write_groups[$idGroupReport]) === false && $idGroupReport) {
$write_groups[$idGroupReport] = groups_get_name($idGroupReport);
}
@ -123,7 +137,11 @@ if ($report_id_user == $config['id_user']
'group_edit' => __('The next group can edit the report'),
'user_edit' => __('Only the user and admin user can edit the report'),
];
$table->data['access'][0] = __('Write Access').ui_print_help_tip(__('For example, you want a report that the people of "All" groups can see but you want to edit only for you or your group.'), true);
$table->data['access'][0] = __('Write Access');
$table->data['access'][0] .= ui_print_help_tip(
__('For example, you want a report that the people of "All" groups can see but you want to edit only for you or your group.'),
true
);
$table->data['access'][1] = html_print_select(
$type_access,
'type_access',
@ -163,14 +181,19 @@ if ($enterpriseEnable) {
}
$table->data['interactive_report'][0] = __('Non interactive report');
$table->data['interactive_report'][1] = __('Yes').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button(
$table->data['interactive_report'][1] = __('Yes');
$table->data['interactive_report'][1] .= '&nbsp;&nbsp;&nbsp;';
$table->data['interactive_report'][1] .= html_print_radio_button(
'non_interactive',
1,
'',
$non_interactive_check,
true
).'&nbsp;&nbsp;';
$table->data['interactive_report'][1] .= __('No').'&nbsp;&nbsp;&nbsp;'.html_print_radio_button(
);
$table->data['interactive_report'][1] .= '&nbsp;&nbsp;';
$table->data['interactive_report'][1] .= __('No');
$table->data['interactive_report'][1] .= '&nbsp;&nbsp;&nbsp;';
$table->data['interactive_report'][1] .= html_print_radio_button(
'non_interactive',
0,
'',
@ -180,7 +203,32 @@ if ($enterpriseEnable) {
}
$table->data['description'][0] = __('Description');
$table->data['description'][1] = html_print_textarea('description', 5, 15, $description, '', true);
$table->data['description'][1] = html_print_textarea(
'description',
5,
15,
$description,
'',
true
);
if (enterprise_installed() === true) {
$table->data['cover'][0] = __('Generate cover page in PDF render');
$table->data['cover'][1] = html_print_checkbox_switch(
'cover_page_render',
1,
$cover_page_render,
true
);
$table->data['index'][0] = __('Generate index in PDF render');
$table->data['index'][1] = html_print_checkbox_switch(
'index_render',
1,
$index_render,
true
);
}
echo '<form class="" method="post">';
html_print_table($table);

View File

@ -1180,6 +1180,8 @@ switch ($action) {
$report_id_user = 0;
$type_access_selected = reports_get_type_access(false);
$id_group_edit = 0;
$cover_page_render = true;
$index_render = true;
break;
case 'item_editor':
@ -1215,6 +1217,12 @@ switch ($action) {
$report_id_user = get_parameter('report_id_user');
$non_interactive = get_parameter('non_interactive', 0);
$cover_page_render = get_parameter_switch(
'cover_page_render',
0
);
$index_render = get_parameter_switch('index_render', 0);
$custom_font = $config['custom_report_front_font'];
switch ($type_access_selected) {
@ -1241,12 +1249,14 @@ switch ($action) {
if ($action == 'update') {
if ($reportName != '' && $idGroupReport != '') {
$new_values = [
'name' => $reportName,
'id_group' => $idGroupReport,
'description' => $description,
'private' => $private,
'id_group_edit' => $id_group_edit,
'non_interactive' => $non_interactive,
'name' => $reportName,
'id_group' => $idGroupReport,
'description' => $description,
'private' => $private,
'id_group_edit' => $id_group_edit,
'non_interactive' => $non_interactive,
'cover_page_render' => $cover_page_render,
'index_render' => $index_render,
];
@ -1311,19 +1321,21 @@ switch ($action) {
$idOrResult = db_process_sql_insert(
'treport',
[
'name' => $reportName,
'id_group' => $idGroupReport,
'description' => $description,
'first_page' => $first_page,
'private' => $private,
'id_group_edit' => $id_group_edit,
'id_user' => $config['id_user'],
'metaconsole' => $metaconsole_report,
'non_interactive' => $non_interactive,
'custom_font' => $custom_font,
'custom_logo' => $logo,
'header' => $header,
'footer' => $footer,
'name' => $reportName,
'id_group' => $idGroupReport,
'description' => $description,
'first_page' => $first_page,
'private' => $private,
'id_group_edit' => $id_group_edit,
'id_user' => $config['id_user'],
'metaconsole' => $metaconsole_report,
'non_interactive' => $non_interactive,
'custom_font' => $custom_font,
'custom_logo' => $logo,
'header' => $header,
'footer' => $footer,
'cover_page_render' => $cover_page_render,
'index_render' => $index_render,
]
);
@ -2736,6 +2748,8 @@ switch ($action) {
$id_group_edit = $report['id_group_edit'];
$report_id_user = $report['id_user'];
$non_interactive = $report['non_interactive'];
$cover_page_render = $report['cover_page_render'];
$index_render = $report['index_render'];
break;
case 'delete':
@ -3106,22 +3120,23 @@ if ($enterpriseEnable) {
}
}
$urlB = 'index.php?sec=reporting&sec2=godmode/reporting/reporting_builder';
$buttons = [
'list_reports' => [
'active' => false,
'text' => '<a href="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&pure='.$pure.'">'.html_print_image('images/report_list.png', true, ['title' => __('Reports list')]).'</a>',
'text' => '<a href="'.$urlB.'&pure='.$pure.'">'.html_print_image('images/report_list.png', true, ['title' => __('Reports list')]).'</a>',
],
'main' => [
'active' => false,
'text' => '<a href="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&tab=main&action=edit&id_report='.$idReport.'&pure='.$pure.'">'.html_print_image('images/op_reporting.png', true, ['title' => __('Main data')]).'</a>',
'text' => '<a href="'.$urlB.'&tab=main&action=edit&id_report='.$idReport.'&pure='.$pure.'">'.html_print_image('images/op_reporting.png', true, ['title' => __('Main data')]).'</a>',
],
'list_items' => [
'active' => false,
'text' => '<a href="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&tab=list_items&action=edit&id_report='.$idReport.'&pure='.$pure.'">'.html_print_image('images/list.png', true, ['title' => __('List items')]).'</a>',
'text' => '<a href="'.$urlB.'&tab=list_items&action=edit&id_report='.$idReport.'&pure='.$pure.'">'.html_print_image('images/list.png', true, ['title' => __('List items')]).'</a>',
],
'item_editor' => [
'active' => false,
'text' => '<a href="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder&tab=item_editor&action=new&id_report='.$idReport.'&pure='.$pure.'">'.html_print_image('images/pen.png', true, ['title' => __('Item editor')]).'</a>',
'text' => '<a href="'.$urlB.'&tab=item_editor&action=new&id_report='.$idReport.'&pure='.$pure.'">'.html_print_image('images/pen.png', true, ['title' => __('Item editor')]).'</a>',
],
];

View File

@ -59,18 +59,10 @@ global $config;
check_login();
if (is_ajax()) {
enterprise_include_once('include/functions_cron.php');
$test_address = get_parameter('test_address', '');
$res = enterprise_hook(
'send_email_attachment',
[
$test_address,
__('This is an email test sent from Pandora FMS. If you can read this, your configuration works.'),
__('Testing Pandora FMS email'),
null,
]
$res = send_test_email(
$test_address
);
echo $res;
@ -479,7 +471,6 @@ function show_email_test(id) {
resizable: true,
draggable: true,
modal: true,
height: 175,
width: 450,
overlay: {
opacity: 0.5,
@ -497,7 +488,11 @@ function perform_email_test () {
data: "page=godmode/setup/setup_general&test_address="+test_address,
dataType: "html",
success: function(data) {
$('#email_test_sent_message').show();
if (parseInt(data) === 1) {
$('#email_test_sent_message').show();
} else {
$('#email_test_failure_message').show();
}
},
error: function() {
$('#email_test_failure_message').show();

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -272,6 +272,12 @@ if ($install_package) {
"Update version: $version of ".$product_name.' by '.$config['id_user']
);
// An update have been applied, clean phantomjs cache.
config_update_value(
'clean_phantomjs_cache',
1
);
$return['status'] = 'success';
echo json_encode($return);
return;

View File

@ -41,6 +41,17 @@ require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_tags.php';
$data_raw = get_parameter('data');
$data_decoded = json_decode(base64_decode($data_raw), true);
if (json_last_error() === JSON_ERROR_NONE) {
$data = urldecode($data_decoded['data']);
$session_id = urldecode($data_decoded['session_id']);
$data_combined = urldecode($data_decoded['data_combined']);
$data_module_list = urldecode($data_decoded['data_module_list']);
$type_graph_pdf = urldecode($data_decoded['type_graph_pdf']);
$viewport_width = urldecode($data_decoded['viewport_width']);
}
/**
* Echo to stdout a PhantomJS callback call.
@ -69,7 +80,7 @@ function echoPhantomCallback()
global $config;
// Try to initialize session using existing php session id.
$user = new PandoraFMS\User(['phpsessionid' => $_REQUEST['session_id']]);
$user = new PandoraFMS\User(['phpsessionid' => $session_id]);
if (check_login(false) === false) {
// Error handler.
?>
@ -97,12 +108,12 @@ if (check_login(false) === false) {
}
// Access granted.
$params = json_decode($_REQUEST['data'], true);
$params = json_decode($data, true);
// Metaconsole connection to the node.
$server_id = $params['server_id'];
if (is_metaconsole() && !empty($server_id)) {
if (is_metaconsole() === true && empty($server_id) === false) {
$server = metaconsole_get_connection_by_id($server_id);
// Error connecting.
if (metaconsole_connect($server) !== NOERR) {
@ -165,12 +176,12 @@ if (file_exists('languages/'.$user_language.'.mo') === true) {
$params['only_image'] = false;
$params['menu'] = false;
$params_combined = json_decode($_REQUEST['data_combined'], true);
$module_list = json_decode($_REQUEST['data_module_list'], true);
$type_graph_pdf = $_REQUEST['type_graph_pdf'];
$params_combined = json_decode($data_combined, true);
$module_list = json_decode($data_module_list, true);
$type_graph_pdf = $type_graph_pdf;
if (isset($params['vconsole']) === false || $params['vconsole'] === false) {
$params['width'] = (int) $_REQUEST['viewport_width'];
$params['width'] = (int) $viewport_width;
if ((isset($params['width']) === false
|| ($params['width'] <= 0))
) {

View File

@ -107,13 +107,13 @@ class ConsoleSupervisor
$this->verbose = $verbose;
if ($source === false) {
$this->enabled = false;
$this->notificationsEnabled = false;
$this->sourceId = null;
$this->targetGroups = null;
$this->targetUsers = null;
} else {
$this->enabled = (bool) $source['enabled'];
$this->notificationsEnabled = (bool) $source['enabled'];
$this->sourceId = $source['id'];
// Assign targets.
@ -251,8 +251,10 @@ class ConsoleSupervisor
{
global $config;
if ($this->enabled === false) {
// Feature not enabled.
$this->maintenanceOperations();
if ($this->notificationsEnabled === false) {
// Notifications not enabled.
return;
}
@ -490,6 +492,21 @@ class ConsoleSupervisor
}
/**
* Executes console maintenance operations. Executed ALWAYS through CRON.
*
* @return void
*/
public function maintenanceOperations()
{
/*
* Process cache clean if needed.
*/
$this->checkCleanPhantomCache();
}
/**
* Update targets for given notification using object targets.
*
@ -2105,6 +2122,14 @@ class ConsoleSupervisor
$fontpath = io_safe_output($config['fontpath']);
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// Windows.
$fontpath = $config['homedir'].'\include\fonts\\'.$fontpath;
} else {
$home = str_replace('\\', '/', $config['homedir']);
$fontpath = $home.'/include/fonts/'.$fontpath;
}
if (($fontpath == '')
|| (file_exists($fontpath) === false)
) {
@ -2589,4 +2614,30 @@ class ConsoleSupervisor
}
/**
* Clean Phantom cache if needed.
*
* @return void
*/
public function checkCleanPhantomCache()
{
global $config;
if ((int) $config['clean_phantomjs_cache'] !== 1) {
return;
}
$cache_dir = $config['homedir'].'/attachment/cache';
if (is_dir($cache_dir) === true) {
rrmdir($cache_dir);
}
// Clean process has ended.
config_update_value(
'clean_phantomjs_cache',
0
);
}
}

View File

@ -20,8 +20,8 @@
/**
* Pandora build version and version
*/
$build_version = 'PC201006';
$pandora_version = 'v7.0NG.749';
$build_version = 'PC201015';
$pandora_version = 'v7.0NG.750';
// Do not overwrite default timezone set if defined.
$script_tz = @date_default_timezone_get();

View File

@ -3973,8 +3973,22 @@ function series_type_graph_array($data, $show_elements_graph)
}
function generator_chart_to_pdf($type_graph_pdf, $params, $params_combined=false, $module_list=false)
{
/**
* Draw chart pdf.
*
* @param string $type_graph_pdf Type graph.
* @param array $params Params.
* @param boolean $params_combined Params only charts combined.
* @param boolean $module_list Array modules.
*
* @return string Img or base64.
*/
function generator_chart_to_pdf(
$type_graph_pdf,
$params,
$params_combined=false,
$module_list=false
) {
global $config;
if (is_metaconsole()) {
@ -4016,8 +4030,18 @@ function generator_chart_to_pdf($type_graph_pdf, $params, $params_combined=false
}
$session_id = session_id();
$cache_dir = $config['homedir'].'/attachment/cache';
$cmd = '"'.io_safe_output($config['phantomjs_bin']).DIRECTORY_SEPARATOR.'phantomjs" --ssl-protocol=any --ignore-ssl-errors=true "'.$file_js.'" '.' "'.$url.'"'.' "'.$type_graph_pdf.'"'.' "'.$params_encode_json.'"'.' "'.$params_combined.'"'.' "'.$module_list.'"'.' "'.$img_path.'"'.' "'.$width_img.'"'.' "'.$height_img.'"'.' "'.$session_id.'"'.' "'.$params['return_img_base_64'].'"';
$cmd = '"'.io_safe_output($config['phantomjs_bin']);
$cmd .= DIRECTORY_SEPARATOR.'phantomjs" ';
$cmd .= ' --disk-cache=true --disk-cache-path="'.$cache_dir.'"';
$cmd .= ' --max-disk-cache-size=10000 ';
$cmd .= ' --ssl-protocol=any --ignore-ssl-errors=true ';
$cmd .= '"'.$file_js.'" "'.$url.'" "'.$type_graph_pdf.'"';
$cmd .= ' "'.$params_encode_json.'" "'.$params_combined.'"';
$cmd .= ' "'.$module_list.'" "'.$img_path.'"';
$cmd .= ' "'.$width_img.'" "'.$height_img.'"';
$cmd .= ' "'.$session_id.'" "'.$params['return_img_base_64'].'"';
$result = null;
$retcode = null;
@ -4029,7 +4053,7 @@ function generator_chart_to_pdf($type_graph_pdf, $params, $params_combined=false
// To be used in alerts.
return $img_content;
} else {
// to be used in PDF files.
// To be used in PDF files.
$config['temp_images'][] = $img_path;
return '<img src="'.$img_url.'" />';
}
@ -5740,3 +5764,60 @@ function get_data_multiplier($unit)
return $multiplier;
}
/**
* Send test email to check email setups.
*
* @param string $to Target email account.
*
* @return integer Status of the email send task.
*/
function send_test_email(
string $to
) {
global $config;
$result = false;
try {
$transport = new Swift_SmtpTransport(
$config['email_smtpServer'],
$config['email_smtpPort']
);
$transport->setUsername($config['email_username']);
$transport->setPassword($config['email_password']);
if ($config['email_encryption']) {
$transport->setEncryption($config['email_encryption']);
}
$mailer = new Swift_Mailer($transport);
$message = new Swift_Message(io_safe_output(__('Testing Pandora FMS email')));
$message->setFrom(
[
$config['email_from_dir'] => io_safe_output(
$config['email_from_name']
),
]
);
$to = trim($to);
$message->setTo([$to => $to]);
$message->setBody(
__('This is an email test sent from Pandora FMS. If you can read this, your configuration works.'),
'text/html'
);
ini_restore('sendmail_from');
$result = $mailer->send($message);
} catch (Exception $e) {
error_log($e->getMessage());
db_pandora_audit('Cron jobs mail', $e->getMessage());
}
return $result;
}

View File

@ -2830,3 +2830,83 @@ function alerts_ui_update_or_create_actions($update=true)
$update ? __('Could not be updated') : __('Could not be created')
);
}
/**
* Retrieve all agent_modules with configured alerts filtered by group.
*
* @param integer|null $id_grupo Filter by group.
* @param boolean $recursion Filter by group recursive.
*
* @return array With agent module ids.
*/
function alerts_get_agent_modules(
?int $id_grupo,
bool $recursion=false
) : array {
if ($id_grupo === null) {
$agent_modules = db_get_all_rows_sql(
'SELECT distinct(atm.id_agent_module)
FROM talert_template_modules atm
INNER JOIN tagente_modulo am
ON am.id_agente_modulo = atm.id_agent_module
WHERE atm.disabled = 0'
);
} else if ($recursion !== true) {
$sql = sprintf(
'SELECT distinct(atm.id_agent_module)
FROM talert_template_modules atm
INNER JOIN tagente_modulo am
ON am.id_agente_modulo = atm.id_agent_module
INNER JOIN tagente ta
ON am.id_agente = ta.id_agente
LEFT JOIN tagent_secondary_group tasg
ON tasg.id_agent = ta.id_agente
WHERE atm.disabled = 0
AND (tasg.id_group = %d
OR ta.id_grupo = %d)
',
$id_grupo,
$id_grupo
);
$agent_modules = db_get_all_rows_sql($sql);
} else {
$groups = groups_get_children($id_grupo, true);
if (empty($groups) === false) {
$groups = array_reduce(
$groups,
function ($carry, $item) {
$carry[] = $item['id_grupo'];
return $carry;
},
[$id_grupo]
);
$sql = sprintf(
'SELECT distinct(atm.id_agent_module)
FROM talert_template_modules atm
INNER JOIN tagente_modulo am
ON am.id_agente_modulo = atm.id_agent_module
INNER JOIN tagente ta
ON am.id_agente = ta.id_agente
LEFT JOIN tagent_secondary_group tasg
ON tasg.id_agent = ta.id_agente
WHERE atm.disabled = 0
AND (tasg.id_group IN (%s)
OR ta.id_grupo IN (%s))
',
implode(',', $groups),
implode(',', $groups)
);
}
$agent_modules = db_get_all_rows_sql($sql);
}
if ($agent_modules === false) {
return [];
}
return $agent_modules;
}

View File

@ -1851,7 +1851,9 @@ function api_set_delete_agent($id, $thrash1, $other, $thrash3)
}
if (is_metaconsole()) {
if (!check_acl($config['id_user'], 0, 'PM')) {
if (!check_acl($config['id_user'], 0, 'PM')
&& !check_acl($config['id_user'], 0, 'AW')
) {
returnError('forbidden', 'string');
return;
}

View File

@ -1217,8 +1217,14 @@ function config_update_config()
$error_update[] = __('Default zoom graphs');
}
if (!config_update_value('graph_image_height', (int) get_parameter('graph_image_height', 280))) {
$error_update[] = __('Default height of the chart image');
if (!config_update_value(
'graph_image_height',
(int) get_parameter('graph_image_height', 130)
)
) {
$error_update[] = __(
'Default height of the chart image'
);
}
// --------------------------------------------------
@ -1324,7 +1330,7 @@ function config_update_config()
$error_update[] = __('HTML font size for SLA (em)');
}
if (!config_update_value('global_font_size_report', get_parameter('global_font_size_report', 14))) {
if (!config_update_value('global_font_size_report', get_parameter('global_font_size_report', 10))) {
$error_update[] = __('PDF font size (px)');
}
@ -1987,7 +1993,7 @@ function config_process_config()
}
if (!isset($config['font_size'])) {
config_update_value('font_size', 6);
config_update_value('font_size', 8);
}
if (!isset($config['limit_parameters_massive'])) {
@ -2057,17 +2063,9 @@ function config_process_config()
}
if (!isset($config['fontpath'])) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// Windows.
$fontpath = $config['homedir'].'\include\fonts\smallfont.ttf';
} else {
$home = str_replace('\\', '/', $config['homedir']);
$fontpath = $home.'/include/fonts/smallfont.ttf';
}
config_update_value(
'fontpath',
$fontpath
'opensans.ttf'
);
}
@ -2864,7 +2862,7 @@ function config_process_config()
}
if (!isset($config['graph_image_height'])) {
config_update_value('graph_image_height', 280);
config_update_value('graph_image_height', 130);
}
if (!isset($config['zoom_graph'])) {
@ -2919,17 +2917,20 @@ function config_process_config()
config_update_value('custom_report_info', 1);
}
// Juanma (06/05/2014) New feature: Custom front page for reports.
if (!isset($config['custom_report_front'])) {
config_update_value('custom_report_front', 0);
}
if (!isset($config['global_font_size_report'])) {
config_update_value('global_font_size_report', 10);
}
if (!isset($config['font_size_item_report'])) {
config_update_value('font_size_item_report', 2);
}
if (!isset($config['custom_report_front_font'])) {
config_update_value('custom_report_front_font', 'FreeSans.ttf');
config_update_value('custom_report_front_font', 'opensans.ttf');
}
if (!isset($config['custom_report_front_logo'])) {

View File

@ -512,8 +512,6 @@ function db_get_row_filter($table, $filter, $fields=false, $where_join='AND', $h
*
* @return mixed The selected field of the first row in a select statement.
*/
function db_get_sql($sql, $field=0, $search_history_db=false)
{
$result = db_get_all_rows_sql($sql, $search_history_db);
@ -567,25 +565,34 @@ function db_get_all_rows_sql($sql, $search_history_db=false, $cache=true, $dbcon
/**
* Returns the time the module is in unknown status (by events)
*
* @param integer $id_agente_modulo module to check
* @param integer $tstart begin of search
* @param integer $tend end of search
* @param integer $id_agente_modulo Module to check.
* @param boolean $tstart Begin of search.
* @param boolean $tend End of search.
* @param boolean $historydb HistoryDb.
* @param integer $fix_to_range Range.
*
* @return array Return array or false.
*/
function db_get_module_ranges_unknown($id_agente_modulo, $tstart=false, $tend=false, $historydb=false, $fix_to_range=0)
{
function db_get_module_ranges_unknown(
$id_agente_modulo,
$tstart=false,
$tend=false,
$historydb=false,
$fix_to_range=0
) {
global $config;
if (!isset($id_agente_modulo)) {
if (isset($id_agente_modulo) === false) {
return false;
}
if ((!isset($tstart)) || ($tstart === false)) {
// Return data from the begining
if ((isset($tstart) === false) || ($tstart === false)) {
// Return data from the begining.
$tstart = 0;
}
if ((!isset($tend)) || ($tend === false)) {
// Return data until now
if ((isset($tend) === false) || ($tend === false)) {
// Return data until now.
$tend = time();
}
@ -593,24 +600,49 @@ function db_get_module_ranges_unknown($id_agente_modulo, $tstart=false, $tend=fa
return false;
}
// Retrieve going unknown events in range
$query = 'SELECT * FROM tevento WHERE id_agentmodule = '.$id_agente_modulo." AND event_type like 'going_%' "." AND utimestamp >= $tstart AND utimestamp <= $tend ".' ORDER BY utimestamp ASC';
// Retrieve going unknown events in range.
$query = sprintf(
'SELECT *
FROM tevento
WHERE id_agentmodule = %d
AND event_type like "going_%%"
AND utimestamp >= %d
AND utimestamp <= %d
ORDER BY utimestamp ASC
',
$id_agente_modulo,
$tstart,
$tend
);
$events = db_get_all_rows_sql($query, $historydb);
$query = 'SELECT * FROM tevento WHERE id_agentmodule = '.$id_agente_modulo." AND event_type like 'going_%' "." AND utimestamp < $tstart ".' ORDER BY utimestamp DESC LIMIT 1;';
$query = sprintf(
'SELECT *
FROM tevento
WHERE id_agentmodule = %d
AND event_type like "going_%%"
AND utimestamp < %d
ORDER BY utimestamp DESC
LIMIT 1
',
$id_agente_modulo,
$tstart
);
$previous_event = db_get_all_rows_sql($query, $historydb);
if ($previous_event !== false) {
$last_status = $previous_event[0]['event_type'] == 'going_unknown' ? 1 : 0;
$last_status = ($previous_event[0]['event_type'] == 'going_unknown') ? 1 : 0;
} else {
$last_status = 0;
}
if ((! is_array($events)) && (! is_array($previous_event))) {
if ((is_array($events) === false)
&& (is_array($previous_event) === false)
) {
return false;
}
if (! is_array($events)) {
if (is_array($events) === false) {
if ($previous_event[0]['event_type'] == 'going_unknown') {
return [
[
@ -622,7 +654,7 @@ function db_get_module_ranges_unknown($id_agente_modulo, $tstart=false, $tend=fa
$return = [];
$i = 0;
if (is_array($events)) {
if (is_array($events) === true) {
foreach ($events as $event) {
switch ($event['event_type']) {
case 'going_up_critical':
@ -647,11 +679,14 @@ function db_get_module_ranges_unknown($id_agente_modulo, $tstart=false, $tend=fa
break;
}
default:
// Nothing.
break;
}
}
}
if (!isset($return[0])) {
if (isset($return[0]) === false) {
return false;
}
@ -662,10 +697,10 @@ function db_get_module_ranges_unknown($id_agente_modulo, $tstart=false, $tend=fa
/**
* Uncompresses and returns the data of a given id_agent_module
*
* @param integer $id_agente_modulo id_agente_modulo
* @param utimestamp $tstart Begin of the catch
* @param utimestamp $tend End of the catch
* @param integer $interval Size of slice (default-> module_interval)
* @param integer $id_agente_modulo Id_agente_modulo.
* @param utimestamp $tstart Begin of the catch.
* @param utimestamp $tend End of the catch.
* @param integer $slice_size Size of slice(default-> module_interval).
*
* @return hash with the data uncompressed in blocks of module_interval
* false in case of empty result
@ -683,16 +718,20 @@ function db_get_module_ranges_unknown($id_agente_modulo, $tstart=false, $tend=fa
* datos
* utimestamp
*/
function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false, $slice_size=false)
{
function db_uncompress_module_data(
$id_agente_modulo,
$tstart=false,
$tend=false,
$slice_size=false
) {
global $config;
if (!isset($id_agente_modulo)) {
if (isset($id_agente_modulo) === false) {
return false;
}
if ((!isset($tend)) || ($tend === false)) {
// Return data until now
if ((isset($tend) === false) || ($tend === false)) {
// Return data until now.
$tend = time();
}
@ -705,7 +744,7 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$module = modules_get_agentmodule($id_agente_modulo);
if ($module === false) {
// module not exists
// Module not exists.
return false;
}
@ -727,27 +766,34 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$result = modules_get_first_date($id_agente_modulo, $tstart);
$first_utimestamp = $result['first_utimestamp'];
$search_historydb = $result['search_historydb'];
$search_historydb = (isset($result['search_historydb']) === true) ? $result['search_historydb'] : false;
if ($first_utimestamp === false) {
$first_data['utimestamp'] = $tstart;
$first_data['datos'] = false;
} else {
$query = "SELECT datos,utimestamp FROM $table ";
$query .= " WHERE id_agente_modulo=$id_agente_modulo ";
$query .= ' AND utimestamp = '.$first_utimestamp;
$query = sprintf(
'SELECT datos,utimestamp
FROM %s
WHERE id_agente_modulo = %d
AND utimestamp = %d
',
$table,
$id_agente_modulo,
$first_utimestamp
);
$data = db_get_all_rows_sql($query, $search_historydb);
if ($data === false) {
// first utimestamp not found in active database
// SEARCH HISTORY DB
// First utimestamp not found in active database
// SEARCH HISTORY DB.
$search_historydb = true;
$data = db_get_all_rows_sql($query, $search_historydb);
}
if ($data === false) {
// Not init
// Not init.
$first_data['utimestamp'] = $tstart;
$first_data['datos'] = false;
} else {
@ -756,20 +802,31 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
}
}
$query = " SELECT utimestamp, datos FROM $table ";
$query .= " WHERE id_agente_modulo=$id_agente_modulo AND utimestamp >= $tstart AND utimestamp <= $tend";
$query .= ' ORDER BY utimestamp ASC';
// Retrieve all data from module in given range
$query = sprintf(
'SELECT utimestamp, datos
FROM %s
WHERE id_agente_modulo = %d
AND utimestamp >= %d
AND utimestamp <= %d
ORDER BY utimestamp ASC
',
$table,
$id_agente_modulo,
$tstart,
$tend
);
// Retrieve all data from module in given range.
$raw_data = db_get_all_rows_sql($query, $search_historydb);
$module_interval = modules_get_interval($id_agente_modulo);
if (($raw_data === false) && ( $first_utimestamp === false )) {
// No data
// No data.
return false;
}
// Retrieve going unknown events in range
// Retrieve going unknown events in range.
$unknown_events = db_get_module_ranges_unknown(
$id_agente_modulo,
$tstart,
@ -778,16 +835,21 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
1
);
// if time to is missing in last event force time to outside range time
if ($unknown_events && !isset($unknown_events[(count($unknown_events) - 1)]['time_to'])) {
// If time to is missing in last event force time to outside range time.
if ($unknown_events
&& isset($unknown_events[(count($unknown_events) - 1)]['time_to']) === false
) {
$unknown_events[(count($unknown_events) - 1)]['time_to'] = $tend;
}
// if time to is missing in first event force time to outside range time
// If time to is missing in first event force time to outside range time.
if ($first_data['datos'] === false && !$flag_async) {
$last_inserted_value = false;
} else if (($unknown_events && !isset($unknown_events[0]['time_from']) && !$flag_async)
|| ($first_utimestamp < $tstart - (SECONDS_1DAY + 2 * $module_interval) && !$flag_async)
} else if (($unknown_events
&& isset($unknown_events[0]['time_from']) === false
&& $flag_async === false)
|| ($first_utimestamp < $tstart - (SECONDS_1DAY + 2 * $module_interval)
&& $flag_async === false)
) {
$last_inserted_value = $first_data['datos'];
$unknown_events[0]['time_from'] = $tstart;
@ -795,24 +857,24 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$last_inserted_value = $first_data['datos'];
}
// Retrieve module_interval to build the template
// Retrieve module_interval to build the template.
if ($slice_size === false) {
$slice_size = $module_interval;
}
$return = [];
// Point current_timestamp to begin of the set and initialize flags
// Point current_timestamp to begin of the set and initialize flags.
$current_timestamp = $tstart;
$last_timestamp = $first_data['utimestamp'];
$last_value = $first_data['datos'];
// reverse array data optimization
if (is_array($raw_data)) {
// Reverse array data optimization.
if (is_array($raw_data) === true) {
$raw_data = array_reverse($raw_data);
}
// Build template
// Build template.
$pool_id = 0;
$now = time();
@ -822,7 +884,7 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$current_unknown = null;
}
if (is_array($raw_data)) {
if (is_array($raw_data) === true) {
$current_raw_data = array_pop($raw_data);
} else {
$current_raw_data = null;
@ -838,33 +900,34 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
) {
$tmp_data['utimestamp'] = $current_timestamp;
// check not init
// Check not init.
$tmp_data['datos'] = $last_value === false ? false : null;
// async not unknown
// Async not unknown.
if ($flag_async && $tmp_data['datos'] === null) {
$tmp_data['datos'] = $last_inserted_value;
}
// debug purpose
// $tmp_data["obs"] = "unknown extra";
// Debug purpose.
// $tmp_data["obs"] = "unknown extra";.
array_push($return[$pool_id]['data'], $tmp_data);
}
// insert raw data
// Insert raw data.
while (($current_raw_data != null) &&
( ($current_timestamp_end > $current_raw_data['utimestamp']) &&
($current_timestamp <= $current_raw_data['utimestamp']) ) ) {
// Add real data detected
// Add real data detected.
if (count($return[$pool_id]['data']) == 0) {
// insert first slice data
// Insert first slice data.
$tmp_data['utimestamp'] = $current_timestamp;
$tmp_data['datos'] = $last_inserted_value;
// debug purpose
// $tmp_data["obs"] = "virtual data (raw)";
// Debug purpose
// $tmp_data["obs"] = "virtual data (raw)";.
$tmp_data['type'] = ($current_timestamp == $tstart || ($current_timestamp == $tend) ? 0 : 1);
// virtual data
// Add order to avoid usort missorder in same utimestamp data cells
// Virtual data.
// Add order to avoid usort missorder
// in same utimestamp data cells.
$tmp_data['order'] = 1;
array_push($return[$pool_id]['data'], $tmp_data);
}
@ -872,10 +935,10 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$tmp_data['utimestamp'] = $current_raw_data['utimestamp'];
$tmp_data['datos'] = $current_raw_data['datos'];
$tmp_data['type'] = 0;
// real data
// debug purpose
// Real data.
// Debug purpose
// $tmp_data["obs"] = "real data";
// Add order to avoid usort missorder in same utimestamp data cells
// Add order to avoid usort missorder in same utimestamp data cells.
$tmp_data['order'] = 2;
array_push($return[$pool_id]['data'], $tmp_data);
@ -888,7 +951,7 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
}
}
// unknown
// Unknown.
$data_slices = $return[$pool_id]['data'];
if (!$flag_async) {
while (($current_unknown != null) &&
@ -899,23 +962,25 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
&& ( $current_timestamp_end >= $current_unknown['time_from'] )
) {
if (count($return[$pool_id]['data']) == 0) {
// insert first slice data
// Insert first slice data.
$tmp_data['utimestamp'] = $current_timestamp;
$tmp_data['datos'] = $last_inserted_value;
// debug purpose
// Debug purpose
// $tmp_data["obs"] = "virtual data (e)";
// Add order to avoid usort missorder in same utimestamp data cells
// Add order to avoid usort missorder
// in same utimestamp data cells.
$tmp_data['order'] = 1;
array_push($return[$pool_id]['data'], $tmp_data);
}
// Add unknown state detected
// Add unknown state detected.
$tmp_data['utimestamp'] = $current_unknown['time_from'];
$tmp_data['datos'] = null;
// debug purpose
// Debug purpose
// $tmp_data["obs"] = "event data unknown from";
// Add order to avoid usort missorder in same utimestamp data cells
// Add order to avoid usort missorder
// in same utimestamp data cells.
$tmp_data['order'] = 2;
array_push($return[$pool_id]['data'], $tmp_data);
$current_unknown['time_from'] = null;
@ -923,19 +988,21 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
&& ($current_timestamp_end > $current_unknown['time_to'] )
) {
if (count($return[$pool_id]['data']) == 0) {
// add first slice data always
// insert first slice data
// Add first slice data always
// Insert first slice data.
$tmp_data['utimestamp'] = $current_timestamp;
$tmp_data['datos'] = $last_inserted_value;
// debug purpose
// Debug purpose
// $tmp_data["obs"] = "virtual data (event_to)";
// Add order to avoid usort missorder in same utimestamp data cells
// Add order to avoid usort missorder
// in same utimestamp data cells.
$tmp_data['order'] = 1;
array_push($return[$pool_id]['data'], $tmp_data);
}
$tmp_data['utimestamp'] = $current_unknown['time_to'];
// Add order to avoid usort missorder in same utimestamp data cells
// Add order to avoid usort missorder
// in same utimestamp data cells.
$tmp_data['order'] = 2;
$i = count($data_slices);
while ($i >= 0) {
@ -947,8 +1014,8 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$i--;
}
// debug purpose
// $tmp_data["obs"] = "event data unknown to";
// Debug purpose
// $tmp_data["obs"] = "event data unknown to";.
array_push($return[$pool_id]['data'], $tmp_data);
if ($unknown_events) {
$current_unknown = array_shift($unknown_events);
@ -963,15 +1030,15 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
$return[$pool_id]['utimestamp'] = $current_timestamp;
if (count($return[$pool_id]['data']) == 0) {
// insert first slice data
// Insert first slice data.
$tmp_data['utimestamp'] = $current_timestamp;
$tmp_data['datos'] = $last_inserted_value;
// debug purpose
// $tmp_data["obs"] = "virtual data (empty)";
// Debug purpose
// $tmp_data["obs"] = "virtual data (empty)";.
array_push($return[$pool_id]['data'], $tmp_data);
}
// sort current slice
// Sort current slice.
if (count($return[$pool_id]['data']) > 1) {
usort(
$return[$pool_id]['data'],
@ -985,16 +1052,16 @@ function db_uncompress_module_data($id_agente_modulo, $tstart=false, $tend=false
);
}
// put the last slice data like first element of next slice
// Put the last slice data like first element of next slice.
$last_inserted_value = end($return[$pool_id]['data']);
$last_inserted_value = $last_inserted_value['datos'];
// increment
// Increment.
$pool_id++;
$current_timestamp = $current_timestamp_end;
}
// slice to the end.
// Slice to the end.
if ($pool_id == 1) {
$end_array = [];
$end_array['data'][0]['utimestamp'] = $tend;

View File

@ -707,7 +707,9 @@ function events_get_all(
}
$count = false;
if (!is_array($fields) && $fields == 'count') {
if (is_array($fields) === false && $fields === 'count'
|| (is_array($fields) === true && $fields[0] === 'count')
) {
$fields = ['te.*'];
$count = true;
} else if (!is_array($fields)) {
@ -877,9 +879,10 @@ function events_get_all(
$groups
);
if (!$propagate) {
if (!$propagate && isset($groups)) {
$sql_filters[] = sprintf(
' AND (te.id_grupo = %d OR tasg.id_group = %d)',
$groups,
$groups
);
} else {
@ -1063,6 +1066,7 @@ function events_get_all(
}
}
$_tmp = '';
foreach ($tags as $id_tag) {
if (!isset($tags_names[$id_tag])) {
$tags_names[$id_tag] = tags_get_name($id_tag);
@ -1304,6 +1308,7 @@ function events_get_all(
$tgrupo_join = 'LEFT';
$tgrupo_join_filters = [];
if (isset($groups)
&& (is_array($groups)
|| $groups > 0)
@ -1311,17 +1316,21 @@ function events_get_all(
$tgrupo_join = 'INNER';
if (is_array($groups)) {
$tgrupo_join_filters[] = sprintf(
' AND (tg.id_grupo IN (%s) OR tasg.id_group IN (%s))',
' (te.id_grupo = tg.id_grupo AND tg.id_grupo IN (%s))
OR (tg.id_grupo = tasg.id_group AND tasg.id_group IN (%s))',
join(', ', $groups),
join(', ', $groups)
);
} else {
$tgrupo_join_filters[] = sprintf(
' AND (tg.id_grupo = %s OR tasg.id_group = %s)',
' (te.id_grupo = tg.id_grupo AND tg.id_grupo = %s)
OR (tg.id_grupo = tasg.id_group AND tasg.id_group = %s)',
$groups,
$groups
);
}
} else {
$tgrupo_join_filters[] = ' te.id_grupo = tg.id_grupo';
}
$server_join = '';
@ -1376,8 +1385,7 @@ function events_get_all(
%s
%s
%s JOIN tgrupo tg
ON te.id_grupo = tg.id_grupo
%s
ON %s
%s
WHERE 1=1
%s
@ -1567,7 +1575,9 @@ function events_get_events_no_grouped(
$table = events_get_events_table($meta, $history);
$sql = 'SELECT * FROM '.$table.' te WHERE 1=1 '.$sql_post;
$sql = 'SELECT * FROM '.$table.' te ';
$sql .= events_get_secondary_groups_left_join($table);
$sql .= $sql_post;
$events = db_get_all_rows_sql($sql, $history_db);
@ -1942,7 +1952,7 @@ function events_change_status(
*
* @param mixed $id_event Event ID or array of events.
* @param string $new_owner Id_user of the new owner. If is false, the current
* owner will be setted.
* owner will be set, if empty, will be cleaned.
* @param boolean $force Flag to force the change or not (not force is
* change only when it hasn't owner).
* @param boolean $meta Metaconsole mode flag.
@ -1982,11 +1992,10 @@ function events_change_owner(
return false;
}
// If no new_owner is provided, the current user will be the owner
// * #2250: Comment this lines because if possible selected None owner.
// if (empty($new_owner)) {
// $new_owner = $config['id_user'];
// }
if ($new_owner === false) {
$new_owner = $config['id_user'];
}
// Only generate comment when is forced (sometimes is owner changes when
// comment).
if ($force) {
@ -1995,7 +2004,9 @@ function events_change_owner(
'',
'Change owner to '.$new_owner,
$meta,
$history
$history,
true,
false
);
}
@ -2051,13 +2062,14 @@ function events_get_events_table($meta, $history)
/**
* Comment events in a transresponse
*
* @param mixed $id_event Event ID or array of events.
* @param string $comment Comment to be registered.
* @param string $action Action performed with comment. By default just add
* a comment.
* @param boolean $meta Flag of metaconsole mode.
* @param boolean $history Flag of history mode.
* @param boolean $similars Similars.
* @param mixed $id_event Event ID or array of events.
* @param string $comment Comment to be registered.
* @param string $action Action performed with comment. By default just add
* a comment.
* @param boolean $meta Flag of metaconsole mode.
* @param boolean $history Flag of history mode.
* @param boolean $similars Similars.
* @param boolean $update_owner Update owner.
*
* @return boolean Whether or not it was successful
*/
@ -2067,7 +2079,8 @@ function events_comment(
$action='Added comment',
$meta=false,
$history=false,
$similars=true
$similars=true,
$update_owner=true
) {
global $config;
@ -2095,8 +2108,10 @@ function events_comment(
return false;
}
// If the event hasn't owner, assign the user as owner.
events_change_owner($id_event);
if ($update_owner) {
// If the event hasn't owner, assign the user as owner.
events_change_owner($id_event);
}
// Get the current event comments.
$first_event = $id_event;
@ -2975,9 +2990,13 @@ function events_get_agent(
if ($events_group) {
$sql_where .= sprintf(
' AND id_grupo IN (%s) AND utimestamp > %d
AND utimestamp <= %d ',
implode(',', $id_group),
' INNER JOIN tgrupo tg
ON (te.id_grupo = tg.id_grupo AND tg.id_grupo = %s)
OR (tg.id_grupo = tasg.id_group AND tasg.id_group = %s)
WHERE utimestamp > %d
AND utimestamp <= %d ',
join(',', $id_group),
join(',', $id_group),
$datelimit,
$date
);
@ -5013,20 +5032,26 @@ function events_get_count_events_by_agent(
$tevento = 'tevento';
$sql = sprintf(
'SELECT id_agente,
(SELECT t2.alias
FROM %s t2
WHERE t2.id_agente = t3.id_agente) AS agent_name,
COUNT(*) AS count
FROM %s t3
'SELECT
ta.id_agente,
ta.alias as agent_name,
count(*) as count
FROM %s te
%s
INNER JOIN %s ta
ON te.id_agente = ta.id_agente
INNER JOIN tgrupo tg
ON (te.id_grupo = tg.id_grupo AND tg.id_grupo IN (%s))
OR (tg.id_grupo = tasg.id_group AND tasg.id_group IN (%s))
WHERE utimestamp > %d AND utimestamp <= %d
AND id_grupo IN (%s)
GROUP BY id_agente',
$tagente,
GROUP BY ta.id_agente',
$tevento,
events_get_secondary_groups_left_join($tevento),
$tagente,
implode(',', $id_group),
implode(',', $id_group),
$datelimit,
$date,
implode(',', $id_group),
$sql_where
);
@ -5077,8 +5102,10 @@ function events_get_count_events_validated_by_user(
$dbmeta=false
) {
global $config;
$tevento = 'tevento';
// Group.
$sql_filter = ' AND 1=1 ';
$tgroup_join = '';
if (isset($filter['id_group'])) {
$id_group = groups_safe_acl($config['id_user'], $filter['id_group'], 'AR');
@ -5087,7 +5114,15 @@ function events_get_count_events_validated_by_user(
return false;
}
$sql_filter .= sprintf(' AND id_grupo IN (%s) ', implode(',', $id_group));
$tgroup_join = sprintf(
'%s
INNER JOIN tgrupo tg
ON (te.id_grupo = tg.id_grupo AND tg.id_grupo IN (%s))
OR (tg.id_grupo = tasg.id_group AND tasg.id_group IN (%s))',
events_get_secondary_groups_left_join($tevento),
implode(',', $id_group),
implode(',', $id_group)
);
}
if (!empty($filter['id_agent'])) {
@ -5186,24 +5221,29 @@ function events_get_count_events_validated_by_user(
$sql_where .= ' AND (evento LIKE "%'.io_safe_input($filter_event_filter_search).'%" OR id_evento LIKE "%'.io_safe_input($filter_event_filter_search).'%")';
}
$tevento = 'tevento';
$sql = sprintf(
'SELECT id_usuario,
(SELECT t2.fullname
FROM tusuario t2
WHERE t2.id_user = t3.id_usuario) AS user_name,
COUNT(*) AS count
FROM %s t3
WHERE utimestamp > %d AND utimestamp <= %d
%s %s
GROUP BY id_usuario',
'SELECT
te.id_usuario,
tu.fullname as user_name,
count(*) as count
FROM %s te
%s
LEFT JOIN tusuario tu
ON te.owner_user = tu.id_user
WHERE
te.utimestamp > %d AND te.utimestamp <= %d
AND te.estado = %d
%s
GROUP BY te.id_usuario',
$tevento,
$tgroup_join,
$datelimit,
$date,
EVENT_VALIDATE,
$sql_filter,
$sql_where
);
$rows = db_get_all_rows_sql($sql);
if ($rows == false) {
@ -5214,7 +5254,7 @@ function events_get_count_events_validated_by_user(
foreach ($rows as $row) {
$user_name = $row['user_name'];
if (empty($row['user_name'])) {
$user_name = __('Unknown');
$user_name = __('Validated but not assigned');
}
$return[$user_name] = $row['count'];
@ -5252,7 +5292,10 @@ function events_get_count_events_by_criticity(
) {
global $config;
$sql_filter = ' AND 1=1 ';
$tevento = 'tevento';
$sql_filter = '';
$tgroup_join = '';
if (isset($filter['id_group'])) {
$id_group = groups_safe_acl($config['id_user'], $filter['id_group'], 'AR');
@ -5261,7 +5304,15 @@ function events_get_count_events_by_criticity(
return false;
}
$sql_filter .= sprintf(' AND id_grupo IN (%s) ', implode(',', $id_group));
$tgroup_join = sprintf(
'%s
INNER JOIN tgrupo tg
ON (te.id_grupo = tg.id_grupo AND tg.id_grupo IN (%s))
OR (tg.id_grupo = tasg.id_group AND tasg.id_group IN (%s))',
events_get_secondary_groups_left_join($tevento),
implode(',', $id_group),
implode(',', $id_group)
);
}
if (!empty($filter['id_agent'])) {
@ -5361,16 +5412,19 @@ function events_get_count_events_by_criticity(
$sql_where .= ' AND (evento LIKE "%'.io_safe_input($filter_event_filter_search).'%" OR id_evento LIKE "%'.io_safe_input($filter_event_filter_search).'%")';
}
$tevento = 'tevento';
$sql = sprintf(
'SELECT criticity,
COUNT(*) AS count
FROM %s
WHERE utimestamp > %d AND utimestamp <= %d
%s %s
GROUP BY criticity',
'SELECT
te.criticity,
count(*) as count
FROM %s te
%s
WHERE
te.utimestamp > %d AND te.utimestamp <= %d
%s
%s
GROUP BY te.id_usuario',
$tevento,
$tgroup_join,
$datelimit,
$date,
$sql_filter,
@ -5419,23 +5473,26 @@ function events_get_count_events_validated(
$dbmeta=false
) {
global $config;
$tevento = 'tevento';
// Group.
$sql_filter = ' 1=1 ';
$sql_filter = '';
$tgroup_join = '';
if (isset($filter['id_group'])) {
$id_group = groups_safe_acl(
$config['id_user'],
$filter['id_group'],
'AR'
);
$id_group = groups_safe_acl($config['id_user'], $filter['id_group'], 'AR');
if (empty($id_group)) {
// An empty array means the user doesn't have access.
return false;
}
$sql_filter .= sprintf(
' AND id_grupo IN (%s) ',
$tgroup_join = sprintf(
'%s
INNER JOIN tgrupo tg
ON (te.id_grupo = tg.id_grupo AND tg.id_grupo IN (%s))
OR (tg.id_grupo = tasg.id_group AND tasg.id_group IN (%s))',
events_get_secondary_groups_left_join($tevento),
implode(',', $id_group),
implode(',', $id_group)
);
}
@ -5566,9 +5623,24 @@ function events_get_count_events_validated(
$sql_where .= ' AND (evento LIKE "%'.io_safe_input($filter_event_filter_search).'%" OR id_evento LIKE "%'.io_safe_input($filter_event_filter_search).'%")';
}
$tevento = 'tevento';
$sql = sprintf('SELECT estado, COUNT(*) AS count FROM %s WHERE %s %s GROUP BY estado', $tevento, $sql_filter, $sql_where);
$sql = sprintf(
'SELECT
te.estado,
count(*) as count
FROM %s te
%s
WHERE
te.utimestamp > %d AND te.utimestamp <= %d
%s
%s
GROUP BY te.id_usuario',
$tevento,
$tgroup_join,
$datelimit,
$date,
$sql_filter,
$sql_where
);
$rows = db_get_all_rows_sql($sql);

View File

@ -1349,7 +1349,7 @@ function graphic_combined_module(
if ($count_modules > 0) {
foreach ($module_list as $key => $value) {
$sources[$key]['id_server'] = (isset($value['id_server']) === true) ? $value['id_server'] : $params['server_id'];
$sources[$key]['id_agent_module'] = $value['module'];
$sources[$key]['id_agent_module'] = (isset($value['module']) === true) ? $value['module'] : $value;
$sources[$key]['weight'] = $weights[$key];
$sources[$key]['label'] = $params_combined['labels'];
}
@ -3710,15 +3710,22 @@ function grafico_eventos_usuario($width, $height)
/**
* Print a custom SQL-defined graph
* Undocumented function
*
* @param integer ID of report content, used to get SQL code to get information for graph
* @param integer height graph height
* @param integer width graph width
* @param integer Graph type 1 vbar, 2 hbar, 3 pie
* @param array $content ID of report content
* used to get SQL code to get information for graph.
* @param integer $width Graph width.
* @param integer $height Graph height.
* @param string $type Graph type 1 vbar, 2 hbar, 3 pie.
* @param boolean $only_image Only image.
* @param string $homeurl Url.
* @param integer $ttl Ttl.
* @param integer $max_num_elements Max elements.
*
* @return string Graph.
*/
function graph_custom_sql_graph(
$id,
$content,
$width,
$height,
$type='sql_graph_vbar',
@ -3730,35 +3737,59 @@ function graph_custom_sql_graph(
global $config;
$SQL_GRAPH_MAX_LABEL_SIZE = 20;
if (is_metaconsole()) {
$server = metaconsole_get_connection_names();
$connection = metaconsole_get_connection($server);
if (is_metaconsole() === true
&& empty($content['server_name']) === false
) {
$connection = metaconsole_get_connection($content['server_name']);
metaconsole_connect($connection);
}
$report_content = db_get_row('treport_content', 'id_rc', $id);
$report_content = db_get_row(
'treport_content',
'id_rc',
$content['id_rc']
);
if ($report_content == false || $report_content == '') {
$report_content = db_get_row('treport_content_template', 'id_rc', $id);
$report_content = db_get_row(
'treport_content_template',
'id_rc',
$content['id_rc']
);
}
if ($report_content == false || $report_content == '') {
enterprise_hook('metaconsole_restore_db');
$report_content = db_get_row('treport_content', 'id_rc', $id);
if ($report_content == false || $report_content == '') {
$report_content = db_get_row('treport_content_template', 'id_rc', $id);
if (is_metaconsole() === true
&& empty($content['server_name']) === false
) {
enterprise_hook('metaconsole_restore_db');
}
if (is_metaconsole()) {
$server = metaconsole_get_connection_names();
$connection = metaconsole_get_connection($server);
$report_content = db_get_row(
'treport_content',
'id_rc',
$content['id_rc']
);
if ($report_content == false || $report_content == '') {
$report_content = db_get_row(
'treport_content_template',
'id_rc',
$content['id_rc']
);
}
if (is_metaconsole() === true
&& empty($content['server_name']) === false
) {
$connection = metaconsole_get_connection($content['server_name']);
metaconsole_connect($connection);
}
}
if ($id != null) {
$historical_db = db_get_value_sql('SELECT historical_db from treport_content where id_rc ='.$id);
$historical_db = db_get_value_sql(
'SELECT historical_db from treport_content where id_rc ='.$content['id_rc']
);
} else {
$historical_db = $content['historical_db'];
}
@ -3766,13 +3797,17 @@ function graph_custom_sql_graph(
if ($report_content['external_source'] != '') {
$sql = io_safe_output($report_content['external_source']);
} else {
$sql = db_get_row('treport_custom_sql', 'id', $report_content['treport_custom_sql_id']);
$sql = db_get_row(
'treport_custom_sql',
'id',
$report_content['treport_custom_sql_id']
);
$sql = io_safe_output($sql['sql']);
}
$data_result = db_get_all_rows_sql($sql, $historical_db);
if (is_metaconsole()) {
if (is_metaconsole() === true && empty($content['server_name']) === false) {
enterprise_hook('metaconsole_restore_db');
}
@ -3787,24 +3822,32 @@ function graph_custom_sql_graph(
foreach ($data_result as $data_item) {
$count++;
$value = 0;
if (!empty($data_item['value'])) {
if (empty($data_item['value']) === false) {
$value = $data_item['value'];
}
if ($count <= $max_num_elements) {
$label = __('Data');
if (!empty($data_item['label'])) {
if (empty($data_item['label']) === false) {
$label = io_safe_output($data_item['label']);
if (strlen($label) > $SQL_GRAPH_MAX_LABEL_SIZE) {
$first_label = $label;
$label = substr($first_label, 0, floor($SQL_GRAPH_MAX_LABEL_SIZE / 2));
$label = substr(
$first_label,
0,
floor($SQL_GRAPH_MAX_LABEL_SIZE / 2)
);
$label .= '...';
$label .= substr($first_label, floor(-$SQL_GRAPH_MAX_LABEL_SIZE / 2));
$label .= substr(
$first_label,
floor(-$SQL_GRAPH_MAX_LABEL_SIZE / 2)
);
}
}
switch ($type) {
case 'sql_graph_vbar':
default:
// Vertical bar.
$data[] = [
'tick' => $label.'_'.$count,
@ -3813,18 +3856,19 @@ function graph_custom_sql_graph(
break;
case 'sql_graph_hbar':
// horizontal bar
// Horizontal bar.
$data[$label.'_'.$count]['g'] = $value;
break;
case 'sql_graph_pie':
// Pie
// Pie.
$data[$label.'_'.$count] = $value;
break;
}
} else {
switch ($type) {
case 'sql_graph_vbar':
default:
// Vertical bar.
if ($flagOther === false) {
$data[] = [
@ -3839,8 +3883,8 @@ function graph_custom_sql_graph(
break;
case 'sql_graph_hbar':
// horizontal bar
if (!isset($data[__('Other')]['g'])) {
// Horizontal bar.
if (isset($data[__('Other')]['g']) === false) {
$data[__('Other')]['g'] = 0;
}
@ -3848,8 +3892,8 @@ function graph_custom_sql_graph(
break;
case 'sql_graph_pie':
// Pie
if (!isset($data[__('Other')])) {
// Pie.
if (isset($data[__('Other')]) === false) {
$data[__('Other')] = 0;
}
@ -3862,12 +3906,19 @@ function graph_custom_sql_graph(
if ($config['fixed_graph'] == false) {
$water_mark = [
'file' => $config['homedir'].'/images/logo_vertical_water.png',
'url' => ui_get_full_url('images/logo_vertical_water.png', false, false, false),
'url' => ui_get_full_url(
'images/logo_vertical_water.png',
false,
false,
false
),
];
}
$output = '';
switch ($type) {
case 'sql_graph_vbar':
default:
// Vertical bar.
$color = color_graph_array();
@ -3884,7 +3935,7 @@ function graph_custom_sql_graph(
$options['generals']['pdf']['width'] = $width;
$options['generals']['pdf']['height'] = $height;
$output .= '<img style="margin-left:20px;" src="data:image/jpg;base64,';
$output .= '<img src="data:image/jpg;base64,';
$output .= vbar_graph($data, $options, $ttl);
$output .= '" />';
} else {
@ -3893,48 +3944,48 @@ function graph_custom_sql_graph(
$output .= vbar_graph($data, $options, $ttl);
$output .= '</div>';
}
return $output;
break;
break;
case 'sql_graph_hbar':
// horizontal bar
return hbar_graph(
$data,
$width,
$height,
[],
[],
'',
'',
'',
'',
$water_mark,
$config['fontpath'],
$config['font_size'],
false,
$ttl,
$homeurl,
'white',
'#c1c1c1'
);
// Horizontal bar.
$output .= hbar_graph(
$data,
$width,
$height,
[],
[],
'',
'',
'',
'',
$water_mark,
$config['fontpath'],
$config['font_size'],
false,
$ttl,
$homeurl,
'white',
'#c1c1c1'
);
break;
break;
case 'sql_graph_pie':
// Pie
return pie_graph(
$data,
$width,
$height,
__('other'),
$homeurl,
$water_mark,
$config['fontpath'],
$config['font_size'],
$ttl
);
break;
// Pie.
$output .= pie_graph(
$data,
$width,
$height,
__('other'),
$homeurl,
$water_mark,
$config['fontpath'],
$config['font_size'],
$ttl
);
break;
}
return $output;
}
@ -5061,13 +5112,10 @@ function graph_nodata_image(
$percent=false,
$base64=false
) {
global $config;
if ($base64 === true) {
$dataImg = file_get_contents(
html_print_image(
'images/image_problem_area.png',
false,
['style' => 'width:150px;']
)
$config['homedir'].'/images/image_problem_area_150.png'
);
return base64_encode($dataImg);
}

View File

@ -514,6 +514,11 @@ function html_print_select_groups(
}
}
if (empty($nothing) === false) {
$fields[$nothing_value] = $nothing;
$include_groups[$nothing_value] = $nothing;
}
if (is_array($delete_groups) === true) {
$json_exclusions = json_encode($delete_groups);
}

View File

@ -3780,6 +3780,7 @@ function agents_get_network_interfaces_array(
'height' => $config['graph_image_height'],
'landscape' => $content['landscape'],
'return_img_base_64' => true,
'backgroundColor' => 'transparent',
'graph_render' => $content['graph_render'],
];
@ -3909,30 +3910,10 @@ function reporting_alert_report_group($report, $content)
$return['description'] = $content['description'];
$return['date'] = reporting_get_date_text($report, $content);
if ($content['id_group'] == 0) {
$agent_modules = db_get_all_rows_sql(
'
SELECT distinct(id_agent_module)
FROM talert_template_modules
WHERE disabled = 0
AND id_agent_module IN (
SELECT id_agente_modulo
FROM tagente_modulo)'
);
} else {
$agent_modules = db_get_all_rows_sql(
'
SELECT distinct(id_agent_module)
FROM talert_template_modules
WHERE disabled = 0
AND id_agent_module IN (
SELECT id_agente_modulo
FROM tagente_modulo
WHERE id_agente IN (
SELECT id_agente
FROM tagente WHERE id_grupo = '.$content['id_group'].'))'
);
}
$agent_modules = alerts_get_agent_modules(
$content['id_group'],
$content['recursion']
);
if (empty($alerts)) {
$alerts = [];
@ -4387,6 +4368,18 @@ function reporting_alert_report_module($report, $content)
}
/**
* Sql graph.
*
* @param array $report Info report.
* @param array $content Content.
* @param string $type Type.
* @param integer $force_width_chart Width.
* @param integer $force_height_chart Height.
* @param string $type_sql_graph Type.
*
* @return array Return array.
*/
function reporting_sql_graph(
$report,
$content,
@ -4399,6 +4392,7 @@ function reporting_sql_graph(
switch ($type_sql_graph) {
case 'sql_graph_hbar':
default:
$return['type'] = 'sql_graph_hbar';
break;
@ -4411,9 +4405,10 @@ function reporting_sql_graph(
break;
}
if (empty($content['name'])) {
if (empty($content['name']) === true) {
switch ($type_sql_graph) {
case 'sql_graph_vbar':
default:
$content['name'] = __('SQL Graph Vertical Bars');
break;
@ -4428,13 +4423,20 @@ function reporting_sql_graph(
}
// Get chart.
reporting_set_conf_charts($width, $height, $only_image, $type, $content, $ttl);
reporting_set_conf_charts(
$width,
$height,
$only_image,
$type,
$content,
$ttl
);
if (!empty($force_width_chart)) {
if (empty($force_width_chart) === false) {
$width = $force_width_chart;
}
if (!empty($force_height_chart)) {
if (empty($force_height_chart) === false) {
$height = $force_height_chart;
}
@ -4450,7 +4452,7 @@ function reporting_sql_graph(
WHERE id_graph = '.$content['id_gs']
);
if (isset($module_source) && is_array($module_source)) {
if (isset($module_source) === true && is_array($module_source) === true) {
$modules = [];
foreach ($module_source as $key => $value) {
$modules[$key] = $value['id_agent_module'];
@ -4460,8 +4462,9 @@ function reporting_sql_graph(
switch ($type) {
case 'dinamic':
case 'static':
default:
$return['chart'] = graph_custom_sql_graph(
$content['id_rc'],
$content,
$width,
$height,
$content['type'],
@ -8257,6 +8260,7 @@ function reporting_custom_graph(
'height' => $config['graph_image_height'],
'landscape' => $content['landscape'],
'return_img_base_64' => true,
'backgroundColor' => 'transparent',
];
$params_combined = [
@ -8593,6 +8597,7 @@ function reporting_set_conf_charts(
) {
switch ($type) {
case 'dinamic':
default:
$only_image = false;
$width = 900;
$height = isset($content['style']['dyn_height']) ? $content['style']['dyn_height'] : 230;
@ -8602,25 +8607,17 @@ function reporting_set_conf_charts(
case 'static':
$ttl = 2;
$only_image = true;
$height = 360;
$width = 780;
$height = isset($content['style']['dyn_height']) ? $content['style']['dyn_height'] : 230;
$width = 650;
break;
case 'data':
// Nothing.
break;
}
}
//
//
//
// MAYBE MOVE THE NEXT FUNCTIONS TO A FILE NAMED AS FUNCTION_REPORTING.UTILS.PHP //
//
//
//
/**
* Get a detailed report of summarized events per agent
*

View File

@ -2788,7 +2788,7 @@ function reporting_html_graph($table, $item)
{
$table->colspan['chart']['cell'] = 3;
$table->cellstyle['chart']['cell'] = 'text-align: center;';
$table->data['chart']['cell'] = $item['chart'].'<br><br><br><br>';
$table->data['chart']['cell'] = $item['chart'];
}
@ -3435,12 +3435,12 @@ function reporting_html_availability($table, $item, $pdf=0)
$table_row[] = '--';
} else {
$table_row[] = $row['agent'];
$item = $row['availability_item'];
$item_name = $row['availability_item'];
if ((bool) $row['compare'] === true) {
$item .= ' ('.__('24 x 7').')';
$item_name .= ' ('.__('24 x 7').')';
}
$table_row[] = $item;
$table_row[] = $item_name;
}
if ($row['time_total'] != 0 && $item['fields']['total_time']) {
@ -3568,12 +3568,12 @@ function reporting_html_availability($table, $item, $pdf=0)
$table_row2[] = '--';
} else {
$table_row2[] = $row['agent'];
$item = $row['availability_item'];
$item_name = $row['availability_item'];
if ((bool) $row['compare'] === true) {
$item .= ' ('.__('24 x 7').')';
$item_name .= ' ('.__('24 x 7').')';
}
$table_row2[] = $item;
$table_row2[] = $item_name;
}
if ($item['fields']['total_checks']) {

View File

@ -1753,6 +1753,12 @@ function update_manager_extract_package()
return false;
}
// An update have been applied, clean phantomjs cache.
config_update_value(
'clean_phantomjs_cache',
1
);
db_process_sql_update(
'tconfig',
['value' => 50],

View File

@ -535,7 +535,14 @@ function vbar_graph(
];
if (empty($params['data']) === true) {
return graph_nodata_image(0, 0, 'vbar', '', true);
return graph_nodata_image(
0,
0,
'vbar',
'',
true,
($ttl === 2) ? true : false
);
}
if ((int) $ttl === 2) {

View File

@ -528,7 +528,7 @@ $.fn.VUseTooltip = function() {
previousLabel = item.series.label;
$("#tooltip").remove();
var x = item.datapoint[0];
//var x = item.datapoint[0];
var y = item.datapoint[1];
if (typeof y != "string") {
@ -2428,63 +2428,27 @@ function pandoraFlotArea(
unit
);
} else {
var min_y_array;
var min_y = 0;
var min_bigger = "";
var max_y_array;
var max_y = 0;
var max_bigger = "";
var avg_y_array;
var avg_y = 0;
var avg_bigger = "";
$.each(update_legend, function(index, value) {
if (!value[x]) {
x = x + 1;
if (typeof value[x] !== "undefined") {
data_legend[index] =
" Min: " +
number_format(value[x].min, 0, unit, short_data, divisor) +
" Max: " +
number_format(value[x].max, 0, unit, short_data, divisor) +
" Avg: " +
number_format(value[x].avg, 0, unit, short_data, divisor);
}
if (typeof value[x].min !== "undefined" && value[x].min) {
min_y_array = format_unit_yaxes(value[x].min);
min_y = min_y_array["y"];
min_bigger = min_y_array["unit"];
} else {
min_y = 0;
min_bigger = "";
}
if (typeof value[x].max !== "undefined" && value[x].max) {
max_y_array = format_unit_yaxes(value[x].max);
max_y = max_y_array["y"];
max_bigger = max_y_array["unit"];
} else {
max_y = 0;
max_bigger = "";
}
if (typeof value[x].avg !== "undefined" && value[x].avg) {
avg_y_array = format_unit_yaxes(value[x].avg);
avg_y = avg_y_array["y"];
avg_bigger = avg_y_array["unit"];
} else {
avg_y = 0;
avg_bigger = "";
}
data_legend[index] =
" Min: " +
number_format(value[x].min, 0, unit, short_data, divisor) +
" Max: " +
number_format(value[x].max, 0, unit, short_data, divisor) +
" Avg: " +
number_format(value[x].avg, 0, unit, short_data, divisor);
});
label_aux =
legend[series.label].split(": Min")[0] +
": " +
data_legend[series.label];
$("#legend_" + graph_id + " .legendLabel")
.eq(i)
.html(label_aux);
if (typeof data_legend[series.label] !== "undefined") {
label_aux =
legend[series.label].split(": Min")[0] +
": " +
data_legend[series.label];
$("#legend_" + graph_id + " .legendLabel")
.eq(i)
.html(label_aux);
}
}
}
@ -2700,7 +2664,15 @@ function pandoraFlotArea(
}
function lFormatter(v) {
return '<span style="color:' + legend_color + '">' + legend[v] + "</span>";
var style =
"color:" +
legend_color +
"; font-family:" +
font +
"Font; font-size:" +
(parseInt(font_size) + 2) +
"px;";
return '<span style="' + style + '">' + legend[v] + "</span>";
}
$("#overview_" + graph_id).css("display", "none");

View File

@ -376,10 +376,22 @@ function menu_graph(
}
//
//
//
// Prints a FLOT pie chart
/**
* Pie chart.
*
* @param array $values Values.
* @param array $labels Labels.
* @param integer $width Width.
* @param integer $height Height.
* @param boolean $water_mark Water mark.
* @param string $font Font.
* @param integer $font_size Font Size.
* @param string $legend_position Psition Legend.
* @param string $colors Array Colors.
* @param boolean $hide_labels Hide labels.
*
* @return void
*/
function flot_pie_chart(
$values,
$labels,
@ -392,9 +404,9 @@ function flot_pie_chart(
$colors='',
$hide_labels=false
) {
// include_javascript_dependencies_flot_graph();
$series = sizeof($values);
if (($series != sizeof($labels)) || ($series == 0)) {
$series = count($values);
if (($series !== count($labels)) || ($series === 0)) {
return;
}
@ -407,11 +419,11 @@ function flot_pie_chart(
case 'right':
default:
// TODO FOR TOP OR LEFT OR RIGHT
// TODO FOR TOP OR LEFT OR RIGHT.
break;
}
$return = "<div id='$graph_id' class='graph' style='width: ".$width.'px; height: '.$height."px;'></div>";
$return = "<div id='".$graph_id."' class='graph' style='width: ".$width.'px; height: '.$height."px;'></div>";
if ($water_mark != '') {
$return .= "<div id='watermark_$graph_id' style='display:none; position:absolute;'><img id='watermark_image_$graph_id' src='$water_mark'></div>";
@ -424,15 +436,24 @@ function flot_pie_chart(
$labels = implode($separator, $labels);
$values = implode($separator, $values);
if (!empty($colors)) {
if (empty($colors) === false) {
$colors = implode($separator, $colors);
}
// include_javascript_dependencies_flot_graph();
$return .= "<script type='text/javascript'>";
$return .= "pandoraFlotPie('$graph_id', '$values', '$labels',
'$series', '$width', $font_size, $water_mark, '$separator',
'$legend_position', '$height', '$colors', ".json_encode($hide_labels).')';
$return .= "pandoraFlotPie(
'$graph_id',
'$values',
'$labels',
'$series',
'$width',
$font_size,
$water_mark,
'$separator',
'$legend_position',
'$height',
'$colors',
".json_encode($hide_labels).')';
$return .= '</script>';
return $return;

View File

@ -0,0 +1,176 @@
<?php
/**
* Event entity class.
*
* @category Class
* @package Pandora FMS
* @subpackage OpenSource
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2019 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.
* ============================================================================
*/
// Begin.
namespace PandoraFMS;
global $config;
require_once $config['homedir'].'/include/functions_events.php';
/**
* PandoraFMS Group entity.
*/
class Event extends Entity
{
/**
* List of available ajax methods.
*
* @var array
*/
private static $ajaxMethods = [];
/**
* Builds a PandoraFMS\Group object from a group id.
*
* @param integer $id_group Group Id.
*/
public function __construct(?int $id_group=null)
{
$table = 'tevento';
if ((bool) \is_metaconsole() === true) {
$table = 'tmetaconsole_event';
}
if ($id_group === 0) {
parent::__construct($table);
} else if (is_numeric($id_group) === true) {
parent::__construct($table, ['id_grupo' => $id_group]);
} else {
// Empty skel.
parent::__construct($table);
}
}
/**
* Retrieves all events matching given filters.
*
* @param array $fields Fields to retrieve.
* @param array $filter Filter.
* @param integer $offset Offset.
* @param integer $limit Limit.
* @param string $order Order (asc or desc).
* @param string $sort_field Sort field.
* @param boolean $history Search history.
* @param boolean $return_sql Return sql or execute it.
* @param string $having Having.
*
* @return array|string|falsse Found events or SQL query or error.
*/
public static function search(
array $fields,
array $filter,
?int $offset=null,
?int $limit=null,
?string $order=null,
?string $sort_field=null,
bool $history=false,
bool $return_sql=false,
string $having=''
):array {
return \events_get_all(
$fields,
$filter,
$offset,
$limit,
$order,
$sort_field,
$history,
$return_sql,
$having
);
}
/**
* Saves current group definition to database.
*
* @return mixed Affected rows of false in case of error.
* @throws \Exception On error.
*/
public function save()
{
global $config;
if (isset($config['centralized_management']) === true
&& $config['centralized_management'] > 0
) {
throw new \Exception(
get_class($this).' error, cannot be modified while centralized management environment.'
);
}
if ($this->id_evento === null) {
// New.
return db_process_sql_insert(
'tgrupo',
$this->fields
);
} else if ($this->fields['id_evento'] > 0) {
// Update.
return db_process_sql_update(
'tgrupo',
$this->fields,
['id_evento' => $this->fields['id_evento']]
);
}
return false;
}
/**
* Return error message to target.
*
* @param string $msg Error message.
*
* @return void
*/
public static function error(string $msg)
{
echo json_encode(['error' => $msg]);
}
/**
* Verifies target method is allowed to be called using AJAX call.
*
* @param string $method Method to be invoked via AJAX.
*
* @return boolean Available (true), or not (false).
*/
public static function ajaxMethod(string $method):bool
{
return in_array($method, self::$ajaxMethods) === true;
}
}

View File

@ -170,8 +170,8 @@ class Group extends Entity
private static function prepareGroups(array $groups):array
{
$return = [];
$groups = \groups_get_groups_tree_recursive($groups);
foreach ($groups as $k => $v) {
$tree_groups = \groups_get_groups_tree_recursive($groups);
foreach ($tree_groups as $k => $v) {
$return[] = [
'id' => $k,
'text' => \io_safe_output(
@ -187,8 +187,29 @@ class Group extends Entity
];
}
return $return;
$unassigned = [];
$processed = array_keys($tree_groups);
foreach ($groups as $k => $v) {
if (in_array($k, $processed) === true) {
continue;
}
$unassigned[] = [
'id' => $k,
'text' => \io_safe_output(
\ui_print_truncate_text(
$v,
GENERIC_SIZE_TEXT,
false,
true,
false
)
),
'level' => 0,
];
}
return array_merge($unassigned, $return);
}
@ -291,18 +312,25 @@ class Group extends Entity
]
);
$exclusions = json_decode(\io_safe_output($exclusions));
$exclusions = json_decode(\io_safe_output($exclusions), true);
if (empty($exclusions) === false) {
foreach ($exclusions as $ex) {
unset($groups[$ex]);
}
}
$inclusions = json_decode(\io_safe_output($inclusions));
$inclusions = json_decode(\io_safe_output($inclusions), true);
if (empty($inclusions) === false) {
foreach ($inclusions as $g) {
if (empty($groups[$g]) === true) {
$groups[$g] = \groups_get_name($g);
foreach ($inclusions as $k => $g) {
if (empty($groups[$k]) === true) {
if (is_numeric($g) === true) {
$groups[$k] = \groups_get_name($k);
}
if (empty($groups[$k]) === true) {
// Group does not exist, direct value assigned.
$groups[$k] = $g;
}
}
}
}

View File

@ -198,14 +198,11 @@ function pandora_session_gc($max_lifetime=300)
}
// TODO: SAML should work with pandora session handlers.
if (db_get_value('value', 'tconfig', 'token', 'auth') != 'saml') {
$result_handler = session_set_save_handler(
'pandora_session_open',
'pandora_session_close',
'pandora_session_read',
'pandora_session_write',
'pandora_session_destroy',
'pandora_session_gc'
);
}
$result_handler = session_set_save_handler(
'pandora_session_open',
'pandora_session_close',
'pandora_session_read',
'pandora_session_write',
'pandora_session_destroy',
'pandora_session_gc'
);

View File

@ -413,6 +413,15 @@ select:-internal-list-box {
src: url("../fonts/unicode.ttf") format("truetype");
}
@font-face {
font-family: "opensansFont";
src: url("../../fonts/opensans.woff2") format("woff2");
}
.opensansfont {
font-family: opensansFont, sans-serif;
}
@font-face {
font-family: "roboto";
src: url("../../fonts/roboto.woff2") format("woff2");
@ -1424,90 +1433,6 @@ div#agent_wizard_subtabs {
line-height: 18pt;
}
/*
span.users {
background: url(../../images/group.png) no-repeat;
}
span.agents {
background: url(../../images/bricks.png) no-repeat;
}
span.data {
background: url(../../images/data.png) no-repeat;
}
span.alerts {
background: url(../../images/bell.png) no-repeat;
}
span.time {
background: url(../../images/hourglass.png) no-repeat;
}
span.net {
background: url(../../images/network.png) no-repeat;
}
span.master {
background: url(../../images/master.png) no-repeat;
}
span.wmi {
background: url(../../images/wmi.png) no-repeat;
}
span.prediction {
background: url(../../images/chart_bar.png) no-repeat;
}
span.plugin {
background: url(../../images/plugin.png) no-repeat;
}
span.export {
background: url(../../images/database_refresh.png) no-repeat;
}
span.snmp {
background: url(../../images/snmp.png) no-repeat;
}
span.binary {
background: url(../../images/binary.png) no-repeat;
}
span.recon {
background: url(../../images/recon.png) no-repeat;
}
span.rmess {
background: url(../../images/email_open.png) no-repeat;
}
span.nrmess {
background: url(../../images/email.png) no-repeat;
}
span.recon_server {
background: url(../../images/recon.png) no-repeat;
}
span.wmi_server {
background: url(../../images/wmi.png) no-repeat;
}
span.export_server {
background: url(../../images/server_export.png) no-repeat;
}
span.inventory_server {
background: url(../../images/page_white_text.png) no-repeat;
}
span.web_server {
background: url(../../images/world.png) no-repeat;
}
*/
/* This kind of span do not have any sense, should be replaced on PHP code
by a real img in code. They are not useful because insert too much margin around
(for example, not valid to use in the table of server view */
/*span.users, span.agents, span.data, span.alerts, span.time, span.net,
span.master, span.snmp, span.binary, span.recon, span.wmi, span.prediction,
span.plugin, span.plugin, span.export, span.recon_server, span.wmi_server,
span.export_server, span.inventory_server, span.web_server {
margin-left: 4px;
margin-top: 10px;
padding: 4px 8px 12px 30px;
display: block;
}
span.rmess, span.nrmess {
margin-left: 14px;
padding: 1px 0px 10px 30px;
display: block;
}*/
/* New styles for data box */
/*
* ---------------------------------------------------------------------
@ -1603,24 +1528,6 @@ table.databox {
color: #333;
}
/* For use in Netflow */
/*
table.databox_grid {
margin: 25px;
}
table.databox_grid > th {
font-size: 12px;
}
table.databox_grid > td {
padding: 6px;
margin: 4px;
border-bottom: 1px solid #acacac;
border-right: 1px solid #acacac;
}
*/
/* events */
table.alternate tr:nth-child(odd) td {
background-color: #ffffff;
@ -1636,50 +1543,6 @@ table.rounded_cells td {
border-radius: 6px;
}
/*#head_l {
float: left;
margin: 0;
padding: 0;
}
#head_r {
float: right;
text-align: right;
margin-right: 10px;
padding-top: 0px;
}
#head_m {
position: absolute;
padding-top: 6px;
padding-left: 12em;
}*/
/*span#logo_text1 {
font: bolder 3em Arial, Sans-serif;
letter-spacing: -2px;
color: #eee;
}
span#logo_text2 {
font: 3em Arial, Sans-serif;
letter-spacing: -2px;
color: #aaa;
}
div#logo_text3 {
text-align: right;
font: 2em Arial, Sans-serif;
letter-spacing: 6px;
color: #aaa;
font-weight: bold;
margin-top: 0px;
margin-left: 4px;
padding-top: 0px;
}
.bb0 {
border-bottom: 0px;
}
.bt0 {
border-top: 0px;
}*/
.action-buttons {
text-align: right;
}
@ -1722,7 +1585,6 @@ input.config,
input.filter,
input.cancel,
input.default,
input.filter,
input.pdf,
input.spinn {
padding-right: 30px;
@ -1861,19 +1723,6 @@ div#main_pure {
.ui-draggable {
cursor: move;
}
/*#layout_trash_drop {
float: right;
width: 300px;
height: 180px;
background: #fff url("../../images/trash.png") no-repeat bottom left;
}
#layout_trash_drop div {
display: block;
}
#layout_editor_drop {
float: left;
width: 300px;
}*/
/* IE 7 Hack */
#editor {
@ -1923,12 +1772,6 @@ select#template,
select#action {
width: 250px;
}
/*#label-checkbox-matches_value,
#label-checkbox-copy_modules,
#label-checkbox-copy_alerts {
display: inline;
font-weight: normal;
}*/
/* Modules */
table#simple {
@ -6176,3 +6019,12 @@ form#form-filter-interfaces ul li.select-interfaces {
li .select2 {
max-width: 400px !important;
}
div.graph td.legendLabel {
text-align: justify;
}
div.graph div.legend div,
div.graph div.legend table {
top: 25px !important;
}

View File

@ -61,7 +61,7 @@ thead.header_tr tr th.th_first {
}
thead.header_tr tr th.th_description {
background-color: #fafafa;
background-color: #ffffff;
color: #1c1c1c;
text-align: justify;
}
@ -126,7 +126,6 @@ div.mpdf_toc_level_1 {
margin-left: 2em;
text-indent: -2em;
padding-right: 1em;
padding-bottom: 1em;
}
span.mpdf_toc_t_level_1 {

View File

@ -27,27 +27,79 @@ if (!viewport_height) {
}
if (type_graph_pdf == "combined") {
post_data =
"data=" +
url_params +
"&data_combined=" +
url_params_comb +
"&data_module_list=" +
url_module_list +
"&type_graph_pdf=" +
type_graph_pdf +
"&session_id=" +
session_id;
post_data = {
data: url_params,
session_id: session_id,
type_graph_pdf: type_graph_pdf,
data_module_list: url_module_list,
data_combined: url_params_comb
};
} else {
post_data =
"data=" +
url_params +
"&type_graph_pdf=" +
type_graph_pdf +
"&session_id=" +
session_id;
post_data = {
data: url_params,
session_id: session_id,
type_graph_pdf: type_graph_pdf
};
}
/* DEBUG
page.onAlert = function() {
console.log("onAlert");
};
page.onCallback = function() {
console.log("onCallback");
};
page.onClosing = function() {
console.log("onClosing");
};
page.onConfirm = function() {
console.log("onConfirm");
};
page.onConsoleMessage = function() {
console.log("onConsoleMessage");
};
page.onError = function() {
console.log("onError");
};
page.onFilePicker = function() {
console.log("onFilePicker");
};
page.onInitialized = function() {
console.log("onInitialized");
};
page.onLoadFinished = function() {
console.log("onLoadFinished");
};
page.onLoadStarted = function() {
console.log("onLoadStarted");
};
page.onNavigationRequested = function() {
console.log("onNavigationRequested");
};
page.onPageCreated = function() {
console.log("onPageCreated");
};
page.onPrompt = function() {
console.log("onPrompt");
};
page.onResourceError = function() {
console.log("onResourceError");
};
page.onResourceReceived = function(res) {
console.log("onResourceReceived" + ";" + res.url + ";" + res.status);
};
page.onResourceRequested = function(res) {
console.log("onResourceRequested" + ";" + res.url);
};
page.onResourceTimeout = function() {
console.log("onResourceTimeout");
};
page.onUrlChanged = function(url) {
console.log("onUrlChanged" + ";" + url);
};
*/
var page = require("webpage").create();
page.onResourceError = function(resourceError) {
@ -80,8 +132,15 @@ page.viewportSize = {
page.zoomFactor = 1;
page.settings.userAgent =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36";
page.settings.resourceTimeout = 2000;
page.settings.localToRemoteUrlAccessEnabled = true;
page.onConsoleMessage = function(msg) {
console.log(msg);
page.close();
phantom.exit();
};
page.onError = function(msg) {
@ -102,7 +161,9 @@ page.onCallback = function() {
phantom.exit();
};
page.open(url, "POST", post_data, function(status) {
page.open(url, "POST", "data=" + btoa(JSON.stringify(post_data)), function(
status
) {
if (status == "fail") {
console.out("Failed to generate chart.");
phantom.exit();

View File

@ -128,8 +128,8 @@
</div>
<div style='height: 10px'>
<?php
$version = '7.0NG.749';
$build = '201006';
$version = '7.0NG.750';
$build = '201015';
$banner = "v$version Build $build";
error_reporting(0);

View File

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

View File

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

View File

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

View File

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

View File

@ -1474,6 +1474,8 @@ CREATE TABLE IF NOT EXISTS `treport` (
`non_interactive` tinyint(1) UNSIGNED NOT NULL default 0,
`hidden` tinyint(1) DEFAULT 0,
`orientation` varchar(25) NOT NULL default 'vertical',
`cover_page_render` tinyint(1) NOT NULL DEFAULT 1,
`index_render` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY(`id_report`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
@ -3053,6 +3055,8 @@ CREATE TABLE IF NOT EXISTS `treport_template` (
`custom_font` varchar(200) default NULL,
`metaconsole` tinyint(1) DEFAULT 0,
`agent_regex` varchar(600) BINARY NOT NULL default '',
`cover_page_render` tinyint(1) NOT NULL DEFAULT 1,
`index_render` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY(`id_report`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;

View File

@ -105,7 +105,7 @@ INSERT INTO `tconfig` (`token`, `value`) VALUES
('show_vc', 1),
('inventory_changes_blacklist', '1,2,20,21'),
('custom_report_front', 0),
('custom_report_front_font', 'FreeSans.ttf'),
('custom_report_front_font', 'opensans.ttf'),
('custom_report_front_logo', 'images/pandora_logo_white.jpg'),
('custom_report_front_header', ''),
('custom_report_front_footer', ''),

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.749-201006
Version: 7.0NG.750
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -590,7 +590,7 @@ sub main() {
my $include_api = 'include/api.php';
# If public_url is empty in database
if ( $console_api_url eq '' ) {
$Config{"console_api_url"} = 'http://localhost/pandora_console/' . $include_api;
$Config{"console_api_url"} = 'http://127.0.0.1/pandora_console/' . $include_api;
logger(\%Config, "Assuming default path for API url: " . $Config{"console_api_url"}, 3);
} else {
$Config{"console_api_url"} = $console_api_url . $include_api;

View File

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

View File

@ -44,8 +44,8 @@ our @EXPORT = qw(
);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.749";
my $pandora_build = "201006";
my $pandora_version = "7.0NG.750";
my $pandora_build = "201015";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash

View File

@ -1880,29 +1880,17 @@ sub pandora_process_module ($$$$$$$$$;$) {
}
}
} else {
if ($status == $new_status) {
# If the status is equal to the previous status reset the counters.
$ff_normal = 0;
$ff_critical = 0;
$ff_warning = 0;
} else {
# Sequential critical and normal status are needed
# if don't, reset counters.
if ($last_known_status == 1 && $new_status != 1) {
$ff_critical = 0;
} elsif ($last_known_status == 0 && $new_status != 0) {
$ff_normal = 0;
}
# Increase counters.
$ff_critical++ if ($new_status == 1);
$ff_warning++ if ($new_status == 2);
$ff_normal++ if ($new_status == 0);
# Increase counters.
$ff_critical++ if ($new_status == 1);
$ff_warning++ if ($new_status == 2);
$ff_normal++ if ($new_status == 0);
}
if ( ($new_status == 0 && $ff_normal >= $min_ff_event)
|| ($new_status == 1 && $ff_critical >= $min_ff_event)
|| ($new_status == 2 && $ff_warning >= $min_ff_event)) {
# Generate event for 'going_normal' only if status is previously different from
# Normal.
if ( ($new_status != $status && ($new_status == 0 && $ff_normal > $min_ff_event))
|| ($new_status == 1 && $ff_critical > $min_ff_event)
|| ($new_status == 2 && $ff_warning > $min_ff_event)
) {
# Change status generate event.
generate_status_event ($pa_config, $processed_data, $agent, $module, $new_status, $status, $known_status, $dbh);
$status = $new_status;
@ -1918,11 +1906,19 @@ sub pandora_process_module ($$$$$$$$$;$) {
safe_mode($pa_config, $agent, $module, $new_status, $known_status, $dbh);
}
# Reset counters because change status.
# After launch an event, counters are reset.
$ff_normal = 0;
$ff_critical = 0;
$ff_warning = 0;
} else {
if($new_status == 0 && $ff_normal > $min_ff_event) {
# Reached normal FF but status have not changed, reset counters.
$ff_normal = 0;
$ff_critical = 0;
$ff_warning = 0;
}
# Active ff interval
if ($module->{'module_ff_interval'} != 0) {
$current_interval = $module->{'module_ff_interval'};

View File

@ -26,14 +26,15 @@ eval "use POSIX::strftime::GNU;1" if ($^O =~ /win/i);
use POSIX qw(strftime setsid floor);
use MIME::Base64;
use JSON qw(decode_json encode_json);
use PerlIO::encoding;
use base 'Exporter';
our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.749";
my $pandora_build = "201006";
my $pandora_version = "7.0NG.750";
my $pandora_build = "201015";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -2144,7 +2144,7 @@ sub snmp_get_value($$$) {
foreach my $line (@output) {
$line =~ s/[\r\n]//g;
return $1 if ($line =~ /^$effective_oid\s+=\s+\S+:\s+(.*)/);
return $1 if ($line =~ /^\.{0,1}$effective_oid\s+=\s+\S+:\s+(.*)/);
}
return undef;
@ -2160,7 +2160,7 @@ sub snmp_get_value_array($$$) {
my @output = $self->snmp_get($device, $oid);
foreach my $line (@output) {
chomp($line);
push(@values, $1) if ($line =~ /^$oid\S*\s+=\s+\S+:\s+(.*)$/);
push(@values, $1) if ($line =~ /^\.{0,1}$oid\S*\s+=\s+\S+:\s+(.*)$/);
}
return @values;

View File

@ -2,8 +2,8 @@
# Pandora FMS Server
#
%define name pandorafms_server
%define version 7.0NG.749
%define release 201006
%define version 7.0NG.750
%define release 1
Summary: Pandora FMS Server
Name: %{name}

View File

@ -2,8 +2,8 @@
# Pandora FMS Server
#
%define name pandorafms_server
%define version 7.0NG.749
%define release 201006
%define version 7.0NG.750
%define release 1
Summary: Pandora FMS Server
Name: %{name}

View File

@ -8,8 +8,8 @@
# This code is licensed under GPL 2.0 license.
# **********************************************************************
PI_VERSION="7.0NG.749"
PI_BUILD="201006"
PI_VERSION="7.0NG.750"
PI_BUILD="201015"
MODE=$1
if [ $# -gt 1 ]; then

View File

@ -35,7 +35,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
my $version = "7.0NG.749 PS201006";
my $version = "7.0NG.750 PS201015";
# Pandora server configuration
my %conf;
@ -1011,7 +1011,7 @@ sub pandoradb_main ($$$) {
# Move old data to the history DB
if (defined ($history_dbh)) {
undef ($history_dbh) unless defined (enterprise_hook ('pandora_historydb', [$dbh, $history_dbh, $conf->{'_history_db_days'}, $conf->{'_history_db_step'}, $conf->{'_history_db_delay'}]));
if (defined($conf{'_history_event_enabled'})) {
if (defined($conf{'_history_event_enabled'}) && $conf->{'_history_event_enabled'} ne "" && $conf->{'_history_event_enabled'} == 1) {
undef ($history_dbh) unless defined (enterprise_hook ('pandora_history_event', [$dbh, $history_dbh, $conf->{'_history_event_days'}, $conf->{'_history_db_step'}, $conf->{'_history_db_delay'}]));
}
}

View File

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