class Hodor::Oozie::Query

Attributes

filter[R]
jobs[R]
json[R]
request[R]

Public Class Methods

default_columns() click to toggle source
# File lib/hodor/api/oozie/query.rb, line 14
def default_columns
  [:index, :name, :status, :id, :start_time, :time_unit, :external_id]
end
new(filter = {} ) click to toggle source
# File lib/hodor/api/oozie/query.rb, line 19
def initialize(filter = {} )
  @filter = filter
  @jobtype = filter[:jobtype] || "coord"
  @json = run_query(filter)
  @request = session.last_query
end
suppress_properties() click to toggle source
# File lib/hodor/api/oozie/query.rb, line 11
def suppress_properties
  true
end

Public Instance Methods

expand() click to toggle source
# File lib/hodor/api/oozie/query.rb, line 76
def expand
  # expand immediate children
  if @json.has_key?("workflows")
    all_jobs = @json["workflows"].map do |item|
      Hodor::Oozie::Workflow.new(item)
    end.compact
    if @running_first
      more_json = run_query( { status: [:killed, :succeeded, :failed, :suspended] } )
      if more_json.has_key?("workflows")
        all_jobs += more_json["workflows"].map do |item|
          Hodor::Oozie::Workflow.new(item)
        end.compact
      end
    end
  elsif @json.has_key?("coordinatorjobs")
    all_jobs = @json["coordinatorjobs"].map do |item|
      Hodor::Oozie::Coordinator.new(item)
    end.compact
    if @running_first
      more_json = run_query( { status: [:succeeded, :killed, :failed, :suspended] } )
      if more_json.has_key?("coordinatorjobs")
        all_jobs += more_json["coordinatorjobs"].map do |item|
          Hodor::Oozie::Coordinator.new(item)
        end.compact
      end
    end
  end
  if @filter[:match]
    pattern = @filter[:match]
    @jobs = all_jobs.select { | job| 
      job.name.include?(pattern)
    }
  else
    @jobs = all_jobs
  end
  @jobs
end
run_query(filter) click to toggle source
# File lib/hodor/api/oozie/query.rb, line 26
def run_query(filter)
  params = []
  if filter.has_key?(:user)
    params << "user%3D#{filter[:user]}"
  end

  if filter.has_key?(:status)
    stats = filter[:status]
    params += stats.map { |val|
      case val
      when :running_first;
        @running_first = true
        "status%3DRUNNING"
      when :running; "status%3DRUNNING"
      when :killed; "status%3DKILLED"
      when :suspended; "status%3DSUSPENDED"
      when :timedout; "status%3DTIMEDOUT"
      when :failed; "status%3DFAILED"
      when :succeeded; "status%3DSUCCEEDED"
      end
    }
  end

  if params.size > 0
    filter_exp = "filter=#{params.join(';')}"
  else
    filter_exp = ""
  end

  pagination = []
  pagination << "offset=#{session.offset}"
  pagination << "len=#{session.len.to_i+1}"
  pagination = pagination.join('&')

  response = session.search_jobs("jobtype=#{@jobtype}", filter_exp, pagination)
  @json = JSON.parse(response)
end
session() click to toggle source
# File lib/hodor/api/oozie/query.rb, line 6
def session
  Hodor::Oozie::Session.instance
end
title() click to toggle source
# File lib/hodor/api/oozie/query.rb, line 64
def title
  if @jobtype.start_with?('coord')
    "List of Coordinators"
  elsif @jobtype.start_with?('w')
    "List of Workflows"
  elsif @jobtype.start_with?('b')
    "List of Bundles"
  else
    "List of Matching Jobs"
  end
end