feat(api): 新增节点月流量限额强制下线
新增节点级月流量限额配置、重置调度和运行状态持久化 下发 traffic_limit 给 mi-node,并在超额后停止内核、到期后恢复 管理端支持编辑限额参数并展示额度进度、状态和下次重置 手动与定时重置会同步清理限额状态并通知节点刷新配置
This commit is contained in:
@@ -11,6 +11,7 @@ use App\Models\StatServer;
|
||||
use App\Services\ServerAutoOnlineService;
|
||||
use App\Services\ServerGfwCheckService;
|
||||
use App\Services\ServerService;
|
||||
use App\Services\ServerTrafficLimitService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
@@ -134,6 +135,7 @@ class ManageController extends Controller
|
||||
$params['gfw_auto_action_at'] = null;
|
||||
}
|
||||
$server->update($params);
|
||||
app(ServerTrafficLimitService::class)->refreshSchedule($server->refresh());
|
||||
$this->syncAutoOnlineIfEnabled($server);
|
||||
return $this->success(true);
|
||||
} catch (\Exception $e) {
|
||||
@@ -144,6 +146,7 @@ class ManageController extends Controller
|
||||
|
||||
try {
|
||||
$server = Server::create($params);
|
||||
app(ServerTrafficLimitService::class)->refreshSchedule($server->refresh());
|
||||
$this->syncAutoOnlineIfEnabled($server);
|
||||
return $this->success(true);
|
||||
} catch (\Exception $e) {
|
||||
@@ -262,10 +265,8 @@ class ManageController extends Controller
|
||||
}
|
||||
|
||||
try {
|
||||
$server->u = 0;
|
||||
$server->d = 0;
|
||||
$server->save();
|
||||
|
||||
app(ServerTrafficLimitService::class)->resetServer($server);
|
||||
|
||||
Log::info("Server {$server->id} ({$server->name}) traffic reset by admin");
|
||||
return $this->success(true);
|
||||
} catch (\Exception $e) {
|
||||
@@ -292,10 +293,10 @@ class ManageController extends Controller
|
||||
}
|
||||
|
||||
try {
|
||||
Server::whereIn('id', $ids)->update([
|
||||
'u' => 0,
|
||||
'd' => 0,
|
||||
]);
|
||||
$service = app(ServerTrafficLimitService::class);
|
||||
Server::whereIn('id', $ids)
|
||||
->get()
|
||||
->each(fn (Server $server) => $service->resetServer($server));
|
||||
|
||||
Log::info("Servers " . implode(',', $ids) . " traffic reset by admin");
|
||||
return $this->success(true);
|
||||
|
||||
@@ -141,6 +141,10 @@ class ServerSave extends FormRequest
|
||||
'rate_time_ranges.*.rate' => 'required_with:rate_time_ranges|numeric|min:0',
|
||||
'protocol_settings' => 'array',
|
||||
'transfer_enable' => 'nullable|integer|min:0',
|
||||
'traffic_limit_enabled' => 'nullable|boolean',
|
||||
'traffic_limit_reset_day' => 'nullable|integer|min:1|max:31',
|
||||
'traffic_limit_reset_time' => 'nullable|string|date_format:H:i',
|
||||
'traffic_limit_timezone' => 'nullable|string|max:64',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -304,6 +308,11 @@ class ServerSave extends FormRequest
|
||||
'protocol_settings.*.in' => ':attribute 的值不合法',
|
||||
'transfer_enable.integer' => '流量上限必须是整数',
|
||||
'transfer_enable.min' => '流量上限不能小于0',
|
||||
'traffic_limit_reset_day.integer' => '重置日期必须是整数',
|
||||
'traffic_limit_reset_day.min' => '重置日期不能小于1',
|
||||
'traffic_limit_reset_day.max' => '重置日期不能大于31',
|
||||
'traffic_limit_reset_time.date_format' => '重置时间格式必须为HH:mm',
|
||||
'traffic_limit_timezone.max' => '重置时区长度不能超过64个字符',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user