bricolage 5.22.3 → 5.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 888f08c5389eb2cd139787f0d1e5953dffb4ba73
4
- data.tar.gz: 4a6ef9137c4e5ac55976e9a4620a8b407294563b
3
+ metadata.gz: 68aff8b010487891f214258a2c0b3e4c175e9195
4
+ data.tar.gz: c9cf9a4ee6d938e7b05456a0643a687094cc379a
5
5
  SHA512:
6
- metadata.gz: c7467cfe78a919f20a07555bd67c7088faf3bfa9b40e2fa3240644bbf7d69fb87fb6a65c41152ea3ffa978a54625efca08b1b829522ed117c85368303a2148c8
7
- data.tar.gz: 90fdf06402e01edee7f53302c97ac43ebe47f8684b806372d818188fb6c4f8d64378b8025f3b1b74af70f85ed7bc6a35c4d153accd609306f529af0ef73037b0
6
+ metadata.gz: 3c923cd19ed97f203a12e090efafd55edfbe79f2807cd739e92704d1788caa45bebe074c56ce156276ee0af69fbf9cbfcbb7b0a25bdcb73068c93d9df8b5aed3
7
+ data.tar.gz: 25d863da9ce8fb1f0d380f4fe9ce80cbe8f9201fc82ca1ad3fe49259453f6a12325723254884ac87b77b0a22da5c8856c0cb10332539e7832fa5ebffc1b01c92
@@ -17,13 +17,27 @@ module Bricolage
17
17
  CLASSES[id] = c
18
18
  end
19
19
 
20
- srcdir = Pathname(__FILE__).realpath.parent.parent.parent.cleanpath
21
- LOAD_PATH = [srcdir + 'jobclass']
20
+ LOAD_PATHES = []
21
+
22
+ def JobClass.add_load_path(path)
23
+ LOAD_PATHES.push path
24
+ end
25
+
26
+ def JobClass.primary_load_path
27
+ load_path_for_lib_file(__FILE__)
28
+ end
29
+
30
+ def JobClass.load_path_for_lib_file(path)
31
+ srcdir = Pathname(path).realpath.parent.parent.parent.cleanpath
32
+ srcdir + 'jobclass'
33
+ end
34
+
35
+ add_load_path primary_load_path
22
36
 
23
37
  def JobClass.get(id)
24
38
  unless CLASSES[id.to_s]
25
39
  begin
26
- path = LOAD_PATH.map {|prefix| prefix + "#{id}.rb" }.detect(&:exist?)
40
+ path = LOAD_PATHES.map {|prefix| prefix + "#{id}.rb" }.detect(&:exist?)
27
41
  raise ParameterError, "no such job class: #{id}" unless path
28
42
  ::Bricolage.module_eval File.read(path), path.to_path, 1
29
43
  rescue SystemCallError => err
@@ -35,7 +49,7 @@ module Bricolage
35
49
  end
36
50
 
37
51
  def JobClass.list
