td 0.10.13 → 0.10.15
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +13 -0
- data/lib/td/command/aggr.rb +9 -3
- data/lib/td/command/list.rb +2 -0
- data/lib/td/command/sched.rb +115 -4
- data/lib/td/command/table.rb +1 -1
- data/lib/td/version.rb +1 -1
- metadata +14 -14
data/ChangeLog
CHANGED
@@ -1,4 +1,17 @@
|
|
1
1
|
|
2
|
+
== 2012-02-27 version 0.10.15
|
3
|
+
|
4
|
+
* Updated dependency: td-logger-0.3.8
|
5
|
+
* sched:run: shows the scheduled time at the end of command
|
6
|
+
|
7
|
+
|
8
|
+
== 2012-02-22 version 0.10.14
|
9
|
+
|
10
|
+
* Added sched:update and sched:run
|
11
|
+
* sched:list shows 'Database'
|
12
|
+
* sched:history shows information of the schedule
|
13
|
+
|
14
|
+
|
2
15
|
== 2012-02-21 version 0.10.13
|
3
16
|
|
4
17
|
* table:delete asks y/N before deleting a table
|
data/lib/td/command/aggr.rb
CHANGED
@@ -11,10 +11,10 @@ module Command
|
|
11
11
|
|
12
12
|
rows = []
|
13
13
|
ass.each {|as|
|
14
|
-
rows << {:Name=>as.name, :Relation=>as.relation_key}
|
14
|
+
rows << {:Name=>as.name, :Relation=>as.relation_key, :Timezone=>as.timezone}
|
15
15
|
}
|
16
16
|
|
17
|
-
puts cmd_render_table(rows, :fields => [:Name, :Relation])
|
17
|
+
puts cmd_render_table(rows, :fields => [:Name, :Relation, :Timezone])
|
18
18
|
|
19
19
|
if rows.empty?
|
20
20
|
$stderr.puts "There are no aggregation schemas."
|
@@ -71,12 +71,18 @@ module Command
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def aggr_create(op)
|
74
|
+
timezone = nil
|
75
|
+
|
76
|
+
op.on('-t', '--timezone TZ', 'name of the timezone (like Asia/Tokyo)') {|s|
|
77
|
+
timezone = s
|
78
|
+
}
|
79
|
+
|
74
80
|
name, relation_key = op.cmd_parse
|
75
81
|
|
76
82
|
client = get_client
|
77
83
|
|
78
84
|
begin
|
79
|
-
client.create_aggregation_schema(name, relation_key)
|
85
|
+
client.create_aggregation_schema(name, relation_key, {'timezone'=>timezone})
|
80
86
|
rescue AlreadyExistsError
|
81
87
|
cmd_debug_error $!
|
82
88
|
$stderr.puts "Aggregation '#{name}' already exists."
|
data/lib/td/command/list.rb
CHANGED
@@ -239,7 +239,9 @@ module List
|
|
239
239
|
add_list 'sched:list', %w[], 'Show list of schedules', 'sched:list', 'scheds'
|
240
240
|
add_list 'sched:create', %w[name cron sql], 'Create a schedule', 'sched:create sched1 "0 * * * *" -d example_db "select count(*) from table1" -r rset1'
|
241
241
|
add_list 'sched:delete', %w[name], 'Delete a schedule', 'sched:delete sched1'
|
242
|
+
add_list 'sched:update', %w[name], 'Modify a schedule', 'sched:update sched1 -s "0 */2 * * *" -d my_db -t "Asia/Tokyo" -D 3600'
|
242
243
|
add_list 'sched:history', %w[name max?], 'Show history of scheduled queries', 'sched sched1 --page 1'
|
244
|
+
add_list 'sched:run', %w[name time], 'Run scheduled queries for the specified time', 'sched:run "2013-01-01 00:00:00" -n 6'
|
243
245
|
|
244
246
|
add_list 'query', %w[sql], 'Issue a query', 'query -d example_db -w -r rset1 "select count(*) from table1"'
|
245
247
|
|
data/lib/td/command/sched.rb
CHANGED
@@ -11,18 +11,20 @@ module Command
|
|
11
11
|
|
12
12
|
rows = []
|
13
13
|
scheds.each {|sched|
|
14
|
-
rows << {:Name => sched.name, :Cron => sched.cron, :Result => sched.rset_name, :Query => sched.query}
|
14
|
+
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 }
|
15
15
|
}
|
16
16
|
rows = rows.sort_by {|map|
|
17
17
|
map[:Name]
|
18
18
|
}
|
19
19
|
|
20
|
-
puts cmd_render_table(rows, :fields => [:Name, :Cron, :Result, :Query])
|
20
|
+
puts cmd_render_table(rows, :fields => [:Name, :Cron, :Timezone, :"Next schedule", :Delay, :Result, :Database, :Query], :max_width=>500)
|
21
21
|
end
|
22
22
|
|
23
23
|
def sched_create(op)
|
24
24
|
db_name = nil
|
25
25
|
result = nil
|
26
|
+
timezone = nil
|
27
|
+
delay = 0
|
26
28
|
|
27
29
|
op.on('-d', '--database DB_NAME', 'use the database (required)') {|s|
|
28
30
|
db_name = s
|
@@ -30,6 +32,12 @@ module Command
|
|
30
32
|
op.on('-r', '--result RESULT_TABLE', 'write result to the result table (use result:create command)') {|s|
|
31
33
|
result = s
|
32
34
|
}
|
35
|
+
op.on('-t', '--timezone TZ', 'name of the timezone (like Asia/Tokyo)') {|s|
|
36
|
+
timezone = s
|
37
|
+
}
|
38
|
+
op.on('-D', '--delay SECONDS', 'delay time of the schedule', Integer) {|i|
|
39
|
+
delay = i
|
40
|
+
}
|
33
41
|
|
34
42
|
name, cron, sql = op.cmd_parse
|
35
43
|
|
@@ -44,14 +52,14 @@ module Command
|
|
44
52
|
get_database(client, db_name)
|
45
53
|
|
46
54
|
begin
|
47
|
-
first_time = client.create_schedule(name, :cron=>cron, :query=>sql, :database=>db_name, :result=>result)
|
55
|
+
first_time = client.create_schedule(name, :cron=>cron, :query=>sql, :database=>db_name, :result=>result, :timezone=>timezone, :delay=>delay)
|
48
56
|
rescue AlreadyExistsError
|
49
57
|
cmd_debug_error $!
|
50
58
|
$stderr.puts "Schedule '#{name}' already exists."
|
51
59
|
exit 1
|
52
60
|
end
|
53
61
|
|
54
|
-
$stderr.puts "Schedule '#{name}' is created. It starts at #{first_time}."
|
62
|
+
$stderr.puts "Schedule '#{name}' is created. It starts at #{first_time.localtime}."
|
55
63
|
end
|
56
64
|
|
57
65
|
def sched_delete(op)
|
@@ -71,6 +79,62 @@ module Command
|
|
71
79
|
$stderr.puts "Schedule '#{name}' is deleted."
|
72
80
|
end
|
73
81
|
|
82
|
+
def sched_update(op)
|
83
|
+
cron = nil
|
84
|
+
sql = nil
|
85
|
+
db_name = nil
|
86
|
+
result = nil
|
87
|
+
timezone = nil
|
88
|
+
delay = nil
|
89
|
+
|
90
|
+
op.on('-s', '--schedule CRON', 'change the schedule') {|s|
|
91
|
+
cron = s
|
92
|
+
}
|
93
|
+
op.on('-q', '--query SQL', 'change the query') {|s|
|
94
|
+
sql = s
|
95
|
+
}
|
96
|
+
op.on('-d', '--database DB_NAME', 'change the database') {|s|
|
97
|
+
db_name = s
|
98
|
+
}
|
99
|
+
op.on('-r', '--result RESULT_TABLE', 'change the result table') {|s|
|
100
|
+
result = s
|
101
|
+
}
|
102
|
+
op.on('-t', '--timezone TZ', 'change the name of the timezone (like Asia/Tokyo)') {|s|
|
103
|
+
timezone = s
|
104
|
+
}
|
105
|
+
op.on('-D', '--delay SECONDS', 'change the delay time of the schedule', Integer) {|i|
|
106
|
+
delay = i
|
107
|
+
}
|
108
|
+
|
109
|
+
name = op.cmd_parse
|
110
|
+
|
111
|
+
params = {}
|
112
|
+
params['cron'] = cron if cron
|
113
|
+
params['query'] = sql if sql
|
114
|
+
params['database'] = db_name if db_name
|
115
|
+
params['result'] = result if result
|
116
|
+
params['timezone'] = timezone if timezone
|
117
|
+
params['delay'] = delay.to_s if delay
|
118
|
+
|
119
|
+
if params.empty?
|
120
|
+
$stderr.puts op.to_s
|
121
|
+
exit 1
|
122
|
+
end
|
123
|
+
|
124
|
+
client = get_client
|
125
|
+
|
126
|
+
begin
|
127
|
+
client.update_schedule(name, params)
|
128
|
+
rescue NotFoundError
|
129
|
+
cmd_debug_error $!
|
130
|
+
$stderr.puts "Schedule '#{name}' does not exist."
|
131
|
+
$stderr.puts "Use '#{$prog} sched:list' to show list of the schedules."
|
132
|
+
exit 1
|
133
|
+
end
|
134
|
+
|
135
|
+
$stderr.puts "Schedule '#{name}' is updated."
|
136
|
+
end
|
137
|
+
|
74
138
|
def sched_history(op)
|
75
139
|
page = 0
|
76
140
|
skip = 0
|
@@ -101,6 +165,18 @@ module Command
|
|
101
165
|
exit 1
|
102
166
|
end
|
103
167
|
|
168
|
+
scheds = client.schedules
|
169
|
+
if s = scheds.find {|s| s.name == name }
|
170
|
+
puts "Name : #{s.name}"
|
171
|
+
puts "Cron : #{s.cron}"
|
172
|
+
puts "Timezone : #{s.timezone}"
|
173
|
+
puts "Delay : #{s.delay} sec"
|
174
|
+
puts "Next : #{s.next_time}"
|
175
|
+
puts "Result : #{s.rset_name}"
|
176
|
+
puts "Database : #{s.database}"
|
177
|
+
puts "Query : #{s.query}"
|
178
|
+
end
|
179
|
+
|
104
180
|
rows = []
|
105
181
|
history.each {|j|
|
106
182
|
rows << {:Time => j.scheduled_at.localtime, :JobID => j.job_id, :Status => j.status, :Result=>j.rset_name}
|
@@ -109,5 +185,40 @@ module Command
|
|
109
185
|
puts cmd_render_table(rows, :fields => [:JobID, :Time, :Status, :Result])
|
110
186
|
end
|
111
187
|
|
188
|
+
def sched_run(op)
|
189
|
+
num = 1
|
190
|
+
|
191
|
+
op.on('-n', '--num N', 'number of jobs to run', Integer) {|i|
|
192
|
+
num = i
|
193
|
+
}
|
194
|
+
|
195
|
+
name, time = op.cmd_parse
|
196
|
+
|
197
|
+
if time.to_i.to_s == time.to_s
|
198
|
+
# UNIX time
|
199
|
+
t = Time.at(time.to_i)
|
200
|
+
else
|
201
|
+
require 'time'
|
202
|
+
begin
|
203
|
+
t = Time.parse(time)
|
204
|
+
rescue
|
205
|
+
$stderr.puts "invalid time format: #{time}"
|
206
|
+
exit 1
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
client = get_client
|
211
|
+
|
212
|
+
begin
|
213
|
+
client.run_schedule(name, t.to_i, num)
|
214
|
+
rescue NotFoundError
|
215
|
+
cmd_debug_error $!
|
216
|
+
$stderr.puts "Schedule '#{name}' does not exist."
|
217
|
+
$stderr.puts "Use '#{$prog} sched:list' to show list of the schedules."
|
218
|
+
end
|
219
|
+
|
220
|
+
puts "Scheduled #{num} jobs from #{t}."
|
221
|
+
end
|
222
|
+
|
112
223
|
end
|
113
224
|
end
|
data/lib/td/command/table.rb
CHANGED
data/lib/td/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-27 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: msgpack
|
16
|
-
requirement: &
|
16
|
+
requirement: &70345059633180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.4.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70345059633180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70345059632320 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.4.3
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70345059632320
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: hirb
|
38
|
-
requirement: &
|
38
|
+
requirement: &70345059631620 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,29 +43,29 @@ dependencies:
|
|
43
43
|
version: 0.4.5
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70345059631620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: td-client
|
49
|
-
requirement: &
|
49
|
+
requirement: &70345059630660 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.8.
|
54
|
+
version: 0.8.10
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70345059630660
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: td-logger
|
60
|
-
requirement: &
|
60
|
+
requirement: &70345059629760 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 0.3.
|
65
|
+
version: 0.3.8
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70345059629760
|
69
69
|
description:
|
70
70
|
email:
|
71
71
|
executables:
|