diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent
index 58af3069d4..0234024ee1 100644
--- a/pandora_agents/unix/pandora_agent
+++ b/pandora_agents/unix/pandora_agent
@@ -469,6 +469,7 @@ sub parse_conf_modules($) {
}
} elsif ($line =~ /^\s*module_crontab\s+(((\*|(\d+(-\d+){0,1}))\s*){5}).*$/) {
$module->{'cron'} = $1;
+ chomp ($module->{'cron'});
} elsif ($line =~ /^\s*module_cron_interval\s+(\d+).*$/) {
$module->{'cron_interval'} = $1;
} elsif ($line =~ /^\s*module_end\s*$/) {
@@ -1865,6 +1866,9 @@ sub write_module_xml ($@) {
# Module Alert template
$Xml .= " " . $module->{'alert_template'} . "\n" if (defined ($module->{'alert_template'}));
+
+ # Module Alert template
+ $Xml .= " " . $module->{'cron'} . "\n" if (defined ($module->{'cron'}) and ($module->{'cron'} ne ""));
# Data list
if ($#data > 0) {
diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php
index e7419d1998..dbed05c160 100644
--- a/pandora_console/godmode/agentes/module_manager_editor_common.php
+++ b/pandora_console/godmode/agentes/module_manager_editor_common.php
@@ -536,10 +536,18 @@ $table_advanced->data[10][0] = __('Unknown instructions'). ui_print_help_tip(__(
$table_advanced->data[10][1] = html_print_textarea ('unknown_instructions', 2, 65, $unknown_instructions, '', true);
$table_advanced->colspan[10][1] = 6;
-$table_advanced->data[11][0] = __('Cron') .
- ui_print_help_tip (__('If cron is set the module interval is ignored and the module runs on the specified date and time'), true);
-$table_advanced->data[11][1] = html_print_extended_select_for_cron ($hour, $minute, $mday, $month, $wday, true);
-$table_advanced->colspan[11][1] = 6;
+if (isset($id_agente) && $moduletype == MODULE_DATA) {
+ $table_advanced->data[11][0] = __('Cron') .
+ ui_print_help_tip (__('If cron is set the module interval is ignored and the module runs on the specified date and time'), true);
+ $table_advanced->data[11][1] = html_print_extended_select_for_cron ($hour, $minute, $mday, $month, $wday, true, true);
+ $table_advanced->colspan[11][1] = 6;
+ }
+else {
+ $table_advanced->data[11][0] = __('Cron') .
+ ui_print_help_tip (__('If cron is set the module interval is ignored and the module runs on the specified date and time'), true);
+ $table_advanced->data[11][1] = html_print_extended_select_for_cron ($hour, $minute, $mday, $month, $wday, true, false);
+ $table_advanced->colspan[11][1] = 6;
+}
$table_advanced->data[12][0] = __('Timeout');
$table_advanced->data[12][1] = html_print_input_text ('max_timeout', $max_timeout, '', 5, 10, true). ' ' . ui_print_help_tip (__('Seconds that agent will wait for the execution of the module.'), true);
diff --git a/pandora_console/include/functions_cron.php b/pandora_console/include/functions_cron.php
index 16aad7db54..bb20efd74d 100644
--- a/pandora_console/include/functions_cron.php
+++ b/pandora_console/include/functions_cron.php
@@ -22,7 +22,7 @@ include_once($config['homedir'] . "/include/functions_db.php");
function cron_update_module_interval ($module_id, $cron) {
// Check for a valid cron
- if ($cron == '' || $cron == '* * * * *') {
+ if (!cron_check_syntax($cron)) {
return;
}
@@ -160,4 +160,10 @@ function cron_next_execution_date ($cron, $cur_time = false) {
return $cur_time + SECONDS_5MINUTES;
}
+// Check if cron is properly constructed
+function cron_check_syntax($cron) {
+
+ return preg_match("/^[\d|\*].* .*[\d|\*].* .*[\d|\*].* .*[\d|\*].* .*[\d|\*]$/", $cron);
+}
+
?>
diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php
index b55ce91317..30706dba46 100644
--- a/pandora_console/include/functions_html.php
+++ b/pandora_console/include/functions_html.php
@@ -796,10 +796,11 @@ function html_print_extended_select_for_time ($name, $selected = '',
* @param string Run month.
* @param string Run day of the week.
* @param bool Whether to return an output string or echo now (optional, echo by default).
+ * @param bool Print cron grayed
*
* @return string HTML code if return parameter is true.
*/
-function html_print_extended_select_for_cron ($hour = '*', $minute = '*', $mday = '*', $month = '*', $wday = '*', $return = false) {
+function html_print_extended_select_for_cron ($hour = '*', $minute = '*', $mday = '*', $month = '*', $wday = '*', $return = false, $disabled = false) {
# Hours
for ($i = 0; $i < 24; $i++) {
@@ -842,11 +843,11 @@ function html_print_extended_select_for_cron ($hour = '*', $minute = '*', $mday
$table->head[3] = __('Month');
$table->head[4] = __('Week day');
- $table->data[0][0] = html_print_select ($hours, 'hour', $hour, '', __('Any'), '*', true, false, false);
- $table->data[0][1] = html_print_select ($minutes, 'minute', $minute, '', __('Any'), '*', true, false, false);
- $table->data[0][2] = html_print_select ($mdays, 'mday', $mday, '', __('Any'), '*', true, false, false);
- $table->data[0][3] = html_print_select ($months, 'month', $month, '', __('Any'), '*', true, false, false);
- $table->data[0][4] = html_print_select ($wdays, 'wday', $wday, '', __('Any'), '*', true, false, false);
+ $table->data[0][0] = html_print_select ($hours, 'hour', $hour, '', __('Any'), '*', true, false, false,'',$disabled);
+ $table->data[0][1] = html_print_select ($minutes, 'minute', $minute, '', __('Any'), '*', true, false, false,'',$disabled);
+ $table->data[0][2] = html_print_select ($mdays, 'mday', $mday, '', __('Any'), '*', true, false, false,'',$disabled);
+ $table->data[0][3] = html_print_select ($months, 'month', $month, '', __('Any'), '*', true, false, false,'',$disabled);
+ $table->data[0][4] = html_print_select ($wdays, 'wday', $wday, '', __('Any'), '*', true, false, false,'',$disabled);
return html_print_table ($table, $return);
}
diff --git a/pandora_server/lib/PandoraFMS/DataServer.pm b/pandora_server/lib/PandoraFMS/DataServer.pm
index d30c9cc4f5..92324bed0e 100644
--- a/pandora_server/lib/PandoraFMS/DataServer.pm
+++ b/pandora_server/lib/PandoraFMS/DataServer.pm
@@ -544,7 +544,7 @@ sub process_module_data ($$$$$$$$$) {
'datalist' => 0, 'status' => 0, 'unit' => 0, 'timestamp' => 0, 'module_group' => 0, 'custom_id' => '',
'str_warning' => '', 'str_critical' => '', 'critical_instructions' => '', 'warning_instructions' => '',
'unknown_instructions' => '', 'tags' => '', 'critical_inverse' => 0, 'warning_inverse' => 0, 'quiet' => 0,
- 'module_ff_interval' => 0, 'alert_template' => ''};
+ 'module_ff_interval' => 0, 'alert_template' => '', 'crontab' => ''};
# Other tags will be saved here
$module_conf->{'extended_info'} = '';
@@ -631,6 +631,11 @@ sub process_module_data ($$$$$$$$$) {
$initial_alert_template = $module_conf->{'alert_template'};
delete $module_conf->{'alert_template'};
}
+
+ if(cron_check_syntax ($module_conf->{'crontab'})) {
+ $module_conf->{'cron_interval'} = $module_conf->{'crontab'};
+ }
+ delete $module_conf->{'crontab'};
# Create the module
my $module_id = pandora_create_module_from_hash ($pa_config, $module_conf, $dbh);
diff --git a/pandora_server/lib/PandoraFMS/Tools.pm b/pandora_server/lib/PandoraFMS/Tools.pm
index 5e505296e2..bb00d68eff 100755
--- a/pandora_server/lib/PandoraFMS/Tools.pm
+++ b/pandora_server/lib/PandoraFMS/Tools.pm
@@ -64,6 +64,7 @@ our @EXPORT = qw(
cron_get_closest_in_range
cron_next_execution
cron_next_execution_date
+ cron_check_syntax
pandora_daemonize
logger
pandora_rotate_logfile
@@ -1245,7 +1246,15 @@ sub cron_next_execution ($) {
# Something went wrong, default to 5 minutes
return 300;
}
-
+###############################################################################
+# Get the number of seconds left to the next execution of the given cron entry.
+###############################################################################
+sub cron_check_syntax ($) {
+ my ($cron) = @_;
+
+ return 0 if !defined ($cron);
+ return ($cron =~ m/^(\d|\*|-)+ (\d|\*|-)+ (\d|\*|-)+ (\d|\*|-)+ (\d|\*|-)+$/);
+}
###############################################################################
# Get the next execution date for the given cron entry in seconds since epoch.
###############################################################################