38
- LOAD_PATH.map {|dir|
52
+ LOAD_PATHES.map {|dir|
39
53
  Dir.glob("#{dir}/*.rb").map {|path| File.basename(path, '.rb') }
40
54
  }.flatten.uniq.sort
41
55
  end
@@ -1,4 +1,4 @@
1
1
  module Bricolage
2
2
  APPLICATION_NAME = 'Bricolage'
3
- VERSION = '5.22.3'
3
+ VERSION = '5.23.0'
4
4
  end
@@ -1,65 +1,34 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- bricolage (5.22.3)
4
+ bricolage (5.23.0)
5
5
  aws-sdk (~> 2)
6
6
  mysql2
7
7
  pg (~> 0.18.0)
8
8
  redis (>= 3.0.0)
9
- td
10
9
 
11
10
  GEM
12
11
  remote: https://rubygems.org/
13
12
  specs:
14
- aws-sdk (2.6.36)
15
- aws-sdk-resources (= 2.6.36)
16
- aws-sdk-core (2.6.36)
13
+ aws-sdk (2.7.5)
14
+ aws-sdk-resources (= 2.7.5)
15
+ aws-sdk-core (2.7.5)
17
16
  aws-sigv4 (~> 1.0)
18
17
  jmespath (~> 1.0)
19
- aws-sdk-resources (2.6.36)
20
- aws-sdk-core (= 2.6.36)
18
+ aws-sdk-resources (2.7.5)
19
+ aws-sdk-core (= 2.7.5)
21
20
  aws-sigv4 (1.0.0)
22
- coderay (1.1.0)
23
- fluent-logger (0.6.1)
24
- msgpack (>= 0.5.6, < 2)
25
- hirb (0.7.3)
26
- httpclient (2.8.3)
21
+ coderay (1.1.1)
27
22
  jmespath (1.3.1)
28
- json (2.0.2)
29
23
  method_source (0.8.2)
30
- msgpack (1.0.2)
31
24
  mysql2 (0.4.5)
32
- parallel (1.8.0)
33
25
  pg (0.18.4)
34
- pry (0.10.3)
26
+ pry (0.10.4)
35
27
  coderay (~> 1.1.0)
36
28
  method_source (~> 0.8.1)
37
29
  slop (~> 3.4)
38
- redis (3.3.2)
39
- ruby-progressbar (1.8.1)
40
- rubyzip (1.1.7)
30
+ redis (3.3.3)
41
31
  slop (3.6.0)
42
- td (0.15.2)
43
- hirb (>= 0.4.5)
44
- msgpack
45
- parallel (~> 1.8.0)
46
- ruby-progressbar (~> 1.7)
47
- rubyzip (~> 1.1.7)
48
- td-client (~> 0.8.85)
49
- td-logger (>= 0.3.21, < 2)
50
- yajl-ruby (~> 1.1)
51
- zip-zip (~> 0.3)
52
- td-client (0.8.85)
53
- httpclient (>= 2.7)
54
- json (>= 1.7.6)
55
- msgpack (>= 0.5.6, < 2)
56
- td-logger (0.3.26)
57
- fluent-logger (>= 0.5.0, < 2.0)
58
- msgpack (>= 0.5.6, < 2.0)
59
- td-client (~> 0.8.66)
60
- yajl-ruby (1.3.0)
61
- zip-zip (0.3)
62
- rubyzip (>= 1.0.0)
63
32
 
64
33
  PLATFORMS
65
34
  ruby
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bricolage
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.22.3
4
+ version: 5.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Minero Aoki
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: td
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: redis
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -164,8 +150,6 @@ files:
164
150
  - jobclass/s3-put.rb
165
151
  - jobclass/sql.rb
166
152
  - jobclass/streaming_load.rb
167
- - jobclass/td-delete.rb
168
- - jobclass/td-export.rb
169
153
  - jobclass/unload.rb
170
154
  - jobclass/wait-file.rb
171
155
  - lib/bricolage.rb
@@ -202,7 +186,6 @@ files:
202
186
  - lib/bricolage/sqlstatement.rb
203
187
  - lib/bricolage/sqlutils.rb
204
188
  - lib/bricolage/taskqueue.rb
205
- - lib/bricolage/tddatasource.rb
206
189
  - lib/bricolage/vacuumlock.rb
207
190
  - lib/bricolage/variables.rb
208
191
  - lib/bricolage/version.rb
@@ -1,20 +0,0 @@
1
- JobClass.define('td-delete') {
2
- parameters {|params|
3
- params.add DestTableParam.new(optional: false)
4
- params.add DataSourceParam.new('td')
5
- params.add DateParam.new('from', 'DATE', 'Start date of logs to delete (%Y-%m-%d).')
6
- params.add DateParam.new('to', 'DATE', 'End date of logs to delete (%Y-%m-%d).')
7
- }
8
-
9
- declarations {|params|
10
- Declarations.new("dest_table" => nil)
11
- }
12
-
13
- script {|params, script|
14
- script.task(params['data-source']) {|task|
15
- task.delete params['dest-table'],
16
- from: params['from'],
17
- to: params['to']
18
- }
19
- }
20
- }
@@ -1,30 +0,0 @@
1
- JobClass.define('td-export') {
2
- parameters {|params|
3
- params.add SQLFileParam.new
4
- params.add DestFileParam.new
5
- params.add SrcTableParam.new
6
- params.add StringParam.new('src-database', 'NAME', 'Source TD database name.', optional: true)
7
- params.add EnumParam.new('format', %w(msgpack tsv csv json), 'Target file format.', default: 'msgpack')
8
- params.add OptionalBoolParam.new('gzip', 'If true, compresses target file by gzip.')
9
- params.add OptionalBoolParam.new('override', 'If true, clears target file. Otherwise causes error.')
10
- params.add DataSourceParam.new('td')
11
- }
12
-
13
- parameters_filter {|job|
14
- job.provide_sql_file_by_job_id
15
- }
16
-
17
- declarations {|params|
18
- params['sql-file'].declarations
19
- }
20
-
21
- script {|params, script|
22
- script.task(params['data-source']) {|task|
23
- task.export params['sql-file'],
24
- path: params['dest-file'],
25
- format: params['format'],
26
- gzip: params['gzip'],
27
- override: params['override']
28
- }
29
- }
30
- }
@@ -1,116 +0,0 @@
1
- require 'bricolage/datasource'
2
- require 'bricolage/commandutils'
3
- require 'stringio'
4
- require 'date'
5
-
6
- module Bricolage
7
-
8
- class TDDataSource < DataSource
9
- declare_type 'td'
10
-
11
- include CommandUtils
12
-
13
- def initialize(database: nil, username: nil, apikey: nil, td: 'td', priority: -2)
14
- @database = database
15
- @apikey = apikey
16
- @td = td
17
- @priority = priority
18
- end
19
-
20
- def new_task
21
- TDTask.new(self)
22
- end
23
-
24
- def query_command_args(*args)
25
- [@td, "--apikey=#{@apikey}", "query", "--database=#{@database}", "--wait"] + args
26
- end
27
-
28
- def delete_command_args(*args)
29
- [@td, "--apikey=#{@apikey}", "table:partial_delete", @database, *args, "--wait"]
30
- end
31
-
32
- def exec(*args)
33
- JobResult.for_process_status(command(*args))
34
- end
35
- end
36
-
37
- class TDTask < DataSourceTask
38
- def export(stmt, path: nil, **opts)
39
- add TDTask::Export.new(stmt, path: path, **opts)
40
- end
41
-
42
- class Export < Action
43
- include CommandUtils
44
-
45
- def initialize(stmt, path: nil, format: nil, gzip: false, override: false)
46
- @statement = stmt
47
- @path = path
48
- @format = format
49
- @gzip = gzip
50
- @override = override
51
- end
52
-
53
- def_delegator '@statement', :bind
54
-
55
- def source
56
- buf = StringIO.new
57
- buf.puts command_args(new_tmpfile_path).join(' ') + " <<EndTDSQL"
58
- buf.puts @statement.stripped_source
59
- buf.puts 'EndTDSQL'
60
- buf.string
61
- end
62
-
63
- GZIP_COMMAND = 'gzip' # FIXME: parameterize
64
-
65
- def run
66
- if File.exist?(@path) and not @override
67
- raise JobFailure, "target file exists: #{@path.inspect}"
68
- end
69
- puts @statement.source
70
- td_result = make_tmpfile(@statement.stripped_source) {|query_path|
71
- ds.exec(*command_args(query_path))
72
- }
73
- if @gzip
74
- gzip_result = ds.command(GZIP_COMMAND, export_path)
75
- raise JobFailure, "gzip failed" unless gzip_result.success?
76
- end
77
- td_result
78
- end
79
-
80
- def command_args(query_path)
81
- ds.query_command_args("--query=#{query_path}", "--output=#{export_path}", "--format=#{@format}")
82
- end
83
-
84
- def export_path
85
- @gzip ? @path.sub(/\.gz\z/, '') : @path
86
- end
87
- end
88
-
89
- def delete(table_name, **opts)
90
- add TDTask::Delete.new(table_name, **opts)
91
- end
92
-
93
- class Delete < Action
94
- def initialize(table_name, from:, to:)
95
- @table = table_name
96
- @from = from.to_time.to_i
97
- @to = to.to_time.to_i
98
- end
99
-
100
- def run
101
- td_result = ds.exec(source)
102
- end
103
-
104
- def command_args
105
- ds.delete_command_args(@table, "--from #{@from}", "--to #{@to}")
106
- end
107
-
108
- def source
109
- buf = StringIO.new
110
- buf.puts command_args.join(' ')
111
- buf.string
112
- end
113
- end
114
- end
115
-
116
- end