> ## 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.

# Gestire le applicazioni

> Ispeziona, controlla e gestisci un'applicazione tramite la classe Application: stato, log, metriche, ciclo di vita (avvio, arresto, riavvio) ed eliminazione.

Ogni operazione in questa pagina inizia ottenendo un'istanza di `Application`:

```typescript theme={null}
import { SquareCloudAPI } from "@squarecloud/api";

const api = new SquareCloudAPI(process.env.SQUARE_API_KEY!);
const app = await api.applications.fetch("abc123def456abc123def456");
```

`api.applications.fetch(id)` restituisce un'`Application`. Quando l'app ha un dominio web associato, viene restituita come `WebsiteApplication`: affina il tipo a runtime con `app.isWebsite()` prima di usare `.network` (vedi [Network](/it/sdks/js/network)).

## Proprietà dell'applicazione

| Proprietà     | Tipo             | Descrizione                                                                                                       |
| ------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------- |
| `id`          | `string`         | ID dell'applicazione (24 caratteri esadecimali)                                                                   |
| `name`        | `string`         | Nome visualizzato                                                                                                 |
| `description` | `string?`        | Descrizione da `squarecloud.app`                                                                                  |
| `url`         | `string`         | URL della dashboard web                                                                                           |
| `ram`         | `number`         | RAM allocata in MB                                                                                                |
| `cluster`     | `string`         | Cluster su cui gira l'app                                                                                         |
| `language`    | `string`         | `javascript` \| `typescript` \| `python` \| `java` \| `elixir` \| `rust` \| `go` \| `php` \| `dotnet` \| `static` |
| `domain`      | `string \| null` | Host predefinito `<subdomain>.squareweb.app` (`null` per app non web)                                             |
| `custom`      | `string \| null` | Dominio personalizzato associato all'app, quando configurato                                                      |
| `createdAt`   | `Date`           | Data di creazione                                                                                                 |

<Note>
  Nella v4, `app.custom` è `null` quando non è impostato alcun dominio personalizzato (era `undefined` nella v3).
</Note>

## Ottenere lo stato dell'applicazione

`app.getStatus()` restituisce un'istanza di `ApplicationStatus` con lo stato di runtime in tempo reale.

```typescript theme={null}
const status = await app.getStatus();

console.log(status.status);          // "running" | "starting" | "restarting" | "exited" | "created" | "deleting"
console.log(status.running);         // boolean
console.log(status.usage.cpu);       // "0.22%"
console.log(status.usage.ram);       // "70MB"
console.log(status.usage.network);   // { total: "0 KB ↑ 0 KB ↓", now: "0 KB ↑ 0 KB ↓" }
console.log(status.usage.storage);   // "0B"
console.log(status.uptime);          // Date | undefined
console.log(status.uptimeTimestamp); // number | undefined
```

### Stato riepilogativo di ogni applicazione

Per evitare una richiesta per ogni app, chiama `api.applications.statusAll()`:

```typescript theme={null}
const list = await api.applications.statusAll();

for (const summary of list) {
    console.log(`${summary.applicationId} → running=${summary.running}`);
    if (summary.running) {
        console.log(`  cpu=${summary.usage.cpu}, ram=${summary.usage.ram}`);
    }

    // Promote a summary to the full status with .fetch()
    const full = await summary.fetch();
    console.log(full.uptime);
}
```

## Ottenere i log

`app.getLogs()` restituisce l'output di log più recente come `string`.

```typescript theme={null}
const logs = await app.getLogs();
console.log(logs);
```

## Ottenere le metriche

`app.getMetrics()` restituisce le ultime 24 ore di campioni di CPU, RAM e rete (fino a **288 punti**, uno ogni 5 minuti).

```typescript theme={null}
const metrics = await app.getMetrics();

console.log(metrics.length, "data points");
console.log(metrics[0]);
// { timestamp: 1717084800000, cpu: 12.3, ram: 187, network: { ... } }
```

<Warning>
  `getMetrics()` richiede che all'applicazione siano allocati **almeno 512MB di RAM**.
</Warning>

## Stream di eventi in tempo reale

`app.realtime()` apre uno stream di [Server-Sent Events](https://developer.mozilla.org/docs/Web/API/Server-sent_events). Consulta la pagina dedicata [Realtime](/it/sdks/js/realtime) per un esempio completo.

## Ciclo di vita

Tutti i metodi del ciclo di vita si risolvono in un `boolean` (`true` in caso di successo).

```typescript theme={null}
await app.start();
await app.restart();
await app.stop();
```

## Eliminare un'applicazione

<Warning>
  `app.delete()` rimuove definitivamente l'applicazione. A meno che tu non abbia uno [snapshot](/it/sdks/js/snapshots), i dati **non possono essere recuperati**.
</Warning>

```typescript theme={null}
const deleted = await app.delete();
console.log(deleted); // true | false
```

## Aggiornare i dati dell'applicazione

`app.fetch()` recupera nuovamente l'applicazione dall'API e restituisce una nuova istanza di `Application`. Usalo quando sospetti che i dati memorizzati nella cache siano obsoleti.

```typescript theme={null}
const fresh = await app.fetch();
```
