*/ use HasFactory; protected $fillable = [ 'server_id', 'site_id', 'command', 'user', 'auto_start', 'auto_restart', 'numprocs', 'redirect_stderr', 'stdout_logfile', 'status', ]; protected $casts = [ 'server_id' => 'integer', 'site_id' => 'integer', 'auto_start' => 'boolean', 'auto_restart' => 'boolean', 'numprocs' => 'integer', 'redirect_stderr' => 'boolean', ]; /** * @var array */ public static array $statusColors = [ WorkerStatus::RUNNING => 'success', WorkerStatus::CREATING => 'warning', WorkerStatus::DELETING => 'warning', WorkerStatus::FAILED => 'danger', WorkerStatus::STARTING => 'warning', WorkerStatus::STOPPING => 'warning', WorkerStatus::RESTARTING => 'warning', WorkerStatus::STOPPED => 'gray', ]; public static function boot(): void { parent::boot(); static::deleting(function (Worker $worker): void { try { /** @var Service $service */ $service = $worker->server->processManager(); /** @var ProcessManager $handler */ $handler = $service->handler(); $handler->delete($worker->id, $worker->site_id); } catch (Throwable $e) { Log::error($e); } }); } public function getServerIdAttribute(int $value): int { if ($value === 0) { $value = $this->site->server_id; $this->fill(['server_id' => $this->site->server_id]); $this->save(); } return $value; } /** * @return BelongsTo */ public function server(): BelongsTo { return $this->belongsTo(Server::class); } /** * @return BelongsTo */ public function site(): BelongsTo { return $this->belongsTo(Site::class); } public function getLogDirectory(): string { if ($this->user === 'root') { return '/root/.logs/workers'; } return '/home/'.$this->user.'/.logs/workers'; } public function getLogFile(): string { return $this->getLogDirectory().'/'.$this->id.'.log'; } }