From a61d1b09001d0c94a61f5737d6346d25c017edc8 Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Fri, 28 Oct 2022 14:17:10 +0800 Subject: [PATCH] move cleanup: seed bonus and seeding leeching time to job --- .env.example | 2 + app/Console/Commands/Cleanup.php | 47 +++++++ app/Filament/PageListSingle.php | 9 ++ .../Resources/System/PluginResource.php | 15 ++- .../PluginResource/Pages/ManagePlugins.php | 5 +- app/Jobs/CalculateSeedBonus.php | 91 +++++++++++++ app/Jobs/ManagePlugin.php | 54 ++++++++ app/Jobs/UpdateSeedingLeechingTime.php | 56 ++++++++ app/Models/Plugin.php | 20 +++ app/Repositories/PluginRepository.php | 3 + app/Repositories/SearchBoxRepository.php | 35 +---- config/filament.php | 2 +- config/queue.php | 2 +- ..._05_230532_add_mode_to_section_related.php | 8 +- ...18_add_section_name_to_searchbox_table.php | 8 +- include/cleanup.php | 122 +++++++++++------- include/cleanup_cli.php | 21 +-- nexus/Install/Update.php | 13 ++ resources/lang/zh_CN/plugin.php | 1 + 19 files changed, 404 insertions(+), 110 deletions(-) create mode 100644 app/Console/Commands/Cleanup.php create mode 100644 app/Jobs/CalculateSeedBonus.php create mode 100644 app/Jobs/ManagePlugin.php create mode 100644 app/Jobs/UpdateSeedingLeechingTime.php diff --git a/.env.example b/.env.example index 154f51e7..b1c07a70 100644 --- a/.env.example +++ b/.env.example @@ -80,3 +80,5 @@ SFTP_PORT= SFTP_ROOT=/tmp UID_STARTS=10001 + +PHP_PATH= diff --git a/app/Console/Commands/Cleanup.php b/app/Console/Commands/Cleanup.php new file mode 100644 index 00000000..15834ccc --- /dev/null +++ b/app/Console/Commands/Cleanup.php @@ -0,0 +1,47 @@ +option('action'); + $beginUid = $this->option('begin_uid'); + $endUid = $this->option('end_uid'); + $this->info("beginUid: $beginUid, endUid: $endUid, action: $action"); + if ($action == 'seed_bonus') { + CalculateSeedBonus::dispatch($beginUid, $endUid); + } elseif ($action == 'seeding_leeching_time') { + UpdateSeedingLeechingTime::dispatch($beginUid, $endUid); + } else { + $msg = "Invalid action: $action"; + do_log($msg, 'error'); + $this->error($msg); + } + return Command::SUCCESS; + } +} diff --git a/app/Filament/PageListSingle.php b/app/Filament/PageListSingle.php index f75df167..d3d94488 100644 --- a/app/Filament/PageListSingle.php +++ b/app/Filament/PageListSingle.php @@ -2,8 +2,10 @@ namespace App\Filament; +use Closure; use Filament\Resources\Pages\ManageRecords; use Filament\Tables\Filters\Layout; +use Illuminate\Database\Eloquent\Model; class PageListSingle extends ManageRecords { @@ -13,4 +15,11 @@ class PageListSingle extends ManageRecords { return Layout::AboveContent; } + + protected function getTableRecordUrlUsing(): ?Closure + { + return function (Model $record): ?string { + return null; + }; + } } diff --git a/app/Filament/Resources/System/PluginResource.php b/app/Filament/Resources/System/PluginResource.php index 47baa62c..50c122df 100644 --- a/app/Filament/Resources/System/PluginResource.php +++ b/app/Filament/Resources/System/PluginResource.php @@ -4,6 +4,7 @@ namespace App\Filament\Resources\System; use App\Filament\Resources\System\PluginResource\Pages; use App\Filament\Resources\System\PluginResource\RelationManagers; +use App\Jobs\ManagePlugin; use App\Models\Plugin; use Filament\Forms; use Filament\Resources\Form; @@ -52,6 +53,7 @@ class PluginResource extends Resource Tables\Columns\TextColumn::make('remote_url')->label(__('plugin.labels.remote_url')), Tables\Columns\TextColumn::make('installed_version')->label(__('plugin.labels.installed_version')), Tables\Columns\TextColumn::make('statusText')->label(__('label.status')), + Tables\Columns\TextColumn::make('updated_at')->label(__('plugin.labels.updated_at')), ]) ->filters([ // @@ -76,10 +78,11 @@ class PluginResource extends Resource $actions[] = self::buildInstallAction(); $actions[] = self::buildUpdateAction(); $actions[] = Tables\Actions\DeleteAction::make('delete') - ->hidden(fn ($record) => $record->status == Plugin::STATUS_NOT_INSTALLED) + ->hidden(fn ($record) => !in_array($record->status, Plugin::$showDeleteBtnStatus)) ->using(function ($record) { - $record->update(['status' => Plugin::STATUS_PRE_DELETE]); - }); + $record->update(['status' => Plugin::STATUS_PRE_DELETE]); + ManagePlugin::dispatch($record, 'delete'); + }); return $actions; } @@ -89,9 +92,10 @@ class PluginResource extends Resource ->label(__('plugin.actions.install')) ->icon('heroicon-o-arrow-down') ->requiresConfirmation() - ->hidden(fn ($record) => $record->status == Plugin::STATUS_NORMAL) + ->hidden(fn ($record) => !in_array($record->status, Plugin::$showInstallBtnStatus)) ->action(function ($record) { $record->update(['status' => Plugin::STATUS_PRE_INSTALL]); + ManagePlugin::dispatch($record, 'install'); }) ; } @@ -102,9 +106,10 @@ class PluginResource extends Resource ->label(__('plugin.actions.update')) ->icon('heroicon-o-arrow-up') ->requiresConfirmation() - ->hidden(fn ($record) => in_array($record->status, [Plugin::STATUS_NOT_INSTALLED, Plugin::STATUS_PRE_UPDATE])) + ->hidden(fn ($record) => !in_array($record->status, Plugin::$showUpdateBtnStatus)) ->action(function ($record) { $record->update(['status' => Plugin::STATUS_PRE_UPDATE]); + ManagePlugin::dispatch($record, 'update'); }) ; } diff --git a/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php b/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php index c46a6317..289afc8c 100644 --- a/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php +++ b/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php @@ -2,16 +2,15 @@ namespace App\Filament\Resources\System\PluginResource\Pages; +use App\Filament\PageListSingle; use App\Filament\Resources\System\PluginResource; use Filament\Pages\Actions; use Filament\Resources\Pages\ManageRecords; -class ManagePlugins extends ManageRecords +class ManagePlugins extends PageListSingle { protected static string $resource = PluginResource::class; - protected ?string $maxContentWidth = 'full'; - protected function getActions(): array { return [ diff --git a/app/Jobs/CalculateSeedBonus.php b/app/Jobs/CalculateSeedBonus.php new file mode 100644 index 00000000..0608e098 --- /dev/null +++ b/app/Jobs/CalculateSeedBonus.php @@ -0,0 +1,91 @@ +beginUid = $beginUid; + $this->endUid = $endUid; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $beginTimestamp = time(); + $logPrefix = sprintf("[CLEANUP_CLI_CALCULATE_SEED_BONUS], beginUid: %s, endUid: %s", $this->beginUid, $this->endUid); + $sql = sprintf("select userid from peers where userid > %s and userid <= %s and seeder = 'yes' group by userid", $this->beginUid, $this->endUid); + $results = NexusDB::select($sql); + $count = count($results); + do_log("$logPrefix, [GET_UID], sql: $sql, count: " . count($results)); + if ($count == 0) { + do_log("$logPrefix, no user..."); + return; + } + $haremAdditionFactor = Setting::get('bonus.harem_addition'); + $officialAdditionFactor = Setting::get('bonus.official_addition'); + $donortimes_bonus = Setting::get('bonus.donortimes'); + $autoclean_interval_one = Setting::get('main.autoclean_interval_one'); + $sql = sprintf("select %s from users where id in (%s)", implode(',', User::$commonFields), implode(',', array_column($results, 'userid'))); + $results = NexusDB::select($sql); + do_log("$logPrefix, [GET_UID_REAL], count: " . count($results)); + foreach ($results as $userInfo) + { + $uid = $userInfo['id']; + $isDonor = is_donor($userInfo); + $seedBonusResult = calculate_seed_bonus($uid); + $bonusLog = "[CLEANUP_CALCULATE_SEED_BONUS], user: $uid, seedBonusResult: " . nexus_json_encode($seedBonusResult); + $all_bonus = $seedBonusResult['seed_bonus']; + $bonusLog .= ", all_bonus: $all_bonus"; + if ($isDonor) { + $all_bonus = $all_bonus * $donortimes_bonus; + $bonusLog .= ", isDonor, donortimes_bonus: $donortimes_bonus, all_bonus: $all_bonus"; + } + if ($officialAdditionFactor > 0) { + $officialAddition = $seedBonusResult['official_bonus'] * $officialAdditionFactor; + $all_bonus += $officialAddition; + $bonusLog .= ", officialAdditionFactor: $officialAdditionFactor, official_bonus: {$seedBonusResult['official_bonus']}, officialAddition: $officialAddition, all_bonus: $all_bonus"; + } + if ($haremAdditionFactor > 0) { + $haremBonus = calculate_harem_addition($uid); + $haremAddition = $haremBonus * $haremAdditionFactor; + $all_bonus += $haremAddition; + $bonusLog .= ", haremAdditionFactor: $haremAdditionFactor, haremBonus: $haremBonus, haremAddition: $haremAddition, all_bonus: $all_bonus"; + } + $dividend = 3600 / $autoclean_interval_one; + $all_bonus = $all_bonus / $dividend; + $seed_points = $seedBonusResult['seed_points'] / $dividend; + $sql = "update users set seed_points = ifnull(seed_points, 0) + $seed_points, seedbonus = seedbonus + $all_bonus where id = $uid limit 1"; + do_log("$bonusLog, query: $sql"); + NexusDB::statement($sql); + } + $costTime = time() - $beginTimestamp; + do_log("$logPrefix, [DONE], cost time: $costTime seconds"); + } +} diff --git a/app/Jobs/ManagePlugin.php b/app/Jobs/ManagePlugin.php new file mode 100644 index 00000000..960c3aab --- /dev/null +++ b/app/Jobs/ManagePlugin.php @@ -0,0 +1,54 @@ +plugin = $plugin; + $this->action = $action; + } + + public function uniqueId() + { + return $this->plugin->id; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(PluginRepository $pluginRepository) + { + match ($this->action) { + 'install' => $pluginRepository->doInstall($this->plugin), + 'update' => $pluginRepository->doUpdate($this->plugin), + 'delete' => $pluginRepository->doDelete($this->plugin), + default => throw new \InvalidArgumentException("Invalid action: " . $this->action) + }; + } +} diff --git a/app/Jobs/UpdateSeedingLeechingTime.php b/app/Jobs/UpdateSeedingLeechingTime.php new file mode 100644 index 00000000..d450225f --- /dev/null +++ b/app/Jobs/UpdateSeedingLeechingTime.php @@ -0,0 +1,56 @@ +beginUid = $beginUid; + $this->endUid = $endUid; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $beginTimestamp = time(); + $logPrefix = sprintf("[CLEANUP_CLI_UPDATE_SEEDING_LEECHING_TIME], beginUid: %s, endUid: %s", $this->beginUid, $this->endUid); + $sql = sprintf("select id from users where id > %s and id <= %s and enabled = 'yes' and status = 'confirmed'", $this->beginUid, $this->endUid); + $results = NexusDB::select($sql); + do_log("$logPrefix, [GET_UID], sql: $sql, count: " . count($results)); + foreach ($results as $arr) { + $uid = $arr['id']; + $sql = sprintf('select sum(seedtime) as st, sum(leechtime) as lt from snatched where userid = %s limit 1', $uid); + $row = NexusDB::select($sql); + if (is_numeric($row[0]['st'])) { + $sql = sprintf('update users set seedtime = %s, leechtime = %s where id = %s limit 1', $row[0]['st'], $row[0]['lt'], $uid); + NexusDB::statement($sql); + } + } + $costTime = time() - $beginTimestamp; + do_log("$logPrefix, [DONE], cost time: $costTime seconds"); + } +} diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index d18ff2c3..1a0d164f 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -3,11 +3,14 @@ namespace App\Models; use Illuminate\Database\Eloquent\Casts\Attribute; +use Illuminate\Support\Arr; class Plugin extends NexusModel { protected $fillable = ['display_name', 'package_name', 'remote_url', 'installed_version', 'status', 'description', 'status_result']; + public $timestamps = true; + const STATUS_NOT_INSTALLED = -1; const STATUS_NORMAL = 0; @@ -23,6 +26,23 @@ class Plugin extends NexusModel const STATUS_DELETING = 102; const STATUS_DELETE_FAILED = 103; + public static array $showInstallBtnStatus = [ + self::STATUS_NOT_INSTALLED, + self::STATUS_INSTALL_FAILED, + ]; + + public static array $showUpdateBtnStatus = [ + self::STATUS_NORMAL, + self::STATUS_UPDATE_FAILED, + self::STATUS_DELETE_FAILED, + ]; + + public static array $showDeleteBtnStatus = [ + self::STATUS_NORMAL, + self::STATUS_UPDATE_FAILED, + self::STATUS_DELETE_FAILED, + ]; + public function statusText(): Attribute { return new Attribute( diff --git a/app/Repositories/PluginRepository.php b/app/Repositories/PluginRepository.php index 396f49ac..24fee145 100644 --- a/app/Repositories/PluginRepository.php +++ b/app/Repositories/PluginRepository.php @@ -46,6 +46,7 @@ class PluginRepository extends BaseRepository public function doInstall(Plugin $plugin) { + $plugin->update(['status' => Plugin::STATUS_INSTALLING]); $packageName = $plugin->package_name; try { $this->execComposerConfig($plugin); @@ -72,6 +73,7 @@ class PluginRepository extends BaseRepository public function doDelete(Plugin $plugin) { + $plugin->update(['status' => Plugin::STATUS_DELETING]); $packageName = $plugin->package_name; $removeSuccess = true; try { @@ -101,6 +103,7 @@ class PluginRepository extends BaseRepository public function doUpdate(Plugin $plugin) { + $plugin->update(['status' => Plugin::STATUS_UPDATING]); $packageName = $plugin->package_name; try { $output = $this->execComposerUpdate($plugin); diff --git a/app/Repositories/SearchBoxRepository.php b/app/Repositories/SearchBoxRepository.php index 65e29fe4..510ff557 100644 --- a/app/Repositories/SearchBoxRepository.php +++ b/app/Repositories/SearchBoxRepository.php @@ -111,42 +111,8 @@ class SearchBoxRepository extends BaseRepository */ public function migrateToModeRelated() { - $secondIconTable = 'secondicons'; - $normalId = Setting::get('main.browsecat'); - $specialId = Setting::get('main.specialcat'); $searchBoxList = SearchBox::query()->get(); - $tables = array_values(SearchBox::$taxonomies); - foreach ($searchBoxList as $searchBox) { -// if ($searchBox->id == $normalId) { -// //all sub categories add `mode` field -// foreach ($tables as $table) { -// NexusDB::table($table)->update(['mode' => $normalId]); -// do_log("update table $table mode = $normalId"); -// } -// //also second icons -// NexusDB::table($secondIconTable)->update(['mode' => $normalId]); -// do_log("update table $secondIconTable mode = $normalId"); -// } elseif ($searchBox->id == $specialId && $specialId != $normalId) { -// //copy from normal section -// foreach ($tables as $table) { -// $sql = sprintf( -// "insert into `%s` (name, sort_index, mode) select name, sort_index, '%s' from `%s`", -// $table, $specialId, $table -// ); -// NexusDB::statement($sql); -// do_log("copy table $table, $sql"); -// } -// $fields = array_keys(SearchBox::$taxonomies); -// $fields = array_merge($fields, ['name', 'class_name', 'image']); -// $fieldStr = implode(', ', $fields); -// $sql = sprintf( -// "insert into `%s` (%s, mode) select %s, '%s' from `%s`", -// $secondIconTable, $fieldStr, $fieldStr, $specialId, $secondIconTable -// ); -// NexusDB::statement($sql); -// do_log("copy table $secondIconTable, $sql"); -// } $taxonomies = []; foreach (SearchBox::$taxonomies as $torrentField => $taxonomyTable) { $searchBoxField = "show" . $torrentField; @@ -164,6 +130,7 @@ class SearchBoxRepository extends BaseRepository if (!empty($taxonomies)) { $searchBox->update(["extra->" . SearchBox::EXTRA_TAXONOMY_LABELS => $taxonomies]); } + clear_search_box_cache($searchBox->id); } } diff --git a/config/filament.php b/config/filament.php index c2340380..3b5b8630 100644 --- a/config/filament.php +++ b/config/filament.php @@ -200,7 +200,7 @@ return [ 'max_content_width' => null, 'notifications' => [ 'vertical_alignment' => 'top', - 'alignment' => 'center', + 'alignment' => 'right', ], 'sidebar' => [ 'is_collapsible_on_desktop' => true, diff --git a/config/queue.php b/config/queue.php index 8302744b..3d29f3af 100644 --- a/config/queue.php +++ b/config/queue.php @@ -65,7 +65,7 @@ return [ 'redis' => [ 'driver' => 'redis', 'connection' => 'default', - 'queue' => env('REDIS_QUEUE', 'default'), + 'queue' => env('REDIS_QUEUE', 'nexus_queue'), 'retry_after' => 90, 'block_for' => null, 'after_commit' => true, diff --git a/database/migrations/2022_09_05_230532_add_mode_to_section_related.php b/database/migrations/2022_09_05_230532_add_mode_to_section_related.php index 3a414d88..380e04a6 100644 --- a/database/migrations/2022_09_05_230532_add_mode_to_section_related.php +++ b/database/migrations/2022_09_05_230532_add_mode_to_section_related.php @@ -17,9 +17,11 @@ return new class extends Migration public function up() { foreach (self::$tables as $table) { - Schema::table($table, function (Blueprint $table) { - $table->integer('mode')->default(0); - }); + if (!\Nexus\Database\NexusDB::hasColumn($table, 'mode')) { + Schema::table($table, function (Blueprint $table) { + $table->integer('mode')->default(0); + }); + } } } diff --git a/database/migrations/2022_09_06_004318_add_section_name_to_searchbox_table.php b/database/migrations/2022_09_06_004318_add_section_name_to_searchbox_table.php index 6c75630d..51f516c1 100644 --- a/database/migrations/2022_09_06_004318_add_section_name_to_searchbox_table.php +++ b/database/migrations/2022_09_06_004318_add_section_name_to_searchbox_table.php @@ -13,9 +13,11 @@ return new class extends Migration */ public function up() { - Schema::table('searchbox', function (Blueprint $table) { - $table->json('section_name')->after('name')->nullable(true); - }); + if (!\Nexus\Database\NexusDB::hasColumn('searchbox', 'section_name')) { + Schema::table('searchbox', function (Blueprint $table) { + $table->json('section_name')->after('name')->nullable(true); + }); + } } /** diff --git a/include/cleanup.php b/include/cleanup.php index c23af043..888a8dbc 100644 --- a/include/cleanup.php +++ b/include/cleanup.php @@ -261,42 +261,60 @@ function docleanup($forceAll = 0, $printProgress = false) { printProgress($log); } //11.calculate seeding bonus - $res = sql_query("SELECT DISTINCT userid FROM peers WHERE seeder = 'yes'") or sqlerr(__FILE__, __LINE__); - if (mysql_num_rows($res) > 0) - { - $haremAdditionFactor = get_setting('bonus.harem_addition'); - $officialAdditionFactor = get_setting('bonus.official_addition'); - while ($arr = mysql_fetch_assoc($res)) //loop for different users - { - $userInfo = get_user_row($arr['userid']); - $isDonor = is_donor($userInfo); - $seedBonusResult = calculate_seed_bonus($arr['userid']); - $bonusLog = "[CLEANUP_CALCULATE_SEED_BONUS], user: {$arr['userid']}, seedBonusResult: " . nexus_json_encode($seedBonusResult); - $all_bonus = $seedBonusResult['seed_bonus']; - $bonusLog .= ", all_bonus: $all_bonus"; - if ($isDonor) { - $all_bonus = $all_bonus * $donortimes_bonus; - $bonusLog .= ", isDonor, donortimes_bonus: $donortimes_bonus, all_bonus: $all_bonus"; - } - if ($officialAdditionFactor > 0) { - $officialAddition = $seedBonusResult['official_bonus'] * $officialAdditionFactor; - $all_bonus += $officialAddition; - $bonusLog .= ", officialAdditionFactor: $officialAdditionFactor, official_bonus: {$seedBonusResult['official_bonus']}, officialAddition: $officialAddition, all_bonus: $all_bonus"; - } - if ($haremAdditionFactor > 0) { - $haremBonus = calculate_harem_addition($arr['userid']); - $haremAddition = $haremBonus * $haremAdditionFactor; - $all_bonus += $haremAddition; - $bonusLog .= ", haremAdditionFactor: $haremAdditionFactor, haremBonus: $haremBonus, haremAddition: $haremAddition, all_bonus: $all_bonus"; - } - $dividend = 3600 / $autoclean_interval_one; - $all_bonus = $all_bonus / $dividend; - $seed_points = $seedBonusResult['seed_points'] / $dividend; - $sql = "update users set seed_points = ifnull(seed_points, 0) + $seed_points, seedbonus = seedbonus + $all_bonus where id = {$arr["userid"]}"; - do_log("$bonusLog, query: $sql"); - sql_query($sql); - } - } +// $res = sql_query("SELECT DISTINCT userid FROM peers WHERE seeder = 'yes'") or sqlerr(__FILE__, __LINE__); +// if (mysql_num_rows($res) > 0) +// { +// $haremAdditionFactor = get_setting('bonus.harem_addition'); +// $officialAdditionFactor = get_setting('bonus.official_addition'); +// while ($arr = mysql_fetch_assoc($res)) //loop for different users +// { +// $userInfo = get_user_row($arr['userid']); +// $isDonor = is_donor($userInfo); +// $seedBonusResult = calculate_seed_bonus($arr['userid']); +// $bonusLog = "[CLEANUP_CALCULATE_SEED_BONUS], user: {$arr['userid']}, seedBonusResult: " . nexus_json_encode($seedBonusResult); +// $all_bonus = $seedBonusResult['seed_bonus']; +// $bonusLog .= ", all_bonus: $all_bonus"; +// if ($isDonor) { +// $all_bonus = $all_bonus * $donortimes_bonus; +// $bonusLog .= ", isDonor, donortimes_bonus: $donortimes_bonus, all_bonus: $all_bonus"; +// } +// if ($officialAdditionFactor > 0) { +// $officialAddition = $seedBonusResult['official_bonus'] * $officialAdditionFactor; +// $all_bonus += $officialAddition; +// $bonusLog .= ", officialAdditionFactor: $officialAdditionFactor, official_bonus: {$seedBonusResult['official_bonus']}, officialAddition: $officialAddition, all_bonus: $all_bonus"; +// } +// if ($haremAdditionFactor > 0) { +// $haremBonus = calculate_harem_addition($arr['userid']); +// $haremAddition = $haremBonus * $haremAdditionFactor; +// $all_bonus += $haremAddition; +// $bonusLog .= ", haremAdditionFactor: $haremAdditionFactor, haremBonus: $haremBonus, haremAddition: $haremAddition, all_bonus: $all_bonus"; +// } +// $dividend = 3600 / $autoclean_interval_one; +// $all_bonus = $all_bonus / $dividend; +// $seed_points = $seedBonusResult['seed_points'] / $dividend; +// $sql = "update users set seed_points = ifnull(seed_points, 0) + $seed_points, seedbonus = seedbonus + $all_bonus where id = {$arr["userid"]}"; +// do_log("$bonusLog, query: $sql"); +// sql_query($sql); +// } +// } + + //chunk async + $maxUidRes = mysql_fetch_assoc(sql_query("select max(id) as max_uid from users limit 1")); + $maxUid = $maxUidRes['max_uid']; + $phpPath = nexus_env('PHP_PATH', 'php'); + $webRoot = rtrim(ROOT_PATH, '/'); + $chunk = 2000; + $beginUid = 0; + do { + $command = sprintf( + '%s %s/artisan cleanup --action=seed_bonus --begin_uid=%s --end_uid=%s', + $phpPath, $webRoot, $beginUid, $beginUid + $chunk + ); + $result = exec("$command 2>&1", $output, $result_code); + do_log(sprintf('command: %s, result_code: %s, result: %s, output: %s', $command, $result_code, $result, json_encode($output))); + $beginUid += $chunk; + } while ($beginUid < $maxUid); + $log = 'calculate seeding bonus'; do_log($log); if ($printProgress) { @@ -810,18 +828,30 @@ function docleanup($forceAll = 0, $printProgress = false) { } //17.update total seeding and leeching time of users - $res = sql_query("SELECT id FROM users where enabled = 'yes' and status = 'confirmed'") or sqlerr(__FILE__, __LINE__); - while($arr = mysql_fetch_assoc($res)) - { - //die("s" . $arr['id']); - $res2 = sql_query("SELECT SUM(seedtime) as st, SUM(leechtime) as lt FROM snatched where userid = " . $arr['id'] . " LIMIT 1") or sqlerr(__FILE__, __LINE__); - $arr2 = mysql_fetch_assoc($res2) or sqlerr(__FILE__, __LINE__); +// $res = sql_query("SELECT id FROM users where enabled = 'yes' and status = 'confirmed'") or sqlerr(__FILE__, __LINE__); +// while($arr = mysql_fetch_assoc($res)) +// { +// //die("s" . $arr['id']); +// $res2 = sql_query("SELECT SUM(seedtime) as st, SUM(leechtime) as lt FROM snatched where userid = " . $arr['id'] . " LIMIT 1") or sqlerr(__FILE__, __LINE__); +// $arr2 = mysql_fetch_assoc($res2) or sqlerr(__FILE__, __LINE__); +// +// //die("ss" . $arr2['st']); +// //die("sss" . "UPDATE users SET seedtime = " . $arr2['st'] . ", leechtime = " . $arr2['lt'] . " WHERE id = " . $arr['id']); +// +// sql_query("UPDATE users SET seedtime = " . intval($arr2['st']) . ", leechtime = " . intval($arr2['lt']) . " WHERE id = " . $arr['id']) or sqlerr(__FILE__, __LINE__); +// } - //die("ss" . $arr2['st']); - //die("sss" . "UPDATE users SET seedtime = " . $arr2['st'] . ", leechtime = " . $arr2['lt'] . " WHERE id = " . $arr['id']); + $beginUid = 0; + do { + $command = sprintf( + '%s %s/artisan cleanup --action=seeding_leeching_time --begin_uid=%s --end_uid=%s', + $phpPath, $webRoot, $beginUid, $beginUid + $chunk + ); + $result = exec("$command 2>&1", $output, $result_code); + do_log(sprintf('command: %s, result_code: %s, result: %s, output: %s', $command, $result_code, $result, json_encode($output))); + $beginUid += $chunk; + } while ($beginUid < $maxUid); - sql_query("UPDATE users SET seedtime = " . intval($arr2['st']) . ", leechtime = " . intval($arr2['lt']) . " WHERE id = " . $arr['id']) or sqlerr(__FILE__, __LINE__); - } $log = "update total seeding and leeching time of users"; do_log($log); if ($printProgress) { diff --git a/include/cleanup_cli.php b/include/cleanup_cli.php index e1b4152a..2fcf93ec 100644 --- a/include/cleanup_cli.php +++ b/include/cleanup_cli.php @@ -24,19 +24,12 @@ if (isset($_SERVER['argv'][1])) { } $logPrefix = "[CLEANUP_CLI]"; $begin = time(); -try { - if ($force) { - $result = docleanup(1, true); - } else { - $result = autoclean(true); - } - $log = "$logPrefix, DONE: $result, cost time in seconds: " . (time() - $begin); - do_log($log); - printProgress($log); -} catch (\Exception $exception) { - $log = "$logPrefix, ERROR: " . $exception->getMessage(); - do_log($log); - printProgress($log); - throw new \RuntimeException($exception->getMessage()); +if ($force) { + $result = docleanup(1, true); +} else { + $result = autoclean(true); } +$log = "$logPrefix, DONE: $result, cost time in seconds: " . (time() - $begin); +do_log($log); +printProgress($log); diff --git a/nexus/Install/Update.php b/nexus/Install/Update.php index f9d4d312..6c51663c 100644 --- a/nexus/Install/Update.php +++ b/nexus/Install/Update.php @@ -19,6 +19,7 @@ use App\Models\UserBanLog; use App\Repositories\AttendanceRepository; use App\Repositories\BonusRepository; use App\Repositories\ExamRepository; +use App\Repositories\SearchBoxRepository; use App\Repositories\TagRepository; use App\Repositories\ToolRepository; use Carbon\Carbon; @@ -255,6 +256,18 @@ class Update extends Install ]]); } + /** + * @since 1.8.0 + */ + if (!NexusDB::hasColumn('searchbox', 'section_name')) { + $this->runMigrate('database/migrations/2022_09_05_230532_add_mode_to_section_related.php'); + $this->runMigrate('database/migrations/2022_09_06_004318_add_section_name_to_searchbox_table.php'); + $this->runMigrate('database/migrations/2022_09_06_030324_change_searchbox_field_extra_to_json.php'); + $searchBoxRep = new SearchBoxRepository(); + $searchBoxRep->migrateToModeRelated(); + $this->doLog("[MIGRATE_TAXONOMY_TO_MODE_RELATED]"); + } + } public function runExtraMigrate() diff --git a/resources/lang/zh_CN/plugin.php b/resources/lang/zh_CN/plugin.php index 23da8598..7ef18c10 100644 --- a/resources/lang/zh_CN/plugin.php +++ b/resources/lang/zh_CN/plugin.php @@ -12,6 +12,7 @@ return [ 'remote_url' => '仓库地址', 'installed_version' => '已安装版本', 'status' => '状态', + 'updated_at' => '上次执行操作', ], 'status' => [ \App\Models\Plugin::STATUS_NORMAL => '正常',