lib/td/command/sched.rb in td-0.10.13 vs lib/td/command/sched.rb in td-0.10.15
- old
+ new
@@ -9,29 +9,37 @@
scheds = client.schedules
rows = []
scheds.each {|sched|
- rows << {:Name => sched.name, :Cron => sched.cron, :Result => sched.rset_name, :Query => sched.query}
+ rows << {:Name => sched.name, :Cron => sched.cron, :Timezone => sched.timezone, :Delay => sched.delay, :Result => sched.rset_name, :Database => sched.database, :Query => sched.query, :"Next schedule" => sched.next_time ? sched.next_time.localtime : nil }
}
rows = rows.sort_by {|map|
map[:Name]
}
- puts cmd_render_table(rows, :fields => [:Name, :Cron, :Result, :Query])
+ puts cmd_render_table(rows, :fields => [:Name, :Cron, :Timezone, :"Next schedule", :Delay, :Result, :Database, :Query], :max_width=>500)
end
def sched_create(op)
db_name = nil
result = nil
+ timezone = nil
+ delay = 0
op.on('-d', '--database DB_NAME', 'use the database (required)') {|s|
db_name = s
}
op.on('-r', '--result RESULT_TABLE', 'write result to the result table (use result:create command)') {|s|
result = s
}
+ op.on('-t', '--timezone TZ', 'name of the timezone (like Asia/Tokyo)') {|s|
+ timezone = s
+ }
+ op.on('-D', '--delay SECONDS', 'delay time of the schedule', Integer) {|i|
+ delay = i
+ }
name, cron, sql = op.cmd_parse
unless db_name
$stderr.puts "-d, --database DB_NAME option is required."
@@ -42,18 +50,18 @@
# local existance check
get_database(client, db_name)
begin
- first_time = client.create_schedule(name, :cron=>cron, :query=>sql, :database=>db_name, :result=>result)
+ first_time = client.create_schedule(name, :cron=>cron, :query=>sql, :database=>db_name, :result=>result, :timezone=>timezone, :delay=>delay)
rescue AlreadyExistsError
cmd_debug_error $!
$stderr.puts "Schedule '#{name}' already exists."
exit 1
end
- $stderr.puts "Schedule '#{name}' is created. It starts at #{first_time}."
+ $stderr.puts "Schedule '#{name}' is created. It starts at #{first_time.localtime}."
end
def sched_delete(op)
name = op.cmd_parse
@@ -69,10 +77,66 @@
end
$stderr.puts "Schedule '#{name}' is deleted."
end
+ def sched_update(op)
+ cron = nil
+ sql = nil
+ db_name = nil
+ result = nil
+ timezone = nil
+ delay = nil
+
+ op.on('-s', '--schedule CRON', 'change the schedule') {|s|
+ cron = s
+ }
+ op.on('-q', '--query SQL', 'change the query') {|s|
+ sql = s
+ }
+ op.on('-d', '--database DB_NAME', 'change the database') {|s|
+ db_name = s
+ }
+ op.on('-r', '--result RESULT_TABLE', 'change the result table') {|s|
+ result = s
+ }
+ op.on('-t', '--timezone TZ', 'change the name of the timezone (like Asia/Tokyo)') {|s|
+ timezone = s
+ }
+ op.on('-D', '--delay SECONDS', 'change the delay time of the schedule', Integer) {|i|
+ delay = i
+ }
+
+ name = op.cmd_parse
+
+ params = {}
+ params['cron'] = cron if cron
+ params['query'] = sql if sql
+ params['database'] = db_name if db_name
+ params['result'] = result if result
+ params['timezone'] = timezone if timezone
+ params['delay'] = delay.to_s if delay
+
+ if params.empty?
+ $stderr.puts op.to_s
+ exit 1
+ end
+
+ client = get_client
+
+ begin
+ client.update_schedule(name, params)
+ rescue NotFoundError
+ cmd_debug_error $!
+ $stderr.puts "Schedule '#{name}' does not exist."
+ $stderr.puts "Use '#{$prog} sched:list' to show list of the schedules."
+ exit 1
+ end
+
+ $stderr.puts "Schedule '#{name}' is updated."
+ end
+
def sched_history(op)
page = 0
skip = 0
op.on('-p', '--page PAGE', 'skip N pages', Integer) {|i|
@@ -99,15 +163,62 @@
$stderr.puts "Schedule '#{name}' does not exist."
$stderr.puts "Use '#{$prog} sched:list' to show list of the schedules."
exit 1
end
+ scheds = client.schedules
+ if s = scheds.find {|s| s.name == name }
+ puts "Name : #{s.name}"
+ puts "Cron : #{s.cron}"
+ puts "Timezone : #{s.timezone}"
+ puts "Delay : #{s.delay} sec"
+ puts "Next : #{s.next_time}"
+ puts "Result : #{s.rset_name}"
+ puts "Database : #{s.database}"
+ puts "Query : #{s.query}"
+ end
+
rows = []
history.each {|j|
rows << {:Time => j.scheduled_at.localtime, :JobID => j.job_id, :Status => j.status, :Result=>j.rset_name}
}
puts cmd_render_table(rows, :fields => [:JobID, :Time, :Status, :Result])
+ end
+
+ def sched_run(op)
+ num = 1
+
+ op.on('-n', '--num N', 'number of jobs to run', Integer) {|i|
+ num = i
+ }
+
+ name, time = op.cmd_parse
+
+ if time.to_i.to_s == time.to_s
+ # UNIX time
+ t = Time.at(time.to_i)
+ else
+ require 'time'
+ begin
+ t = Time.parse(time)
+ rescue
+ $stderr.puts "invalid time format: #{time}"
+ exit 1
+ end
+ end
+
+ client = get_client
+
+ begin
+ client.run_schedule(name, t.to_i, num)
+ rescue NotFoundError
+ cmd_debug_error $!
+ $stderr.puts "Schedule '#{name}' does not exist."
+ $stderr.puts "Use '#{$prog} sched:list' to show list of the schedules."
+ end
+
+ puts "Scheduled #{num} jobs from #{t}."
end
end
end