NEW Can send an email on scheduled job error

This commit is contained in:
Laurent Destailleur 2022-10-03 19:30:00 +02:00
parent c0dac5d5db
commit bb624dd0a1
3 changed files with 54 additions and 11 deletions

View File

@ -141,6 +141,7 @@ if ($action == 'add') {
$object->unitfrequency = GETPOST('unitfrequency', 'int');
$object->frequency = GETPOST('nbfrequency', 'int');
$object->maxrun = GETPOST('maxrun', 'int');
$object->email_alert = GETPOST('email_alert');
// Add cron task
$result = $object->create($user);
@ -175,6 +176,7 @@ if ($action == 'update') {
$object->unitfrequency = GETPOST('unitfrequency', 'int');
$object->frequency = GETPOST('nbfrequency', 'int');
$object->maxrun = GETPOST('maxrun', 'int');
$object->email_alert = GETPOST('email_alert');
// Add cron task
$result = $object->update($user);
@ -415,6 +417,15 @@ if (($action == "create") || ($action == "edit")) {
print "</td>";
print "</tr>\n";
print '<tr class="blockemailalert"><td>';
print $langs->trans('EmailIfError')."</td><td>";
print '<input type="text" class="minwidth150" name="email_alert" value="'.dol_escape_htmltag($object->email_alert).'" /> ';
print "</td>";
print "<td>";
//print $form->textwithpicto('', $langs->trans("CronCommandHelp"), 1, 'help');
print "</td>";
print "</tr>\n";
print '<tr><td class="fieldrequired">';
print $langs->trans('CronEvery')."</td>";
print "<td>";
@ -578,32 +589,32 @@ if (($action == "create") || ($action == "edit")) {
print '<tr class="blockmethod"><td>';
print $langs->trans('CronModule')."</td><td>";
print $object->module_name;
print dol_escape_htmltag($object->module_name);
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronClassFile')."</td><td>";
print $object->classesname;
print dol_escape_htmltag($object->classesname);
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronObject')."</td><td>";
print $object->objectname;
print dol_escape_htmltag($object->objectname);
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronMethod')."</td><td>";
print $object->methodename;
print dol_escape_htmltag($object->methodename);
print "</td></tr>";
print '<tr class="blockmethod"><td>';
print $langs->trans('CronArgs')."</td><td>";
print $object->params;
print dol_escape_htmltag($object->params);
print "</td></tr>";
print '<tr class="blockcommand"><td>';
print $langs->trans('CronCommand')."</td><td>";
print $object->command;
print dol_escape_htmltag($object->command);
print "</td></tr>";
print '<tr><td>';
@ -613,6 +624,11 @@ if (($action == "create") || ($action == "edit")) {
}
print "</td></tr>";
print '<tr class="blockemailalert"><td>';
print $langs->trans('EmailIfError')."</td><td>";
print dol_escape_htmltag($object->email_alert);
print "</td></tr>";
if (isModEnabled('multicompany')) {
print '<tr><td>';
print $langs->trans('Entity')."</td><td>";

View File

@ -142,6 +142,11 @@ class Cronjob extends CommonObject
*/
public $pid;
/**
* @var string Email when an error occurs
*/
public $email_alert;
/**
* @var int User ID of creation
*/
@ -428,6 +433,7 @@ class Cronjob extends CommonObject
$sql .= " t.status,";
$sql .= " t.processing,";
$sql .= " t.pid,";
$sql .= " t.email_alert,";
$sql .= " t.fk_user_author,";
$sql .= " t.fk_user_mod,";
$sql .= " t.note as note_private,";
@ -477,6 +483,7 @@ class Cronjob extends CommonObject
$this->status = $obj->status;
$this->processing = $obj->processing;
$this->pid = $obj->pid;
$this->email_alert = $obj->email_alert;
$this->fk_user_author = $obj->fk_user_author;
$this->fk_user_mod = $obj->fk_user_mod;
$this->note_private = $obj->note_private;
@ -538,6 +545,7 @@ class Cronjob extends CommonObject
$sql .= " t.status,";
$sql .= " t.processing,";
$sql .= " t.pid,";
$sql .= " t.email_alert,";
$sql .= " t.fk_user_author,";
$sql .= " t.fk_user_mod,";
$sql .= " t.note as note_private,";
@ -615,6 +623,7 @@ class Cronjob extends CommonObject
$line->status = $obj->status;
$line->processing = $obj->processing;
$line->pid = $obj->pid;
$line->email_alert = $obj->email_alert;
$line->fk_user_author = $obj->fk_user_author;
$line->fk_user_mod = $obj->fk_user_mod;
$line->note_private = $obj->note_private;
@ -716,10 +725,12 @@ class Cronjob extends CommonObject
if (empty($this->processing)) {
$this->processing = 0;
}
if (empty($this->pid)) {
$this->pid = null;
}
if (empty($this->email_alert)) {
$this->email_alert = '';
}
// Check parameters
// Put here code to add a control on parameters values
@ -764,7 +775,7 @@ class Cronjob extends CommonObject
// Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."cronjob SET";
$sql .= " entity=".(isset($this->entity) ? $this->db->escape($this->entity) : $conf->entity).",";
$sql .= " entity=".(isset($this->entity) ? ((int) $this->entity) : $conf->entity).",";
$sql .= " label=".(isset($this->label) ? "'".$this->db->escape($this->label)."'" : "null").",";
$sql .= " jobtype=".(isset($this->jobtype) ? "'".$this->db->escape($this->jobtype)."'" : "null").",";
$sql .= " command=".(isset($this->command) ? "'".$this->db->escape($this->command)."'" : "null").",";
@ -774,7 +785,7 @@ class Cronjob extends CommonObject
$sql .= " params=".(isset($this->params) ? "'".$this->db->escape($this->params)."'" : "null").",";
$sql .= " md5params=".(isset($this->md5params) ? "'".$this->db->escape($this->md5params)."'" : "null").",";
$sql .= " module_name=".(isset($this->module_name) ? "'".$this->db->escape($this->module_name)."'" : "null").",";
$sql .= " priority=".(isset($this->priority) ? $this->priority : "null").",";
$sql .= " priority=".(isset($this->priority) ? ((int) $this->priority) : "null").",";
$sql .= " datelastrun=".(dol_strlen($this->datelastrun) != 0 ? "'".$this->db->idate($this->datelastrun)."'" : 'null').",";
$sql .= " datenextrun=".(dol_strlen($this->datenextrun) != 0 ? "'".$this->db->idate($this->datenextrun)."'" : 'null').",";
$sql .= " dateend=".(dol_strlen($this->dateend) != 0 ? "'".$this->db->idate($this->dateend)."'" : 'null').",";
@ -786,8 +797,9 @@ class Cronjob extends CommonObject
$sql .= " frequency=".(isset($this->frequency) ? $this->frequency : "null").",";
$sql .= " status=".(isset($this->status) ? $this->status : "null").",";
$sql .= " processing=".((isset($this->processing) && $this->processing > 0) ? $this->processing : "0").",";
$sql .= " pid=".(isset($this->pid) ? $this->pid : "null").",";
$sql .= " fk_user_mod=".$user->id.",";
$sql .= " pid=".(isset($this->pid) ? ((int) $this->pid) : "null").",";
$sql .= " email_alert = ".(isset($this->email_alert) ? "'".$this->db->escape($this->email_alert)."'" : "null").",";
$sql .= " fk_user_mod = ".((int) $user->id).",";
$sql .= " note=".(isset($this->note_private) ? "'".$this->db->escape($this->note_private)."'" : "null").",";
$sql .= " nbrun=".((isset($this->nbrun) && $this->nbrun > 0) ? $this->nbrun : "null").",";
$sql .= " maxrun=".((isset($this->maxrun) && $this->maxrun > 0) ? $this->maxrun : "0").",";
@ -940,6 +952,7 @@ class Cronjob extends CommonObject
$this->status = 0;
$this->processing = 0;
$this->pid = null;
$this->email_alert = '';
$this->fk_user_author = 0;
$this->fk_user_mod = 0;
$this->note_private = '';
@ -1130,6 +1143,7 @@ class Cronjob extends CommonObject
@set_time_limit($ExecTimeLimit); // Need more than 240 on Windows 7/64
error_reporting($err);
}
$MemoryLimit = 0;
if (!empty($MemoryLimit)) {
@ini_set('memory_limit', $MemoryLimit);
}
@ -1341,6 +1355,16 @@ class Cronjob extends CommonObject
}
$conf->setEntityValues($this->db, $savcurrententity);
if ($error && !empty($this->email_alert)) {
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
$subject = $langs->trans("ErrorInBatch", $this->label);
$msg = $langs->trans("ErrorInBatch", $this->label);
$from = getDolGlobalString('MAIN_MAIL_EMAIL_FROM');
$cmailfile = new CMailFile($subject, $this->email_alert, $from, $msg);
$result = $cmailfile->sendfile(); // Do not test result
}
return $error ?-1 : 1;
}

View File

@ -89,6 +89,9 @@ CleanUnfinishedCronjob=Clean cronjob stuck in processing when the process is no
WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run.
DATAPOLICYJob=Data cleaner and anonymizer
JobXMustBeEnabled=Job %s must be enabled
EmailIfError=Email for warning on error
ErrorInBatch=Error when running the job %s
# Cron Boxes
LastExecutedScheduledJob=Last executed scheduled job
NextScheduledJobExecute=Next scheduled job to execute