From c43f8bcce8b72db6af7078af167f7228c3b4f52e Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 27 Apr 2021 20:02:33 -0600 Subject: [PATCH] Update story garbage collection, handle non active stories and new ephemeral story media directory --- app/Console/Commands/StoryGC.php | 216 +++++++++++++++++-------------- 1 file changed, 120 insertions(+), 96 deletions(-) diff --git a/app/Console/Commands/StoryGC.php b/app/Console/Commands/StoryGC.php index 685714a75..21ba6266a 100644 --- a/app/Console/Commands/StoryGC.php +++ b/app/Console/Commands/StoryGC.php @@ -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 console command description. - * - * @var string - */ - protected $description = 'Clear expired Stories'; - - /** - * 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(); - } - - protected function directoryScan() - { - $day = now()->day; - - if($day != 3) { - return; - } - - $monthHash = substr(hash('sha1', date('Y').date('m')), 0, 12); - - $t1 = Storage::directories('public/_esm.t1'); - $t2 = Storage::directories('public/_esm.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); - } - } - } - - protected function deleteDirectory($path) - { - Storage::deleteDirectory($path); - } - - protected function deleteViews() - { - StoryView::where('created_at', '<', now()->subMinutes(1441))->delete(); - } - - protected function deleteStories() - { - $stories = Story::where('created_at', '<', now()->subMinutes(1441))->take(50)->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(); - }); - } - } + /** + * 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'; + + /** + * 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(); + } + + protected function directoryScan() + { + $hour = now()->hour; + + if($hour !== 1) { + return; + } + + $monthHash = substr(hash('sha1', date('Y').date('m')), 0, 12); + + $t1 = Storage::directories('public/_esm.t1'); + $t2 = Storage::directories('public/_esm.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); + } + } + + $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'); + + 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); + } + + protected function deleteViews() + { + StoryView::where('created_at', '<', now()->subMinutes(1441))->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(); + }); + } + } }