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 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
@@ -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."
@@ -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
 
@@ -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
@@ -28,7 +28,7 @@ module Command
28
28
 
29
29
  def table_delete(op)
30
30
  force = false
31
- op.on('-f', '--force', 'clear tables and delete the database', TrueClass) {|b|
31
+ op.on('-f', '--force', 'never prompt', TrueClass) {|b|
32
32
  force = true
33
33
  }
34
34
 
data/lib/td/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module TreasureData
2
2
 
3
- VERSION = '0.10.13'
3
+ VERSION = '0.10.15'
4
4
 
5
5
  end
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.13
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-21 00:00:00.000000000Z
12
+ date: 2012-02-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
16
- requirement: &70299899663140 !ruby/object:Gem::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: *70299899663140
24
+ version_requirements: *70345059633180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70299899661720 !ruby/object:Gem::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: *70299899661720
35
+ version_requirements: *70345059632320
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hirb
38
- requirement: &70299899657320 !ruby/object:Gem::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: *70299899657320
46
+ version_requirements: *70345059631620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: td-client
49
- requirement: &70299899656420 !ruby/object:Gem::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.8
54
+ version: 0.8.10
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70299899656420
57
+ version_requirements: *70345059630660
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: td-logger
60
- requirement: &70299899655440 !ruby/object:Gem::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.7
65
+ version: 0.3.8
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70299899655440
68
+ version_requirements: *70345059629760
69
69
  description:
70
70
  email:
71
71
  executables: