Class: Hodor::Oozie::Session
- Inherits:
-
Object
- Object
- Hodor::Oozie::Session
- Includes:
- Singleton
- Defined in:
- lib/hodor/api/oozie/session.rb
Instance Attribute Summary collapse
-
#filter ⇒ Object
Returns the value of attribute filter.
-
#last_query ⇒ Object
readonly
Returns the value of attribute last_query.
-
#len ⇒ Object
Returns the value of attribute len.
-
#mode ⇒ Object
Returns the value of attribute mode.
-
#offset ⇒ Object
Returns the value of attribute offset.
-
#verbose ⇒ Object
Returns the value of attribute verbose.
Instance Method Summary collapse
- #cache_file ⇒ Object
- #child_id(child_index) ⇒ Object
- #current_id ⇒ Object
- #env ⇒ Object
- #get_job_state(job_id, *args) ⇒ Object
- #index ⇒ Object
-
#initialize ⇒ Session
constructor
A new instance of Session.
- #job_relative(movement, request = nil) ⇒ Object
- #load_index ⇒ Object
- #logger ⇒ Object
- #make_current(job) ⇒ Object
- #parent_id ⇒ Object
- #pwj ⇒ Object
- #refresh_index(children, current_id, parent_id) ⇒ Object
- #rest_call(api) ⇒ Object
- #root_query ⇒ Object
- #search_jobs(*args) ⇒ Object
Constructor Details
#initialize ⇒ Session
21 22 23 24 |
# File 'lib/hodor/api/oozie/session.rb', line 21 def initialize @len = env.prefs[:default_list_length] || 30 @offset = 0 end |
Instance Attribute Details
#filter ⇒ Object
Returns the value of attribute filter.
10 11 12 |
# File 'lib/hodor/api/oozie/session.rb', line 10 def filter @filter end |
#last_query ⇒ Object (readonly)
Returns the value of attribute last_query.
11 12 13 |
# File 'lib/hodor/api/oozie/session.rb', line 11 def last_query @last_query end |
#len ⇒ Object
Returns the value of attribute len.
10 11 12 |
# File 'lib/hodor/api/oozie/session.rb', line 10 def len @len end |
#mode ⇒ Object
Returns the value of attribute mode.
10 11 12 |
# File 'lib/hodor/api/oozie/session.rb', line 10 def mode @mode end |
#offset ⇒ Object
Returns the value of attribute offset.
10 11 12 |
# File 'lib/hodor/api/oozie/session.rb', line 10 def offset @offset end |
#verbose ⇒ Object
Returns the value of attribute verbose.
10 11 12 |
# File 'lib/hodor/api/oozie/session.rb', line 10 def verbose @verbose end |
Instance Method Details
#cache_file ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 |
# 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) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 |
# 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 ⇒ Object
100 101 102 |
# File 'lib/hodor/api/oozie/session.rb', line 100 def current_id index[:current_id] end |
#env ⇒ Object
13 14 15 |
# File 'lib/hodor/api/oozie/session.rb', line 13 def env Hodor::Environment.instance end |
#get_job_state(job_id, *args) ⇒ Object
59 60 61 |
# 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 ⇒ Object
80 81 82 83 84 85 |
# 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) ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# 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 ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# 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 ⇒ Object
17 18 19 |
# File 'lib/hodor/api/oozie/session.rb', line 17 def logger env.logger end |
#make_current(job) ⇒ Object
165 166 167 168 |
# 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 ⇒ Object
104 105 106 |
# File 'lib/hodor/api/oozie/session.rb', line 104 def parent_id index[:parent_id] end |
#pwj ⇒ Object
144 145 146 147 148 |
# 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) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# 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) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# 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 ⇒ Object
108 109 110 |
# File 'lib/hodor/api/oozie/session.rb', line 108 def root_query @root_query || index[:root_query] end |
#search_jobs(*args) ⇒ Object
53 54 55 56 57 |
# 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 |