Преглед изворни кода

Update Nodeinfo util, use last_active_at for monthly active user count

Daniel Supernault пре 4 година
родитељ
комит
d200c12cf2
1 измењених фајлова са 17 додато и 10 уклоњено
  1. 17 10
      app/Util/Site/Nodeinfo.php

+ 17 - 10
app/Util/Site/Nodeinfo.php

@@ -12,24 +12,31 @@ class Nodeinfo {
 	{
         $res = Cache::remember('api:nodeinfo', now()->addMinutes(15), function () {
             $activeHalfYear = Cache::remember('api:nodeinfo:ahy', now()->addHours(12), function() {
+                // todo: replace with last_active_at after July 9, 2021 (96afc3e781)
                 $count = collect([]);
                 $likes = Like::select('profile_id')->with('actor')->where('created_at', '>', now()->subMonths(6)->toDateTimeString())->groupBy('profile_id')->get()->filter(function($like) {return $like->actor && $like->actor->domain == null;})->pluck('profile_id')->toArray();
                 $count = $count->merge($likes);
                 $statuses = Status::select('profile_id')->whereLocal(true)->where('created_at', '>', now()->subMonths(6)->toDateTimeString())->groupBy('profile_id')->pluck('profile_id')->toArray();
                 $count = $count->merge($statuses);
-                $profiles = Profile::select('id')->whereNull('domain')->where('created_at', '>', now()->subMonths(6)->toDateTimeString())->groupBy('id')->pluck('id')->toArray();
+                $profiles = User::select('profile_id', 'last_active_at')
+                    ->whereNotNull('last_active_at')
+                    ->where('last_active_at', '>', now()->subMonths(6))
+                    ->pluck('profile_id')
+                    ->toArray();
+                $newProfiles = User::select('profile_id', 'last_active_at', 'created_at')
+                    ->whereNull('last_active_at')
+                    ->where('created_at', '>', now()->subMonths(6))
+                    ->pluck('profile_id')
+                    ->toArray();
+                $count = $count->merge($newProfiles);
                 $count = $count->merge($profiles);
                 return $count->unique()->count();
             });
-            $activeMonth = Cache::remember('api:nodeinfo:am', now()->addHours(12), function() {
-                $count = collect([]);
-                $likes = Like::select('profile_id')->where('created_at', '>', now()->subMonths(1)->toDateTimeString())->groupBy('profile_id')->get()->filter(function($like) {return $like->actor && $like->actor->domain == null;})->pluck('profile_id')->toArray();
-                $count = $count->merge($likes);
-                $statuses = Status::select('profile_id')->whereLocal(true)->where('created_at', '>', now()->subMonths(1)->toDateTimeString())->groupBy('profile_id')->pluck('profile_id')->toArray();
-                $count = $count->merge($statuses);
-                $profiles = Profile::select('id')->whereNull('domain')->where('created_at', '>', now()->subMonths(1)->toDateTimeString())->groupBy('id')->pluck('id')->toArray();
-                $count = $count->merge($profiles);
-                return $count->unique()->count();
+            $activeMonth = Cache::remember('api:nodeinfo:am', now()->addHours(2), function() {
+                return User::select('last_active_at')
+                    ->where('last_active_at', '>', now()->subMonths(1))
+                    ->orWhere('created_at', '>', now()->subMonths(1))
+                    ->count();
             });
             return [
                 'metadata' => [