Browse Source

Add app:hashtag-cached-count-update command to update cached_count of hashtags and add to scheduler to run every 25 minutes past the hour

Daniel Supernault 1 year ago
parent
commit
1e31fee6a6
2 changed files with 58 additions and 0 deletions
  1. 57 0
      app/Console/Commands/HashtagCachedCountUpdate.php
  2. 1 0
      app/Console/Kernel.php

+ 57 - 0
app/Console/Commands/HashtagCachedCountUpdate.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Hashtag;
+use App\StatusHashtag;
+use DB;
+
+class HashtagCachedCountUpdate extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'app:hashtag-cached-count-update {--limit=100}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Update cached counter of hashtags';
+
+    /**
+     * Execute the console command.
+     */
+    public function handle()
+    {
+        $limit = $this->option('limit');
+        $tags = Hashtag::whereNull('cached_count')->limit($limit)->get();
+        $count = count($tags);
+        if(!$count) {
+            return;
+        }
+
+        $bar = $this->output->createProgressBar($count);
+        $bar->start();
+
+        foreach($tags as $tag) {
+            $count = DB::table('status_hashtags')->whereHashtagId($tag->id)->count();
+            if(!$count) {
+                $tag->cached_count = 0;
+                $tag->saveQuietly();
+                $bar->advance();
+                continue;
+            }
+            $tag->cached_count = $count;
+            $tag->saveQuietly();
+            $bar->advance();
+        }
+        $bar->finish();
+        $this->line(' ');
+        return;
+    }
+}

+ 1 - 0
app/Console/Kernel.php

@@ -44,6 +44,7 @@ class Kernel extends ConsoleKernel
             $schedule->command('app:import-upload-clean-storage')->twiceDailyAt(1, 13, 32);
         }
         $schedule->command('app:notification-epoch-update')->weeklyOn(1, '2:21');
+        $schedule->command('app:hashtag-cached-count-update')->hourlyAt(25);
     }
 
     /**