kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			Update story garbage collection, handle non active stories and new ephemeral story media directory
							rodzic
							
								
									71aeb8a25d
								
							
						
					
					
						commit
						c43f8bcce8
					
				|  | @ -3,103 +3,127 @@ | |||
| namespace App\Console\Commands; | ||||
| 
 | ||||
| use Illuminate\Console\Command; | ||||
| use Illuminate\Support\Facades\{ | ||||
|     DB, | ||||
|     Storage | ||||
| }; | ||||
| use App\{ | ||||
|     Story, | ||||
|     StoryView | ||||
| }; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| use Illuminate\Support\Facades\Storage; | ||||
| use App\Story; | ||||
| use App\StoryView; | ||||
| 
 | ||||
| class StoryGC extends Command | ||||
| { | ||||
|     /** | ||||
|      * The name and signature of the console command. | ||||
|      * | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $signature = 'story:gc'; | ||||
| 	/** | ||||
| 	* The name and signature of the console command. | ||||
| 	* | ||||
| 	* @var string | ||||
| 	*/ | ||||
| 	protected $signature = 'story:gc'; | ||||
| 
 | ||||
|     /** | ||||
|      * The console command description. | ||||
|      * | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $description = 'Clear expired Stories'; | ||||
| 	/** | ||||
| 	* The console command description. | ||||
| 	* | ||||
| 	* @var string | ||||
| 	*/ | ||||
| 	protected $description = 'Clear expired Stories'; | ||||
| 
 | ||||
|     /** | ||||
|      * Create a new command instance. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         parent::__construct(); | ||||
|     } | ||||
| 	/** | ||||
| 	* Create a new command instance. | ||||
| 	* | ||||
| 	* @return void | ||||
| 	*/ | ||||
| 	public function __construct() | ||||
| 	{ | ||||
| 		parent::__construct(); | ||||
| 	} | ||||
| 
 | ||||
|     /** | ||||
|      * Execute the console command. | ||||
|      * | ||||
|      * @return mixed | ||||
|      */ | ||||
|     public function handle() | ||||
|     { | ||||
|         $this->directoryScan(); | ||||
|         $this->deleteViews(); | ||||
|         $this->deleteStories(); | ||||
|     } | ||||
| 	/** | ||||
| 	* Execute the console command. | ||||
| 	* | ||||
| 	* @return mixed | ||||
| 	*/ | ||||
| 	public function handle() | ||||
| 	{ | ||||
| 		$this->directoryScan(); | ||||
| 		$this->deleteViews(); | ||||
| 		$this->deleteStories(); | ||||
| 	} | ||||
| 
 | ||||
|     protected function directoryScan() | ||||
|     { | ||||
|         $day = now()->day; | ||||
| 	protected function directoryScan() | ||||
| 	{ | ||||
| 		$hour = now()->hour; | ||||
| 
 | ||||
|         if($day != 3) { | ||||
|             return; | ||||
|         } | ||||
| 		if($hour !== 1) { | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
|         $monthHash = substr(hash('sha1', date('Y').date('m')), 0, 12); | ||||
| 		$monthHash = substr(hash('sha1', date('Y').date('m')), 0, 12); | ||||
| 
 | ||||
|         $t1 = Storage::directories('public/_esm.t1'); | ||||
|         $t2 = Storage::directories('public/_esm.t2'); | ||||
| 		$t1 = Storage::directories('public/_esm.t1'); | ||||
| 		$t2 = Storage::directories('public/_esm.t2'); | ||||
| 
 | ||||
|         $dirs = array_merge($t1, $t2); | ||||
| 		$dirs = array_merge($t1, $t2); | ||||
| 
 | ||||
|         foreach($dirs as $dir) { | ||||
|             $hash = last(explode('/', $dir)); | ||||
|             if($hash != $monthHash) { | ||||
|                 $this->info('Found directory to delete: ' . $dir); | ||||
|                 $this->deleteDirectory($dir); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 		foreach($dirs as $dir) { | ||||
| 			$hash = last(explode('/', $dir)); | ||||
| 			if($hash != $monthHash) { | ||||
| 				$this->info('Found directory to delete: ' . $dir); | ||||
| 				$this->deleteDirectory($dir); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
|     protected function deleteDirectory($path) | ||||
|     { | ||||
|         Storage::deleteDirectory($path); | ||||
|     } | ||||
| 		$mh = hash('sha256', date('Y').'-.-'.date('m')); | ||||
| 		$monthHash = date('Y').date('m').substr($mh, 0, 6).substr($mh, 58, 6); | ||||
| 		$dirs = Storage::directories('public/_esm.t3'); | ||||
| 
 | ||||
|     protected function deleteViews() | ||||
|     { | ||||
|         StoryView::where('created_at', '<', now()->subMinutes(1441))->delete(); | ||||
|     } | ||||
| 		foreach($dirs as $dir) { | ||||
| 			$hash = last(explode('/', $dir)); | ||||
| 			if($hash != $monthHash) { | ||||
| 				$this->info('Found directory to delete: ' . $dir); | ||||
| 				$this->deleteDirectory($dir); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|     protected function deleteStories() | ||||
|     { | ||||
|         $stories = Story::where('created_at', '<', now()->subMinutes(1441))->take(50)->get(); | ||||
| 	protected function deleteDirectory($path) | ||||
| 	{ | ||||
| 		Storage::deleteDirectory($path); | ||||
| 	} | ||||
| 
 | ||||
|         if($stories->count() == 0) { | ||||
|             exit; | ||||
|         } | ||||
| 	protected function deleteViews() | ||||
| 	{ | ||||
| 		StoryView::where('created_at', '<', now()->subMinutes(1441))->delete(); | ||||
| 	} | ||||
| 
 | ||||
|         foreach($stories as $story) { | ||||
|             if(Storage::exists($story->path) == true) { | ||||
|                 Storage::delete($story->path); | ||||
|             } | ||||
|             DB::transaction(function() use($story) { | ||||
|                 StoryView::whereStoryId($story->id)->delete(); | ||||
|                 $story->delete(); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
| 	protected function deleteStories() | ||||
| 	{ | ||||
| 		$stories = Story::where('created_at', '>', now()->subMinutes(30)) | ||||
| 		->whereNull('active') | ||||
| 		->get(); | ||||
| 
 | ||||
| 		foreach($stories as $story) { | ||||
| 			if(Storage::exists($story->path) == true) { | ||||
| 				Storage::delete($story->path); | ||||
| 			} | ||||
| 			DB::transaction(function() use($story) { | ||||
| 				StoryView::whereStoryId($story->id)->delete(); | ||||
| 				$story->delete(); | ||||
| 			}); | ||||
| 		} | ||||
| 
 | ||||
| 		$stories = Story::where('created_at', '<', now() | ||||
| 			->subMinutes(1441)) | ||||
| 		->get(); | ||||
| 
 | ||||
| 		if($stories->count() == 0) { | ||||
| 			exit; | ||||
| 		} | ||||
| 
 | ||||
| 		foreach($stories as $story) { | ||||
| 			if(Storage::exists($story->path) == true) { | ||||
| 				Storage::delete($story->path); | ||||
| 			} | ||||
| 			DB::transaction(function() use($story) { | ||||
| 				StoryView::whereStoryId($story->id)->delete(); | ||||
| 				$story->delete(); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Daniel Supernault
						Daniel Supernault