right_chimp 2.1.14 → 2.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cac365e612655681144bf8e6364069c1738cc2d5
4
- data.tar.gz: 534d04f219972cf4fe2158ec61cda670bef698b0
3
+ metadata.gz: f28fe644c07a27aea21a4cd11a7b21223bda8159
4
+ data.tar.gz: 8e1c12689609f5424d40b3835d6f0c11d0f081dc
5
5
  SHA512:
6
- metadata.gz: df533cc2e7da178112555fcbccdf19d51a6e51333dd712909a0f3930cb8930cb815712f28895a492a3b83f4cbf8de0b6dac384643f8d58c2561515ed6c22bf3a
7
- data.tar.gz: d77763bc9930a973c8cc5985b36bf048e284a48472040ccb72374618300b984ec729ba96f6d1fbc7c91071b6583c2138385184591ee9d0bd0b355a138f0f76cb
6
+ metadata.gz: a3e7a74d5476dcfb2baefec3af913f834203118816e1ebfdb67fc736208e0bd5d0ccc365bed2782d2a9a86ebfa4c8367130119790efed28f4cd0778606313c50
7
+ data.tar.gz: 61e8b9ea7fd1363c3207890e8ca99f0b9be7189bd370ca0fc7f7e679d22ec3c91ece3c8f9f26e2737ac88095e5108dd5d3722cac8add253fbb6b1f77cdf156c0
data/CHANGES CHANGED
@@ -156,3 +156,7 @@ Version 2.1.13
156
156
  * Feature: Changed error reporting format
157
157
  * Feature: Web UI now shows job_uuid
158
158
  * Feature: One can now associate a "note" to a job by using --job-notes="foo"
159
+
160
+ Version 2.1.15
161
+ ---------------
162
+ * Feature: We now are able to query a subset of job_uuids and total stats format.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- right_chimp (2.1.12)
4
+ right_chimp (2.1.15)
5
5
  highline (~> 1.7.2)
6
6
  nokogiri (~> 1.6.7.1)
7
7
  progressbar (~> 0.11.0)
@@ -16,7 +16,7 @@ GEM
16
16
  coderay (1.1.0)
17
17
  debug_inspector (0.0.2)
18
18
  diff-lcs (1.1.3)
19
- domain_name (0.5.20160128)
19
+ domain_name (0.5.20160310)
20
20
  unf (>= 0.0.5, < 1.0.0)
21
21
  highline (1.7.8)
22
22
  http-cookie (1.0.2)
@@ -392,6 +392,7 @@ module Chimp
392
392
 
393
393
  def do_POST(req, resp)
394
394
  id = -1
395
+ # we don't know the job_id because we cant guess how many tasks one call creates.
395
396
  job_id = self.get_id(req)
396
397
  job_uuid= self.get_job_uuid(req)
397
398
  verb = self.get_verb(req)
@@ -405,12 +406,6 @@ module Chimp
405
406
  #
406
407
  # Ask chimpd to process a Chimp object directly
407
408
  #
408
- #if verb == 'process' or verb == 'add'
409
- # payload.interactive = false
410
- # tasks = payload.process
411
- # tasks.each do |task|
412
- # q.push(group, task)
413
- # end
414
409
  if verb == 'process' or verb == 'add'
415
410
  ChimpDaemon.instance.chimp_queue.push payload
416
411
  ChimpDaemon.instance.semaphore.synchronize do
@@ -423,10 +418,9 @@ module Chimp
423
418
  q.get_job(job_id).status = payload.status
424
419
  end
425
420
 
426
-
427
421
  resp.body = {
428
422
  'job_uuid' => job_uuid ,
429
- 'id' => id
423
+ 'id' => job_id
430
424
  }.to_yaml
431
425
 
432
426
  raise WEBrick::HTTPStatus::OK
@@ -582,9 +576,10 @@ module Chimp
582
576
  job_types.each do |type|
583
577
  jobs[type] = queue.get_jobs_by_status(type).map do |job|
584
578
  { :id => job.job_id,
585
- :server => job.server.params["name"],
586
- :name => job.exec.params["right_script"]["name"],
587
- :error_message => job.error.nil? ? "" : job.error.message
579
+ :uuid => job.job_uuid,
580
+ :server => job.server.name,
581
+ :script => job.info,
582
+ :audit_entry_url => job.audit_entry_url
588
583
  }
589
584
  end
590
585
  end
@@ -594,35 +589,58 @@ module Chimp
594
589
  raise WEBrick::HTTPStatus::OK
595
590
  end
596
591
 
592
+ if req.request_uri.path =~ /jobs\.json\/id\/\d+$/
593
+
594
+ job_id = File.basename(req.request_uri.path)
595
+ queue = ChimpQueue.instance
596
+
597
+ res = queue.get_job(job_id)
598
+
599
+ case res
600
+ when ExecRightScript
601
+
602
+ result = {}
603
+ result[:id] = job_id
604
+ result[:uuid] = res.job_uuid
605
+ result[:status] = res.status
606
+ result[:server] = res.server.name
607
+ result[:script] = res.info
608
+ result[:audit_entry_url] = res.audit_entry_url
609
+
610
+ resp.body = result.to_json
611
+ end
612
+
613
+ raise WEBrick::HTTPStatus::OK
614
+
615
+ end
597
616
  #
