Vai al contenuto principale
Log in Tempo Reale
curl --request GET \
  --url https://api.squarecloud.app/v2/apps/{app_id}/realtime \
  --header 'Authorization: <authorization>'
import requests

url = "https://api.squarecloud.app/v2/apps/{app_id}/realtime"

headers = {"Authorization": "<authorization>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: '<authorization>'}};

fetch('https://api.squarecloud.app/v2/apps/{app_id}/realtime', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.squarecloud.app/v2/apps/{app_id}/realtime",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.squarecloud.app/v2/apps/{app_id}/realtime"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "<authorization>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.squarecloud.app/v2/apps/{app_id}/realtime")
.header("Authorization", "<authorization>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.squarecloud.app/v2/apps/{app_id}/realtime")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'

response = http.request(request)
puts response.read_body
{
  "status": "<string>"
}
L’API Playground è disabilitato per questo endpoint a causa della natura delle connessioni SSE, che non sono supportate universalmente dai browser.
Authorization
string
obbligatorio
La chiave API del tuo account. Puoi trovarla nelle impostazioni del tuo account.

Parametri

app_id
string
obbligatorio
L’ID dell’applicazione di cui vuoi monitorare i log. Questo ID può essere trovato nell’URL del pannello di gestione della tua applicazione.

Risposta

status
string
Indica se la chiamata è andata a buon fine. success in caso di successo, error in caso contrario.
In caso di fallimento, la risposta includerà un campo code insieme allo stato di errore, che ne dettaglia la causa. Se la richiesta ha esito positivo, la risposta sarà uno stream text/event-stream contenente il feed in tempo reale dell’applicazione. Ogni connessione dura fino a 10 minuti. Ogni account può mantenere 5 connessioni realtime simultanee (REALTIME_MAX_CONNECTIONS) e ogni applicazione 30 tra tutti gli utenti (REALTIME_MAX_CONNECTIONS_APP); il superamento di uno dei due limiti restituisce 429.

Struttura dei Server-Sent Events (SSE)

La risposta è uno stream continuo in formato text/event-stream. Ogni messaggio è composto da un campo event e da un campo data. Le forme variano a seconda dell’evento, quindi analizza i payload in modo difensivo.

Tipi di Evento

  • system: Segnali a livello di protocollo. La riga data è un singolo codice in maiuscolo: REALTIME_CONNECTING | <sseId> alla connessione, poi uno qualsiasi tra REALTIME_TIMEOUT, REALTIME_DISCONNECTED, REALTIME_RECONNECT o REALTIME_ERROR.
  • logs: Una singola riga di log il cui primo carattere è un byte di identificazione dello stream: \x01 (stdout) o \x02 (stderr). Leggi data.charCodeAt(0) (1 = stdout, 2 = stderr), poi data.slice(1) per il testo. Una riga senza quel byte di prefisso è stdout.
  • status: Metriche live del container come stringa JSON, circa un frame al secondo. Il primo frame di ogni (ri)connessione è completo: { cpu, cpuLimit, ram: [usedMB, limitMB], status, netIO: { i, o, new: { i, o } }, bIO: { i, o }, uptime } (uptime è l’orario di avvio in ms epoch; netIO.new è in byte al secondo). Ogni frame successivo è ridotto, portando solo { cpu, ram, netIO, bIO } — unisci ciascuno all’ultimo frame completo, mantenendo i precedenti cpuLimit, status e uptime. Mentre questo stream è aperto, preferiscilo al polling di GET /v2/apps/{app_id}/status, che può essere fino a circa un minuto obsoleto per un’app con uno stream realtime aperto.
  • error: Porta un codice di errore come CONTAINER_NOT_FOUND.
Nell’esempio seguente, \x01 / \x02 rappresentano i byte di prefisso grezzi stdout / stderr.
event: system
data: REALTIME_CONNECTING | abc123-1716000000000-deadbeef

event: status
data: {"cpu":12.5,"cpuLimit":100,"ram":[128,512],"status":"running","netIO":{"i":2048,"o":4096,"new":{"i":64,"o":128}},"bIO":{"i":0,"o":0},"uptime":1716000000000}

event: status
data: {"cpu":13.1,"ram":[131,512],"netIO":{"i":2176,"o":4288,"new":{"i":72,"o":140}},"bIO":{"i":0,"o":0}}

event: logs
data: \x01Server listening on :3000

event: logs
data: \x02Error: connect ECONNREFUSED