right_chimp 1.0.9 → 1.1.0

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.
data/CHANGES CHANGED
@@ -117,3 +117,7 @@ Version 1.0.9
117
117
  -------------
118
118
  * Feature: Improved support for running chimp commands on any chimp daemon port
119
119
  * Feature: Added inverted hot dog stand theme
120
+
121
+ Version 1.1.0
122
+ -------------
123
+ * Feature: Add a job state called 'holding' where jobs can be held until the user queues them
@@ -4,7 +4,7 @@
4
4
 
5
5
  module Chimp
6
6
  class Chimp
7
- attr_accessor :concurrency, :delay, :retry_count, :progress, :prompt,
7
+ attr_accessor :concurrency, :delay, :retry_count, :hold, :progress, :prompt,
8
8
  :quiet, :use_chimpd, :chimpd_host, :chimpd_port, :tags, :array_names,
9
9
  :deployment_names, :script, :servers, :ssh, :report, :interactive, :action,
10
10
  :limit_start, :limit_end, :dry_run, :group, :job_id, :verify
@@ -34,6 +34,7 @@ module Chimp
34
34
  @concurrency = 1
35
35
  @delay = 0
36
36
  @retry_count = 0
37
+ @hold = false
37
38
  @timeout = 900
38
39
 
39
40
  @limit_start = 0
@@ -205,6 +206,7 @@ module Chimp
205
206
  [ '--concurrency', '-c', GetoptLong::REQUIRED_ARGUMENT ],
206
207
  [ '--delay', '-d', GetoptLong::REQUIRED_ARGUMENT ],
207
208
  [ '--retry', '-y', GetoptLong::REQUIRED_ARGUMENT ],
209
+ [ '--hold', '-7', GetoptLong::NO_ARGUMENT ],
208
210
  [ '--dry-run', '-n', GetoptLong::NO_ARGUMENT ],
209
211
  [ '--limit', '-l', GetoptLong::REQUIRED_ARGUMENT ],
210
212
  [ '--version', '-1', GetoptLong::NO_ARGUMENT ],
@@ -282,6 +284,8 @@ module Chimp
282
284
  @concurrency = arg.to_i
283
285
  when '--delay', '-d'
284
286
  @delay = arg.to_i
287
+ when '--hold', '-7'
288
+ @hold = true
285
289
  when '--retry', '-y'
286
290
  @retry_count = arg.to_i
287
291
  when '--limit', '-l'
@@ -478,7 +482,7 @@ module Chimp
478
482
  # each server for the script until we locate it.
479
483
  #
480
484
  if script and template == nil
481
- Log.debug "getting template URI..."
485
+ Log.debug "Getting template URI..."
482
486
 
483
487
  if not servers.empty?
484
488
  for i in (0..servers.size - 1)
@@ -588,7 +592,7 @@ module Chimp
588
592
  script = ::RightScript.new({ :href => script_URI, :right_script => script_data })
589
593
  end
590
594
  else
