'integer', 'type_data' => 'json', 'is_default' => 'boolean', ]; public static function boot(): void { parent::boot(); static::creating(function (Service $service) { if (array_key_exists($service->name, config('core.service_units'))) { $service->unit = config('core.service_units')[$service->name][$service->server->os][$service->version]; } }); } public static array $statusColors = [ ServiceStatus::READY => 'success', ServiceStatus::INSTALLING => 'warning', ServiceStatus::INSTALLATION_FAILED => 'danger', ServiceStatus::UNINSTALLING => 'warning', ServiceStatus::FAILED => 'danger', ServiceStatus::STARTING => 'warning', ServiceStatus::STOPPING => 'warning', ServiceStatus::RESTARTING => 'warning', ServiceStatus::STOPPED => 'danger', ServiceStatus::ENABLING => 'warning', ServiceStatus::DISABLING => 'warning', ServiceStatus::DISABLED => 'gray', ]; public function server(): BelongsTo { return $this->belongsTo(Server::class); } public function handler(): ServiceInterface { $handler = config('core.service_handlers')[$this->name]; return new $handler($this); } /** * @throws ServiceInstallationFailed */ public function validateInstall($result): void { if (! Str::contains($result, 'Active: active')) { throw new ServiceInstallationFailed; } } public function start(): void { $this->unit && app(Manage::class)->start($this); } public function stop(): void { $this->unit && app(Manage::class)->stop($this); } public function restart(): void { $this->unit && app(Manage::class)->restart($this); } public function enable(): void { $this->unit && app(Manage::class)->enable($this); } public function disable(): void { $this->unit && app(Manage::class)->disable($this); } }