AdminStatsService.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Services;
  3. use Cache;
  4. use App\Util\Lexer\PrettyNumber;
  5. use App\{
  6. Contact,
  7. FailedJob,
  8. Hashtag,
  9. Instance,
  10. Media,
  11. Like,
  12. Profile,
  13. Report,
  14. Status,
  15. User
  16. };
  17. class AdminStatsService
  18. {
  19. public static function get()
  20. {
  21. return array_merge(self::recentData(), self::additionalData());
  22. }
  23. protected static function recentData()
  24. {
  25. $day = config('database.default') == 'pgsql' ? 'DATE_PART(\'day\',' : 'day(';
  26. return Cache::remember('admin:dashboard:home:data:v0:15min', now()->addMinutes(15), function() use ($day) {
  27. return [
  28. 'contact' => PrettyNumber::convert(Contact::whereNull('read_at')->count()),
  29. 'reports' => PrettyNumber::convert(Report::whereNull('admin_seen')->count()),
  30. ];
  31. });
  32. }
  33. protected static function additionalData()
  34. {
  35. $day = config('database.default') == 'pgsql' ? 'DATE_PART(\'day\',' : 'day(';
  36. return Cache::remember('admin:dashboard:home:data:v0:24hr', now()->addHours(24), function() use ($day) {
  37. return [
  38. 'failedjobs' => PrettyNumber::convert(FailedJob::where('failed_at', '>=', \Carbon\Carbon::now()->subDay())->count()),
  39. 'statuses' => PrettyNumber::convert(Status::count()),
  40. 'profiles' => PrettyNumber::convert(Profile::count()),
  41. 'users' => PrettyNumber::convert(User::count()),
  42. 'instances' => PrettyNumber::convert(Instance::count()),
  43. 'media' => PrettyNumber::convert(Media::count()),
  44. 'storage' => Media::sum('size'),
  45. ];
  46. });
  47. }
  48. }