td 0.10.13 → 0.10.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.
- 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:
|