mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-01 20:17:35 -04:00 
			
		
		
		
	Add a System maintenance teask
This commit is contained in:
		
							parent
							
								
									3b2d863023
								
							
						
					
					
						commit
						16e55d89ec
					
				| @ -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 | ||||
| @ -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()) | ||||
|         { | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										132
									
								
								app/Jobs/Ninja/SystemMaintenance.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								app/Jobs/Ninja/SystemMaintenance.php
									
									
									
									
									
										Normal 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(); | ||||
| 
 | ||||
|                 }); | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| @ -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), | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user