kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			Update notification epoch generation
							rodzic
							
								
									06bf0c14bf
								
							
						
					
					
						commit
						446ca3a878
					
				|  | @ -0,0 +1,31 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace App\Console\Commands; | ||||
| 
 | ||||
| use Illuminate\Console\Command; | ||||
| use App\Jobs\InternalPipeline\NotificationEpochUpdatePipeline; | ||||
| 
 | ||||
| class NotificationEpochUpdate extends Command | ||||
| { | ||||
|     /** | ||||
|      * The name and signature of the console command. | ||||
|      * | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $signature = 'app:notification-epoch-update'; | ||||
| 
 | ||||
|     /** | ||||
|      * The console command description. | ||||
|      * | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $description = 'Update notification epoch'; | ||||
| 
 | ||||
|     /** | ||||
|      * Execute the console command. | ||||
|      */ | ||||
|     public function handle() | ||||
|     { | ||||
|         NotificationEpochUpdatePipeline::dispatch(); | ||||
|     } | ||||
| } | ||||
|  | @ -43,6 +43,7 @@ class Kernel extends ConsoleKernel | |||
|             $schedule->command('app:import-remove-deleted-accounts')->hourlyAt(37); | ||||
|             $schedule->command('app:import-upload-clean-storage')->twiceDailyAt(1, 13, 32); | ||||
|         } | ||||
|         $schedule->command('app:notification-epoch-update')->weeklyOn(1, '2:21'); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  |  | |||
|  | @ -0,0 +1,71 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace App\Jobs\InternalPipeline; | ||||
| 
 | ||||
| use Illuminate\Bus\Queueable; | ||||
| use Illuminate\Contracts\Queue\ShouldBeUnique; | ||||
| use Illuminate\Contracts\Queue\ShouldQueue; | ||||
| use Illuminate\Foundation\Bus\Dispatchable; | ||||
| use Illuminate\Queue\InteractsWithQueue; | ||||
| use Illuminate\Queue\SerializesModels; | ||||
| use Illuminate\Queue\Middleware\WithoutOverlapping; | ||||
| use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; | ||||
| use App\Notification; | ||||
| use Cache; | ||||
| use App\Services\NotificationService; | ||||
| 
 | ||||
| class NotificationEpochUpdatePipeline implements ShouldQueue, ShouldBeUniqueUntilProcessing | ||||
| { | ||||
|     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; | ||||
| 
 | ||||
|     public $timeout = 1500; | ||||
|     public $tries = 3; | ||||
|     public $maxExceptions = 1; | ||||
|     public $failOnTimeout = true; | ||||
| 
 | ||||
|     /** | ||||
|      * The number of seconds after which the job's unique lock will be released. | ||||
|      * | ||||
|      * @var int | ||||
|      */ | ||||
|     public $uniqueFor = 3600; | ||||
| 
 | ||||
|     /** | ||||
|      * Get the unique ID for the job. | ||||
|      */ | ||||
|     public function uniqueId(): string | ||||
|     { | ||||
|         return 'ip:notification-epoch-update'; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Get the middleware the job should pass through. | ||||
|      * | ||||
|      * @return array<int, object> | ||||
|      */ | ||||
|     public function middleware(): array | ||||
|     { | ||||
|         return [(new WithoutOverlapping('ip:notification-epoch-update'))->shared()->dontRelease()]; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Create a new job instance. | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         //
 | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Execute the job. | ||||
|      */ | ||||
|     public function handle(): void | ||||
|     { | ||||
|         $rec = Notification::where('created_at', '>', now()->subMonths(6))->first(); | ||||
|         $id = 1; | ||||
|         if($rec) { | ||||
|             $id = $rec->id; | ||||
|         } | ||||
|         Cache::put(NotificationService::EPOCH_CACHE_KEY . '6', $id, 1209600); | ||||
|     } | ||||
| } | ||||
|  | @ -12,6 +12,7 @@ use App\Transformer\Api\NotificationTransformer; | |||
| use League\Fractal; | ||||
| use League\Fractal\Serializer\ArraySerializer; | ||||
| use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||||
| use App\Jobs\InternalPipeline\NotificationEpochUpdatePipeline; | ||||
| 
 | ||||
| class NotificationService { | ||||
| 
 | ||||
|  | @ -48,12 +49,12 @@ class NotificationService { | |||
| 
 | ||||
| 	public static function getEpochId($months = 6) | ||||
| 	{ | ||||
| 		return Cache::remember(self::EPOCH_CACHE_KEY . $months, 1209600, function() use($months) { | ||||
|             if(Notification::count() === 0) { | ||||
|                 return 0; | ||||
|             } | ||||
| 			return Notification::where('created_at', '>', now()->subMonths($months))->first()->id; | ||||
| 		}); | ||||
| 		$epoch = Cache::get(self::EPOCH_CACHE_KEY . $months); | ||||
| 		if(!$epoch) { | ||||
| 			NotificationEpochUpdatePipeline::dispatch(); | ||||
| 			return 1; | ||||
| 		} | ||||
| 		return $epoch; | ||||
| 	} | ||||
| 
 | ||||
| 	public static function coldGet($id, $start = 0, $stop = 400) | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Daniel Supernault
						Daniel Supernault