From b48a9222d131e039c193dcffb373122a35d19a55 Mon Sep 17 00:00:00 2001
From: Roardom
Date: Tue, 25 Jul 2023 22:45:09 +0000
Subject: [PATCH 01/62] update: cache personal freeleech existence instead of
its value
We only cache it if it exists, so let's not query it every single time it doesn't exist.
We don't remove it from the hourly run command yet so that currently existing freeleeches can be deleted.
---
app/Http/Controllers/HomeController.php | 2 +-
app/Http/Controllers/SimilarTorrentController.php | 2 +-
app/Http/Controllers/TorrentController.php | 2 +-
app/Http/Controllers/User/TransactionController.php | 5 +++--
app/Http/Livewire/PersonCredit.php | 2 +-
app/Http/Livewire/SimilarTorrent.php | 2 +-
app/Http/Livewire/Top10.php | 2 +-
app/Http/Livewire/TorrentSearch.php | 2 +-
app/Jobs/ProcessAnnounce.php | 6 +-----
app/Models/Torrent.php | 2 +-
10 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index 04c367cd64..a3f577fa73 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -57,7 +57,7 @@ public function index(Request $request): \Illuminate\Contracts\View\Factory|\Ill
return view('home.index', [
'user' => $user,
- 'personal_freeleech' => cache()->get('personal_freeleech:'.$user->id),
+ 'personal_freeleech' => cache()->has('personal_freeleech:'.$user->id),
'users' => cache()->remember(
'online_users',
$expiresAt,
diff --git a/app/Http/Controllers/SimilarTorrentController.php b/app/Http/Controllers/SimilarTorrentController.php
index 5e8bf53a1b..b2c2549be6 100644
--- a/app/Http/Controllers/SimilarTorrentController.php
+++ b/app/Http/Controllers/SimilarTorrentController.php
@@ -89,7 +89,7 @@ public function show(int $categoryId, int $tmdbId): \Illuminate\Contracts\View\F
break;
}
- $personalFreeleech = cache()->get('personal_freeleech:'.auth()->id());
+ $personalFreeleech = cache()->has('personal_freeleech:'.auth()->id());
return view('torrent.similar', [
'meta' => $meta,
diff --git a/app/Http/Controllers/TorrentController.php b/app/Http/Controllers/TorrentController.php
index 4341180c81..ff699b3e86 100644
--- a/app/Http/Controllers/TorrentController.php
+++ b/app/Http/Controllers/TorrentController.php
@@ -131,7 +131,7 @@ public function show(Request $request, int|string $id): \Illuminate\Contracts\Vi
return view('torrent.show', [
'torrent' => $torrent,
'user' => $user,
- 'personal_freeleech' => cache()->get('personal_freeleech:'.$user->id),
+ 'personal_freeleech' => cache()->has('personal_freeleech:'.$user->id),
'freeleech_token' => cache()->get('freeleech_token:'.$user->id.':'.$torrent->id),
'meta' => $meta,
'trailer' => $trailer,
diff --git a/app/Http/Controllers/User/TransactionController.php b/app/Http/Controllers/User/TransactionController.php
index b490e49ce3..1a594bd432 100644
--- a/app/Http/Controllers/User/TransactionController.php
+++ b/app/Http/Controllers/User/TransactionController.php
@@ -83,13 +83,14 @@ public function store(StoreTransactionRequest $request, User $user): \Illuminate
break;
case $bonExchange->personal_freeleech:
- if (cache()->get('personal_freeleech:'.$user->id)) {
+ if (cache()->has('personal_freeleech:'.$user->id)) {
return back()->withErrors('Your previous personal freeleech is still active.');
}
PersonalFreeleech::create(['user_id' => $user->id]);
- cache()->put('personal_freeleech:'.$user->id, true);
+ // Allow the user 25 hours since the AutoRemovePersonalFreeleech command is only run every hour.
+ cache()->put('personal_freeleech:'.$user->id, true, now()->addHours(25));
Unit3dAnnounce::addPersonalFreeleech($user->id);
diff --git a/app/Http/Livewire/PersonCredit.php b/app/Http/Livewire/PersonCredit.php
index 22fa03c036..6f7c741611 100644
--- a/app/Http/Livewire/PersonCredit.php
+++ b/app/Http/Livewire/PersonCredit.php
@@ -49,7 +49,7 @@ final public function mount(): void
final public function getPersonalFreeleechProperty()
{
- return cache()->get('personal_freeleech:'.auth()->user()->id);
+ return cache()->has('personal_freeleech:'.auth()->user()->id);
}
/*
diff --git a/app/Http/Livewire/SimilarTorrent.php b/app/Http/Livewire/SimilarTorrent.php
index b4a13ba558..41f1b43974 100644
--- a/app/Http/Livewire/SimilarTorrent.php
+++ b/app/Http/Livewire/SimilarTorrent.php
@@ -216,7 +216,7 @@ final public function deleteRecords(): void
final public function getPersonalFreeleechProperty()
{
- return cache()->get('personal_freeleech:'.auth()->id());
+ return cache()->has('personal_freeleech:'.auth()->id());
}
final public function render(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Contracts\Foundation\Application
diff --git a/app/Http/Livewire/Top10.php b/app/Http/Livewire/Top10.php
index dac81c1e5f..00a041b824 100644
--- a/app/Http/Livewire/Top10.php
+++ b/app/Http/Livewire/Top10.php
@@ -67,7 +67,7 @@ final public function getTorrentsAllProperty()
final public function getPersonalFreeleechProperty()
{
- return cache()->get('personal_freeleech:'.auth()->id());
+ return cache()->has('personal_freeleech:'.auth()->id());
}
final public function render(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Contracts\Foundation\Application
diff --git a/app/Http/Livewire/TorrentSearch.php b/app/Http/Livewire/TorrentSearch.php
index a2c103167b..b244ddb6d7 100644
--- a/app/Http/Livewire/TorrentSearch.php
+++ b/app/Http/Livewire/TorrentSearch.php
@@ -175,7 +175,7 @@ final public function updatedView(): void
final public function getPersonalFreeleechProperty()
{
- return cache()->get('personal_freeleech:'.auth()->id());
+ return cache()->has('personal_freeleech:'.auth()->id());
}
final public function getTorrentsProperty(): \Illuminate\Contracts\Pagination\LengthAwarePaginator
diff --git a/app/Jobs/ProcessAnnounce.php b/app/Jobs/ProcessAnnounce.php
index 5fb24b4385..9ecf5eec79 100644
--- a/app/Jobs/ProcessAnnounce.php
+++ b/app/Jobs/ProcessAnnounce.php
@@ -17,7 +17,6 @@
use App\Models\FreeleechToken;
use App\Models\History;
use App\Models\Peer;
-use App\Models\PersonalFreeleech;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@@ -117,10 +116,7 @@ public function handle(): void
}
// Modification of Upload and Download (Check cache but in case redis data was lost hit DB)
- $personalFreeleech = cache()->get('personal_freeleech:'.$this->user->id) ??
- PersonalFreeleech::query()
- ->where('user_id', '=', $this->user->id)
- ->exists();
+ $personalFreeleech = cache()->has('personal_freeleech:'.$this->user->id);
$freeleechToken = cache()->get('freeleech_token:'.$this->user->id.':'.$this->torrent->id) ??
FreeleechToken::query()
->where('user_id', '=', $this->user->id)
diff --git a/app/Models/Torrent.php b/app/Models/Torrent.php
index 821c9f98ab..19bed49673 100644
--- a/app/Models/Torrent.php
+++ b/app/Models/Torrent.php
@@ -323,7 +323,7 @@ public function notifyUploader($type, $payload): bool
*/
public function isFreeleech($user = null): bool
{
- $pfree = $user && ($user->group->is_freeleech || cache()->get('personal_freeleech:'.$user->id));
+ $pfree = $user && ($user->group->is_freeleech || cache()->has('personal_freeleech:'.$user->id));
return $this->free || config('other.freeleech') || $pfree;
}
From 7d3a9e244ebe0150ff5cf38a3a1818c67cbb655e Mon Sep 17 00:00:00 2001
From: Roardom
Date: Wed, 26 Jul 2023 01:39:31 +0000
Subject: [PATCH 02/62] fix: redundant fetching of records from the database
The `SerializesModels` trait fetches a new copy of the record from the database, causing 4 more queries than we thought we were using. This change reduces the query time in the ProcessAnnounce job by 55%.
---
app/Http/Controllers/AnnounceController.php | 2 +-
app/Jobs/ProcessAnnounce.php | 15 ++++++++++++---
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/app/Http/Controllers/AnnounceController.php b/app/Http/Controllers/AnnounceController.php
index 852041b498..b3c655e99c 100644
--- a/app/Http/Controllers/AnnounceController.php
+++ b/app/Http/Controllers/AnnounceController.php
@@ -567,7 +567,7 @@ private function generateSuccessAnnounceResponse($queries, $torrent, $user): arr
*/
private function processAnnounceJob($queries, $user, $group, $torrent): void
{
- ProcessAnnounce::dispatch($queries, $user, $group, $torrent);
+ ProcessAnnounce::dispatch($queries, serialize($user), serialize($group), serialize($torrent));
}
protected function generateFailedAnnounceResponse(TrackerException $trackerException): array
diff --git a/app/Jobs/ProcessAnnounce.php b/app/Jobs/ProcessAnnounce.php
index 5fb24b4385..2a56396eff 100644
--- a/app/Jobs/ProcessAnnounce.php
+++ b/app/Jobs/ProcessAnnounce.php
@@ -15,15 +15,18 @@
namespace App\Jobs;
use App\Models\FreeleechToken;
+use App\Models\Group;
use App\Models\History;
use App\Models\Peer;
use App\Models\PersonalFreeleech;
+use App\Models\Torrent;
+use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Database\Eloquent\Collection;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\Middleware\WithoutOverlapping;
-use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
@@ -32,13 +35,19 @@ class ProcessAnnounce implements ShouldQueue
use Dispatchable;
use InteractsWithQueue;
use Queueable;
- use SerializesModels;
+
+ private Torrent $torrent;
+ private User $user;
+ private Group $group;
/**
* Create a new job instance.
*/
- public function __construct(protected $queries, protected $user, protected $group, protected $torrent)
+ public function __construct(protected array $queries, string $user, string $group, string $torrent)
{
+ $this->torrent = unserialize($torrent, ['allowed_classes' => [Torrent::class, Collection::class, Peer::class]]);
+ $this->user = unserialize($user, ['allowed_classes' => [User::class]]);
+ $this->group = unserialize($group, ['allowed_classes' => [Group::class]]);
}
/**
From 88d6ae1d89bcc67019f40f39c84a864ef7e8fb19 Mon Sep 17 00:00:00 2001
From: Roardom
Date: Wed, 26 Jul 2023 02:24:44 +0000
Subject: [PATCH 03/62] fix: ci
---
app/Jobs/ProcessAnnounce.php | 10 +++++-----
app/Models/Peer.php | 10 ++++++++++
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/app/Jobs/ProcessAnnounce.php b/app/Jobs/ProcessAnnounce.php
index 2a56396eff..01ec71fb57 100644
--- a/app/Jobs/ProcessAnnounce.php
+++ b/app/Jobs/ProcessAnnounce.php
@@ -165,7 +165,7 @@ public function handle(): void
$peer->agent = $this->queries['user-agent'];
$peer->uploaded = $realUploaded;
$peer->downloaded = $realDownloaded;
- $peer->seeder = (int) ($this->queries['left'] == 0);
+ $peer->seeder = $this->queries['left'] == 0;
$peer->left = $this->queries['left'];
$peer->torrent_id = $this->torrent->id;
$peer->user_id = $this->user->id;
@@ -178,14 +178,14 @@ public function handle(): void
switch ($event) {
case 'started':
- $peer->active = 1;
+ $peer->active = true;
$history->active = 1;
$history->immune = (int) ($history->exists ? $history->immune && $this->group->is_immune : $this->group->is_immune);
break;
case 'completed':
- $peer->active = 1;
+ $peer->active = true;
$history->active = 1;
$history->uploaded += $modUploaded;
@@ -215,7 +215,7 @@ public function handle(): void
break;
case 'stopped':
- $peer->active = 0;
+ $peer->active = false;
$history->active = 0;
$history->uploaded += $modUploaded;
@@ -240,7 +240,7 @@ public function handle(): void
// End User Update
break;
default:
- $peer->active = 1;
+ $peer->active = true;
$history->active = 1;
$history->uploaded += $modUploaded;
diff --git a/app/Models/Peer.php b/app/Models/Peer.php
index 5ccf52e103..67c6d404ba 100644
--- a/app/Models/Peer.php
+++ b/app/Models/Peer.php
@@ -23,6 +23,16 @@ class Peer extends Model
{
use HasFactory;
+ /**
+ * The attributes that should be cast.
+ *
+ * @var array
+ */
+ protected $casts = [
+ 'active' => 'boolean',
+ 'seeder' => 'boolean',
+ ];
+
/**
* Prepare a date for array / JSON serialization.
*/
From c7db489c21e155d0acbdadbca9c94deeff1a1e98 Mon Sep 17 00:00:00 2001
From: HDVinnie
Date: Tue, 25 Jul 2023 22:45:00 -0400
Subject: [PATCH 04/62] fix: broken route
---
resources/views/torrent/partials/buttons.blade.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/views/torrent/partials/buttons.blade.php b/resources/views/torrent/partials/buttons.blade.php
index 6fa7f1f63d..42c9a87cf1 100644
--- a/resources/views/torrent/partials/buttons.blade.php
+++ b/resources/views/torrent/partials/buttons.blade.php
@@ -323,7 +323,7 @@ class="dialog__form"
@endif
- @if (DB::table('graveyard')->where('torrent_id', '=', $torrent->id)->where('rewarded', '=', 0)->exists())
+ @if (DB::table('resurrections')->where('torrent_id', '=', $torrent->id)->where('rewarded', '=', 0)->exists())
+
+
+
+
+
+
+