feat: machine mode, ECH subscriptions, batch ops & security hardening

This commit is contained in:
xboard
2026-04-17 02:27:47 +08:00
parent edbd8de356
commit e297b5fe9f
25 changed files with 1564 additions and 343 deletions
+65
View File
@@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Str;
/**
* App\Models\ServerMachine
*
* @property int $id
* @property string $name 机器名称
* @property string $token 认证 Token
* @property string|null $notes 备注
* @property bool $is_active 是否启用
* @property int|null $last_seen_at 最后心跳时间
* @property array|null $load_status 负载状态
* @property \Illuminate\Support\Carbon $created_at
* @property \Illuminate\Support\Carbon $updated_at
*
* @property-read \Illuminate\Database\Eloquent\Collection<int, Server> $servers 关联的节点
*/
class ServerMachine extends Model
{
protected $table = 'v2_server_machine';
protected $guarded = ['id'];
protected $casts = [
'is_active' => 'boolean',
'last_seen_at' => 'integer',
'load_status' => 'array',
'created_at' => 'timestamp',
'updated_at' => 'timestamp',
];
protected $hidden = ['token'];
public function servers(): HasMany
{
return $this->hasMany(Server::class, 'machine_id');
}
public function loadHistory(): HasMany
{
return $this->hasMany(ServerMachineLoadHistory::class, 'machine_id');
}
/**
* 生成新的随机 Token
*/
public static function generateToken(): string
{
return Str::random(32);
}
/**
* 更新最后心跳时间
*/
public function updateHeartbeat(): bool
{
return $this->forceFill(['last_seen_at' => now()->timestamp])->save();
}
}