From d200c12cf2d18fc4ac3d3fda9ecf89afdd50429a Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 28 Feb 2021 23:25:37 -0700 Subject: [PATCH] Update Nodeinfo util, use last_active_at for monthly active user count --- app/Util/Site/Nodeinfo.php | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/app/Util/Site/Nodeinfo.php b/app/Util/Site/Nodeinfo.php index 1c9920441..022615e37 100644 --- a/app/Util/Site/Nodeinfo.php +++ b/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' => [