62 lines
1.6 KiB
PHP
62 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\RegistryType;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
class Registry extends Model
|
|
{
|
|
protected $guarded = [];
|
|
|
|
protected $hidden = ['credentials'];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'type' => RegistryType::class,
|
|
'credentials' => 'encrypted:array',
|
|
'readiness_checks' => 'array',
|
|
'health_checked_at' => 'datetime',
|
|
'ready_at' => 'datetime',
|
|
];
|
|
}
|
|
|
|
public function organisation(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Organisation::class);
|
|
}
|
|
|
|
public function controlServer(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Server::class, 'control_server_id');
|
|
}
|
|
|
|
public function markHealthy(?string $message = null): void
|
|
{
|
|
$this->forceFill([
|
|
'health_status' => 'healthy',
|
|
'health_message' => $message,
|
|
'health_checked_at' => Carbon::now(),
|
|
'ready_at' => $this->ready_at ?? Carbon::now(),
|
|
])->save();
|
|
}
|
|
|
|
public function markUnhealthy(string $message): void
|
|
{
|
|
$this->forceFill([
|
|
'health_status' => 'unhealthy',
|
|
'health_message' => $message,
|
|
'health_checked_at' => Carbon::now(),
|
|
'ready_at' => null,
|
|
])->save();
|
|
}
|
|
|
|
public function isReady(): bool
|
|
{
|
|
return $this->type !== RegistryType::MANAGED || ($this->ready_at !== null && $this->health_status === 'healthy');
|
|
}
|
|
}
|