CLI
ストリーミング契約
NDJSON エンベロープ、コマンド固有の出力、heartbeat、backpressure、シグナル。
複数の CLI コマンドがデーモンストリームを使いますが、長時間コマンドの出力形式は揃っていません。パーサーを書く前に、各コマンドの --help を確認してください。
デーモンストリームのエンベロープ
デーモンストリームを JSON で出すコマンドは、stdout に 1 行 1 エンベロープの NDJSON を出力します。シーケンス番号は 0 から始まります。
{"seq":0,"type":"data","payload":{"line":"hello"}}
{"seq":1,"type":"heartbeat"}
{"seq":2,"type":"dropped","payload":{"count":12}}
{"seq":3,"type":"end"}end と error はどちらも終端フレームで、1 つのストリームが両方を出すことはありません。error には code、message、任意の details が含まれます。
デーモンは通常 15 秒ごとに heartbeat を送り、30 秒間フレームがないと CLI はコード 4 で終了します。256 フレームのバッファでドロップが起きた場合、次の任意タイプのフレームの前に件数を送ります。
コマンド固有の例外
eventsは常に外側の NDJSON エンベロープを出力し、プレーンログ行モードはありません。- Trivy
--jsonは独自の progress/result ペイロードを出力し、外側のStreamFrameEnvelopeを使いません。 - 現在のイメージ進捗表示は stdout へ出力します。
- プレーン出力はコマンドごとに異なり、進捗が常に stderr とは限りません。
キャンセルと終了コード
SIGINT または SIGTERM でキャンセルを要求して終了しますが、すべての処理中フレームを排出する保証はありません。
| コード | 意味 |
|---|---|
0 | 正常終了 |
1 | 検証、RPC、ストリームエラー |
2 | CLI 引数解析エラー |
3 | デーモン検出または handshake 失敗 |
4 | Heartbeat timeout |
130 | SIGINT |
143 | SIGTERM |
dockerman schema でデーモン RPC のメタデータを確認できます。Trivy 固有の出力は、外側のデーモンエンベロープではありません。