mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-02-28 15:10:54 +03:00
205 lines
5.3 KiB
PHP
205 lines
5.3 KiB
PHP
<?php
|
|
|
|
if (!defined('BB_ROOT')) die(basename(__FILE__));
|
|
|
|
global $bb_cfg;
|
|
|
|
DB()->expect_slow_query(600);
|
|
|
|
//
|
|
// Make tracker snapshot
|
|
//
|
|
if (!$bb_cfg['ocelot']['enabled'])
|
|
{
|
|
define('NEW_BB_BT_TRACKER_SNAP', 'new_tracker_snap');
|
|
define('OLD_BB_BT_TRACKER_SNAP', 'old_tracker_snap');
|
|
|
|
DB()->query("DROP TABLE IF EXISTS " . NEW_BB_BT_TRACKER_SNAP . ", " . OLD_BB_BT_TRACKER_SNAP);
|
|
DB()->query("CREATE TABLE " . NEW_BB_BT_TRACKER_SNAP . " LIKE " . BB_BT_TRACKER_SNAP);
|
|
}
|
|
|
|
$per_cycle = 50000;
|
|
$row = DB()->fetch_row("SELECT MIN(topic_id) AS start_id, MAX(topic_id) AS finish_id FROM ". BB_BT_TRACKER);
|
|
$start_id = (int) $row['start_id'];
|
|
$finish_id = (int) $row['finish_id'];
|
|
|
|
while (true)
|
|
{
|
|
set_time_limit(600);
|
|
$end_id = $start_id + $per_cycle - 1;
|
|
|
|
$val = array();
|
|
|
|
if (!$bb_cfg['ocelot']['enabled'])
|
|
{
|
|
$sql = "
|
|
SELECT
|
|
topic_id, SUM(seeder) AS seeders, (COUNT(*) - SUM(seeder)) AS leechers,
|
|
SUM(speed_up) AS speed_up, SUM(speed_down) AS speed_down
|
|
FROM " . BB_BT_TRACKER . "
|
|
WHERE topic_id BETWEEN $start_id AND $end_id
|
|
GROUP BY topic_id
|
|
";
|
|
}
|
|
else
|
|
{
|
|
$sql = "
|
|
SELECT
|
|
topic_id, SUM(speed_up) AS speed_up, SUM(speed_down) AS speed_down
|
|
FROM " . BB_BT_TRACKER . "
|
|
WHERE topic_id BETWEEN $start_id AND $end_id
|
|
GROUP BY topic_id
|
|
";
|
|
}
|
|
|
|
foreach (DB()->fetch_rowset($sql) as $row)
|
|
{
|
|
$val[] = join(',', $row);
|
|
}
|
|
|
|
if ($val)
|
|
{
|
|
if (!$bb_cfg['ocelot']['enabled'])
|
|
{
|
|
DB()->query("
|
|
REPLACE INTO " . NEW_BB_BT_TRACKER_SNAP . "
|
|
(topic_id, seeders, leechers, speed_up, speed_down)
|
|
VALUES(" . join('),(', $val) . ")
|
|
");
|
|
}
|
|
else
|
|
{
|
|
DB()->query("
|
|
INSERT INTO " . BB_BT_TRACKER_SNAP . "
|
|
(topic_id, speed_up, speed_down)
|
|
VALUES(". join('),(', $val) .")
|
|
ON DUPLICATE KEY UPDATE speed_up = VALUES(speed_up), speed_down = VALUES(speed_down)
|
|
");
|
|
}
|
|
}
|
|
|
|
if ($end_id > $finish_id)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if (!($start_id % ($per_cycle*10)))
|
|
{
|
|
sleep(1);
|
|
}
|
|
|
|
$start_id += $per_cycle;
|
|
}
|
|
|
|
if (!$bb_cfg['ocelot']['enabled'])
|
|
{
|
|
DB()->query("
|
|
RENAME TABLE
|
|
". BB_BT_TRACKER_SNAP ." TO ". OLD_BB_BT_TRACKER_SNAP .",
|
|
". NEW_BB_BT_TRACKER_SNAP ." TO ". BB_BT_TRACKER_SNAP ."
|
|
");
|
|
|
|
DB()->query("DROP TABLE IF EXISTS ". NEW_BB_BT_TRACKER_SNAP .", ". OLD_BB_BT_TRACKER_SNAP);
|
|
}
|
|
|
|
//
|
|
// Make dl-list snapshot
|
|
//
|
|
define('NEW_BB_BT_DLSTATUS_SNAP', 'new_dlstatus_snap');
|
|
define('OLD_BB_BT_DLSTATUS_SNAP', 'old_dlstatus_snap');
|
|
|
|
DB()->query("DROP TABLE IF EXISTS ". NEW_BB_BT_DLSTATUS_SNAP .", ". OLD_BB_BT_DLSTATUS_SNAP);
|
|
|
|
DB()->query("CREATE TABLE ". NEW_BB_BT_DLSTATUS_SNAP ." LIKE ". BB_BT_DLSTATUS_SNAP);
|
|
|
|
if ($bb_cfg['bt_show_dl_list'] && $bb_cfg['bt_dl_list_only_count'])
|
|
{
|
|
DB()->query("
|
|
INSERT INTO ". NEW_BB_BT_DLSTATUS_SNAP ."
|
|
(topic_id, dl_status, users_count)
|
|
SELECT
|
|
topic_id, user_status, COUNT(*)
|
|
FROM ". BB_BT_DLSTATUS ."
|
|
WHERE user_status != ". DL_STATUS_RELEASER ."
|
|
GROUP BY topic_id, user_status
|
|
");
|
|
}
|
|
|
|
DB()->query("
|
|
RENAME TABLE
|
|
". BB_BT_DLSTATUS_SNAP ." TO ". OLD_BB_BT_DLSTATUS_SNAP .",
|
|
". NEW_BB_BT_DLSTATUS_SNAP ." TO ". BB_BT_DLSTATUS_SNAP ."
|
|
");
|
|
|
|
DB()->query("DROP TABLE IF EXISTS ". NEW_BB_BT_DLSTATUS_SNAP .", ". OLD_BB_BT_DLSTATUS_SNAP);
|
|
|
|
//
|
|
// TORHELP
|
|
//
|
|
if ($bb_cfg['torhelp_enabled'])
|
|
{
|
|
$tor_min_seeders = 0; // "<="
|
|
$tor_min_leechers = 2; // ">="
|
|
$tor_min_completed = 10; // ">="
|
|
$tor_seed_last_seen_days = 3; // "<="
|
|
$tor_downloaded_days_ago = 60; // ">="
|
|
$user_last_seen_online = 15; // minutes
|
|
$users_limit = 3000;
|
|
$dl_status_ary = array(DL_STATUS_COMPLETE);
|
|
|
|
define('NEW_BB_BT_TORHELP', 'new_torhelp');
|
|
define('OLD_BB_BT_TORHELP', 'old_torhelp');
|
|
|
|
DB()->query("DROP TABLE IF EXISTS ". NEW_BB_BT_TORHELP .", ". OLD_BB_BT_TORHELP);
|
|
|
|
DB()->query("CREATE TABLE ". NEW_BB_BT_TORHELP ." LIKE ". BB_BT_TORHELP);
|
|
|
|
// Select users
|
|
$sql = "
|
|
SELECT DISTINCT session_user_id AS uid
|
|
FROM ". BB_SESSIONS ."
|
|
WHERE session_time > (UNIX_TIMESTAMP() - $user_last_seen_online*60)
|
|
AND session_user_id != ". GUEST_UID ."
|
|
ORDER BY session_time DESC
|
|
LIMIT $users_limit
|
|
";
|
|
$online_users_ary = array();
|
|
|
|
foreach (DB()->fetch_rowset($sql) as $row)
|
|
{
|
|
$online_users_ary[] = $row['uid'];
|
|
}
|
|
|
|
if ($online_users_csv = join(',', $online_users_ary))
|
|
{
|
|
DB()->query("
|
|
INSERT INTO ". NEW_BB_BT_TORHELP ." (user_id, topic_id_csv)
|
|
SELECT
|
|
dl.user_id, GROUP_CONCAT(dl.topic_id)
|
|
FROM ". BB_BT_TRACKER_SNAP ." trsn
|
|
INNER JOIN ". BB_BT_TORRENTS ." tor ON (tor.topic_id = trsn.topic_id)
|
|
INNER JOIN ". BB_BT_DLSTATUS ." dl ON (dl.topic_id = tor.topic_id)
|
|
WHERE
|
|
trsn.seeders <= $tor_min_seeders
|
|
AND trsn.leechers >= $tor_min_leechers
|
|
AND tor.forum_id != ". (int) $bb_cfg['trash_forum_id'] ."
|
|
AND tor.complete_count >= $tor_min_completed
|
|
AND tor.seeder_last_seen <= (UNIX_TIMESTAMP() - $tor_seed_last_seen_days*86400)
|
|
AND dl.user_id IN($online_users_csv)
|
|
AND dl.user_status IN(". get_id_csv($dl_status_ary) .")
|
|
AND dl.last_modified_dlstatus > DATE_SUB(NOW(), INTERVAL $tor_downloaded_days_ago DAY)
|
|
GROUP BY dl.user_id
|
|
LIMIT 10000
|
|
");
|
|
}
|
|
|
|
DB()->query("
|
|
RENAME TABLE
|
|
". BB_BT_TORHELP ." TO ". OLD_BB_BT_TORHELP .",
|
|
". NEW_BB_BT_TORHELP ." TO ". BB_BT_TORHELP ."
|
|
");
|
|
|
|
DB()->query("DROP TABLE IF EXISTS ". NEW_BB_BT_TORHELP .", ". OLD_BB_BT_TORHELP);
|
|
}
|
|
|
|
DB()->expect_slow_query(10); |