591
- Log.debug "looking for script \"#{script}\""
595
+ Log.debug "Looking for script \"#{script}\""
592
596
  script = st.executables.detect { |ex| ex.name =~ /#{script}/ }
593
597
  end
594
598
 
@@ -721,6 +725,8 @@ module Chimp
721
725
  if e != nil
722
726
  e.dry_run = @dry_run
723
727
  e.quiet = @@quiet
728
+ e.status = Executor::STATUS_HOLDING if @hold
729
+
724
730
  tasks.push(e)
725
731
  end
726
732
 
@@ -1164,6 +1170,7 @@ module Chimp
1164
1170
  puts "chimpd options:"
1165
1171
  puts " --chimpd=<port> send jobs to chimpd listening on <port> on localhost"
1166
1172
  puts " --chimpd-wait-until-done wait until all chimpd jobs are done"
1173
+ puts " --hold create a job in chimpd without executing until requested"
1167
1174
  puts
1168
1175
  puts "Misc Notes:"
1169
1176
  puts " * If you leave the name of a --script or --ssh command blank, chimp will prompt you"
@@ -473,6 +473,7 @@ module Chimp
473
473
 
474
474
  count_jobs_running = queue.get_jobs_by_status(:running).size
475
475
  count_jobs_queued = queue.get_jobs_by_status(:none).size
476
+ count_jobs_holding = queue.get_jobs_by_status(:holding).size
476
477
  count_jobs_failed = queue.get_jobs_by_status(:error).size
477
478
  count_jobs_done = queue.get_jobs_by_status(:done).size
478
479
 
@@ -11,6 +11,7 @@ module Chimp
11
11
  attr_reader :error, :results
12
12
 
13
13
  STATUS_NONE = :none
14
+ STATUS_HOLDING = :holding
14
15
  STATUS_RUNNING = :running
15
16
  STATUS_RETRYING = :retrying
16
17
  STATUS_ERROR = :error
@@ -93,6 +94,8 @@ module Chimp
93
94
  # This is called from the subclass with a code block to yield to
94
95
  #
95
96
  def run_with_retry(&block)
97
+ Log.debug "Running job '#{@job_id}' with status '#{@status}'"
98
+
96
99
  @status = STATUS_RUNNING
97
100
  @time_start = Time.now
98
101
  Log.info self.describe_work_start unless @quiet
@@ -48,6 +48,13 @@ module Chimp
48
48
  # Push a task into the queue
49
49
  #
50
50
  def push(g, w)
51
+ if w.exec.right_script && w.exec.right_script.kind_of?(Hash)
52
+ Log.debug "Pushing job '#{w.exec.right_script['name']}' into group '#{g}'"
53
+ if w.status == Executor::STATUS_HOLDING
54
+ Log.info "Holding job '#{w.exec.right_script['name']}'"
55
+ end
56
+ end
57
+
51
58
  raise "no group specified" unless g
52
59
  create_group(g) if not ChimpQueue[g]
53
60
  ChimpQueue[g].push(w)
@@ -70,6 +77,7 @@ module Chimp
70
77
  @group.values.each do |group|
71
78
  if group.ready?
72
79
  r = group.shift
80
+ Log.debug "Shifting job '#{r.job_id}' from group '#{group.group_id}'"
73
81
  break
74
82
  end
75
83
  end
@@ -50,9 +50,18 @@ module Chimp
50
50
  # Take something from the queue
51
51
  #
52
52
  def shift
53
- x = @queue.shift
53
+ updated_queue = []
54
+ found_job = nil
55
+ @queue.each do |job|
56
+ if found_job || job.status == Executor::STATUS_HOLDING
57
+ updated_queue.push(job)
58
+ else
59
+ found_job = job
60
+ end
61
+ end
62
+ @queue = updated_queue
54
63
  @time_start = Time.now if @time_start == nil
55
- return x
64
+ return found_job
56
65
  end
57
66
 
58
67
  #
@@ -191,6 +200,7 @@ module Chimp
191
200
  # Requeue a job by id
192
201
  #
193
202
  def requeue(id)
203
+ Log.debug "Requeuing job id #{id}"
194
204
  job = @jobs_by_id[id]
195
205
  job.status = Executor::STATUS_NONE
196
206
  job.owner = nil
@@ -35,6 +35,9 @@ SINCE 2012</p>
35
35
  <tr>
36
36
  <td>Jobs running:</td>
37
37
  <td><%= count_jobs_running %>
38
+ </tr><tr>
39
+ <td>Jobs holding:</td>
40
+ <td><%= count_jobs_holding %>
38
41
  </tr><tr>
39
42
  <td>Jobs waiting:</td>
40
43
  <td><%= count_jobs_queued %>
@@ -60,14 +63,16 @@ SINCE 2012</p>
60
63
  </div>
61
64
 
62
65
 
63
- <h3>Filter Results</h3>
66
+ <h3>Filter Results By Job Status</h3>
64
67
 
65
68
  <p>[
66
- <% if job_filter == 'running' or job_filter == nil %>running jobs <% else %><a href="/display/running">running jobs</a><% end %> |
67
- <% if job_filter == 'all' %>all jobs <% else %><a href="/display/all">all jobs</a> <% end %> |
68
- <% if job_filter == 'done' %>complete jobs <% else %><a href="/display/done">complete jobs</a><% end %> |
69
- <% if job_filter == 'error' %>failed jobs <% else %><a href="/display/error">failed jobs</a><% end %>
70
- ]
69
+ <% if job_filter == 'running' or job_filter == nil %>running<% else %><a href="/display/running">running</a><% end %> |
70
+ <% if job_filter == 'none' %>waiting<% else %><a href="/display/none">waiting</a> <% end %> |
71
+ <% if job_filter == 'holding' %>holding<% else %><a href="/display/holding">holding</a> <% end %> |
72
+ <% if job_filter == 'done' %>completed<% else %><a href="/display/done">completed</a><% end %> |
73
+ <% if job_filter == 'error' %>failed<% else %><a href="/display/error">failed</a><% end %>
74
+ |
75
+ <% if job_filter == 'all' %>all<% else %><a href="/display/all">all</a> <% end %> ]
71
76
  </p>
72
77
 
73
78
  <h3>Commands</h3>
@@ -147,12 +152,16 @@ jobs.each do |j|
147
152
  <% end %>
148
153
 
149
154
  <li> <span class="action">
150
- <% if status == Executor::STATUS_ERROR %>
155
+ <% case status
156
+ when Executor::STATUS_ERROR %>
151
157
  <a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/ack')">ack</a> |
152
158
  <a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/retry')">retry</a>
153
- <% elsif status == Executor::STATUS_RUNNING %>
159
+ <% when Executor::STATUS_RUNNING, Executor::STATUS_RETRYING, Executor::STATUS_NONE %>
160
+ <a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/cancel')">cancel</a>
161
+ <% when Executor::STATUS_HOLDING %>
162
+ <a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/retry')">queue</a>
154
163
  <a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/cancel')">cancel</a>
155
- <% else %>
164
+ <% when Executor::STATUS_DONE %>
156
165
  <a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/retry')">requeue</a>
157
166
  <% end %>
158
167
  </li>
@@ -1,3 +1,3 @@
1
1
  module Chimp
2
- VERSION = "1.0.9"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_chimp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.9
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-29 00:00:00.000000000 Z
12
+ date: 2013-11-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest_connection