> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK Python: gerenciar aplicações

> Controle suas aplicações com o squarecloud-api: detalhes, status, iniciar, parar, reiniciar, logs, métricas, domínios, load balancers e exclusão.

Todos os métodos desta página ficam em `client.apps` e recebem o id da aplicação primeiro. Um `app_id` também pode ser o id composto `<appId>-<workspaceId>` de uma aplicação compartilhada por meio de um [workspace](/pt-br/sdks/py/workspaces).

```python theme={"system"}
import os

from squarecloud import SquareCloud

client = SquareCloud(os.environ["SQUARECLOUD_API_KEY"])
app_id = "abc123def456abc123def456"
```

Com o `AsyncSquareCloud`, todas as chamadas abaixo são iguais, com `await` na frente.

Para listar suas aplicações, use [`client.account.me()`](/pt-br/sdks/py/client#conta): sua lista `applications` contém todas as aplicações que a chave pode ver.

## Obtendo uma aplicação

```python theme={"system"}
app = client.apps.get(app_id)

print(app["id"], app["name"], app["language"], app["ram"], app["cluster"], app["created_at"])
```

| Campo | Tipo | Descrição |
| - | - | - |
| `id` | `str` | Id da aplicação |
| `name` | `str` | Nome de exibição |
| `desc` | `str`, opcional | Descrição |
| `owner` | `str` | Id do usuário dono |
| `cluster` | `str` | Cluster em que a aplicação roda |
| `ram` | `int` | RAM alocada em MB |
| `language` | `str` | Linguagem do runtime |
| `domain` | `str \| None`, opcional | Host padrão `<subdomain>.squareweb.app`; ausente ou `None` para aplicações que não são web |
| `custom` | `str \| None`, opcional | Domínio personalizado; ausente ou `None` quando nenhum está configurado |
| `created_at` | `str` | Data de criação (ISO 8601) |

Campos opcionais podem estar ausentes do dict: leia-os com `app.get("domain")`.

## Status

`status(app_id)` retorna o estado ao vivo com valores **formatados**:

```python theme={"system"}
status = client.apps.status(app_id)

print(status["status"])   # e.g. "running", "exited"
print(status["running"])  # True
print(status["cpu"])      # "0.5%"
print(status["ram"])      # "120.4MB" (RAM in use)
print(status["storage"], status["network"]["total"], status["network"]["now"])
print(status["uptime"])   # Unix ms of the last start, None when stopped
```

Passe `raw=True` para obter **números** (`cpu` em %, `ram` em MB, `network["total"]` e `network["now"]` como pares de bytes `[in, out]`):

```python theme={"system"}
raw = client.apps.status(app_id, raw=True)

print(raw["cpu"], raw["ram"], raw["network"]["total"])  # 0.5 120.4 [1024, 2048]
```

<Note>
  `uptime` é um **timestamp** (quando a aplicação iniciou), não uma duração. Use `time.time() * 1000 - status["uptime"]` para saber há quanto tempo ela está no ar, em ms.
</Note>

### Status de todas as aplicações

`status_all()` retorna um resumo por aplicação que a chave pode ver, em uma única requisição. `cpu` e `ram` só estão presentes enquanto a aplicação está rodando.

```python theme={"system"}
for item in client.apps.status_all():
    print(item["id"], f"{item['cpu']} {item['ram']}" if item["running"] else "stopped")

# Only the apps of one workspace
shared = client.apps.status_all(workspace_id=workspace_id)
```

## Iniciar, parar e reiniciar

```python theme={"system"}
client.apps.start(app_id)
client.apps.stop(app_id)
client.apps.restart(app_id)
```

O servidor mantém essas chamadas abertas até o container agir, então elas esperam pelo menos 120 s antes de expirar. Quando a plataforma recusa a ação, a chamada lança um `SquareCloudAPIError` com status **409**, um `code` e uma mensagem **vazia** (`''`):

| Código | Significado |
| - | - |
| `CONTAINER_ALREADY_STARTED` | `start` em uma aplicação em execução |
| `CONTAINER_ALREADY_STOPPED` | `stop` em uma aplicação parada |
| `CONTAINER_TEMPORARILY_SUSPENDED` | A aplicação está suspensa |
| `CONTAINER_NOT_FOUND` | O container não existe no cluster |
| `CONTAINER_INSUFFICIENT_DISK_SPACE` | Não há disco suficiente para iniciar |
| `CONTAINER_NETWORK_CONFLICT` | Conflito de rede no cluster |
| `ACTION_FAILED` | O cluster não conseguiu executar a ação |

"Já iniciada" e "já parada" também são erros. Se para você eles significam sucesso, trate-os:

```python theme={"system"}
from squarecloud import SquareCloudAPIError

try:
    client.apps.start(app_id)
except SquareCloudAPIError as error:
    if error.code != "CONTAINER_ALREADY_STARTED":
        raise
```

## Logs

`logs(app_id)` retorna a saída mais recente do console como uma única string (`''` quando não há nenhuma).

```python theme={"system"}
print(client.apps.logs(app_id))
```

Para um stream de logs ao vivo, use [Tempo real](/pt-br/sdks/py/realtime).

## Métricas

`metrics(app_id)` retorna as últimas 24 horas, um ponto a cada 5 minutos, **do mais recente para o mais antigo**.

```python theme={"system"}
latest = client.apps.metrics(app_id)[0]

print(latest["date"], latest["cpu"], latest["ram"], latest["net"])
```

## Domínios e load balancers

`domains()` lista os hostnames padrão e personalizados de todas as aplicações. `load_balancers()` lista os domínios compartilhados por várias aplicações, com o limite do seu plano.

```python theme={"system"}
for domain in client.apps.domains():
    print(domain["app_id"], domain["hostname"], domain["type"])  # type: "subdomain" | "custom"

balancers = client.apps.load_balancers()
print(balancers["limit"])
for balancer in balancers["balancers"]:
    print(balancer["hostname"], [app["id"] for app in balancer["apps"]])
```

Para configurar um domínio personalizado, veja [Rede](/pt-br/sdks/py/network#domínio-personalizado).

## Excluindo uma aplicação

```python theme={"system"}
client.apps.delete(app_id)
```

<Warning>
  A exclusão é permanente. Crie um [snapshot](/pt-br/sdks/py/snapshots) antes, caso você possa precisar dos arquivos novamente.
</Warning>

## Próximos passos

<CardGroup cols={3}>
  <Card title="Commit e upload" icon="upload" href="/pt-br/sdks/py/commit_and_upload">
    Crie uma aplicação a partir de um zip ou envie arquivos para uma existente.
  </Card>

  <Card title="Referência da API de aplicações" icon="code" href="/pt-br/api-reference/endpoint/apps/info">
    Os endpoints REST por trás destes métodos.
  </Card>

  <Card title="Aplicações pela CLI" icon="terminal" href="/pt-br/cli-reference/apps">
    As mesmas ações pelo terminal.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.