kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			Update cache
							rodzic
							
								
									17b449d5ed
								
							
						
					
					
						commit
						6e0d1ef41b
					
				|  | @ -1649,7 +1649,7 @@ class ApiV1Controller extends Controller | |||
|             $stats = Cache::remember('api:v1:instance-data:stats', 43200, function () { | ||||
|                 return [ | ||||
|                     'user_count' => User::count(), | ||||
|                     'status_count' => Status::whereNull('uri')->count(), | ||||
|                     'status_count' => StatusService::totalLocalStatuses(), | ||||
|                     'domain_count' => Instance::count(), | ||||
|                 ]; | ||||
|             }); | ||||
|  |  | |||
|  | @ -4,8 +4,9 @@ namespace App\Http\Controllers\Api; | |||
| 
 | ||||
| use Illuminate\Http\Request; | ||||
| use App\Http\Controllers\Controller; | ||||
| use App\{Profile, Status, User}; | ||||
| use App\{Profile, Instance, Status, User}; | ||||
| use Cache; | ||||
| use App\Services\StatusService; | ||||
| 
 | ||||
| class InstanceApiController extends Controller { | ||||
| 
 | ||||
|  | @ -40,11 +41,8 @@ class InstanceApiController extends Controller { | |||
| 			'urls' => [], | ||||
| 			'stats' => [ | ||||
| 				'user_count' => User::count(), | ||||
| 				'status_count' => Status::whereNull('uri')->count(), | ||||
| 				'domain_count' => Profile::whereNotNull('domain') | ||||
| 					->groupBy('domain') | ||||
| 					->pluck('domain') | ||||
| 					->count() | ||||
| 				'status_count' => StatusService::totalLocalStatuses(), | ||||
| 				'domain_count' => Instance::count() | ||||
| 			], | ||||
| 			'thumbnail' => '', | ||||
| 			'languages' => [], | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ namespace App\Http\Controllers; | |||
| use App\Page; | ||||
| use App\Profile; | ||||
| use App\Services\FollowerService; | ||||
| use App\Status; | ||||
| use App\Services\StatusService; | ||||
| use App\User; | ||||
| use App\Util\ActivityPub\Helpers; | ||||
| use App\Util\Localization\Localization; | ||||
|  | @ -60,7 +60,7 @@ class SiteController extends Controller | |||
|     { | ||||
|         return Cache::remember('site.about_v2', now()->addMinutes(15), function () { | ||||
|             $user_count = number_format(User::count()); | ||||
|             $post_count = number_format(Status::count()); | ||||
|             $post_count = number_format(StatusService::totalLocalStatuses()); | ||||
|             $rules = config_cache('app.rules') ? json_decode(config_cache('app.rules'), true) : null; | ||||
| 
 | ||||
|             return view('site.about', compact('rules', 'user_count', 'post_count'))->render(); | ||||
|  |  | |||
|  | @ -2,47 +2,43 @@ | |||
| 
 | ||||
| namespace App\Services; | ||||
| 
 | ||||
| use Cache; | ||||
| use DB; | ||||
| use App\Avatar; | ||||
| use App\Contact; | ||||
| use App\FailedJob; | ||||
| use App\Instance; | ||||
| use App\Media; | ||||
| use App\Profile; | ||||
| use App\Report; | ||||
| use App\Status; | ||||
| use App\User; | ||||
| use App\Util\Lexer\PrettyNumber; | ||||
| use App\{ | ||||
| 	Avatar, | ||||
| 	Contact, | ||||
| 	FailedJob, | ||||
| 	Hashtag, | ||||
| 	Instance, | ||||
| 	Media, | ||||
| 	Like, | ||||
| 	Profile, | ||||
| 	Report, | ||||
| 	Status, | ||||
| 	User | ||||
| }; | ||||
| use \DateInterval; | ||||
| use \DatePeriod; | ||||
| use Cache; | ||||
| use DateInterval; | ||||
| use DatePeriod; | ||||
| use DB; | ||||
| 
 | ||||
| class AdminStatsService | ||||
| { | ||||
| 	public static function get() | ||||
| 	{ | ||||
| 		return array_merge( | ||||
| 			self::recentData(), | ||||
| 			self::additionalData(), | ||||
| 			self::postsGraph() | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	public static function summary() | ||||
| 	{ | ||||
| 		return array_merge( | ||||
| 			self::recentData(), | ||||
| 			self::additionalDataSummary(), | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	public static function storage() | ||||
|     public static function get() | ||||
|     { | ||||
|         return Cache::remember('admin:dashboard:storage:stats', 120000, function() { | ||||
|         return array_merge( | ||||
|             self::recentData(), | ||||
|             self::additionalData(), | ||||
|             self::postsGraph() | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public static function summary() | ||||
|     { | ||||
|         return array_merge( | ||||
|             self::recentData(), | ||||
|             self::additionalDataSummary(), | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public static function storage() | ||||
|     { | ||||
|         return Cache::remember('admin:dashboard:storage:stats', 120000, function () { | ||||
|             $res = []; | ||||
| 
 | ||||
|             $res['last_updated'] = str_replace('+00:00', 'Z', now()->format(DATE_RFC3339_EXTENDED)); | ||||
|  | @ -53,7 +49,7 @@ class AdminStatsService | |||
|                 'count' => $avatars, | ||||
|                 'local_count' => $avatarsLocal, | ||||
|                 'cloud_count' => ($avatars - $avatarsLocal), | ||||
|                 'total_sum' => Avatar::sum('size') | ||||
|                 'total_sum' => Avatar::sum('size'), | ||||
|             ]; | ||||
| 
 | ||||
|             $media = Media::count(); | ||||
|  | @ -77,97 +73,100 @@ class AdminStatsService | |||
|         }); | ||||
|     } | ||||
| 
 | ||||
| 	protected static function recentData() | ||||
| 	{ | ||||
| 		$day = config('database.default') == 'pgsql' ? 'DATE_PART(\'day\',' : 'day('; | ||||
| 		$ttl = now()->addMinutes(15); | ||||
| 		return Cache::remember('admin:dashboard:home:data:v0:15min', $ttl, function() use ($day) { | ||||
| 			return [ | ||||
| 				'contact' => PrettyNumber::convert(Contact::whereNull('read_at')->count()), | ||||
| 				'contact_monthly' => PrettyNumber::convert(Contact::whereNull('read_at')->where('created_at', '>', now()->subMonth())->count()), | ||||
| 				'reports' =>  PrettyNumber::convert(Report::whereNull('admin_seen')->count()), | ||||
| 				'reports_monthly' =>  PrettyNumber::convert(Report::whereNull('admin_seen')->where('created_at', '>', now()->subMonth())->count()), | ||||
| 			]; | ||||
| 		}); | ||||
| 	} | ||||
|     protected static function recentData() | ||||
|     { | ||||
|         $day = config('database.default') == 'pgsql' ? 'DATE_PART(\'day\',' : 'day('; | ||||
|         $ttl = now()->addMinutes(15); | ||||
| 
 | ||||
| 	protected static function additionalData() | ||||
| 	{ | ||||
| 		$day = config('database.default') == 'pgsql' ? 'DATE_PART(\'day\',' : 'day('; | ||||
| 		$ttl = now()->addHours(24); | ||||
| 		return Cache::remember('admin:dashboard:home:data:v0:24hr', $ttl, function() use ($day) { | ||||
| 			return [ | ||||
| 				'failedjobs' => PrettyNumber::convert(FailedJob::where('failed_at', '>=', \Carbon\Carbon::now()->subDay())->count()), | ||||
| 				'statuses' => PrettyNumber::convert(Status::count()), | ||||
| 				'statuses_monthly' => PrettyNumber::convert(Status::where('created_at', '>', now()->subMonth())->count()), | ||||
| 				'profiles' => PrettyNumber::convert(Profile::count()), | ||||
| 				'users' => PrettyNumber::convert(User::count()), | ||||
| 				'users_monthly' => PrettyNumber::convert(User::where('created_at', '>', now()->subMonth())->count()), | ||||
| 				'instances' => PrettyNumber::convert(Instance::count()), | ||||
| 				'media' => PrettyNumber::convert(Media::count()), | ||||
| 				'storage' => Media::sum('size'), | ||||
| 			]; | ||||
| 		}); | ||||
| 	} | ||||
|         return Cache::remember('admin:dashboard:home:data:v0:15min', $ttl, function () { | ||||
|             return [ | ||||
|                 'contact' => PrettyNumber::convert(Contact::whereNull('read_at')->count()), | ||||
|                 'contact_monthly' => PrettyNumber::convert(Contact::whereNull('read_at')->where('created_at', '>', now()->subMonth())->count()), | ||||
|                 'reports' => PrettyNumber::convert(Report::whereNull('admin_seen')->count()), | ||||
|                 'reports_monthly' => PrettyNumber::convert(Report::whereNull('admin_seen')->where('created_at', '>', now()->subMonth())->count()), | ||||
|             ]; | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| 	protected static function additionalDataSummary() | ||||
| 	{ | ||||
| 		$ttl = now()->addHours(24); | ||||
| 		return Cache::remember('admin:dashboard:home:data-summary:v0:24hr', $ttl, function() { | ||||
| 			return [ | ||||
| 				'statuses' => PrettyNumber::convert(Status::count()), | ||||
| 				'profiles' => PrettyNumber::convert(Profile::count()), | ||||
| 				'users' => PrettyNumber::convert(User::count()), | ||||
| 				'instances' => PrettyNumber::convert(Instance::count()), | ||||
| 			]; | ||||
| 		}); | ||||
| 	} | ||||
|     protected static function additionalData() | ||||
|     { | ||||
|         $day = config('database.default') == 'pgsql' ? 'DATE_PART(\'day\',' : 'day('; | ||||
|         $ttl = now()->addHours(24); | ||||
| 
 | ||||
| 	protected static function postsGraph() | ||||
| 	{ | ||||
| 		$ttl = now()->addHours(12); | ||||
| 		return Cache::remember('admin:dashboard:home:data-postsGraph:v0.1:24hr', $ttl, function() { | ||||
| 			$gb = config('database.default') == 'pgsql' ? ['statuses.id', 'created_at'] : DB::raw('Date(created_at)'); | ||||
| 			$s = Status::selectRaw('Date(created_at) as date, count(statuses.id) as count') | ||||
| 				->where('created_at', '>=', now()->subWeek()) | ||||
| 				->groupBy($gb) | ||||
| 				->orderBy('created_at', 'DESC') | ||||
| 				->pluck('count', 'date'); | ||||
|         return Cache::remember('admin:dashboard:home:data:v0:24hr', $ttl, function () { | ||||
|             return [ | ||||
|                 'failedjobs' => PrettyNumber::convert(FailedJob::where('failed_at', '>=', \Carbon\Carbon::now()->subDay())->count()), | ||||
|                 'statuses' => PrettyNumber::convert(intval(StatusService::totalLocalStatuses())), | ||||
|                 'statuses_monthly' => PrettyNumber::convert(Status::where('created_at', '>', now()->subMonth())->count()), | ||||
|                 'profiles' => PrettyNumber::convert(Profile::count()), | ||||
|                 'users' => PrettyNumber::convert(User::count()), | ||||
|                 'users_monthly' => PrettyNumber::convert(User::where('created_at', '>', now()->subMonth())->count()), | ||||
|                 'instances' => PrettyNumber::convert(Instance::count()), | ||||
|                 'media' => PrettyNumber::convert(Media::count()), | ||||
|                 'storage' => Media::sum('size'), | ||||
|             ]; | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| 			$begin = now()->subWeek(); | ||||
| 			$end = now(); | ||||
| 			$interval = new DateInterval('P1D'); | ||||
| 			$daterange = new DatePeriod($begin, $interval ,$end); | ||||
| 			$dates = []; | ||||
| 			foreach($daterange as $date){ | ||||
| 				$dates[$date->format("Y-m-d")] = 0; | ||||
| 			} | ||||
|     protected static function additionalDataSummary() | ||||
|     { | ||||
|         $ttl = now()->addHours(24); | ||||
| 
 | ||||
| 			$dates = collect($dates)->merge($s); | ||||
|         return Cache::remember('admin:dashboard:home:data-summary:v0:24hr', $ttl, function () { | ||||
|             return [ | ||||
|                 'statuses' => PrettyNumber::convert(intval(StatusService::totalLocalStatuses())), | ||||
|                 'profiles' => PrettyNumber::convert(Profile::count()), | ||||
|                 'users' => PrettyNumber::convert(User::count()), | ||||
|                 'instances' => PrettyNumber::convert(Instance::count()), | ||||
|             ]; | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| 			$s = Status::selectRaw('Date(created_at) as date, count(statuses.id) as count') | ||||
| 				->where('created_at', '>=', now()->subWeeks(2)) | ||||
| 				->where('created_at', '<=', now()->subWeeks(1)) | ||||
| 				->groupBy($gb) | ||||
| 				->orderBy('created_at', 'DESC') | ||||
| 				->pluck('count', 'date'); | ||||
|     protected static function postsGraph() | ||||
|     { | ||||
|         $ttl = now()->addHours(12); | ||||
| 
 | ||||
| 			$begin = now()->subWeeks(2); | ||||
| 			$end = now()->subWeeks(1); | ||||
| 			$interval = new DateInterval('P1D'); | ||||
| 			$daterange = new DatePeriod($begin, $interval ,$end); | ||||
| 			$lw = []; | ||||
| 			foreach($daterange as $date){ | ||||
| 				$lw[$date->format("Y-m-d")] = 0; | ||||
| 			} | ||||
|         return Cache::remember('admin:dashboard:home:data-postsGraph:v0.1:24hr', $ttl, function () { | ||||
|             $gb = config('database.default') == 'pgsql' ? ['statuses.id', 'created_at'] : DB::raw('Date(created_at)'); | ||||
|             $s = Status::selectRaw('Date(created_at) as date, count(statuses.id) as count') | ||||
|                 ->where('created_at', '>=', now()->subWeek()) | ||||
|                 ->groupBy($gb) | ||||
|                 ->orderBy('created_at', 'DESC') | ||||
|                 ->pluck('count', 'date'); | ||||
| 
 | ||||
| 			$lw = collect($lw)->merge($s); | ||||
|             $begin = now()->subWeek(); | ||||
|             $end = now(); | ||||
|             $interval = new DateInterval('P1D'); | ||||
|             $daterange = new DatePeriod($begin, $interval, $end); | ||||
|             $dates = []; | ||||
|             foreach ($daterange as $date) { | ||||
|                 $dates[$date->format('Y-m-d')] = 0; | ||||
|             } | ||||
| 
 | ||||
| 			return [ | ||||
| 				'posts_this_week' => $dates->values(), | ||||
| 				'posts_last_week' => $lw->values(), | ||||
| 			]; | ||||
| 		}); | ||||
| 	} | ||||
|             $dates = collect($dates)->merge($s); | ||||
| 
 | ||||
|             $s = Status::selectRaw('Date(created_at) as date, count(statuses.id) as count') | ||||
|                 ->where('created_at', '>=', now()->subWeeks(2)) | ||||
|                 ->where('created_at', '<=', now()->subWeeks(1)) | ||||
|                 ->groupBy($gb) | ||||
|                 ->orderBy('created_at', 'DESC') | ||||
|                 ->pluck('count', 'date'); | ||||
| 
 | ||||
|             $begin = now()->subWeeks(2); | ||||
|             $end = now()->subWeeks(1); | ||||
|             $interval = new DateInterval('P1D'); | ||||
|             $daterange = new DatePeriod($begin, $interval, $end); | ||||
|             $lw = []; | ||||
|             foreach ($daterange as $date) { | ||||
|                 $lw[$date->format('Y-m-d')] = 0; | ||||
|             } | ||||
| 
 | ||||
|             $lw = collect($lw)->merge($s); | ||||
| 
 | ||||
|             return [ | ||||
|                 'posts_this_week' => $dates->values(), | ||||
|                 'posts_last_week' => $lw->values(), | ||||
|             ]; | ||||
|         }); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -191,4 +191,11 @@ class StatusService | |||
|             BookmarkService::get($pid, $id) : | ||||
|             false; | ||||
|     } | ||||
| 
 | ||||
|     public static function totalLocalStatuses() | ||||
|     { | ||||
|         return Cache::remember(self::CACHE_KEY . 'totalpub', 14400, function() { | ||||
|             return Status::whereNull('url')->count(); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Daniel Supernault
						Daniel Supernault