1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 00:11:35 +02:00

Add a System maintenance teask

This commit is contained in:
David Bomba 2022-05-19 20:39:02 +10:00
parent 3b2d863023
commit 16e55d89ec
4 changed files with 142 additions and 0 deletions

View File

@ -53,5 +53,8 @@ PHANTOMJS_SECRET=secret
UPDATE_SECRET=secret
DELETE_PDF_DAYS=60
DELETE_BACKUP_DAYS=60
COMPOSER_AUTH='{"github-oauth": {"github.com": "${{ secrets.GITHUB_TOKEN }}"}}'
SENTRY_LARAVEL_DSN=https://39389664f3f14969b4c43dadda00a40b@sentry2.invoicing.co/5

View File

@ -19,6 +19,7 @@ use App\Jobs\Ledger\LedgerBalanceUpdate;
use App\Jobs\Ninja\AdjustEmailQuota;
use App\Jobs\Ninja\CompanySizeCheck;
use App\Jobs\Ninja\QueueSize;
use App\Jobs\Ninja\SystemMaintenance;
use App\Jobs\Util\DiskCleanup;
use App\Jobs\Util\ReminderJob;
use App\Jobs\Util\SchedulerCheck;
@ -73,6 +74,8 @@ class Kernel extends ConsoleKernel
$schedule->job(new SchedulerCheck)->daily()->withoutOverlapping();
$schedule->job(new SystemMaintenance)->weekly()->withoutOverlapping();
if(Ninja::isSelfHost())
{

View File

@ -0,0 +1,132 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Jobs\Ninja;
use App\Models\Backup;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Quote;
use App\Utils\Ninja;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Queue;
use Illuminate\Support\Facades\Storage;
class SystemMaintenance implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
set_time_limit(0);
nlog("Starting System Maintenance");
// if(Ninja::isHosted())
// return;
$delete_pdf_days = config('ninja.maintenance.delete_pdfs');
nlog("Number of days to keep PDFs {$delete_pdf_days}");
$delete_backup_days = config('ninja.maintenance.delete_backups');
nlog("Number of days to keep PDFs {$delete_backup_days}");
$this->maintainPdfs($delete_pdf_days);
$this->maintainBackups($delete_backup_days);
}
private function maintainPdfs(int $delete_pdf_days)
{
if($delete_pdf_days == 0)
return;
Invoice::with('invitations')
->whereBetween('created_at', [now()->subYear(), now()->subDays($delete_pdf_days)])
->withTrashed()
->cursor()
->each(function ($invoice){
nlog("deleting invoice {$invoice->number}");
$invoice->service()->deletePdf();
});
Quote::with('invitations')
->whereBetween('created_at', [now()->subYear(), now()->subDays($delete_pdf_days)])
->withTrashed()
->cursor()
->each(function ($quote){
nlog("deleting quote {$quote->number}");
$quote->service()->deletePdf();
});
Credit::with('invitations')
->whereBetween('created_at', [now()->subYear(), now()->subDays($delete_pdf_days)])
->withTrashed()
->cursor()
->each(function ($credit){
nlog("deleting credit {$credit->number}");
$credit->service()->deletePdf();
});
}
private function maintainBackups(int $delete_backup_days)
{
if($delete_backup_days == 0)
return;
Backup::where('created_at', '<', now()->subDays($delete_backup_days))
->cursor()
->each(function ($backup){
nlog("deleting {$backup->filename}");
if($backup->filename)
Storage::disk(config('filesystems.default'))->delete($backup->filename);
$backup->delete();
});
}
}

View File

@ -155,6 +155,10 @@ return [
'designs' => [
'base_path' => resource_path('views/pdf-designs/'),
],
'maintenance' => [
'delete_pdfs' => env('DELETE_PDF_DAYS', 0),
'delete_backups' => env('DELETE_BACKUP_DAYS', 0),
],
'log_pdf_html' => env('LOG_PDF_HTML', false),
'expanded_logging' => env('EXPANDED_LOGGING', false),
'snappdf_chromium_path' => env('SNAPPDF_CHROMIUM_PATH', false),