feat(api): 新增节点月流量限额强制下线

新增节点级月流量限额配置、重置调度和运行状态持久化
下发 traffic_limit 给 mi-node,并在超额后停止内核、到期后恢复
管理端支持编辑限额参数并展示额度进度、状态和下次重置
手动与定时重置会同步清理限额状态并通知节点刷新配置
This commit is contained in:
yinjianm
2026-04-29 00:46:12 +08:00
parent 52529d1f58
commit 922e86070d
26 changed files with 1127 additions and 11 deletions
@@ -0,0 +1,36 @@
<?php
namespace App\Console\Commands;
use App\Services\ServerTrafficLimitService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class SyncServerTrafficLimits extends Command
{
protected $signature = 'sync:server-traffic-limits';
protected $description = '重置到期的节点流量限额状态';
public function handle(ServerTrafficLimitService $service): int
{
try {
$result = $service->resetDueServers();
$this->info("处理 {$result['processed']} 个节点,重置 {$result['reset']} 个节点");
if (!empty($result['errors'])) {
$this->warn('部分节点重置失败,详情请查看日志');
}
return self::SUCCESS;
} catch (\Throwable $e) {
Log::error('节点流量限额同步失败', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
$this->error("节点流量限额同步失败: {$e->getMessage()}");
return self::FAILURE;
}
}
}
+1
View File
@@ -46,6 +46,7 @@ class Kernel extends ConsoleKernel
$schedule->command('cleanup:online-status')->everyFiveMinutes()->onOneServer();
$schedule->command('sync:server-auto-online')->everyFiveMinutes()->onOneServer()->withoutOverlapping(5);
$schedule->command('sync:server-gfw-checks')->everyThirtyMinutes()->onOneServer()->withoutOverlapping(30);
$schedule->command('sync:server-traffic-limits')->everyMinute()->onOneServer()->withoutOverlapping(10);
// backup Timing
// if (env('ENABLE_AUTO_BACKUP_AND_UPDATE', false)) {
// $schedule->command('backup:database', ['true'])->daily()->onOneServer();