メインコンテンツまでスキップ

16. Flow サービス

client.flow() からアクセスします。PlantPulse のビジュアル自動化画面である フロー(Flow)とその中のノード(Flow Node)を照会します。V5 で新しく追加されたサービスです。

参考: V5 の Flow サービスは読み取り専用です。Flow の作成・変更・実行は UI または Flow エンジン専用 API で行ってください。Flow エンジンの動作原理の詳細は、フローエンジン文書を参照してください。

16.1 メソッド一覧​

メソッド戻り値タイプHTTPエンドポイント
get(flow_id)FlowResponseV5 または nullGET/api/v5/flow/{id}
list()List<FlowResponseV5> (統計含む)GET/api/v5/flow
listNodes(flow_id)List<FlowNodeResponseV5>GET/api/v5/flow/{id}/node

16.2 FlowResponseV5 DTO​

フィールドタイプ説明
flow_idStringFlow ID (PK)
flow_nameStringFlow 名
descriptionString説明
enabledboolean有効かどうか
is_rootbooleanルート Flow かどうか
debug_modebooleanデバッグモード
insert_user / insert_dateString登録者/時刻
update_user / update_dateString更新者/時刻
node_countintノード数 (統計)
trigger_countintトリガー数 (統計)
error_countlong累積エラー数 (統計)

16.3 FlowNodeResponseV5 DTO​

フィールドタイプ説明
flow_node_idStringノード ID (PK)
flow_idString所属 Flow
typeStringノードタイプ (trigger、function、action など)
nameStringノード名
configuration_jsonStringノード設定 JSON 文字列
position_x / position_yintキャンバス位置
debug_modebooleanノード別デバッグ

16.4 使用例​

Flow リスト (統計含む)​

import java.util.List;
import plantpulse.api.v5.dto.response.FlowResponseV5;

List<FlowResponseV5> flows = client.flow().list();
for (FlowResponseV5 f : flows) {
System.out.printf("[%s] %s — 노드 %d개, 트리거 %d개, 에러 %d건%n",
f.isEnabled() ? "ON" : "OFF",
f.getFlow_name(),
f.getNode_count(),
f.getTrigger_count(),
f.getError_count());
}

出力例:

[ON] 생산 카운트 집계 — 노드 8개, 트리거 1개, 에러 0건
[ON] 알람 알림 라우팅 — 노드 12개, 트리거 3개, 에러 2건
[OFF] (실험) ML 예측 — 노드 5개, 트리거 0개, 에러 0건

単一 Flow 照会​

FlowResponseV5 flow = client.flow().get("flow_001");
if (flow != null && !flow.isEnabled()) {
System.err.println("Flow가 비활성 상태: " + flow.getFlow_name());
}

Flow のノードリスト​

import plantpulse.api.v5.dto.response.FlowNodeResponseV5;

String flowId = "flow_001";
List<FlowNodeResponseV5> nodes = client.flow().listNodes(flowId);
for (FlowNodeResponseV5 n : nodes) {
System.out.printf(" [%s] %s (%s)%n",
n.getType(), n.getName(), n.getFlow_node_id());
}

エラーが発生した Flow の特定​

import java.util.stream.Collectors;

List<FlowResponseV5> errored = client.flow().list().stream()
.filter(f -> f.getError_count() > 0)
.collect(Collectors.toList());

System.out.println("에러 발생 Flow: " + errored.size() + "개");
for (FlowResponseV5 f : errored) {
System.out.printf(" %s: %d건%n", f.getFlow_name(), f.getError_count());
}

16.5 活用シナリオ​

シナリオ — Flow ヘルスダッシュボード​

while (running) {
List<FlowResponseV5> all = client.flow().list();

long total = all.size();
long enabled = all.stream().filter(FlowResponseV5::isEnabled).count();
long errored = all.stream().filter(f -> f.getError_count() > 0).count();
long triggers = all.stream().mapToInt(FlowResponseV5::getTrigger_count).sum();

updateUI(total, enabled, errored, triggers);
Thread.sleep(5_000);
}

次のステップ​

  • フローエンジンガイド — Flow 動作原理 (別文書)
  • 統合例 — Flow と API 連携例