diff --git a/app/Console/Commands/Tools/Cron.php b/app/Console/Commands/Tools/Cron.php index 11c92eb1ef..f103714c08 100644 --- a/app/Console/Commands/Tools/Cron.php +++ b/app/Console/Commands/Tools/Cron.php @@ -94,10 +94,10 @@ class Cron extends Command } /* - * Fire telemetry cron job (disabled): + * Fire telemetry cron job */ try { - //$this->telemetryCronJob($force, $date); + $this->telemetryCronJob($force, $date); } catch (FireflyException $e) { Log::error($e->getMessage()); Log::error($e->getTraceAsString()); diff --git a/app/Http/Controllers/System/CronController.php b/app/Http/Controllers/System/CronController.php index df44ae8a7b..3baa9a8415 100644 --- a/app/Http/Controllers/System/CronController.php +++ b/app/Http/Controllers/System/CronController.php @@ -42,6 +42,7 @@ class CronController $results = []; $results[] = $this->runRecurring(); $results[] = $this->runAutoBudget(); + $results[] = $this->runTelemetry(); return implode("
\n", $results); } diff --git a/app/Jobs/SubmitTelemetryData.php b/app/Jobs/SubmitTelemetryData.php index 5ffbe6784a..716e924675 100644 --- a/app/Jobs/SubmitTelemetryData.php +++ b/app/Jobs/SubmitTelemetryData.php @@ -24,6 +24,7 @@ namespace FireflyIII\Jobs; use Carbon\Carbon; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Telemetry; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; @@ -33,7 +34,9 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; +use JsonException; use Log; +use Exception; /** * Class SubmitTelemetryData @@ -61,7 +64,7 @@ class SubmitTelemetryData implements ShouldQueue } /** - * + * @throws FireflyException */ public function handle(): void { @@ -76,10 +79,19 @@ class SubmitTelemetryData implements ShouldQueue return; } + $body = '[]'; $json = $this->parseJson($telemetry); + try { + json_encode($json, JSON_THROW_ON_ERROR, 512); + } catch (JsonException $e) { + Log::error($e->getMessage()); + Log::error('Could not parse JSON.'); + throw new FireflyException(sprintf('Could not parse telemetry JSON: %s', $e->getMessage())); + } + $client = new Client; $options = [ - 'body' => json_encode($json, JSON_THROW_ON_ERROR, 512), + 'body' => $body, 'headers' => [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', @@ -89,11 +101,11 @@ class SubmitTelemetryData implements ShouldQueue ]; try { $result = $client->post($url, $options); - } catch (GuzzleException $e) { + } catch (GuzzleException|Exception $e) { Log::error($e->getMessage()); Log::error($e->getTraceAsString()); Log::error('Could not submit telemetry.'); - return; + throw new FireflyException(sprintf('Could not submit telemetry: %s', $e->getMessage())); } $body = (string) $result->getBody(); $statusCode = $result->getStatusCode(); diff --git a/app/Support/Cronjobs/TelemetryCronjob.php b/app/Support/Cronjobs/TelemetryCronjob.php index 8efd8c889f..0293c25c67 100644 --- a/app/Support/Cronjobs/TelemetryCronjob.php +++ b/app/Support/Cronjobs/TelemetryCronjob.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Support\Cronjobs; use Carbon\Carbon; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Jobs\SubmitTelemetryData; use FireflyIII\Models\Configuration; use Log; @@ -35,9 +36,17 @@ class TelemetryCronjob extends AbstractCronjob /** * @inheritDoc + * @throws FireflyException */ public function fire(): bool { + // do not fire if telemetry is disabled. + if (false === config('firefly.send_telemetry') || false === config('firefly.feature_flags.telemetry')) { + Log::warning('Telemetry is disabled. The cron job will do nothing.'); + return false; + } + + /** @var Configuration $config */ $config = app('fireflyconfig')->get('last_tm_job', 0); $lastTime = (int) $config->data; @@ -46,8 +55,8 @@ class TelemetryCronjob extends AbstractCronjob if (0 === $lastTime) { Log::info('Telemetry cron-job has never fired before.'); } - // less than half a day ago: - if ($lastTime > 0 && $diff <= 43200) { + // less than a week ago: + if ($lastTime > 0 && $diff <= 604800) { Log::info(sprintf('It has been %s since the telemetry cron-job has fired.', $diffForHumans)); if (false === $this->force) { Log::info('The cron-job will not fire now.'); @@ -60,8 +69,8 @@ class TelemetryCronjob extends AbstractCronjob Log::info('Execution of the telemetry cron-job has been FORCED.'); } } - - if ($lastTime > 0 && $diff > 43200) { + // more than a week ago. + if ($lastTime > 0 && $diff > 604799) { Log::info(sprintf('It has been %s since the telemetry cron-job has fired. It will fire now!', $diffForHumans)); } @@ -74,7 +83,7 @@ class TelemetryCronjob extends AbstractCronjob /** - * + * @throws FireflyException */ private function fireTelemetry(): void { @@ -87,4 +96,4 @@ class TelemetryCronjob extends AbstractCronjob app('fireflyconfig')->set('last_tm_job', (int) $this->date->format('U')); Log::info('Done with telemetry cron job task.'); } -} \ No newline at end of file +} diff --git a/app/Support/Http/Controllers/CronRunner.php b/app/Support/Http/Controllers/CronRunner.php index df513b291a..f5fb065f69 100644 --- a/app/Support/Http/Controllers/CronRunner.php +++ b/app/Support/Http/Controllers/CronRunner.php @@ -26,6 +26,7 @@ namespace FireflyIII\Support\Http\Controllers; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\Cronjobs\AutoBudgetCronjob; use FireflyIII\Support\Cronjobs\RecurringCronjob; +use FireflyIII\Support\Cronjobs\TelemetryCronjob; /** * Trait CronRunner @@ -51,6 +52,24 @@ trait CronRunner return 'The recurring transaction cron job fired successfully.'; } + /** + * @return string + */ + protected function runTelemetry(): string { + /** @var TelemetryCronjob $telemetry */ + $telemetry = app(TelemetryCronjob::class); + try { + $result = $telemetry->fire(); + } catch (FireflyException $e) { + return $e->getMessage(); + } + if (false === $result) { + return 'The telemetry cron job did not fire.'; + } + + return 'The telemetry cron job fired successfully.'; + } + /** * @return string */ diff --git a/config/firefly.php b/config/firefly.php index 4e240c9341..0b4edfb6f9 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -139,7 +139,7 @@ return [ ], 'feature_flags' => [ 'export' => true, - 'telemetry' => false, + 'telemetry' => true, ], 'encryption' => null === env('USE_ENCRYPTION') || true === env('USE_ENCRYPTION'),