mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-23 11:27:30 +08:00
feat: machine mode, ECH subscriptions, batch ops & security hardening
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user