瀏覽代碼

Update story garbage collection, handle non active stories and new ephemeral story media directory

Daniel Supernault 4 年之前
父節點
當前提交
c43f8bcce8
共有 1 個文件被更改,包括 120 次插入96 次删除
  1. 120 96
      app/Console/Commands/StoryGC.php

+ 120 - 96
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();
+			});
+		}
+	}
 }