Files
Xboard/app/Observers/ServerObserver.php
T
yinjianm 922e86070d feat(api): 新增节点月流量限额强制下线
新增节点级月流量限额配置、重置调度和运行状态持久化
下发 traffic_limit 给 mi-node,并在超额后停止内核、到期后恢复
管理端支持编辑限额参数并展示额度进度、状态和下次重置
手动与定时重置会同步清理限额状态并通知节点刷新配置
2026-04-29 00:46:12 +08:00

74 lines
2.0 KiB
PHP

<?php
namespace App\Observers;
use App\Models\Server;
use App\Services\NodeSyncService;
class ServerObserver
{
public bool $afterCommit = true;
public function created(Server $server): void
{
$this->notifyMachineNodesChanged($server->machine_id);
}
public function updated(Server $server): void
{
if ($server->wasChanged('group_ids')) {
NodeSyncService::notifyFullSync($server->id);
} elseif ($server->wasChanged([
'server_port',
'protocol_settings',
'type',
'route_ids',
'custom_outbounds',
'custom_routes',
'cert_config',
'transfer_enable',
'traffic_limit_enabled',
'traffic_limit_reset_day',
'traffic_limit_reset_time',
'traffic_limit_timezone',
'traffic_limit_last_reset_at',
'traffic_limit_next_reset_at',
])) {
NodeSyncService::notifyConfigUpdated($server->id);
}
if ($server->wasChanged(['machine_id', 'enabled'])) {
$this->notifyMachineChange(
$server->machine_id,
$server->getOriginal('machine_id')
);
}
}
public function deleted(Server $server): void
{
$this->notifyMachineChange(null, $server->getOriginal('machine_id') ?: $server->machine_id);
}
private function notifyMachineChange(?int $newMachineId, ?int $oldMachineId): void
{
$notified = [];
if ($newMachineId) {
NodeSyncService::notifyMachineNodesChanged($newMachineId);
$notified[] = $newMachineId;
}
if ($oldMachineId && !in_array($oldMachineId, $notified, true)) {
NodeSyncService::notifyMachineNodesChanged($oldMachineId);
}
}
private function notifyMachineNodesChanged(?int $machineId): void
{
if ($machineId) {
NodeSyncService::notifyMachineNodesChanged($machineId);
}
}
}