元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

aws-flow-ruby でheartbeartを使ってタスクの進捗率を把握したり死活監視できるようにしておく

実⾏行行時間の長いアクティビティのサポート

・定期的なハートビートの実⾏

というわけでその方法を調べたのでメモ。

default_task_heartbeat_timeout

Activityクラスでハートビートのタイムアウトを設定する。ハートビートの間隔がこれより長くなると、「Activity死んでね?」ってわかるわけですね。

  activity :looooong_activity do
    {
        # 省略
        default_task_heartbeat_timeout: 30,
    }
  end

record_activity_heartbeat

Activityからハートビートを送るには、extend AWS::Flow::Activitiesインスタンスメソッドに追加されるrecord_activity_heartbeatを使うようです。

Module: AWS::Flow::Activities::InstanceMethods — AWS Flow Framework for Ruby - API Reference (version 2.0)

  def looooong_activity(job)
    # 進捗に合わせて 全体のタスク数, 現在のタスク番号 を引数にブロックを呼び出すメソッドのつもり
    job.execute(job) do |total, current|
      record_activity_heartbeat format('%f', current.quo(total))  # 0.01 => 1%
    end
    true
  end

record_activity_heartbeatの引数は進捗を示す文字列ということです。