Treasure DataのWorkflowをRubyでキックする


require 'net/http'
require 'uri'
require 'json'
require 'time'

module Digdag
  class Client
    BASE_URL = 'https://api-workflow.treasuredata.com/api/'

    def initialize(key)
      @key = key
    end

    def get_sessions
      get('sessions')
    end

    def start_attempt(workflow_id, params = {})
      put('attempts', workflowId: workflow_id, params: params, sessionTime: Time.now.iso8601)
    end

    private

    def get(path)
      request(Net::HTTP::Get, path)
    end

    def put(path, params)
      request(Net::HTTP::Put, path, params)
    end

    def request(method_class, path, params = nil)
      uri = URI.parse(File.join(BASE_URL, path))
      https = Net::HTTP.new(uri.host, uri.port)
      https.use_ssl = true

      req = method_class.new(uri.request_uri)
      req['Content-Type'] = 'application/json'
      req['Authorization'] = "TD1 #{@key}"
      req.body = params.to_json if params

      res = https.request(req)
      JSON.parse(res.body)
    end
  end
end

td_apikey = 'xxx'
workflow_id = 12345
workflow_params = { entity_id: 10000 }

client = Digdag::Client.new(td_apikey)
p client.start_attempt(workflow_id, workflow_params)

キックしたいWorkflowのIDとパラメータは適当な値に変更してお使いください