'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 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); } }