mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-24 03:57:22 +08:00
improve cleanup jobs
This commit is contained in:
@@ -76,43 +76,39 @@ class UpdateTorrentSeedersEtc implements ShouldQueue
|
||||
return;
|
||||
}
|
||||
$torrentIdArr = explode(",", $idStr);
|
||||
foreach ($torrentIdArr as $torrentId) {
|
||||
if ($torrentId <= 0) {
|
||||
continue;
|
||||
}
|
||||
$peerResult = NexusDB::table('peers')
|
||||
->where('torrent', $torrentId)
|
||||
->selectRaw("count(*) as count, seeder")
|
||||
->groupBy('seeder')
|
||||
->get()
|
||||
;
|
||||
$commentResult = NexusDB::table('comments')
|
||||
->where('torrent',$torrentId)
|
||||
->selectRaw("count(*) as count")
|
||||
->first()
|
||||
;
|
||||
$update = [
|
||||
'comments' => $commentResult && $commentResult->count !== null ? $commentResult->count : 0,
|
||||
'seeders' => 0,
|
||||
'leechers' => 0,
|
||||
];
|
||||
foreach ($peerResult as $item) {
|
||||
if ($item->seeder == 'yes') {
|
||||
$update['seeders'] = $item->count;
|
||||
} elseif ($item->seeder == 'no') {
|
||||
$update['leechers'] = $item->count;
|
||||
}
|
||||
}
|
||||
NexusDB::table('torrents')->where('id', $torrentId)->update($update);
|
||||
do_log("[CLEANUP_CLI_UPDATE_TORRENT_SEEDERS_ETC_HANDLE_TORRENT], [SUCCESS]: $torrentId => " . json_encode($update));
|
||||
//批量取,简单化
|
||||
$torrents = array();
|
||||
$res = sql_query("SELECT torrent, seeder, COUNT(*) AS c FROM peers GROUP BY torrent, seeder where torrent in ($idStr)");
|
||||
while ($row = mysql_fetch_assoc($res)) {
|
||||
if ($row["seeder"] == "yes")
|
||||
$key = "seeders";
|
||||
else
|
||||
$key = "leechers";
|
||||
$torrents[$row["torrent"]][$key] = $row["c"];
|
||||
}
|
||||
|
||||
$res = sql_query("SELECT torrent, COUNT(*) AS c FROM comments GROUP BY torrent where torrent in ($idStr)");
|
||||
while ($row = mysql_fetch_assoc($res)) {
|
||||
$torrents[$row["torrent"]]["comments"] = $row["c"];
|
||||
}
|
||||
$seedersUpdates = $leechersUpdates = $commentsUpdates = [];
|
||||
foreach ($torrentIdArr as $id) {
|
||||
$seedersUpdates[] = sprintf("when %d then %d", $id, $torrents[$id]["seeders"] ?? 0);
|
||||
$leechersUpdates[] = sprintf("when %d then %d", $id, $torrents[$id]["leechers"] ?? 0);
|
||||
$commentsUpdates[] = sprintf("when %d then %d", $id, $torrents[$id]["comments"] ?? 0);
|
||||
}
|
||||
$sql = sprintf(
|
||||
"update torrents set seeders = case id %s end, leechers = case id %s end, comments = case id %s end where id in (%s)",
|
||||
implode(" ", $seedersUpdates), implode(" ", $leechersUpdates), implode(" ", $commentsUpdates), $idStr
|
||||
);
|
||||
$result = sql_query($sql);
|
||||
if ($delIdRedisKey) {
|
||||
NexusDB::cache_del($this->idRedisKey);
|
||||
}
|
||||
$costTime = time() - $beginTimestamp;
|
||||
do_log(sprintf(
|
||||
"$logPrefix, [DONE], update torrent count: %s, cost time: %s seconds",
|
||||
count($torrentIdArr), $costTime
|
||||
"$logPrefix, [DONE], update torrent count: %s, result: %s, cost time: %s seconds",
|
||||
count($torrentIdArr), var_export($result, true), $costTime
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user