598
- # Attempt to return just 1 job data
617
+ # Attempt to return just 1 job_UUID data
599
618
  #
600
- if req.request_uri.path =~ /jobs\.json\/id\/*\w{6}$/
619
+ if req.request_uri.path =~ /jobs\.json\/uuid\/*\w{6}$/
601
620
 
602
- job_uid = File.basename(req.request_uri.path)
603
- #instance the queue
621
+ uuid = File.basename(req.request_uri.path)
622
+ # instance the queue
604
623
  queue = ChimpQueue.instance
605
624
 
606
- my_hash = {}
625
+ res = queue.get_jobs_by_uuid(uuid)
626
+
627
+ jobs = {}
607
628
 
608
- #! Multiple servers WILL match for the same job_uuid
609
- queue.group.each { |group|
610
- #per each group, locate all jobs
611
- group[1].get_jobs.each {|job|
612
- my_hash[job.job_uuid] = { job.job_id => { "state" => job.results,
613
- "server" => job.server.params["name"],
614
- "audit_entry" => job.audit_entry_data,
615
- }
616
- }
617
- }
618
- }
629
+ res.each_with_index do |r, i|
630
+ jobs[i] = { id: r.job_id,
631
+ uuid: r.job_uuid,
632
+ status: r.status,
633
+ server: r.server.name,
634
+ script: r.info,
635
+ audit_entry_url: r.audit_entry_url
636
+ }
637
+ end
619
638
 
620
- resp.body = my_hash[job_uid].to_json
639
+ resp.body = jobs.to_json
621
640
 
622
641
  raise WEBrick::HTTPStatus::OK
623
642
  end
624
643
 
625
-
626
644
  #
627
645
  # Check for static CSS files and serve them
628
646
  #
@@ -663,6 +681,5 @@ module Chimp
663
681
  end
664
682
  end
665
683
  end # DisplayServlet
666
-
667
684
  end # ChimpDaemon
668
685
  end
@@ -19,6 +19,7 @@ module Chimp
19
19
 
20
20
  if response.code > 199 and response.code < 300
21
21
  Log.debug "Response code was #{response.code}"
22
+
22
23
  id = YAML::load(response.body)['id']
23
24
  #ID changes upon execution, not upon submission.
24
25
  job_uuid = YAML::load(response.body)['job_uuid']
@@ -4,35 +4,36 @@
4
4
  module Chimp
5
5
  class ExecRightScript < Executor
6
6
 
7
- attr_accessor :audit_entry_data
7
+ attr_accessor :audit_entry_data, :audit_entry_url
8
8
 
9
9
  def run
10
- options = {:ignore_lock => true}.merge(@inputs)
10
+ options = { ignore_lock: true }.merge(@inputs)
11
11
 
12
12
  if @timeout < 300
13
- Log.error "timeout was less than 5 minutes! resetting to 5 minutes"
13
+ Log.error 'timeout was less than 5 minutes! resetting to 5 minutes'
14
14
  @timeout = 300
15
15
  end
16
16
 
17
17
  run_with_retry do
18
18
  task=Task.new
19
19
  task.tasker = @server.run_executable(@exec, options)
20
- task.wait_for_state("completed", @timeout)
20
+ @audit_entry_url = task.friendly_url
21
+ task.wait_for_state('completed', @timeout)
21
22
  @results = task.state
22
23
  @audit_entry_data = task.details
23
24
  end
24
25
  end
25
26
 
26
27
  def describe_work
27
- return "[#{@job_uuid}] ExecRightScript job_id=#{@job_id} script=\"#{@exec.params['right_script']['name']}\" server=\"#{@server.nickname}\""
28
+ "[#{@job_uuid}] ExecRightScript job_id=#{@job_id} script=\"#{@exec.params['right_script']['name']}\" server=\"#{@server.nickname}\""
28
29
  end
29
30
 
30
31
  def info
31
- return @exec.params['right_script']['name']
32
+ @exec.params['right_script']['name']
32
33
  end
33
34
 
34
35
  def target
35
- return @server.nickname
36
+ @server.nickname
36
37
  end
37
38
 
38
39
  end
@@ -127,7 +127,7 @@ module Chimp
127
127
  @status = STATUS_DONE
128
128
  @group.job_completed
129
129
  else
130
- Log.warn "[#{@job_uuid}] Ownership of job_id #{job_id} lost. User cancelled operation?"
130
+ Log.warn "[#{@job_uuid}][#{@job_id}] Ownership of job_id #{job_id} lost. User cancelled operation?"
131
131
  end
132
132
 
133
133
  rescue SystemExit, Interrupt => ex
@@ -141,7 +141,7 @@ module Chimp
141
141
 
142
142
  if @retry_count > 0
143
143
  @status = STATUS_RETRYING
144
- Log.error "[#{@job_uuid}] Error executing on \"#{name}\". Retrying in #{@retry_sleep} seconds..."
144
+ Log.error "[#{@job_uuid}][#{@job_id}] Error executing on \"#{name}\". Retrying in #{@retry_sleep} seconds..."
145
145
  @retry_count -= 1
146
146
  sleep @retry_sleep
147
147
  retry
@@ -149,7 +149,7 @@ module Chimp
149
149
 
150
150
  @status = STATUS_ERROR
151
151
  @error = ex
152
- Log.error "[#{@job_uuid}] Error executing on \"#{name}\": #{ex}"
152
+ Log.error "[#{@job_uuid}][#{@job_id}] Error executing on \"#{name}\": #{ex}"
153
153
 
154
154
  ensure
155
155
  @time_end = Time.now
@@ -157,18 +157,11 @@ module Chimp
157
157
  end
158
158
 
159
159
  rescue RuntimeError => ex
160
- if @server.params["ip_address"]
161
- err = ex.message + "IP: #{@server.params["ip_address"]}\n"
162
- end
163
- if @group.group_id
164
- err += " Group: #{@group.group_id}\n"
165
- end
166
- if @job_notes
167
- err += " Notes: #{@job_notes}\n"
168
- end
169
- Log.error "[#{@job_uuid}] Caught RuntimeError: #{err} Aborting job.\n"
170
- #Log.error ex.inspect
171
- #Log.error ex.backtrace
160
+ err = ex.message + "IP: #{@server.params["ip_address"]}\n" if @server.params['ip_address']
161
+ err += " Group: #{@group.group_id}\n" if @group.group_id
162
+ err += " Notes: #{@job_notes}\n" if @job_notes
163
+ err += " Notes: #{@job_notes}\n" if @job_notes
164
+ Log.error "[#{@job_uuid}][#{@job_id}] Caught RuntimeError: #{err} Job failed.\n"
172
165
  @status = STATUS_ERROR
173
166
  @error = ex
174
167
  end
@@ -162,7 +162,7 @@ module Chimp
162
162
  jobs = self.get_jobs
163
163
 
164
164
  jobs.each do |j|
165
- return j if j.job_id == id
165
+ return j if j.job_id == id.to_i
166
166
  end
167
167
  end
168
168
 
@@ -172,9 +172,19 @@ module Chimp
172
172
  group.get_jobs.each { |job| r << job }
173
173
  end
174
174
 
175
- return r
175
+ r
176
176
  end
177
177
 
178
+ def get_jobs_by_uuid(uuid)
179
+ r = []
180
+ jobs = self.get_jobs
181
+
182
+ jobs.each do |j|
183
+ r << j if j.job_uuid == uuid
184
+ end
185
+
186
+ r
187
+ end
178
188
  #############################################################
179
189
  protected
180
190
 
@@ -14,10 +14,10 @@ module Chimp
14
14
  while(timeout > 0)
15
15
  state=self.tasker.show.summary
16
16
  return true if self.state.match(desired_state)
17
- friendly_url = Connection.audit_url+"/audit_entries/"
17
+ friendly_url = Connection.audit_url + '/audit_entries/'
18
18
  friendly_url += self.href.split(/\//).last
19
- friendly_url = friendly_url.gsub("ae-","")
20
- raise "FATAL error, #{self.tasker.show.summary}\n\n Audit: #{friendly_url}'\n " if self.state.match("failed")
19
+ friendly_url = friendly_url.gsub('ae-', '')
20
+ raise "FATAL error, #{tasker.show.summary}\n\n Audit: #{friendly_url}'\n " if self.state.match("failed")
21
21
  sleep 30
22
22
  timeout -= 30
23
23
  end
@@ -25,7 +25,7 @@ module Chimp
25
25
  end
26
26
 
27
27
  def wait_for_completed(timeout=900)
28
- wait_for_state("completed", timeout)
28
+ wait_for_state('completed', timeout)
29
29
  end
30
30
 
31
31
  def state
@@ -36,6 +36,13 @@ module Chimp
36
36
  self.tasker.href
37
37
  end
38
38
 
39
+ def friendly_url
40
+ friendly_url = Connection.audit_url+"/audit_entries/"
41
+ friendly_url += self.href.split(/\//).last
42
+ friendly_url = friendly_url.gsub("ae-","")
43
+ friendly_url
44
+ end
45
+
39
46
  def details
40
47
  self.tasker.show(:view => "extended").detail
41
48
  end
@@ -1,3 +1,3 @@
1
1
  module Chimp
2
- VERSION = "2.1.14"
2
+ VERSION = "2.1.15"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_chimp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.14
4
+ version: 2.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - RightScale Operations
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-16 00:00:00.000000000 Z
11
+ date: 2016-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake