class Hodor::Oozie::Session
Attributes
filter[RW]
last_query[R]
len[RW]
mode[RW]
offset[RW]
verbose[RW]
Public Class Methods
new()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 21 def initialize @len = env.prefs[:default_list_length] || 30 @offset = 0 end
Public Instance Methods
cache_file()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 112 def cache_file if @cache_file.nil? if env[:display_job_query_mode] default_id = 'default' else default_id = `ps -p #{Process.pid} -o ppid=`.strip end index_id = ENV['HODOR_INDEX_ID'] || default_id @cache_file = "/tmp/hodor-#{index_id}.index" end @cache_file end
child_id(child_index)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 87 def child_id(child_index) children = index[:children] if children index_size = index[:children].length if child_index < index_size cid = index[:children][child_index] cid else raise "No child with index '#{child_index}' was found" end end end
current_id()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 100 def current_id index[:current_id] end
env()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 13 def env Hodor::Environment.instance end
get_job_state(job_id, *args)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 59 def get_job_state(job_id, *args) rest_call("/v1/job/#{job_id}?#{args.map { |v| v.nil? || v.size == 0 ? nil : v }.compact.join('&')}") end
index()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 80 def index if @index.nil? @index = load_index end @index end
job_relative(movement, request = nil)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 150 def job_relative(movement, request = nil) case movement when :root; nil when :up; parent_id when :down; child_id(request.to_i) when :none; current_id when :jump; request end end
load_index()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 125 def load_index index_read = {} if File.exists? cache_file File.open(cache_file, 'rb') {|f| index_read = ::Marshal.load(f) } @root_query ||= index_read[:root_query] if index_read.has_key?(:root_query) else index_read = { children: nil, current_id: nil, parent_id: nil, root_query: nil } end index_read || { children: nil, current_id: nil, parent_id: nil, root_query: nil } rescue => ex raise "Failed to load Hodor cache file. #{ex.message}" end
logger()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 17 def logger env.logger end
make_current(job)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 165 def make_current(job) refresh_index(job.children, job.id, job.parent_id) if job job end
parent_id()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 104 def parent_id index[:parent_id] end
pwj()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 144 def pwj { current_id: session.current_id, parent_id: session.parent_id, root_query: session.root_query } end
refresh_index(children, current_id, parent_id)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 63 def refresh_index(children, current_id, parent_id) if children children.each_with_index { |c, i| c.set_index(i) } child_ids = children.map { |c| c.skip_to || c.id } else child_ids = nil end index_overwrite = { children: child_ids, current_id: current_id, parent_id: parent_id, root_query: @root_query } File.open(cache_file, 'wb') {|f| f.write(::Marshal.dump(index_overwrite)) } children end
rest_call(api)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 26 def rest_call(api) num_retries = 0 begin url = "#{env[:oozie_url]}#{api}".gsub(/oozie\/\//,'oozie/') @last_query = url #puts "REST CALL: #{url}" uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.read_timeout = 10 http.open_timeout = 10 data = http.start() {|http| http.get(uri.request_uri).body } rescue Net::OpenTimeout => ex logger.error "Network connection timed out! Make sure you are connected to the Internet or VPN. Retrying..." if num_retries <= 4 num_retries += 1 retry else nil end end end
root_query()
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 108 def root_query @root_query || index[:root_query] end
search_jobs(*args)
click to toggle source
# File lib/hodor/api/oozie/session.rb, line 53 def search_jobs(*args) json = rest_call("/v2/jobs?#{args.map { |v| v.nil? || v.size == 0 ? nil : v }.compact.join('&')}") @root_query = @last_query json end