Fessのスケジューラ起動APIでジョブログIDを返すようにする

Fessのスケジューラには、REST APIからジョブを起動する機能があります。しかし、これまでのAPIでは起動後にジョブの実行状況を追跡するための情報が返されていませんでした。そこで、スケジューラ起動API(PUT /api/admin/scheduler/{id}/start)のレスポンスにジョブログIDを含めるようにしました。

背景

Fessの管理APIを使ってスケジュールジョブを起動した際、そのジョブの実行ログを確認するには、ジョブログの一覧から該当するものを探す必要がありました。ジョブの起動時にログIDがわかれば、APIを通じてジョブの実行状況を直接追跡できるようになります。

変更内容

APIレスポンスの変更

PUT /api/admin/scheduler/{id}/start のレスポンスに jobLogId フィールドを追加しました。

ジョブログが有効な場合:

{
  "response": {
    "version": "14.x",
    "status": 0,
    "jobLogId": "a1b2c3d4e5f6..."
  }
}

ジョブログが無効な場合:

{
  "response": {
    "version": "14.x",
    "status": 0,
    "jobLogId": null
  }
}

仕組み

ジョブの起動リクエストを受けると、以下の流れで処理されます。

  1. ジョブログが有効な場合、32文字の16進数UUID(ハイフンなし)を事前生成する
  2. 生成したIDをパラメータとしてジョブの起動時に渡す
  3. ジョブ実行時に、渡されたIDをジョブログのドキュメントIDとして設定する
  4. APIのレスポンスにこのIDを含めて返す

launchNow() は非同期で実行されるため、APIのレスポンスが返った時点ではジョブログがまだ存在しない場合があります。IDは事前に生成されているので、ジョブが実行された際に確実にそのIDが使用されます。

主な変更ファイル

  • Constants.javaJOB_LOG_ID 定数の追加
  • ScheduledJob.java – パラメータ付きの start(Map) メソッドを追加
  • ScriptExecutorJob.java – ランタイムパラメータからジョブログIDを取得して設定
  • ApiResult.javaApiStartJobResponse クラスを追加
  • ApiAdminSchedulerAction.java – UUID生成とレスポンスへの設定

後方互換性

既存の引数なしの start() メソッドは変更されていません。管理画面やウィザードからの起動は従来通り動作します。APIレスポンスに jobLogId フィールドが追加されるのみで、破壊的変更はありません。

まとめ

この変更により、APIからジョブを起動した際にジョブログIDを取得でき、プログラムからジョブの実行状況を追跡しやすくなりました。詳細は PR #3103 を参照してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です