メインコンテンツへスキップ
リアルタイムログ
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>"
}
この endpoint では、ブラウザで普遍的にサポートされていない SSE 接続の性質上、API Playground が無効化されています。
Authorization
string
必須
アカウントの API キーです。これはアカウント設定で確認できます。

パラメータ

app_id
string
必須
ログを監視したいアプリケーションの ID。この ID はアプリケーションの管理パネルの URL で確認できます。

レスポンス

status
string
呼び出しが成功したかどうかを示します。成功した場合は success、失敗した場合は error です。
失敗した場合、レスポンスにはエラーステータスとともに code フィールドが含まれ、原因が示されます。 リクエストが成功した場合、レスポンスはアプリケーションのリアルタイムフィードを含む text/event-stream ストリームになります。 各接続は最大 10 分間 継続します。各アカウントは 5 つの同時リアルタイム接続REALTIME_MAX_CONNECTIONS)を、各アプリケーションは 全ユーザー合計で 30 接続REALTIME_MAX_CONNECTIONS_APP)を保持できます。いずれかを超えると 429 が返されます。

Server-Sent Events (SSE) の構造

レスポンスは text/event-stream 形式の連続ストリームです。各メッセージは event フィールドと data フィールドで構成されます。形状はイベントによって異なるため、ペイロードは防御的にパースしてください。

イベントタイプ

  • system: プロトコルレベルのシグナル。data 行は単一の大文字コードです。接続時には REALTIME_CONNECTING | <sseId>、その後に REALTIME_TIMEOUTREALTIME_DISCONNECTEDREALTIME_RECONNECTREALTIME_ERROR のいずれかが続きます。
  • logs: 単一のログ行で、その 先頭文字はストリーム ID バイト です: \x01(stdout)または \x02(stderr)。data.charCodeAt(0) を読み取り(1 = stdout、2 = stderr)、続いて data.slice(1) でテキストを取得します。この接頭バイトを持たない行は stdout です。
  • status: JSON 文字列としてのライブコンテナメトリクスで、おおよそ 1 秒あたり 1 フレームです。各(再)接続の 最初のフレーム は完全です: { cpu, cpuLimit, ram: [usedMB, limitMB], status, netIO: { i, o, new: { i, o } }, bIO: { i, o }, uptime }uptime は開始時刻をエポックミリ秒で表したもの、netIO.new は 1 秒あたりのバイト数)。それ以降のフレームはすべて簡略化されており{ cpu, ram, netIO, bIO } のみを含みます。各フレームを直前の完全なフレームにマージし、以前の cpuLimitstatusuptime を保持してください。このストリームが開いている間は、GET /v2/apps/{app_id}/status のポーリングよりもこちらを優先してください。リアルタイムストリームが開いているアプリでは、その status は最大で約 1 分古くなる場合があります。
  • error: CONTAINER_NOT_FOUND などのエラーコードを含みます。
以下の例では、\x01 / \x02 は生の 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