freescout/freescout-dist/app/Console/Commands/FetchMonitor.php

74 lines
2.4 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class FetchMonitor extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'freescout:fetch-monitor';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Check emails fetching and send alert if fething is not working or recovered';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$now = time();
$options = \Option::getOptions([
'alert_fetch_period',
'fetch_emails_last_successful_run',
]);
$last_successful_run = $options['fetch_emails_last_successful_run'];
if ($last_successful_run && $last_successful_run < $now - ((config('app.fetch_schedule') * 60) + ($options['alert_fetch_period'] * 60))) {
$mins_ago = floor(($now - $last_successful_run) / 60);
$text = 'There are some problems fetching emails: last time emails were successfully fetched <strong>'.$mins_ago.' minutes ago</strong>. Please check <a href="'.route('logs', ['name' => 'fetch_errors']).'">fetching logs</a> and <a href="'.route('system').'#cron">make sure</a> that the following cron task is running: <code>php artisan schedule:run</code>';
if (\Option::get('alert_fetch') && !\Option::get('alert_fetch_sent')) {
// We send alert only once
\Option::set('alert_fetch_sent', true);
\MailHelper::sendAlertMail($text, 'Fetching Problems');
}
$this->error('['.date('Y-m-d H:i:s').'] '.$text);
} elseif (!$last_successful_run) {
$this->line('['.date('Y-m-d H:i:s').'] Fetching has not been configured yet');
} else {
if (\Option::get('alert_fetch_sent')) {
$text = 'Previously there were some problems fetching emails. Fetching recovered and functioning now!';
\MailHelper::sendAlertMail($text, 'Fetching Recovered');
}
\Option::set('alert_fetch_sent', false);
$this->info('['.date('Y-m-d H:i:s').'] Fetching is working');
}
}
}