diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 302dcb34fa..575ab477b4 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.763-220714 +Version: 7.0NG.763-220721 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index f511268c3d..146876a13c 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.763-220714" +pandora_version="7.0NG.763-220721" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null @@ -61,7 +61,7 @@ chmod 755 -R temp_package/DEBIAN #cp -aRf * temp_package/usr/share/pandora_agent/ #but don't copy recursive the temp_package into temp_package -for item in `ls | grep -v NT4 | grep -v AIX | grep -v FreeBSD | grep -v HP-UX | grep -v SunOS | grep -v temp_package` +for item in `ls | grep -v NT4 | grep -v AIX | grep -v FreeBSD | grep -v NetBSD | grep -v HP-UX | grep -v SunOS | grep -v Darwin | grep -v OpenWRT | grep -v pandorafms.agent_unix | grep -v temp_package` do #if [ \( $item != 'temp_package' \) -a \( $item != 'NT4' \) ] #then @@ -133,9 +133,9 @@ echo "END" echo "Make the package \"Pandorafms agent\"." if [ "$USE_DOCKER_APP" == "1" ]; then - eval $DPKG_DEB --build temp_package + eval $DPKG_DEB --root-owner-group --build temp_package else - dpkg-deb --build temp_package + dpkg-deb --root-owner-group --build temp_package fi mv temp_package.deb pandorafms.agent_unix_$pandora_version.deb diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 642404ed39..31d7708a30 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1015,7 +1015,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.763'; -use constant AGENT_BUILD => '220714'; +use constant AGENT_BUILD => '220721'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index a277da178a..c0f7bb1607 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.763 -%define release 220714 +%define release 220721 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index b0f3daa421..980513bb67 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.763 -%define release 220714 +%define release 220721 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 91530f5405..09c6df2be7 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.763" -PI_BUILD="220714" +PI_BUILD="220721" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 00cc285faa..18f5561aec 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{220714} +{220721} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 0b41f57aff..bb8316a02d 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.763 Build 220714") +#define PANDORA_VERSION ("7.0NG.763 Build 220721") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index ee3e90d075..72ac1cf939 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.763(Build 220714))" + VALUE "ProductVersion", "(7.0NG.763(Build 220721))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/conffiles b/pandora_console/DEBIAN/conffiles deleted file mode 100644 index d3e2621208..0000000000 --- a/pandora_console/DEBIAN/conffiles +++ /dev/null @@ -1 +0,0 @@ -/var/www/pandora_console/include/config.php diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 2c98d8af56..c297f54a6e 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,10 +1,10 @@ package: pandorafms-console -Version: 7.0NG.763-220714 +Version: 7.0NG.763-220721 Architecture: all Priority: optional Section: admin Installed-Size: 42112 Maintainer: Artica ST -Homepage: http://pandorafms.org/ -Depends: php | php7.2, php7.2-snmp | php-snmp, php7.2-gd | php-gd, php7.2-mysqlnd | php-mysqlnd, php-db, php7.2-xmlrpc | php-xmlrpc, php-gettext, php7.2-curl | php-curl, graphviz, dbconfig-common, php7.2-ldap | php-ldap, mysql-client | virtual-mysql-client, php-xmlrpc, php7.2-zip | php-zip +Homepage: https://pandorafms.com/ +Depends: php, php-snmp, php-gd, php-mysqlnd, php-db, php-xmlrpc, php-curl, graphviz, dbconfig-common, php-ldap, mysql-client | virtual-mysql-client, php-xmlrpc, php-zip, php-mbstring Description: Pandora FMS is an Open Source monitoring tool. It monitor your systems and applications, and allows you to control the status of any element of them. The web console is the graphical user interface (GUI) to manage the pool and to generate reports and graphs from the Pandora FMS monitoring process. diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 94d988b6ea..b8d7f8b750 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -1,6 +1,6 @@ #!/bin/bash -#Pandora FMS- http:#pandorafms.com +#Pandora FMS - https://pandorafms.com # ================================================== # Copyright (c) 2005-2021 Artica Soluciones Tecnologicas # Please see http:#pandorafms.org for full contribution list @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.763-220714" +pandora_version="7.0NG.763-220721" package_pear=0 package_pandora=1 @@ -94,17 +94,19 @@ echo "Make a \"temp_package\" temporary dir for job." mkdir -p temp_package if [ $package_pandora -eq 1 ] then - mkdir -p temp_package/var/www/pandora_console + mkdir -p temp_package/var/www/html/pandora_console + mkdir -p temp_package/var/log/pandora mkdir -p temp_package/etc/logrotate.d + mkdir -p temp_package/etc/init.d echo "Make directory system tree for package." - cp -R $(ls | grep -v temp_package | grep -v DEBIAN ) temp_package/var/www/pandora_console + cp -R $(ls | grep -v temp_package | grep -v DEBIAN | grep -v pandorafms.console_$pandora_version.deb) temp_package/var/www/html/pandora_console cp -R DEBIAN temp_package cp -aRf pandora_console_logrotate_ubuntu temp_package/etc/logrotate.d/pandora_console - find temp_package/var/www/pandora_console -name ".svn" | xargs rm -Rf - rm -Rf temp_package/var/www/pandora_console/pandora_console.spec + cp -aRf pandora_websocket_engine temp_package/etc/init.d/ + find temp_package/var/www/html/pandora_console -name ".svn" | xargs rm -Rf + rm -Rf temp_package/var/www/html/pandora_console/pandora_console.spec chmod 755 -R temp_package/DEBIAN - touch temp_package/var/www/pandora_console/include/config.php echo "Remove the SVN files and other temp files." @@ -128,30 +130,31 @@ then echo "END" echo "Calculate md5sum for md5sums package control file." - for item in `find temp_package` + FILES=`find temp_package` + while read item do echo -n "." - if [ ! -d $item ] + if [ ! -d "$item" ] then - echo $item | grep "DEBIAN" > /dev/null + echo "$item" | grep "DEBIAN" > /dev/null #last command success if [ $? -eq 1 ] then - md5=`md5sum $item | cut -d" " -f1` + md5=`md5sum "$item" | cut -d" " -f1` #delete "temp_package" in the path final_path=${item#temp_package} echo $md5" "$final_path >> temp_package/DEBIAN/md5sums fi fi - done + done < <(echo "$FILES") echo "END" echo "Make the package \"Pandorafms console\"." if [ "$USE_DOCKER_APP" == "1" ]; then - eval $DPKG_DEB --build temp_package + eval $DPKG_DEB --root-owner-group --build temp_package else - dpkg-deb --build temp_package + dpkg-deb --root-owner-group --build temp_package fi mv temp_package.deb pandorafms.console_$pandora_version.deb fi diff --git a/pandora_console/DEBIAN/postinst b/pandora_console/DEBIAN/postinst index a899c6bf0a..4b871d9187 100755 --- a/pandora_console/DEBIAN/postinst +++ b/pandora_console/DEBIAN/postinst @@ -1,20 +1,15 @@ #!/bin/bash -echo Change the user and group to /var/www/pandora_console. -chmod -R u+rwX,g+rX,g-w,o-rwx /var/www/pandora_console -chgrp www-data /var/www/pandora_console -R -chown www-data /var/www/pandora_console -R -if [ -d /var/www/html ]; then mv /var/www/pandora_console /var/www/html/; fi - +echo Change the user and group to /var/www/html/pandora_console. +chmod -R u+rwX,g+rX,g-w,o-rwx /var/www/html/pandora_console +chgrp www-data /var/www/html/pandora_console -R +chown www-data /var/www/html/pandora_console -R + if [ -f /etc/init.d/apache2 ]; then echo Restart the apache. /etc/init.d/apache2 restart fi -# Install pandora_websocket_engine service. -cp -pf %{prefix}/pandora_console/pandora_websocket_engine /etc/init.d/ -chmod +x /etc/init.d/pandora_websocket_engine - echo "You can now start the Pandora FMS Websocket service by executing" echo " /etc/init.d/pandora_websocket_engine start" diff --git a/pandora_console/general/header.php b/pandora_console/general/header.php index 7384ac17ff..f72c9f19bc 100644 --- a/pandora_console/general/header.php +++ b/pandora_console/general/header.php @@ -925,7 +925,9 @@ echo sprintf('
', $menuTypeClass); layout: '%M%nn%M:%S%nn%S', labels: ['', '', '', '', '', '', ''], onExpiry: function () { - dt_events.draw(false); + $("#table_events") + .DataTable() + .draw(false); } }); } diff --git a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php index 5ef4b23614..af7eb1d47e 100644 --- a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php +++ b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php @@ -662,7 +662,7 @@ class DiscoveryTaskList extends HTML $data[0] .= '\''; if ($task['type'] == DISCOVERY_HOSTDEVICES) { $title = __('Are you sure?'); - $message = 'This action will rescan the target networks.'; + $message = __('This action will rescan the target networks.'); $data[0] .= ', {title: \''.$title.'\', message: \''.$message.'\'}'; } diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 5a92d33c16..93400ad5c8 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -97,29 +97,27 @@ if ($get_comments === true) { $eventsGrouped = []; // Consider if the event is grouped. $whereGrouped = '1=1'; - if (isset($event['event_rep']) === true && $event['event_rep'] > 0) { - // Default grouped message filtering (evento and estado). - $whereGrouped = sprintf( - '`evento` = "%s" AND `estado` = "%s" AND `event_type` = "%s" ', - $event['evento'], - $event['estado'], - $event['event_type'] + // Default grouped message filtering (evento and estado). + $whereGrouped = sprintf( + '`evento` = "%s" AND `estado` = "%s" AND `event_type` = "%s" ', + $event['evento'], + $event['estado'], + $event['event_type'] + ); + + // If id_agente is reported, filter the messages by them as well. + if ((int) $event['id_agente'] > 0) { + $whereGrouped .= sprintf( + ' AND `id_agente` = %d', + (int) $event['id_agente'] ); + } - // If id_agente is reported, filter the messages by them as well. - if ((int) $event['id_agente'] > 0) { - $whereGrouped .= sprintf( - ' AND `id_agente` = %d', - (int) $event['id_agente'] - ); - } - - if ((int) $event['id_agentmodule'] > 0) { - $whereGrouped .= sprintf( - ' AND `id_agentmodule` = %d', - (int) $event['id_agentmodule'] - ); - } + if ((int) $event['id_agentmodule'] > 0) { + $whereGrouped .= sprintf( + ' AND `id_agentmodule` = %d', + (int) $event['id_agentmodule'] + ); } try { diff --git a/pandora_console/include/class/ConsoleSupervisor.php b/pandora_console/include/class/ConsoleSupervisor.php index a0cfb1347d..801cf26a53 100644 --- a/pandora_console/include/class/ConsoleSupervisor.php +++ b/pandora_console/include/class/ConsoleSupervisor.php @@ -2483,14 +2483,12 @@ class ConsoleSupervisor SERVER_TYPE_ENTERPRISE_SATELLITE ) ); - $missed = 0; - if (is_array($server_version_list) === true) { foreach ($server_version_list as $server) { if (strpos( $server['version'], - (string) floor($config['current_package']) + (string) floor((int) $config['current_package']) ) === false ) { $missed++; diff --git a/pandora_console/include/class/TreeService.class.php b/pandora_console/include/class/TreeService.class.php index b9420eba44..4b3a9061cc 100644 --- a/pandora_console/include/class/TreeService.class.php +++ b/pandora_console/include/class/TreeService.class.php @@ -252,6 +252,7 @@ class TreeService extends Tree protected function getProcessedServices() { $is_favourite = $this->getServiceFavouriteFilter(); + $service_search = $this->getServiceNameSearchFilter(); if (users_can_manage_group_all('AR')) { $groups_acl = ''; @@ -259,6 +260,16 @@ class TreeService extends Tree $groups_acl = 'AND ts.id_group IN ('.implode(',', $this->userGroupsArray).')'; } + $exclude_children = 'ts.id NOT IN ( + SELECT DISTINCT id_service_child + FROM tservice_element + WHERE id_server_meta = 0 + )'; + + if ($service_search !== '') { + $exclude_children = '1=1'; + } + $sql = sprintf( 'SELECT ts.id, @@ -277,15 +288,14 @@ class TreeService extends Tree FROM tservice ts LEFT JOIN tservice_element tse ON tse.id_service = ts.id - WHERE ts.id NOT IN ( - SELECT DISTINCT id_service_child - FROM tservice_element - WHERE id_server_meta = 0 - ) + WHERE %s + %s %s %s GROUP BY ts.id', + $exclude_children, $is_favourite, + $service_search, $groups_acl ); @@ -722,6 +732,23 @@ class TreeService extends Tree } + /** + * Retrieve SQL filter for current filter + * + * @return string SQL filter. + */ + protected function getServiceNameSearchFilter() + { + if (isset($this->filter['searchService']) === true + && empty($this->filter['searchService']) === false + ) { + return " AND (ts.name LIKE '%".$this->filter['searchService']."%' OR ts.description LIKE '%".$this->filter['searchService']."%')"; + } + + return ''; + } + + /** * Overwrites partial functionality of general Tree.class. * diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index baf2e77199..7a4a2b698c 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC220714'; +$build_version = 'PC220721'; $pandora_version = 'v7.0NG.763'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php index 6c27efe2e0..3f84a31b13 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -5996,6 +5996,18 @@ function send_test_email( } +/** + * Microtime float number. + * + * @return float + */ +function microtime_float() +{ + list($usec, $sec) = explode(' ', microtime()); + return ((float) $usec + (float) $sec); +} + + /** * Return array of ancestors of item, given array. * diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index d0a42460b1..884a0a74be 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -2199,9 +2199,9 @@ function events_create_event( 'id_usuario' => $id_user, 'id_grupo' => $id_group, 'estado' => $status, - 'timestamp' => 'NOW()', + 'timestamp' => date('Y-m-d H:i:s'), 'evento' => $event, - 'utimestamp' => 'UNIX_TIMESTAMP(NOW())', + 'utimestamp' => time(), 'event_type' => $event_type, 'id_agentmodule' => $id_agent_module, 'id_alert_am' => $id_aam, diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 94d329fb8e..b97e0398b6 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -1013,13 +1013,17 @@ function html_print_select( if(count_shift_'.$id.' == 2 ){ if(shift_array_'.$id.'[0] <= shift_array_'.$id.'[1]) { for (var i = shift_array_'.$id.'[0]; i <= shift_array_'.$id.'[1]; i++) { - var option_value = $("#'.$id.' option").eq(i).val(); - options_selecteds_'.$id.'.push(option_value); + if ($("#'.$id.' option").eq(i).text().includes($(".select2-search__field").val()) == true) { + var option_value = $("#'.$id.' option").eq(i).val(); + options_selecteds_'.$id.'.push(option_value); + } } } else { for (var i = shift_array_'.$id.'[0]; i >= shift_array_'.$id.'[1]; i--) { - var option_value = $("#'.$id.' option").eq(i).val(); - options_selecteds_'.$id.'.push(option_value); + if ($("#'.$id.' option").eq(i).text().includes($(".select2-search__field").val()) == true) { + var option_value = $("#'.$id.' option").eq(i).val(); + options_selecteds_'.$id.'.push(option_value); + } } } @@ -6134,3 +6138,36 @@ function html_print_select_agent_secondary($agent, $id_agente, $options=[]) return $output; } + + +/** + * Prints a simple 'Go Back' button. + * + * @param string $url Destination Url. + * @param array $options Options. + * `button_class`: Class for button. 'w100p' by default. + * `title`: Title of the button. 'Go Back' by default. + * `action_class`: Class of icon of button. 'cancel' by default. + * @param boolean $return If true, return a formed HTML element. + * + * @return mixed + */ +function html_print_go_back_button(string $url, array $options=[], bool $return=false) +{ + $output = html_print_div( + [ + 'class' => ($options['button_class'] ?? 'w100p'), + 'content' => html_print_button( + ($options['title'] ?? __('Go back')), + 'go_back', + false, + 'window.location.href = \''.$url.'\'', + 'class="sub '.($options['action_class'] ?? ' cancel').' right"', + true + ), + ], + $return + ); + + return $output; +} diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 08936c170b..82451e1ac2 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -11121,7 +11121,7 @@ function reporting_get_group_stats($id_group=0, $access='AR', $recursion=true) * * @return array Group statistics */ -function reporting_get_group_stats_resume($id_group=0, $access='AR', $ignore_permissions=false) +function reporting_get_group_stats_resume($id_group=0, $access='AR', $ignore_permissions=false, $recursive=false) { global $config; @@ -11165,6 +11165,8 @@ function reporting_get_group_stats_resume($id_group=0, $access='AR', $ignore_per $id_group = array_keys( users_get_groups($config['id_user'], $access, false) ); + } else if ($recursive === true) { + $id_group = groups_get_children_ids($id_group); } // ----------------------------------------------------------------- @@ -11295,7 +11297,7 @@ function reporting_get_group_stats_resume($id_group=0, $access='AR', $ignore_per $group_stat = db_get_all_rows_sql($sql); $data = [ 'monitor_checks' => (int) $group_stat[0]['modules'], - 'monitor_alerts' => (int) groups_monitor_alerts($group_array), + 'monitor_alerts' => (int) groups_monitor_alerts($group_stat[0]['id_group']), 'monitor_alerts_fired' => (int) $group_stat[0]['alerts_fired'], 'monitor_alerts_fire_count' => (int) $group_stat[0]['alerts_fired'], 'monitor_ok' => (int) $group_stat[0]['normal'], @@ -11309,10 +11311,33 @@ function reporting_get_group_stats_resume($id_group=0, $access='AR', $ignore_per 'agent_warning' => (int) $group_stat[0]['agents_warnings'], 'agent_critical' => (int) $group_stat[0]['agents_critical'], 'total_checks' => (int) $group_stat[0]['modules'], - 'total_alerts' => (int) groups_monitor_alerts($group_array), + 'total_alerts' => (int) groups_monitor_alerts($group_stat[0]['id_group']), 'total_agents' => (int) $group_stat[0]['agents'], 'utimestamp' => (int) $group_stat[0]['utimestamp'], ]; + + if ($recursive === true) { + unset($group_stat[0]); + foreach ($group_stat as $value) { + $data['monitor_checks'] = ($data['monitor_checks'] + $value['modules']); + $data['monitor_alerts'] = ($data['monitor_alerts'] + groups_monitor_alerts($value['id_group'])); + $data['monitor_alerts_fired'] = ($data['monitor_alerts_fired'] + $value['alerts_fired']); + $data['monitor_alerts_fire_count'] = ($data['monitor_alerts_fire_count'] + $value['alerts_fired']); + $data['monitor_ok'] = ($data['monitor_ok'] + $value['normal']); + $data['monitor_warning'] = ($data['monitor_warning'] + $value['warning']); + $data['monitor_critical'] = ($data['monitor_critical'] + $value['critical']); + $data['monitor_unknown'] = ($data['monitor_unknown'] + $value['unknown']); + $data['monitor_not_init'] = ($data['monitor_not_init'] + $value['non-init']); + $data['agent_not_init'] = ($data['agent_not_init'] + $value['agents_not_init']); + $data['agent_unknown'] = ($data['agent_unknown'] + $value['agents_unknown']); + $data['agent_ok'] = ($data['agent_ok'] + $value['agents_normal']); + $data['agent_warning'] = ($data['agent_warning'] + $value['agents_warnings']); + $data['agent_critical'] = ($data['agent_critical'] + $value['agents_critical']); + $data['total_checks'] = ($data['total_checks'] + $value['modules']); + $data['total_alerts'] = ($data['total_alerts'] + groups_monitor_alerts($value['id_group'])); + $data['total_agents'] = ($data['total_agents'] + $value['agents']); + } + } } } diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index d0e747e031..6b6b446f7d 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -3416,7 +3416,17 @@ function ui_print_datatable(array $parameters) } // Languages. - $processing = __('Processing'); + $processing = '
'; + $processing .= ''.__('Processing').' '; + $processing .= str_replace( + '"', + "'", + html_print_image( + 'images/spinner.gif', + true + ) + ); + $processing .= '
'; // Extra html. $extra = ''; @@ -3524,6 +3534,10 @@ function ui_print_datatable(array $parameters) url: "'.ui_get_full_url('ajax.php', false, false, false).'", type: "POST", dataSrc: function (json) { + if($("#'.$form_id.'_search_bt") != undefined) { + $("#'.$form_id.'_loading").remove(); + } + if (json.error) { console.error(json.error); $("#error-'.$table_id.'").html(json.error); @@ -3570,6 +3584,18 @@ function ui_print_datatable(array $parameters) } }, data: function (data) { + if($("#'.$form_id.'_search_bt") != undefined) { + var loading = \''.html_print_image( + 'images/spinner.gif', + true, + [ + 'id' => $form_id.'_loading', + 'class' => 'loading-search-datatables-button', + ] + ).'\'; + $("#'.$form_id.'_search_bt").parent().append(loading); + } + inputs = $("#'.$form_id.' :input"); values = {}; diff --git a/pandora_console/include/lib/Dashboard/Widgets/groups_status.php b/pandora_console/include/lib/Dashboard/Widgets/groups_status.php index c250da93da..51a6018d47 100755 --- a/pandora_console/include/lib/Dashboard/Widgets/groups_status.php +++ b/pandora_console/include/lib/Dashboard/Widgets/groups_status.php @@ -193,6 +193,10 @@ class GroupsStatusWidget extends Widget $values['groupId'] = $decoder['groupId']; } + if (isset($decoder['groupRecursion']) === true) { + $values['groupRecursion'] = $decoder['groupRecursion']; + } + return $values; } @@ -224,6 +228,16 @@ class GroupsStatusWidget extends Widget ], ]; + $inputs[] = [ + 'label' => __('Group recursion'), + 'arguments' => [ + 'name' => 'groupRecursion', + 'id' => 'groupRecursion', + 'type' => 'switch', + 'value' => $values['groupRecursion'], + ], + ]; + return $inputs; } @@ -239,6 +253,7 @@ class GroupsStatusWidget extends Widget $values = parent::getPost(); $values['groupId'] = \get_parameter('groupId', 0); + $values['groupRecursion'] = \get_parameter_switch('groupRecursion', 0); return $values; } @@ -260,9 +275,12 @@ class GroupsStatusWidget extends Widget $output = ''; - $user_groups = \users_get_groups(false, 'AR', false); - - $stats = \reporting_get_group_stats_resume($this->values['groupId'], 'AR', true); + $stats = \reporting_get_group_stats_resume( + $this->values['groupId'], + 'AR', + true, + (bool) $this->values['groupRecursion'] + ); $data = '
'; $data .= ui_print_group_icon( @@ -393,7 +411,7 @@ class GroupsStatusWidget extends Widget $table->data[0][0] .= ''; $table->data[0][1] = ''; $table->data[0][1] .= ''; - $table->data[0][1] .= $stats['monitor_total']; + $table->data[0][1] .= $stats['total_checks']; $table->data[0][1] .= ''; $table->data[0][1] .= ''; diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index e886ccc7aa..9234ed8e9b 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -9078,3 +9078,33 @@ div#err_msg_centralised { margin-bottom: 4px !important; padding: 2px 5px !important; } + +.dataTables_wrapper { + overflow: auto; +} + +.dataTables_wrapper .dataTables_processing { + margin-top: -37px !important; + top: 50px !important; + padding-top: 0px !important; + height: 0px !important; + background: transparent !important; +} + +.dataTables_wrapper .dataTables_processing .processing-datatables-inside { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + height: 100%; +} + +.dataTables_wrapper .dataTables_processing .processing-datatables-inside img { + margin-left: 20px; +} + +.loading-search-datatables-button { + float: right; + margin-right: -110px; + margin-top: 13px; +} diff --git a/pandora_console/install.php b/pandora_console/install.php index 1511a548a0..a4341784b8 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@
getRequest('password', null); } - if (!empty($user) && !empty($password)) { - $user_in_db = process_user_login($user, $password); - if ($user_in_db !== false) { - $this->logged = true; - $this->user = $user_in_db; - $this->loginTime = time(); - $this->errorLogin = false; + if (empty($user) === false + && empty($password) === false + ) { + $user_in_db = db_get_row_filter( + 'tusuario', + ['id_user' => $user], + '*' + ); - // The user login was successful, but the second step is not completed - if ($this->isDobleAuthRequired()) { - $this->needDoubleAuth = true; - } - } else { - $this->logged = false; + $this->logged = false; $this->loginTime = false; $this->errorLogin = true; $this->needDoubleAuth = false; $this->errorDoubleAuth = false; + + if ($user_in_db !== false) { + if (((bool) $user_in_db['is_admin'] === false) + && ((bool) $user_in_db['not_login'] === true + || (is_metaconsole() === false + && has_metaconsole() === true + && is_management_allowed() === false + && (bool) $user_in_db['metaconsole_access_node'] === false)) + ) { + $this->logged = false; + $this->loginTime = false; + $this->errorLogin = true; + $this->needDoubleAuth = false; + $this->errorDoubleAuth = false; + } else { + $user_proccess_login = process_user_login($user, $password); + if ($user_proccess_login !== false) { + $this->logged = true; + $this->user = $user_proccess_login; + $this->loginTime = time(); + $this->errorLogin = false; + // The user login was successful, but the second step is not completed. + if ($this->isDobleAuthRequired()) { + $this->needDoubleAuth = true; + } + } + } } } diff --git a/pandora_console/mobile/index.php b/pandora_console/mobile/index.php index 1e65c30bdf..dc79e07c04 100644 --- a/pandora_console/mobile/index.php +++ b/pandora_console/mobile/index.php @@ -193,15 +193,23 @@ switch ($action) { if ($user->isWaitingDoubleAuth()) { if ($user->validateDoubleAuthCode()) { - // Logged. Refresh the page - header('Location: .'); + $url = ui_get_full_url(''); + $url = str_replace("\n", '', $url); + $url = str_replace('?action=logout', '', $url); + + // Logged. Refresh the page. + header('Location: '.$url); return; } else { $user->showDoubleAuthPage(); } } else { - // Logged. Refresh the page - header('Location: .'); + $url = ui_get_full_url(''); + $url = str_replace("\n", '', $url); + $url = str_replace('?action=logout', '', $url); + + // Logged. Refresh the page. + header('Location: '.$url); return; } } else { @@ -294,6 +302,42 @@ switch ($action) { $_GET['id'] = $id_map; break; + case 'External link': + $full_url = ui_get_full_url(); + $section_data = io_safe_output($section_data); + + $host_full = parse_url($full_url, PHP_URL_HOST); + $host_section = parse_url($section_data, PHP_URL_HOST); + + if ($host_full !== $host_section) { + $has_mobile = strpos($section_data, 'mobile'); + if ($has_mobile === false) { + $pos = strpos($section_data, '/index'); + if ($pos !== false) { + $section_data = substr_replace($section_data, '/mobile', $pos, 0); + } + } + + echo ''; + } else { + if (strpos($full_url, 'event') !== false) { + $page = 'events'; + } + + if (strpos($full_url, 'alert') !== false) { + $page = 'alerts'; + } + + if (strpos($full_url, 'tactical') !== false) { + $page = 'tactical'; + } + + if (strpos($full_url, 'visual_console') !== false) { + $page = 'visualmap'; + } + } + break; + case 'Group view': default: // No content. diff --git a/pandora_console/mobile/operation/agent.php b/pandora_console/mobile/operation/agent.php index 84e45f3164..4806cfda4d 100644 --- a/pandora_console/mobile/operation/agent.php +++ b/pandora_console/mobile/operation/agent.php @@ -363,12 +363,6 @@ class Agent $events = new Events(); $events->addJavascriptDialog(); - $options = $events->get_event_dialog_options(); - $ui->addDialog($options); - - $options = $events->get_event_dialog_error_options($options); - $ui->addDialog($options); - $ui->contentAddHtml(""); $ui->contentAddHtml(""); diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 781301e2e0..52997e50e4 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -482,21 +482,23 @@ if (is_ajax() === true) { $tmp->b64 = base64_encode(json_encode($tmp)); // Show comments events. - $tmp->user_comment = $tmp->comments; - if ($tmp->comments !== 'undefined' && strlen($tmp->comments) > 80) { - $tmp->user_comment .= '  '; - $tmp->user_comment .= ' [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 0fa56fbad0..9c3c27edd7 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.763 -%define release 220714 +%define release 220721 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index b3c16b221f..789227fc8d 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.763 -%define release 220714 +%define release 220721 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index cb53f0d662..11b86af066 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.763" -PI_BUILD="220714" +PI_BUILD="220721" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 6e56200ebe..2be8ec2944 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.763 Build 220714"; +my $version = "7.0NG.763 Build 220721"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index f87305a945..84b167fe69 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.763 Build 220714"; +my $version = "7.0NG.763 Build 220721"; # save program name for logging my $progname = basename($0);