diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 72246ea53c..302dcb34fa 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-220704 +Version: 7.0NG.763-220714 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 6bbcbc32c4..f511268c3d 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-220704" +pandora_version="7.0NG.763-220714" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index e797e34112..642404ed39 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 => '220704'; +use constant AGENT_BUILD => '220714'; # 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 078acf22be..a277da178a 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 220704 +%define release 220714 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 da19200e3d..b0f3daa421 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 220704 +%define release 220714 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 a87a343938..91530f5405 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="220704" +PI_BUILD="220714" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 1db7c77c21..00cc285faa 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{220704} +{220714} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index adda88535b..0b41f57aff 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 220704") +#define PANDORA_VERSION ("7.0NG.763 Build 220714") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 9df0778fe3..ee3e90d075 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 220704))" + VALUE "ProductVersion", "(7.0NG.763(Build 220714))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 283e3b1287..2c98d8af56 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.763-220704 +Version: 7.0NG.763-220714 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 1680735c64..94d988b6ea 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/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-220704" +pandora_version="7.0NG.763-220714" package_pear=0 package_pandora=1 diff --git a/pandora_console/extras/mr/56.sql b/pandora_console/extras/mr/56.sql index 552928b4ac..13cc050dfc 100644 --- a/pandora_console/extras/mr/56.sql +++ b/pandora_console/extras/mr/56.sql @@ -1,5 +1,41 @@ START TRANSACTION; +CREATE TABLE IF NOT EXISTS `tuser_task` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `function_name` VARCHAR(80) NOT NULL DEFAULT '', + `parameters` TEXT , + `name` VARCHAR(60) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; + + +CREATE TABLE IF NOT EXISTS `tuser_task_scheduled` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `id_usuario` VARCHAR(255) NOT NULL DEFAULT '0', + `id_user_task` INT UNSIGNED NOT NULL DEFAULT 0, + `args` TEXT, + `scheduled` ENUM('no','hourly','daily','weekly','monthly','yearly','custom') DEFAULT 'no', + `last_run` INT UNSIGNED DEFAULT 0, + `custom_data` INT NULL DEFAULT 0, + `flag_delete` TINYINT UNSIGNED NOT NULL DEFAULT 0, + `id_grupo` INT UNSIGNED NOT NULL DEFAULT 0, + `enabled` TINYINT UNSIGNED NOT NULL DEFAULT 1, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; + +ALTER TABLE `tautoconfig` ADD COLUMN `type_execution` VARCHAR(100) NOT NULL DEFAULT 'start'; +ALTER TABLE `tautoconfig` ADD COLUMN `type_periodicity` VARCHAR(100) NOT NULL DEFAULT 'weekly'; +ALTER TABLE `tautoconfig` ADD COLUMN `monday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `tuesday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `wednesday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `thursday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `friday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `saturday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `sunday` TINYINT DEFAULT 0; +ALTER TABLE `tautoconfig` ADD COLUMN `periodically_day_from` INT UNSIGNED DEFAULT NULL; +ALTER TABLE `tautoconfig` ADD COLUMN `periodically_time_from` time NULL DEFAULT NULL; +ALTER TABLE `tautoconfig` ADD COLUMN `executed` TINYINT UNSIGNED NOT NULL DEFAULT 0; + ALTER TABLE `tusuario` DROP COLUMN `metaconsole_assigned_server`; COMMIT; diff --git a/pandora_console/images/alarm-off.png b/pandora_console/images/alarm-off.png new file mode 100644 index 0000000000..99f3895e0b Binary files /dev/null and b/pandora_console/images/alarm-off.png differ diff --git a/pandora_console/images/gear.png b/pandora_console/images/gear.png new file mode 100644 index 0000000000..e383f94e44 Binary files /dev/null and b/pandora_console/images/gear.png differ diff --git a/pandora_console/images/no-alerts-discovered.png b/pandora_console/images/no-alerts-discovered.png new file mode 100644 index 0000000000..ec9b9a88b1 Binary files /dev/null and b/pandora_console/images/no-alerts-discovered.png differ diff --git a/pandora_console/images/play-white.png b/pandora_console/images/play-white.png new file mode 100644 index 0000000000..2b9b1e93b2 Binary files /dev/null and b/pandora_console/images/play-white.png differ diff --git a/pandora_console/images/silence-alerts.png b/pandora_console/images/silence-alerts.png new file mode 100644 index 0000000000..22b1c95930 Binary files /dev/null and b/pandora_console/images/silence-alerts.png differ diff --git a/pandora_console/images/sound_wave.png b/pandora_console/images/sound_wave.png new file mode 100644 index 0000000000..d04c823de3 Binary files /dev/null and b/pandora_console/images/sound_wave.png differ diff --git a/pandora_console/images/stop.png b/pandora_console/images/stop.png new file mode 100644 index 0000000000..20903a0132 Binary files /dev/null and b/pandora_console/images/stop.png differ diff --git a/pandora_console/include/ajax/events.php b/pandora_console/include/ajax/events.php index 77d9647a4b..5a92d33c16 100644 --- a/pandora_console/include/ajax/events.php +++ b/pandora_console/include/ajax/events.php @@ -55,6 +55,7 @@ if (! check_acl($config['id_user'], 0, 'ER') return; } +$drawConsoleSound = (bool) get_parameter('drawConsoleSound', false); $process_buffers = (bool) get_parameter('process_buffers', false); $get_extended_event = (bool) get_parameter('get_extended_event'); $change_status = (bool) get_parameter('change_status'); @@ -2225,6 +2226,228 @@ if ($process_buffers === true) { return; } +if ($drawConsoleSound === true) { + echo ui_require_css_file('wizard', 'include/styles/', true); + echo ui_require_css_file('discovery', 'include/styles/', true); + echo ui_require_css_file('sound_events', 'include/styles/', true); + $output = '<div id="tabs-sound-modal">'; + // Header tabs. + $output .= '<ul class="tabs-sound-modal-options">'; + $output .= '<li>'; + $output .= '<a href="#tabs-sound-modal-1">'; + $output .= html_print_image( + 'images/gear.png', + true, + [ + 'title' => __('Options'), + 'class' => 'invert_filter', + ] + ); + $output .= '</a>'; + $output .= '</li>'; + $output .= '<li>'; + $output .= '<a href="#tabs-sound-modal-2">'; + $output .= html_print_image( + 'images/list.png', + true, + [ + 'title' => __('Events list'), + 'class' => 'invert_filter', + ] + ); + $output .= '</a>'; + $output .= '</li>'; + $output .= '</ul>'; + + // Content tabs. + $output .= '<div id="tabs-sound-modal-1">'; + $output .= '<h3 class="console-configuration">'; + $output .= __('Console configuration'); + $output .= '</h3>'; + $inputs = []; + + // Load filter. + $fields = \events_get_event_filter_select(); + $inputs[] = [ + 'label' => \__('Set condition'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'filter_id', + 'selected' => 0, + 'return' => true, + 'nothing' => \__('All new events'), + 'nothing_value' => 0, + 'class' => 'fullwidth', + ], + ]; + + $times_interval = [ + 10 => '10 '.__('seconds'), + 15 => '15 '.__('seconds'), + 30 => '30 '.__('seconds'), + 60 => '60 '.__('seconds'), + ]; + + $times_sound = [ + 2 => '2 '.__('seconds'), + 5 => '5 '.__('seconds'), + 10 => '10 '.__('seconds'), + 15 => '15 '.__('seconds'), + 30 => '30 '.__('seconds'), + 60 => '60 '.__('seconds'), + ]; + + $inputs[] = [ + 'class' => 'interval-sounds', + 'direct' => 1, + 'block_content' => [ + [ + 'label' => __('Interval'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $times_interval, + 'name' => 'interval', + 'selected' => 10, + 'return' => true, + ], + ], + [ + 'label' => __('Time Sound'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $times_sound, + 'name' => 'time_sound', + 'selected' => 10, + 'return' => true, + ], + ], + ], + ]; + + $sounds = [ + 'aircraftalarm.wav' => 'Air craft alarm', + 'air_shock_alarm.wav' => 'Air shock alarm', + 'alien_alarm.wav' => 'Alien alarm', + 'alien_beacon.wav' => 'Alien beacon', + 'bell_school_ringing.wav' => 'Bell school ringing', + 'Door_Alarm.wav' => 'Door alarm', + 'EAS_beep.wav' => 'EAS beep', + 'Firewarner.wav' => 'Fire warner', + 'HardPCMAlarm.wav' => 'Hard PCM Alarm', + 'negativebeep.wav' => 'Negative beep', + 'Star_Trek_emergency_simulation.wav' => 'StarTrek emergency simulation', + ]; + + $inputs[] = [ + 'class' => 'test-sounds', + 'direct' => 1, + 'block_content' => [ + [ + 'label' => \__('Sound melody'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $sounds, + 'name' => 'sound_id', + 'selected' => 'Star_Trek_emergency_simulation.wav', + 'return' => true, + 'class' => 'fullwidth', + ], + ], + [ + 'arguments' => [ + 'type' => 'button', + 'name' => 'melody_sound', + 'label' => __('Test sound'), + 'attributes' => 'class="sub upd"', + 'return' => true, + ], + ], + ], + ]; + + // Print form. + $output .= HTML::printForm( + [ + 'form' => [ + 'action' => '', + 'method' => 'POST', + ], + 'inputs' => $inputs, + ], + true, + false + ); + $output .= '</div>'; + + $output .= '<div id="tabs-sound-modal-2">'; + $output .= '<h3 class="title-discovered-alerts">'; + $output .= __('Discovered alerts'); + $output .= '</h3>'; + $output .= '<div class="empty-discovered-alerts">'; + $output .= html_print_image( + 'images/no-alerts-discovered.png', + true, + [ + 'title' => __('No alerts discovered'), + 'class' => 'invert_filter', + ] + ); + $output .= '<span class="text-discovered-alerts">'; + $output .= __('Congrats! there’s nothing to show'); + $output .= '</span>'; + $output .= '</div>'; + $output .= '<div class="elements-discovered-alerts"><ul></ul></div>'; + $output .= '</div>'; + $output .= '</div>'; + + $output .= '<div class="actions-sound-modal">'; + $output .= '<div id="progressbar_time"></div>'; + $output .= '<div class="buttons-sound-modal">'; + $output .= '<div class="container-button-play">'; + $output .= html_print_input( + [ + 'label' => __('Start'), + 'type' => 'button', + 'name' => 'start-search', + 'attributes' => 'class="sub play"', + 'return' => true, + ], + 'div', + true + ); + $output .= '</div>'; + $output .= '<div class="container-button-alert">'; + $output .= html_print_input( + [ + 'type' => 'button', + 'name' => 'no-alerts', + 'label' => __('No alerts'), + 'attributes' => 'class="sub alerts"', + 'return' => true, + ], + 'div', + true + ); + $output .= '</div>'; + + $output .= html_print_input( + [ + 'type' => 'hidden', + 'name' => 'mode_alert', + 'value' => 0, + 'return' => true, + ], + 'div', + true + ); + $output .= '</div>'; + $output .= '</div>'; + + echo $output; + return; +} + if ($get_events_fired) { global $config; $filter_id = (int) get_parameter('filter_id', 0); diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index aa3d82e1f7..baf2e77199 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 = 'PC220704'; +$build_version = 'PC220714'; $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 8b18fe6417..6c27efe2e0 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -2263,7 +2263,14 @@ function check_login($output=true) || (isset($_SESSION['merge-request-user-trick']) === true && $_SESSION['merge-request-user-trick'] === $_SESSION['id_usuario']) ) { - $config['id_user'] = $_SESSION['id_usuario']; + if (isset($config['auth']) === true && $config['auth'] === 'ad' && is_user($_SESSION['id_usuario'])) { + // User name in active directory is case insensitive. + // Get the user name from database. + $user_info = get_user_info($_SESSION['id_usuario']); + $config['id_user'] = $user_info['id_user']; + } else { + $config['id_user'] = $_SESSION['id_usuario']; + } return true; } diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index 5b5d66c85f..3962538669 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -4294,3 +4294,140 @@ function agents_get_offspring(int $id_agent) return $return; } + + +function agents_get_starmap(int $id_agent, float $width=0, float $height=0) +{ + ui_require_css_file('heatmap'); + + $all_modules = agents_get_modules($id_agent); + if (empty($all_modules)) { + return null; + } + + $total_modules = count($all_modules); + + // Best square. + $high = (float) max($width, $height); + $low = 0.0; + + while (abs($high - $low) > 0.000001) { + $mid = (($high + $low) / 2.0); + $midval = (floor($width / $mid) * floor($height / $mid)); + if ($midval >= $total_modules) { + $low = $mid; + } else { + $high = $mid; + } + } + + $square_length = min(($width / floor($width / $low)), ($height / floor($height / $low))); + + // Print starmap. + $html = sprintf( + '<svg id="svg_%s" style="width: %spx; height: %spx;">', + $id_agent, + $width, + $height + ); + + $html .= '<g>'; + $row = 0; + $column = 0; + $x = 0; + $y = 0; + $cont = 1; + foreach ($all_modules as $key => $value) { + // Colour by status. + $status = modules_get_agentmodule_status($key); + switch ($status) { + case 0: + case 4: + case 300: + $status = 'normal'; + break; + + case 1: + case 100: + $status = 'critical'; + break; + + case 2: + case 200: + $status = 'warning'; + break; + + case 3: + $status = 'unknown'; + break; + + case 5: + $status = 'notinit'; + break; + } + + $html .= sprintf( + '<rect id="%s" x="%s" y="%s" row="%s" col="%s" width="%s" height="%s" class="%s_%s"></rect>', + 'rect_'.$cont, + $x, + $y, + $row, + $column, + $square_length, + $square_length, + $status, + random_int(1, 10) + ); + + $y += $square_length; + $row++; + if ((int) ($y + $square_length) > (int) $height) { + $y = 0; + $x += $square_length; + $row = 0; + $column++; + } + + if ((int) ($x + $square_length) > (int) $width) { + $x = 0; + $y += $square_length; + $column = 0; + $row++; + } + + $cont++; + } + ?> + <script type="text/javascript"> + $(document).ready(function() { + const total_modules = '<?php echo $total_modules; ?>'; + + function getRandomInteger(min, max) { + return Math.floor(Math.random() * max) + min; + } + + function oneSquare(solid, time) { + var randomPoint = getRandomInteger(1, total_modules); + let target = $(`#rect_${randomPoint}`); + let class_name = target.attr('class'); + class_name = class_name.split('_')[0]; + setTimeout(function() { + target.removeClass(); + target.addClass(`${class_name}_${solid}`); + oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900)); + }, time); + } + + let cont = 0; + while (cont < Math.ceil(total_modules / 3)) { + oneSquare(getRandomInteger(1, 10), getRandomInteger(100, 900)); + cont ++; + } + }); + </script> + <?php + $html .= '</g>'; + $html .= '</svg>'; + + return $html; +} diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php index 8e9c026d77..d0a42460b1 100644 --- a/pandora_console/include/functions_events.php +++ b/pandora_console/include/functions_events.php @@ -1424,16 +1424,19 @@ function events_get_all( $group_selects = ''; if ($group_by != '') { if ($count === false) { - $group_selects = ',COUNT(id_evento) AS event_rep, - GROUP_CONCAT(DISTINCT user_comment SEPARATOR "<br>") AS comments, - MAX(utimestamp) as timestamp_last, - MIN(utimestamp) as timestamp_first, - MAX(id_evento) as max_id_evento'; - $idx = array_search('te.user_comment', $fields); if ($idx !== false) { unset($fields[$idx]); } + + $group_selects = sprintf( + ',COUNT(id_evento) AS event_rep, + %s + MAX(utimestamp) as timestamp_last, + MIN(utimestamp) as timestamp_first, + MAX(id_evento) as max_id_evento', + ($idx !== false) ? 'GROUP_CONCAT(DISTINCT user_comment SEPARATOR "<br>") AS comments,' : '' + ); } } else { $idx = array_search('te.user_comment', $fields); diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php index 4f471f31f1..11012b96eb 100644 --- a/pandora_console/include/functions_graph.php +++ b/pandora_console/include/functions_graph.php @@ -2558,7 +2558,8 @@ function combined_graph_summatory_average( function graphic_agentaccess( int $id_agent, int $period=0, - ?bool $return=false + ?bool $return=false, + ?bool $agent_view=false ) { global $config; @@ -2599,6 +2600,10 @@ function graphic_agentaccess( $options = []; $options['grid']['hoverable'] = true; + if ($agent_view === true) { + $options['agent_view'] = true; + } + if ($return === true) { return vbar_graph($data_array, $options, 1); } else { diff --git a/pandora_console/include/global_config.php b/pandora_console/include/global_config.php index d23c6994a6..b14c2b0ae5 100644 --- a/pandora_console/include/global_config.php +++ b/pandora_console/include/global_config.php @@ -1,5 +1,7 @@ <?php global $config; +global $pandora_version; +global $build_version; require_once __DIR__.'/config.php'; diff --git a/pandora_console/include/graphs/fgraph.php b/pandora_console/include/graphs/fgraph.php index b734fd3553..7082439384 100644 --- a/pandora_console/include/graphs/fgraph.php +++ b/pandora_console/include/graphs/fgraph.php @@ -494,7 +494,7 @@ function vbar_graph( 'weight' => $options['x']['font']['weight'], 'family' => $options['x']['font']['family'], 'variant' => $options['x']['font']['variant'], - 'color' => $options['x']['font']['color'], + 'color' => ($options['agent_view'] === true) ? 'black' : $options['x']['font']['color'], ], 'show' => $options['x']['show'], 'position' => $options['x']['position'], @@ -516,7 +516,7 @@ function vbar_graph( 'weight' => $options['y']['font']['weight'], 'family' => $options['y']['font']['family'], 'variant' => $options['y']['font']['variant'], - 'color' => $options['y']['font']['color'], + 'color' => ($options['agent_view'] === true) ? 'black' : $options['y']['font']['color'], ], 'show' => $options['y']['show'], 'position' => $options['y']['position'], @@ -534,8 +534,8 @@ function vbar_graph( 'aboveData' => $options['grid']['aboveData'], 'color' => $options['grid']['color'], 'backgroundColor' => $options['grid']['backgroundColor'], - 'margin' => $options['grid']['margin'], - 'labelMargin' => $options['grid']['labelMargin'], + 'margin' => ($options['agent_view'] === true) ? 6 : $options['grid']['margin'], + 'labelMargin' => ($options['agent_view'] === true) ? 12 : $options['grid']['labelMargin'], 'axisMargin' => $options['grid']['axisMargin'], 'markings' => $options['grid']['markings'], 'borderWidth' => $options['grid']['borderWidth'], @@ -561,6 +561,10 @@ function vbar_graph( ], ]; + if ($options['agent_view'] === true) { + $params['agent_view'] = true; + } + if (empty($params['data']) === true) { return graph_nodata_image( 0, diff --git a/pandora_console/include/graphs/functions_flot.php b/pandora_console/include/graphs/functions_flot.php index 033382e5ea..8f5256e757 100644 --- a/pandora_console/include/graphs/functions_flot.php +++ b/pandora_console/include/graphs/functions_flot.php @@ -670,6 +670,10 @@ function flot_vcolumn_chart(array $options) $style .= 'height:'.$options['generals']['pdf']['height'].'px;'; } + if ($options['agent_view'] === true) { + $style = 'width: 95%; height: 85px'; + } + $class = ''; if ($options['generals']['rotate'] === true) { $class = 'bars-graph-rotate'; diff --git a/pandora_console/include/graphs/pandora.d3.js b/pandora_console/include/graphs/pandora.d3.js index d081cf7fca..896149b892 100644 --- a/pandora_console/include/graphs/pandora.d3.js +++ b/pandora_console/include/graphs/pandora.d3.js @@ -2869,7 +2869,7 @@ function donutNarrowGraph( arc = d3.svg .arc() .outerRadius(radius) - .innerRadius(radius - radius / 6); + .innerRadius(radius - radius / 4); svg = donutbody .append("svg") diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js index ab276cda9e..b7f4170afa 100644 --- a/pandora_console/include/javascript/pandora_events.js +++ b/pandora_console/include/javascript/pandora_events.js @@ -1,4 +1,4 @@ -/*global jQuery, $, forced_title_callback, confirmDialog*/ +/*global jQuery, $, forced_title_callback, confirmDialog, progressTimeBar*/ // Show the modal window of an event function show_event_dialog(event, dialog_page) { @@ -1028,3 +1028,256 @@ function process_buffers(buffers) { }); } } + +function openSoundEventModal(settings) { + settings = JSON.parse(atob(settings)); + + // Check modal exists and is open. + if ( + $("#modal-sound").hasClass("ui-dialog-content") && + $("#modal-sound").dialog("isOpen") + ) { + return; + } + + // Initialize modal. + $("#modal-sound") + .empty() + .dialog({ + title: settings.title, + resizable: false, + modal: true, + position: { my: "right top", at: "right bottom", of: window }, + overlay: { + opacity: 0.5, + background: "black" + }, + width: 600, + height: 600, + open: function() { + $.ajax({ + method: "post", + url: settings.url, + data: { + page: settings.page, + drawConsoleSound: 1 + }, + dataType: "html", + success: function(data) { + $("#modal-sound").append(data); + $("#tabs-sound-modal").tabs({ + disabled: [1] + }); + + // Test sound. + $("#button-melody_sound").click(function() { + var sound = false; + if ($("#id_sound_event").length == 0) { + sound = true; + } + + test_sound_button(sound); + }); + + // Play Stop. + $("#button-start-search").click(function() { + var mode = $("#hidden-mode_alert").val(); + var action = false; + if (mode == 0) { + action = true; + } + + action_events_sound(action, settings); + }); + + // Silence Alert. + $("#button-no-alerts").click(function() { + if ($("#button-no-alerts").hasClass("silence-alerts") === true) { + // Remove audio. + remove_audio(); + + // Clean events. + $("#tabs-sound-modal .elements-discovered-alerts ul").empty(); + $("#tabs-sound-modal .empty-discovered-alerts").removeClass( + "invisible_important" + ); + + // Clean progress. + $("#progressbar_time").empty(); + + // Change img button. + $("#button-no-alerts") + .removeClass("silence-alerts") + .addClass("alerts"); + // Change value button. + $("#button-no-alerts").val(settings.noAlert); + + // Background button. + $(".container-button-alert").removeClass("fired"); + + // New progress. + listen_event_sound(settings); + } + }); + }, + error: function(error) { + console.error(error); + } + }); + }, + close: function() { + remove_audio(); + $(this).dialog("destroy"); + } + }) + .show(); +} + +function test_sound_button(test_sound) { + if (test_sound === true) { + add_audio(); + } else { + remove_audio(); + } +} + +function action_events_sound(mode, settings) { + if (mode === true) { + // Enable tabs. + $("#tabs-sound-modal").tabs("option", "disabled", [0]); + // Active tabs. + $("#tabs-sound-modal").tabs("option", "active", 1); + // Change mode. + $("#hidden-mode_alert").val(1); + // Change img button. + $("#button-start-search") + .removeClass("play") + .addClass("stop"); + // Change value button. + $("#button-start-search").val(settings.stop); + // Add Progress bar. + listen_event_sound(settings); + } else { + // Enable tabs. + $("#tabs-sound-modal").tabs("option", "disabled", [1]); + // Active tabs. + $("#tabs-sound-modal").tabs("option", "active", 0); + // Change mode. + $("#hidden-mode_alert").val(0); + // Change img button. + $("#button-start-search") + .removeClass("stop") + .addClass("play"); + // Change value button. + $("#button-start-search").val(settings.start); + // Remove progress bar. + $("#progressbar_time").empty(); + // Remove audio. + remove_audio(); + // Clean events. + $("#tabs-sound-modal .elements-discovered-alerts ul").empty(); + $("#tabs-sound-modal .empty-discovered-alerts").removeClass( + "invisible_important" + ); + // Change img button. + $("#button-no-alerts") + .removeClass("silence-alerts") + .addClass("alerts"); + // Change value button. + $("#button-no-alerts").val(settings.noAlert); + + // Background button. + $(".container-button-alert").removeClass("fired"); + } +} + +function add_audio() { + var sound = "./include/sounds/" + $("#tabs-sound-modal #sound_id").val(); + $(".actions-sound-modal").append( + "<audio id='id_sound_event' src='" + + sound + + "' autoplay='true' hidden='true' loop='false'>" + ); +} + +function remove_audio() { + $(".actions-sound-modal audio").remove(); +} + +function listen_event_sound(settings) { + progressTimeBar( + "progressbar_time", + $("#interval").val(), + "infinite", + function() { + // Search events. + check_event_sound(settings); + } + ); +} + +function check_event_sound(settings) { + jQuery.post( + "./ajax.php", + { + page: "include/ajax/events", + get_events_fired: 1, + filter_id: $("#tabs-sound-modal #filter_id").val(), + interval: $("#tabs-sound-modal #interval").val(), + time_sound: $("#tabs-sound-modal #time_sound").val() + }, + function(data) { + if (data != false) { + // Hide empty. + $("#tabs-sound-modal .empty-discovered-alerts").addClass( + "invisible_important" + ); + + // Change img button. + $("#button-no-alerts") + .removeClass("alerts") + .addClass("silence-alerts"); + // Change value button. + $("#button-no-alerts").val(settings.silenceAlarm); + + // Background button. + $(".container-button-alert").addClass("fired"); + + // Remove audio. + remove_audio(); + + // Apend audio. + add_audio(); + + // Add elements. + data.forEach(function(element) { + var li = document.createElement("li"); + li.insertAdjacentHTML( + "beforeend", + '<div class="li-priority">' + element.priority + "</div>" + ); + li.insertAdjacentHTML( + "beforeend", + '<div class="li-type">' + element.type + "</div>" + ); + li.insertAdjacentHTML( + "beforeend", + '<div class="li-title">' + element.message + "</div>" + ); + li.insertAdjacentHTML( + "beforeend", + '<div class="li-time">' + element.timestamp + "</div>" + ); + $("#tabs-sound-modal .elements-discovered-alerts ul").append(li); + }); + + // -100 delay sound. + setTimeout( + remove_audio, + parseInt($("#tabs-sound-modal #time_sound").val()) * 1000 - 100 + ); + } + }, + "json" + ); +} diff --git a/pandora_console/include/lib/Dashboard/Widgets/events_list.php b/pandora_console/include/lib/Dashboard/Widgets/events_list.php index d0cccd3d73..5392b36f3d 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/events_list.php +++ b/pandora_console/include/lib/Dashboard/Widgets/events_list.php @@ -615,6 +615,10 @@ class EventsListWidget extends Widget $fields = $default_fields; } + if (empty($filter['search']) === false || empty($filter['user_comment']) === false) { + $fields[] = 'user_comment'; + } + // Get column names. $column_names = events_get_column_names($fields, true); diff --git a/pandora_console/include/lib/Event.php b/pandora_console/include/lib/Event.php index 57584469d7..abee600fec 100644 --- a/pandora_console/include/lib/Event.php +++ b/pandora_console/include/lib/Event.php @@ -146,7 +146,7 @@ class Event extends Entity * @param boolean $return_sql Return sql or execute it. * @param string $having Having. * - * @return array|string|false Found events or SQL query or error. + * @return array Found events or SQL query or error. * @throws \Exception On error. */ public static function search( @@ -160,7 +160,7 @@ class Event extends Entity bool $return_sql=false, string $having='' ):array { - return \events_get_all( + $result = \events_get_all( $fields, $filter, $offset, @@ -171,6 +171,13 @@ class Event extends Entity $return_sql, $having ); + + // Always return an array. + if (empty($result) === true) { + $result = []; + } + + return $result; } diff --git a/pandora_console/include/styles/heatmap.css b/pandora_console/include/styles/heatmap.css index bac09b561e..12db5cc399 100644 --- a/pandora_console/include/styles/heatmap.css +++ b/pandora_console/include/styles/heatmap.css @@ -159,10 +159,26 @@ fill: #cccccc; } +.notinit_10, +.notinit_9, +.notinit_8, .notinit { fill: #4a83f3; } +.notinit_7, +.notinit_6, +.notinit_5, +.notinit_4 { + fill: #6695f5; +} + +.notinit_3, +.notinit_2, +.notinit_1 { + fill: #79a3f6; +} + .hover { cursor: pointer; } diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index ae109ba20d..e886ccc7aa 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -5614,12 +5614,12 @@ div#bullets_modules div { } .agent_details_col_left { - width: 40%; - min-width: 300px; + width: 49%; + min-width: 450px; } .agent_details_col_right { - width: 59%; - min-width: 480px; + width: 49%; + min-width: 450px; } .agent_access_rate_events { @@ -5630,14 +5630,15 @@ div#bullets_modules div { } .white_table_graph#table_access_rate { - flex: 1 1 auto; - min-width: 450px; - margin-right: 1%; + margin-left: 1px; + margin-right: 1px; + width: 49%; } .white_table_graph#table_events { - flex: 1 1 auto; - min-width: 450px; + margin-left: 1px; + margin-right: 1px; + width: 49%; } @media screen and (max-width: 1150px) { @@ -5676,7 +5677,7 @@ div#status_pie { justify-content: flex-end; align-items: center; border-bottom: 1px solid #e2e2e2; - padding: 6px 20px; + padding: 8px 20px; } .agent_details_content { diff --git a/pandora_console/include/styles/sound_events.css b/pandora_console/include/styles/sound_events.css new file mode 100644 index 0000000000..7b25e55a63 --- /dev/null +++ b/pandora_console/include/styles/sound_events.css @@ -0,0 +1,300 @@ +/* + * Css Modal Sound events. + */ +#modal-sound { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 0px 20px !important; +} + +#tabs-sound-modal { + margin-top: 20px; +} + +.actions-sound-modal { + margin-bottom: 20px; +} + +#tabs-sound-modal h3.console-configuration { + color: #000000; + font-size: 16px; + line-height: 19px; + text-align: left; + text-transform: none; + margin: 0px; +} + +#tabs-sound-modal ul.tabs-sound-modal-options { + display: flex; + justify-content: flex-end; + background-color: transparent; + border: 0px; + border-bottom: 1px solid #eaeaea; + height: 45px; +} + +#tabs-sound-modal ul.tabs-sound-modal-options li { + margin: 0px; + padding: 0px; + border: 0px; + background: transparent; +} + +#tabs-sound-modal ul.tabs-sound-modal-options li.ui-tabs-active { + border-bottom: 2px solid #82b92e; +} + +#tabs-sound-modal ul.wizard li label { + color: #95a3bf; + font-size: 13px; + line-height: 16px; + text-align: left; +} + +#tabs-sound-modal ul.wizard li.interval-sounds, +#tabs-sound-modal ul.wizard li.test-sounds { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-top: 18px; +} + +#tabs-sound-modal ul.wizard li.interval-sounds label, +#tabs-sound-modal ul.wizard li.test-sounds label { + flex: 0; + width: inherit; + position: absolute; + top: -12px; + left: 50%; +} + +#tabs-sound-modal ul.wizard li.interval-sounds label:first-of-type, +#tabs-sound-modal ul.wizard li.test-sounds label:first-of-type { + left: 0; +} + +#tabs-sound-modal ul.wizard li.interval-sounds .select2 { + width: 48% !important; + max-width: 100% !important; +} + +#tabs-sound-modal ul.wizard li.test-sounds .select2 { + width: 70% !important; + max-width: 100% !important; +} + +#tabs-sound-modal ul.wizard li.test-sounds input[type="button"] { + border: 1px solid #dddddd; + border-radius: 4px; + width: 131px; + height: 38px; + color: #95a3bf; + font-size: 14px; + padding: 0px; + padding-right: 40px; +} + +#tabs-sound-modal button.upd, +input.upd { + background-image: url(../../images/sound_wave.png); + background-position: 90px 8px; +} + +#tabs-sound-modal ul.wizard .select2 { + max-width: 100% !important; +} + +#tabs-sound-modal .select2-selection { + border: 0px; + border-radius: 0px; + border-bottom: 1px solid #aaa; +} + +#tabs-sound-modal .select2-container, +#tabs-sound-modal .select2-selection__rendered { + padding-left: 0px; + color: #555555; + font-size: 15px; + line-height: 25px; + text-align: left; +} + +#tabs-sound-modal div h3.title-discovered-alerts { + margin: 0px; + color: #000000; + font-size: 16px; + line-height: 19px; + text-align: left; + text-transform: none; + margin-bottom: 10px; +} + +#tabs-sound-modal div span.text-discovered-alerts { + color: #95a3bf; + font-size: 13px; + line-height: 16px; + text-align: center; +} + +#tabs-sound-modal div .empty-discovered-alerts { + display: flex; + flex-direction: column; + justify-content: space-evenly; + align-items: center; + height: 250px; +} + +#tabs-sound-modal div .elements-discovered-alerts { + overflow: auto; + max-height: 300px; +} + +#tabs-sound-modal div .elements-discovered-alerts ul { + width: 99%; +} + +#tabs-sound-modal div .elements-discovered-alerts ul li { + border: 1px solid #eaeaea; + height: 46px; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 100%; + color: #555555; + font-size: 12px; + line-height: 20px; + text-align: left; +} + +#tabs-sound-modal div .elements-discovered-alerts ul li div.li-priority { + flex: 0; + padding: 10px; +} + +#tabs-sound-modal + div + .elements-discovered-alerts + ul + li + div.li-priority + .mini-criticity { + border-radius: 5px; + width: 6px; + height: 30px; +} + +#tabs-sound-modal div .elements-discovered-alerts ul li div.li-type { + flex: 0; + padding-right: 10px; +} + +#tabs-sound-modal div .elements-discovered-alerts ul li div.li-time { + flex: 0 1 100px; + text-align: end; + padding-right: 10px; +} + +#tabs-sound-modal div .elements-discovered-alerts ul li div.li-title { + width: 100%; +} + +.actions-sound-modal .buttons-sound-modal { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.actions-sound-modal .buttons-sound-modal input[type="button"] { + border: 1px solid #dddddd; + border-radius: 4px; + width: 107px; + height: 50px; + font-size: 18px; + line-height: 24px; + text-align: left; +} + +.actions-sound-modal .buttons-sound-modal button.play, +.actions-sound-modal .buttons-sound-modal input[type="button"].play { + background: url(../../images/play-white.png), transparent; + background-repeat: no-repeat; + background-position: 70px 17px; + color: #ffffff; + padding-left: 20px; +} + +.actions-sound-modal .buttons-sound-modal button.stop, +.actions-sound-modal .buttons-sound-modal input[type="button"].stop { + background: url(../../images/stop.png), transparent; + background-repeat: no-repeat; + background-position: 70px 17px; + color: #ffffff; + padding-left: 20px; +} + +.actions-sound-modal .buttons-sound-modal button.alerts, +.actions-sound-modal .buttons-sound-modal input[type="button"].alerts { + width: 154px; + color: #95a3bf; + background: url(../../images/alarm-off.png), transparent; + background-repeat: no-repeat; + background-position: 108px 9px; + padding-left: 20px; +} + +.actions-sound-modal .buttons-sound-modal button.silence-alerts, +.actions-sound-modal .buttons-sound-modal input[type="button"].silence-alerts { + width: 184px; + color: #ffffff; + background: url(../../images/silence-alerts.png), transparent; + background-repeat: no-repeat; + background-position: 138px 9px; + padding-left: 20px; +} + +.actions-sound-modal .container-button-play { + background: radial-gradient(118.26% 33.15%, #82b92e 0%, #1d4e4a 100%); + border-radius: 4px; +} + +.actions-sound-modal .container-button-alert.fired { + background: #ee2132; + border-radius: 4px; +} + +.actions-sound-modal .progressbar { + width: 100%; + margin: 4px 2px; + border-radius: 4px; +} + +.actions-sound-modal .progressbar .inner { + height: 10px; + border-radius: 4px; + animation: progressbar-countdown; + /* Placeholder, this will be updated using javascript */ + animation-duration: 40s; + /* We stop in the end */ + animation-iteration-count: 1; + /* Stay on pause when the animation is finished finished */ + animation-fill-mode: forwards; + /* We start paused, we start the animation using javascript */ + animation-play-state: paused; + /* We want a linear animation, ease-out is standard */ + animation-timing-function: linear; +} + +@keyframes progressbar-countdown { + 0% { + width: 100%; + background: #82b92e; + } + 100% { + width: 0%; + background: #e63c52; + } +} diff --git a/pandora_console/install.php b/pandora_console/install.php index 4645561795..1511a548a0 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@ <div style='height: 10px'> <?php $version = '7.0NG.763'; - $build = '220704'; + $build = '220714'; $banner = "v$version Build $build"; error_reporting(0); diff --git a/pandora_console/operation/agentes/estado_generalagente.php b/pandora_console/operation/agentes/estado_generalagente.php index 57109fa837..42d325e7f0 100755 --- a/pandora_console/operation/agentes/estado_generalagente.php +++ b/pandora_console/operation/agentes/estado_generalagente.php @@ -74,9 +74,7 @@ if (! check_acl_one_of_groups($config['id_user'], $all_groups, 'AR') return; } -$alive_animation = agents_get_status_animation( - agents_get_interval_status($agent, false) -); +$alive_animation = agents_get_starmap($id_agente, 200, 50); /* * START: TABLE AGENT BUILD. @@ -170,10 +168,10 @@ $status_img = agents_detail_view_status_img( $table_agent_header .= '<div class="icono_right">'.$status_img.'</div>'; // Fixed width non interactive charts. -$status_chart_width = 180; -$graph_width = 180; +$status_chart_width = 150; +$graph_width = 150; -$table_agent_graph = '<div id="status_pie" style="width: '.$status_chart_width.'px;">'; +$table_agent_graph = '<div id="status_pie" style="width: '.$graph_width.'px;">'; $table_agent_graph .= graph_agent_status( $id_agente, $graph_width, @@ -604,6 +602,7 @@ if ($config['agentaccess'] && $access_agent > 0) { $table_access_rate .= graphic_agentaccess( $id_agente, SECONDS_1DAY, + true, true ); $table_access_rate .= '</div>'; diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index 1ca059859d..781301e2e0 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -284,7 +284,6 @@ if (is_ajax() === true) { 'te.event_type', 'te.id_alert_am', 'te.criticity', - 'te.user_comment', 'te.tags', 'te.source', 'te.id_extra', @@ -301,6 +300,13 @@ if (is_ajax() === true) { 'ta.direccion', ]; + if (strpos($config['event_fields'], 'user_comment') !== false + || empty($user_comment) === false + || empty($search) === false + ) { + $fields[] = 'te.user_comment'; + } + $order = get_datatable_order(true); if (is_array($order) === true && $order['field'] === 'mini_severity') { @@ -388,14 +394,23 @@ if (is_ajax() === true) { $tmp->meta = is_metaconsole(); // phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps + $server_url = ''; + $hashdata = ''; if ($tmp->meta === true) { if ($tmp->server_name !== null) { $data_server = metaconsole_get_servers( $tmp->server_id ); - $tmp->server_url_hash = metaconsole_get_servers_url_hash( - $data_server - ); + + // Url to go to node from meta. + if (isset($data_server) === true + && $data_server !== false + ) { + $server_url = $data_server['server_url']; + $hashdata = metaconsole_get_servers_url_hash( + $data_server + ); + } } } @@ -888,19 +903,6 @@ if (is_ajax() === true) { $tmp->m .= 'class="candeleted chk_val">'; - // Url to go to node from meta. - $server_url = ''; - $hashdata = ''; - if ($tmp->meta === true) { - if (isset($data_server) === true - && $data_server !== false - && isset($tmp->server_url_hash) === true - ) { - $server_url = $data_server['server_url']; - $hashdata = $tmp->server_url_hash; - } - } - // Url to agent view. $url_link = ui_get_full_url( 'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=' diff --git a/pandora_console/operation/events/sound_events.php b/pandora_console/operation/events/sound_events.php index ac80788a7f..adbb82890f 100644 --- a/pandora_console/operation/events/sound_events.php +++ b/pandora_console/operation/events/sound_events.php @@ -342,7 +342,8 @@ var test_sound = false; function test_sound_button() { if (!test_sound) { $("#button_try").attr('src', '../../images/icono_test.png'); - $('body').append("<audio src='../../include/sounds/Star_Trek_emergency_simulation.wav' autoplay='true' hidden='true' loop='false'>"); + var sound = '../../include/sounds/' + $('#sound_id').val(); + $('body').append("<audio src='"+sound+"' autoplay='true' hidden='true' loop='false'>"); test_sound = true; } else { $("#button_try").attr('src', '../../images/icono_test.png'); diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php index e94069b8c8..32cb360e11 100644 --- a/pandora_console/operation/menu.php +++ b/pandora_console/operation/menu.php @@ -419,12 +419,34 @@ if (check_acl($config['id_user'], 0, 'ER') } // Sound Events. - $javascript = "javascript: window.open('operation/events/sound_events.php');"; - $javascript = 'javascript: openSoundEventWindow();'; + // $javascript = 'javascript: openSoundEventWindow();'; + // $sub[$javascript]['text'] = __('Sound Events'); + // $sub[$javascript]['id'] = 'Sound Events'; + // $sub[$javascript]['type'] = 'direct'; + $data_sound = base64_encode( + json_encode( + [ + 'title' => __('Sound Console'), + 'start' => __('Start'), + 'stop' => __('Stop'), + 'noAlert' => __('No alert'), + 'silenceAlarm' => __('Silence alarm'), + 'url' => ui_get_full_url('ajax.php'), + 'page' => 'include/ajax/events', + ] + ) + ); + + + $javascript = 'javascript: openSoundEventModal(\''.$data_sound.'\');'; $sub[$javascript]['text'] = __('Sound Events'); - $sub[$javascript]['id'] = 'Sound Events'; + $sub[$javascript]['id'] = 'Sound Events Modal'; $sub[$javascript]['type'] = 'direct'; + echo '<div id="modal-sound" style="display:none;"></div>'; + + ui_require_javascript_file('pandora_events'); + ?> <script type="text/javascript"> function openSoundEventWindow() { diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index 5e1c38896c..ae22c5ed4f 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.763 -%define release 220704 +%define release 220714 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 8413b8d6c6..c8eefd6935 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.763 -%define release 220704 +%define release 220714 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index dc984d1e44..93e51f044c 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.763 -%define release 220704 +%define release 220714 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index 2e10eb0630..eb27e7ef33 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -3574,6 +3574,18 @@ CREATE TABLE IF NOT EXISTS `tautoconfig` ( `order` INT NOT NULL DEFAULT 0, `description` TEXT, `disabled` TINYINT DEFAULT 0, + `type_execution` VARCHAR(100) NOT NULL DEFAULT 'start', + `type_periodicity` VARCHAR(100) NOT NULL DEFAULT 'weekly', + `monday` TINYINT DEFAULT 0, + `tuesday` TINYINT DEFAULT 0, + `wednesday` TINYINT DEFAULT 0, + `thursday` TINYINT DEFAULT 0, + `friday` TINYINT DEFAULT 0, + `saturday` TINYINT DEFAULT 0, + `sunday` TINYINT DEFAULT 0, + `periodically_day_from` INT UNSIGNED DEFAULT NULL, + `periodically_time_from` time NULL DEFAULT NULL, + `executed` TINYINT UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; diff --git a/pandora_plugins/Log_event/getEvent.ps1 b/pandora_plugins/Log_event/getEvent.ps1 new file mode 100644 index 0000000000..19d4237421 --- /dev/null +++ b/pandora_plugins/Log_event/getEvent.ps1 @@ -0,0 +1,112 @@ +################################################################################ +# get Event +################################################################################ +# Copyright (c) 2020 Artica Soluciones Tecnologicas S.L +# Jose Antonio Almendros +################################################################################ +# +# usage: getEvent.exe -command "get_event.exe [event_source] [log_name] [interval] [*nodatalist] [*sendlog]" +# +################################################################################ + +param ( +[switch]$h = $false, +[switch]$nodatalist = $false, +[switch]$sendlog = $false +) + +if (($h -eq $true) -or ($($Args.Count) -le 2)){ + echo "Plugin to get events from the last N minutes" + echo "Usage:" + echo "getEvent.exe [event_source] [log_name] [interval] *[-nodatalist] *[-sendlog]`n" + echo "event_source:`t`tfield Source of the Event" + echo "log_name:`t`tfield Log Name of the Event" + echo "interval:`t`ttime interval from events will be extracted (in minutes)" + echo "nodatalist [optional]:`tshows all output in same module data" + echo "sendlog [optional]:`tsends logs to log server" + echo "Artica ST @ 2020" + exit +} + + +$source = $args[0] +$logname = $args[1] +$interval = $args[2] + + +if (($nodatalist -eq $false) -and ($sendlog -eq $false)) + { + $Logs = get-EventLog -Source $source -LogName $logname -After $((get-date).AddMinutes(-$interval)) | ft -HideTableHeaders + $result = foreach ($Log in $Logs) + { + + if ($Log) + { + echo "<data><value><![CDATA[" + echo $Log + echo "]]></value></data>" + echo "`r`n" + } + + + } + + echo "<module>" + echo "<name>$source Events</name>" + echo "<type>async_string</type>" + echo "<datalist>" + echo $result + echo "</datalist>" + echo "<description>Logs with log name $logname in source $source</description>" + echo "</module>" + } + +else + { + if ($sendlog -eq $false) + { + $Logs = get-EventLog -Source $source -LogName $logname -After $((get-date).AddMinutes(-$interval)) | ft -HideTableHeaders | Out-String + $result = foreach ($Log in $Logs) + { + + echo $Log + echo "`r`n" + + + } + + echo "<module>" + echo "<name>$source Events</name>" + echo "<type>async_string</type>" + echo "<data><![CDATA[" + echo $result + echo "]]></data>" + echo "<description>Logs with log name $logname in source $source</description>" + echo "</module>" + } + } + +if ($sendlog -eq $true) + { + $Logs = get-EventLog -Source $source -LogName $logname -After $((get-date).AddMinutes(-$interval)) | ft -HideTableHeaders | Out-String + $result = foreach ($Log in $Logs) + { + + if ($Log) + { + echo "<![CDATA[" + echo $Log + echo "]]>" + echo "`n" + } + + + } + + echo "<log_module>" + echo "<source>$source Events</source>" + echo "<data>" + echo $result + echo "</data>" + echo "</log_module>" + } \ No newline at end of file diff --git a/pandora_plugins/cisco_ipsla/pandora_ipsla.sh b/pandora_plugins/cisco_ipsla/pandora_ipsla.sh new file mode 100755 index 0000000000..1919d80c7c --- /dev/null +++ b/pandora_plugins/cisco_ipsla/pandora_ipsla.sh @@ -0,0 +1,779 @@ +#!/bin/bash +# IPSLA remote Plugin for Pandora FMS +# (c) ArticaST 2014 + + +# Default values +COMMUNITY="public" +TAG_TABLE_CACHE="/tmp/ipsla_cache" + +function help { + echo -e "Cisco IP SLA Server Plugin for Pandora FMS. http://pandorafms.com" + echo -e "Syntax:\n\n-c <community> -t <target> -v <version> [other options]\n" + echo -e "\t\t-c community" + echo -e "\t\t-t target" + echo -e "\t\t-v version" + echo -e "Other options\n"; + echo -e "\t\t-s show defined tags for cisco ipsla device and exit" + echo -e "\t\t-l <auth-type> " + echo -e "\t\t-u <user> " + echo -e "\t\t-a <authentication> " + echo -e "\t\t-A <authenticacion-password> " + echo -e "\t\t-x <encryption> " + echo -e "\t\t-X <encryption-pass> " + echo -e "\t\t-g <id> " + echo -e "\t\t-m <module>\n" + echo -e "Available Modules list: \n" + echo -e "\tICPIF - Calculated Planning Impairment Factor for specified tag" + echo -e "\tMOS - Mean Opinion Score" + echo -e "\tPacket_Out_of_Sequence - Packets arriving out of sequence " + echo -e "\tPacket_Late_Arrival - Packets arriving late" + echo -e "\tAverage_Jitter - Average jitter is the estimated average jitter observed in the last XX RTP packets" + echo -e "\tPacketLossSD - Packet loss from source to destination" + echo -e "\tPacketLossDS - Packet loss from destination to source" + echo -e "\tPacketLost - The number of packets that are lost for which we cannot determine the direction " + echo -e "\tNegativesSD - The sum of number of all negative jitter values from packets sent from source to destination " + echo -e "\tNegativesDS - The sum of number of all negative jitter values from packets sent from destination to source" + echo -e "\tPositivesSD - The sum of number of all positive jitter values from packets sent from source to destination" + echo -e "\tPositivesDS - The sum of number of all positive jitter values from packets sent from source to destination" + echo -e "\tRTTMax - Max Round Trip Time" + echo -e "\tRTTMin - Min Round Trip Time" + echo -e "\tOperNumOfRTT - The number of successful round trips" + echo -e "\tOperPacketLossSD - Packet loss from source to destination for jitter tests" + echo -e "\tOperPacketLossDS - Packet loss from destination to source for jitter tests" + echo -e "\tRttOperSense - A sense code for the completion status of the latest RTT operation." + echo -e "\tRttOperCompletionTime - The completion time of the latest RTT operation successfully completed." + echo -e "\tRttOperTime - The value of the agent system time at the time of the latest RTT operation." + echo -e "\tRttOperAddress - A string which specifies the address of the target." + echo -e "\tHTTPOperRTT - Round Trip Time taken to perform HTTP operation. This value is the sum of DNSRTT, TCPConnectRTT and TransactionRTT." + echo -e "\tHTTPOperDNSRTT Round Trip Time taken to perform DNS query within the HTTP operation." + echo -e "\tHTTPOperTCPConnectRTT - Round Trip Time taken to connect to the HTTP server." + echo -e "\tIcmpJitterAvgJitter The average of positive and negative jitter values in Source-to-Destionation and Destination-to-Source direction." + echo -e "\tHTTPOperTransactionRTT - Round Trip Time taken to download the object specified by the URL." + echo -e "" + echo -e " Example execution" + echo -e " snmp version 3: ./pandora_ipsla.sh -t <ip_target> -v 3 -l authPriv -u pandorafms -a MD5 -A pandorafms -x AES -X pandorafms -g jitter -m Average_Jitter" + echo -e " snmp version 2c: ./pandora_ipsla.sh -t <ip_target> -v 2c -c public -g jitter -m Average_Jitter" + + + echo "" + exit +} + +function show_tags { + local TAG_TABLE_CACHE=$TAG_TABLE_CACHE.$TARGET + + if [ $version != "3" ] + then + snmpwalk -v 1 -Onq -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.1.1.3 > $TAG_TABLE_CACHE + fi + if [ $version == "3" ] + #if snmp v3 snmpget with v3 + then + if [ $auth == "authPriv" ] + # if authpriv snmpget with all parameters + then + snmpwalk -v 3 -Onq -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass $TARGET 1.3.6.1.4.1.9.9.42.1.2.1.1.3 > $TAG_TABLE_CACHE + fi + if [ $auth == "authNoPriv" ] + then + + snmpget -v 3 -Onq -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.1.1.3 > $TAG_TABLE_CACHE + fi + fi + + cat $TAG_TABLE_CACHE + exit +} + +function update_tags { + local TAG_TABLE_CACHE=$TAG_TABLE_CACHE.$TARGET + + if [ $version != "3" ] + then + snmpwalk -v 1 -Onq -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.1.1.3 > $TAG_TABLE_CACHE + fi + if [ $version == "3" ] + #if snmp v3 snmpget with v3 + then + if [ $auth == "authPriv" ] + # if authpriv snmpget with all parameters + then + snmpwalk -v 3 -Onq -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass $TARGET 1.3.6.1.4.1.9.9.42.1.2.1.1.3 > $TAG_TABLE_CACHE + fi + if [ $auth == "authNoPriv" ] + then + + snmpget -v 3 -Onq -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.1.1.3 > $TAG_TABLE_CACHE + fi + fi + + +} + +function get_index { + cat $TAG_TABLE_CACHE.$TARGET | grep "\"$1\"" | grep -o "[0-9]*\s" +} + +# This function requires two arguments. MODULE_TYPE TAG +function get_module { + MODULE_TYPE=$1 + update_tags + INDICE=$2 + + if [ $version != "3" ] + + then + + if [ "$MODULE_TYPE" == "ICPIF" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.43.$INDICE` + fi + if [ "$MODULE_TYPE" == "MOS" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.42.$INDICE` + fi + if [ "$MODULE_TYPE" == "Packet_Out_of_Sequence" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.28.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Packet_Late_Arrival" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.30.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Average_Jitter" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.46.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossSD" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossDS" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLost" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.29.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesSD" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.12.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesDS" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.22.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesSD" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.7.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesDS" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.17.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMax" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMin" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.4.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperNumOfRTT" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossSD" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossDS" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperCompletionTime" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperSense" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperTime" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperAddress" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.6.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperRTT" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperDNSRTT" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTCPConnectRTT" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.3.$INDICE` + fi + + if [ "$MODULE_TYPE" == "IcmpJitterAvgJitter" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.4.1.44.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTransactionRTT" ] + then + VALOR=`snmpget -v $version -Oqv -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.4.$INDICE` + fi + fi + + if [ $version == "3" ] + + #if snmp v3 snmpget with v3 + then + if [ $auth == "authPriv" ] + # if authpriv snmpget with all parameters + then + if [ "$MODULE_TYPE" == "ICPIF" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.43.$INDICE` + fi + if [ "$MODULE_TYPE" == "MOS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.42.$INDICE` + fi + if [ "$MODULE_TYPE" == "Packet_Out_of_Sequence" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.28.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Packet_Late_Arrival" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.30.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Average_Jitter" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.46.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLost" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.29.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.12.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.22.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.7.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.17.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMax" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMin" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.4.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperNumOfRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperCompletionTime" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperSense" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperTime" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperAddress" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.6.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperDNSRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTCPConnectRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.3.$INDICE` + fi + + if [ "$MODULE_TYPE" == "IcmpJitterAvgJitter" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.4.1.44.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTransactionRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -x $hash2 -X $hash2pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.4.$INDICE` + fi + fi + if [ $auth == "authNoPriv" ] + then + if [ "$hash1" ] + then + if [ "$MODULE_TYPE" == "ICPIF" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.43.$INDICE` + fi + if [ "$MODULE_TYPE" == "MOS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.42.$INDICE` + fi + if [ "$MODULE_TYPE" == "Packet_Out_of_Sequence" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.28.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Packet_Late_Arrival" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.30.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Average_Jitter" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.46.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLost" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.29.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.12.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.22.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.7.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.17.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMax" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMin" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.4.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperNumOfRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperCompletionTime" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperSense" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperTime" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperAddress" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.6.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperDNSRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTCPConnectRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.3.$INDICE` + fi + + if [ "$MODULE_TYPE" == "IcmpJitterAvgJitter" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.4.1.44.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTransactionRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -a $hash1 -A $hash1pass -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.4.$INDICE` + fi + else + if [ "$MODULE_TYPE" == "ICPIF" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.43.$INDICE` + fi + if [ "$MODULE_TYPE" == "MOS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.42.$INDICE` + fi + if [ "$MODULE_TYPE" == "Packet_Out_of_Sequence" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.28.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Packet_Late_Arrival" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.30.$INDICE` + fi + + if [ "$MODULE_TYPE" == "Average_Jitter" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.46.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLossDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PacketLost" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.29.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.12.$INDICE` + fi + + if [ "$MODULE_TYPE" == "NegativesDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.22.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.7.$INDICE` + fi + + if [ "$MODULE_TYPE" == "PositivesDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.17.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMax" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RTTMin" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.4.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperNumOfRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossSD" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.26.$INDICE` + fi + + if [ "$MODULE_TYPE" == "OperPacketLossDS" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.2.1.27.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperCompletionTime" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperSense" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperTime" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.5.$INDICE` + fi + + if [ "$MODULE_TYPE" == "RttOperAddress" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.2.10.1.6.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.1.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperDNSRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.2.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTCPConnectRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.3.$INDICE` + fi + + if [ "$MODULE_TYPE" == "IcmpJitterAvgJitter" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.4.1.44.$INDICE` + fi + + if [ "$MODULE_TYPE" == "HTTPOperTransactionRTT" ] + then + VALOR=`snmpget -v 3 -l $auth -u $user -c $COMMUNITY $TARGET 1.3.6.1.4.1.9.9.42.1.5.1.1.4.$INDICE` + fi + + fi + + fi + fi + + echo -n $VALOR | awk '{print $NF}' + exit 0 +} + +if [ -z "`which snmpwalk`" ] +then + echo "ERROR: snmpwalk is not in the path. Exiting..." + exit -1 +fi + +if [ $# -eq 0 ] +then + help +fi + +# Main parsing code + +while getopts ":hc:t:v:l:u:a:A:x:X:sm:g:" optname + do + case "$optname" in + "h") + help + ;; + "c") + COMMUNITY=$OPTARG + ;; + "t") + TARGET=$OPTARG + ;; + "v") + version=$OPTARG + ;; + "l") + auth=$OPTARG + ;; + "u") + user=$OPTARG + ;; + "a") + hash1=$OPTARG + ;; + "A") + hash1pass=$OPTARG + ;; + "x") + hash2=$OPTARG + ;; + "X") + hash2pass=$OPTARG + ;; + "g") + TAG=$OPTARG + ;; + "s") + SHOWTAGS=1 + ;; + "m") + MODULE=$OPTARG + ;; + ?) + help + ;; + default) + help + ;; + + esac +done + +# Execution +[ "$SHOWTAGS" ] && echo "Showing avaliables ipsla tags for the device $TARGET and OID 1.3.6.1.4.1.9.9.42.1.2.1.1.3" && show_tags + +[ -z "$TARGET" ] && echo "Error missing target ip definition please use -t to difine it or -h to see help" && exit 1 +[ -z "$MODULE" ] && echo "Error missing module definition please use -m to difine it or -h to see help" && exit 1 +[ -z "$TAG" ] && echo "Error missing id definition please use -g to difine it or -h to see help" && exit 1 +[ -z "$version" ] && echo "Error missing snmp version definition please use -v to difine it or -h to see help" && exit 1 + + +get_module $MODULE $TAG +echo "DEBUG" + +exit 0 + +#RttOperSense +# 0:other +# 1:ok +# 2:disconnected +# 3:overThreshold +# 4:timeout +# 5:busy +# 6:notConnected +# 7:dropped +# 8:sequenceError +# 9:verifyError +# 10:applicationSpecific +# 11:dnsServerTimeout +# 12:tcpConnectTimeout +# 13:httpTransactionTimeout +# 14:dnsQueryError +# 15:httpError +# 16:error +# 17:mplsLspEchoTxError +# 18:mplsLspUnreachable +# 19:mplsLspMalformedReq +# 20:mplsLspReachButNotFEC +# 21:enableOk +# 22:enableNoConnect +# 23:enableVersionFail +# 24:enableInternalError +# 25:enableAbort +# 26:enableFail +# 27:enableAuthFail +# 28:enableFormatError +# 29:enablePortInUse +# 30:statsRetrieveOk +# 31:statsRetrieveNoConnect +# 32:statsRetrieveVersionFail +# 33:statsRetrieveInternalError +# 34:statsRetrieveAbort +# 35:statsRetrieveFail +# 36:statsRetrieveAuthFail +# 37:statsRetrieveFormatError +# 38:statsRetrievePortInUse \ No newline at end of file diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 4749f1e5b7..0f94accb5a 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.763-220704 +Version: 7.0NG.763-220714 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 69be9ba3d8..1db47c1adf 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/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-220704" +pandora_version="7.0NG.763-220714" package_cpan=0 package_pandora=1 diff --git a/pandora_server/bin/pandora_server b/pandora_server/bin/pandora_server index 14ae4914db..ce091872e2 100755 --- a/pandora_server/bin/pandora_server +++ b/pandora_server/bin/pandora_server @@ -139,9 +139,12 @@ sub pandora_startup () { # Start the policy queue thread. start_server_thread(\&pandora_process_policy_queue, [\%Config]) if ($Config{'__enterprise_enabled'} == 1 && $Config{'policy_manager'} == 1); - + + # Start agent autoconfiguration thread. + start_server_thread(\&pandora_agent_autoconfiguration_scheduled, [\%Config]) if ($Config{'__enterprise_enabled'} == 1 && $Config{'autoconfigure_agents'} == 1); + pandora_audit (\%Config, $Config{'rb_product_name'} . ' Server Daemon starting', 'SYSTEM', 'System', $DBH); - + # Load servers if (!is_metaconsole(\%Config)) { pandora_reset_server (\%Config, $DBH); @@ -308,6 +311,67 @@ sub pandora_stop_netflow_daemon () { return 0; } +sub pandora_agent_autoconfiguration_scheduled($) { + my $pa_config = shift; + + my %pa_config = %{$pa_config}; + + my $dbh = db_connect ($pa_config{'dbengine'}, $pa_config{'dbname'}, $pa_config{'dbhost'}, $pa_config{'dbport'}, + $pa_config{'dbuser'}, $pa_config{'dbpass'}); + + while ($THRRUN == 1) { + eval {{ + local $SIG{__DIE__}; + + my @autoconfig = get_db_rows ( + $dbh, + 'SELECT *, DATE_FORMAT(DATE_ADD(periodically_time_from, INTERVAL ' . $pa_config->{'autoconfigure_agents_threshold'} . ' SECOND), "%H:%i:%S") AS time_minutes + FROM tautoconfig WHERE executed = 0 AND type_execution LIKE "scheduled" AND disabled = 0' + ); + + # Get current time. + my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()); + my $time = sprintf ("%.2d:%.2d:%.2d", $hour, $min, $sec); + + foreach my $conf (@autoconfig) { + if (($conf->{'type_periodicity'} eq 'daily') || + ($conf->{'type_periodicity'} eq 'monthly' && $conf->{'periodically_day_from'} eq $mday) || + ($conf->{'type_periodicity'} eq 'weekly' && (($conf->{'sunday'} eq 1 && $wday eq 0) || + ($conf->{'monday'} eq 1 && $wday eq 1) || ($conf->{'tuesday'} eq 1 && $wday eq 2) || + ($conf->{'wednesday'} eq 1 && $wday eq 3) || ($conf->{'thursday'} eq 1 && $wday eq 4) || + ($conf->{'friday'} eq 1 && $wday eq 5) || ($conf->{'saturday'} eq 1 && $wday eq 6))) + ) { + if ($time ge $conf->{'periodically_time_from'} && $time le $conf->{'time_minutes'}) { + # Update executed. + db_process_update ($dbh, 'tautoconfig', {'executed' => 1}, {'id' => $conf->{'id'}}); + # Get agents. + my @agents = get_db_rows( + $dbh, + 'SELECT id_agente, alias, id_grupo, id_os, os_version, direccion, nombre AS agent_name FROM tagente + WHERE `disabled` = 0' + ); + + foreach my $agent (@agents) { + # Check if the agent matches the rules. + my $match = enterprise_hook('autoconf_evaluate_rules', [$pa_config, $dbh, $agent, $conf->{'id'}, $agent->{'id_agente'}, 1]); + if (defined($match) && $match > 0) { + enterprise_hook('autoconf_execute_actions', [$pa_config, $dbh, $agent->{'id_agente'}, $agent, $conf->{'id'}]); + } + } + + # Update executed. + db_process_update ($dbh, 'tautoconfig', {'executed' => 0}, {'id' => $conf->{'id'}}); + } + } + } + }}; + + sleep ($pa_config->{'autoconfigure_agents_threshold'}); + } + + db_disconnect($dbh); +} + ######################################################################################## # Additional tasks executed periodically by the Pandora FMS Server ######################################################################################## diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index 8fb3ed678f..093ba2879f 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -46,7 +46,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.763"; -my $pandora_build = "220704"; +my $pandora_build = "220714"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash @@ -539,6 +539,7 @@ sub pandora_load_config { $pa_config->{"provisioning_cache_interval"} = 300; # 7.0 720 $pa_config->{"autoconfigure_agents"} = 1; # 7.0 725 + $pa_config->{"autoconfigure_agents_threshold"} = 300; #7.0 764 $pa_config->{'snmp_extlog'} = ""; # 7.0 726 @@ -1265,6 +1266,9 @@ sub pandora_load_config { elsif ($parametro =~ m/^autoconfigure_agents\s+([0-1])/i){ $pa_config->{'autoconfigure_agents'}= clean_blank($1); } + elsif ($parametro =~ m/^autoconfigure_agents_threshold\s+([0-1])/i){ + $pa_config->{'autoconfigure_agents_threshold'}= clean_blank($1); + } elsif ($parametro =~ m/^snmp_extlog\s(.*)/i) { $pa_config->{'snmp_extlog'} = clean_blank($1); } diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index a068486c79..f1419da6db 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -5788,30 +5788,18 @@ sub pandora_self_monitoring ($$) { } my $queued_modules = get_db_value ($dbh, "SELECT SUM(queued_modules) FROM tserver WHERE BINARY name = '".$pa_config->{"servername"}."'"); - if (!defined($queued_modules)) { $queued_modules = 0; } - my $dbmaintance; - if ($RDBMS eq 'postgresql') { - $dbmaintance = get_db_value ($dbh, - "SELECT COUNT(*) - FROM tconfig - WHERE token = 'db_maintance' - AND NULLIF(value, '')::int > UNIX_TIMESTAMP() - 86400"); - } - elsif ($RDBMS eq 'oracle') { - $dbmaintance = get_db_value ($dbh, - "SELECT COUNT(*) - FROM tconfig - WHERE token = 'db_maintance' AND DBMS_LOB.substr(value, 100, 1) > UNIX_TIMESTAMP() - 86400"); - } - else { - $dbmaintance = get_db_value ($dbh, - "SELECT COUNT(*) - FROM tconfig - WHERE token = 'db_maintance' AND value > UNIX_TIMESTAMP() - 86400"); + my $pandoradb = 0; + my $pandoradb_tstamp = get_db_value ($dbh, "SELECT `value` FROM tconfig WHERE token = 'db_maintance'"); + if (!defined($pandoradb_tstamp) || $pandoradb_tstamp == 0) { + pandora_event ($pa_config, "Pandora DB maintenance tool has never been run.", 0, 0, 4, 0, 0, 'system', 0, $dbh); + } elsif ($pandoradb_tstamp < time() - 86400) { + pandora_event ($pa_config, "Pandora DB maintenance tool has not been run since " . strftime("%Y-%m-%d %H:%M:%S", localtime($pandoradb_tstamp)) . ".", 0, 0, 4, 0, 0, 'system', 0, $dbh); + } else { + $pandoradb = 1; } my $start_performance = time; @@ -5825,7 +5813,7 @@ sub pandora_self_monitoring ($$) { $xml_output .=" <module>"; $xml_output .=" <name>Database Maintenance</name>"; $xml_output .=" <type>generic_proc</type>"; - $xml_output .=" <data>$dbmaintance</data>"; + $xml_output .=" <data>$pandoradb</data>"; $xml_output .=" </module>"; $xml_output .=" <module>"; diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index 73d4db6856..4cdbafd2a3 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -34,7 +34,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.763"; -my $pandora_build = "220704"; +my $pandora_build = "220714"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 5d6f7be51b..0fa56fbad0 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 220704 +%define release 220714 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index fd988ec1a4..b3c16b221f 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 220704 +%define release 220714 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 2661d1c2ca..cb53f0d662 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.763" -PI_BUILD="220704" +PI_BUILD="220714" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index b3725bf40f..6e56200ebe 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 220704"; +my $version = "7.0NG.763 Build 220714"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index e287497f22..f87305a945 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 220704"; +my $version = "7.0NG.763 Build 220714"; # save program name for logging my $progname = basename($0);