repository = $repository; } /** * @return string */ public function getResourceName(): string { return 'stats'; } /** * Transform stats from the daemon into a result set that can be used in * the client API. * * @param \Pterodactyl\Models\Server $model * @return array * * @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException */ public function transform(Server $model) { try { $stats = $this->repository->setServer($model)->details(); } catch (RequestException $exception) { throw new DaemonConnectionException($exception); } $object = json_decode($stats->getBody()->getContents()); return [ 'state' => $this->transformState(object_get($object, 'status', 0)), 'memory' => [ 'current' => round(object_get($object, 'proc.memory.total', 0) / 1024 / 1024), 'limit' => floatval($model->memory), ], 'cpu' => [ 'current' => object_get($object, 'proc.cpu.total', 0), 'cores' => object_get($object, 'proc.cpu.cores', []), 'limit' => floatval($model->cpu), ], 'disk' => [ 'current' => round(object_get($object, 'proc.disk.used', 0)), 'limit' => floatval($model->disk), 'io' => $model->io, ], 'installed' => $model->installed === 1, 'suspended' => (bool) $model->suspended, ]; } /** * Transform the state returned by the daemon into a human readable string. * * @param int $state * @return string */ private function transformState(int $state): string { switch ($state) { case 1: return 'on'; case 2: return 'starting'; case 3: return 'stopping'; case 0: default: return 'off'; } } }