トップページ

checker

Checker と自動化の活用

衝突検出と NMOS 差分チェックを自動化し、24時間体制で運用を監視するための設定手順と API を解説します。

UI での操作手順

Checker 機能を使って、アドレス衝突や NMOS デバイスとの差分を自動検出できます。

  1. 手動実行で現状を確認
    Checker タブで「Run Now (Collision)」または「Run Now (NMOS)」をクリックし、現在の状態を確認します。
  2. 自動化を有効にする
    「Enable Automation」ボタンを押し、実行間隔を設定します。Interval(例: 10分ごと)または Cron(例: 0 * * * * で毎時0分)を選択できます。
  3. 結果を確認する
    検出結果は UI の Checker タブに表示され、もしくは GET /api/checker/latest を呼び出して取得できます。
  4. 外部システムと連携
    REST API だけで運用したい場合は MQTT_ENABLED=false に設定し、外部システムから GET /api/checker/latest を定期的にポーリングします。

実行履歴は scheduled_jobs テーブルの last_run_* カラム(Automationタブでも参照可能)および Audit ログに記録され、誰がいつ設定を変更したか追跡できます。

実践シナリオ: 衝突検出の自動化

アドレス衝突を自動で検出し、Slack に通知するまでの流れを実装します。

ステップ1: 手動で衝突チェック

まず、現在の衝突状況を確認します。

curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://localhost:8443/api/checker/collisions

→ 重複している Source/Group/Port の組み合わせが JSON で返ってきます。

ステップ2: 自動実行を設定

10分ごとに自動実行するように設定します。

curl -X PUT https://localhost:8443/api/automation/jobs/collision-checker \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "schedule_type": "interval",
    "interval_minutes": 10,
    "enabled": true
  }'

→ ジョブが有効化され、10分ごとに衝突チェックが実行されます。

ステップ3: REST で結果を取得し通知

直近の衝突結果を /api/checker/latest から取得し、Slack へ通知する例です。

import axios from "axios";

async function notifyCollision() {
  const resp = await fetch("https://localhost:8443/api/checker/latest?kind=collisions", {
    headers: { Authorization: `Bearer ${process.env.MMAM_TOKEN}` }
  });
  if (!resp.ok) throw new Error("API error");
  const data = await resp.json();
  if (data.status !== "success" || !data.result) return;

  const collisions = data.result.results.flatMap(group => group.entries);
  if (!collisions.length) return;

  await axios.post(process.env.SLACK_WEBHOOK_URL, {
    text: `⚠️ アドレス衝突を検出しました`,
    attachments: collisions.map(entry => ({
      color: "danger",
      fields: [{
        title: entry.value,
        value: `Flow IDs: ${entry.flows.map(f => f.flow_id).join(", ")}`,
        short: false
      }]
    }))
  });
}

notifyCollision().catch(console.error);

Checker API

  • GET /api/checker/collisions — 重複 S/G/Port をリスト取得
  • GET /api/checker/nmos — NMOS 差分を取得
  • GET /api/checker/latest?kind=collisions — 直近実行結果の要約

Automation API

  • GET /api/automation/jobs — 全ジョブの一覧取得
  • PUT /api/automation/jobs/{id} — スケジュール設定を更新
  • POST /api/automation/jobs/{id}/enable — ジョブの有効化/無効化
  • GET /api/automation/summary — ダッシュボード用のサマリ取得