batch_manager 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.rdoc +13 -14
- data/bin/bm_exec +1 -1
- data/lib/batch_manager/batch_status.rb +1 -3
- data/lib/batch_manager/{railtie.rb → engine.rb} +1 -3
- data/lib/batch_manager/executor.rb +17 -10
- data/lib/batch_manager/logger.rb +16 -6
- data/lib/batch_manager/version.rb +1 -1
- data/lib/batch_manager.rb +8 -1
- data/lib/generators/batch/templates/active_record/batch.rb +2 -3
- data/lib/tasks/batch_manager_tasks.rake +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTc0ZWI3YzZkZWQ0Nzk3ZDMzMmYzNDFhNjNkMWIxZjgyM2JhN2YxNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTU5MTVlMTQ5OTMwODM4ZWJlYTk5OWZlMzM3NGQxN2QzOTRhNDUyNg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTcyZTg1ZGFhMTIyODFlY2M5MzdiYmYxMmVlYjYyMDViMWI2MjY2NmJkYzli
|
10
|
+
ZDI1NzlkNDIwMGNjNjcxMmI1M2EyYmFmZjUzOTgzNzgwM2VlMmRmNDY0NTg1
|
11
|
+
ZmZlYmFlNmFkODlmZjdmZjE2NWVkOWQxNTZiZGU3ODU2NzIwY2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTU3NjA5M2E3OWRhMTk1ZGU2NTcwMWVjM2NjYjhlYjYxYWYxMDdiMWNkMjBh
|
14
|
+
MTk3ZWE3ODg2M2Q0ZDc2YmYwNGY2ZjkxN2ExOGQyNDAwYWQwNjdlM2ZjMDJl
|
15
|
+
OTUxYzg5Yjk3OThlNzlkOWUxMjBmNjNiNDMyMjI3NGI4MjMwNTY=
|
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= BatchManager {<img src="https://travis-ci.org/cctiger36/batch_manager.png?branch=master" alt="Build Status" />}[https://travis-ci.org/cctiger36/batch_manager] {<img src="https://badge.fury.io/rb/batch_manager.png" alt="Gem Version" />}[http://badge.fury.io/rb/batch_manager]
|
1
|
+
= BatchManager {<img src="https://travis-ci.org/cctiger36/batch_manager.png?branch=master" alt="Build Status" />}[https://travis-ci.org/cctiger36/batch_manager] {<img src="https://badge.fury.io/rb/batch_manager.png" alt="Gem Version" />}[http://badge.fury.io/rb/batch_manager] {<img src="https://coveralls.io/repos/cctiger36/batch_manager/badge.png?branch=master" alt="Coverage Status" />}[https://coveralls.io/r/cctiger36/batch_manager?branch=master]
|
2
2
|
|
3
3
|
A rails plugin to manage batch scripts similar to migrations.
|
4
4
|
|
@@ -42,7 +42,6 @@ The generated batch files will have the header like:
|
|
42
42
|
# =Batch Manager=
|
43
43
|
# =created_at: 2013-05-24 13:10:25
|
44
44
|
# =times_limit: 1
|
45
|
-
# =auto_run: false
|
46
45
|
# =group_name: GroupName
|
47
46
|
|
48
47
|
Add the "=Batch Manager=" to tell BatchManager to manage this batch file.
|
@@ -61,13 +60,19 @@ Please use this command instead of 'rails runner' to run batch scripts.
|
|
61
60
|
|
62
61
|
== Logger
|
63
62
|
|
64
|
-
Please use
|
63
|
+
Please use BatchManager.logger in batch scripts to output logs, and then BatchManager will automatically also output logs to the file in the configured log directory.
|
65
64
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
BatchManager.logger.debug
|
66
|
+
BatchManager.logger.info
|
67
|
+
BatchManager.logger.warn
|
68
|
+
BatchManager.logger.error
|
69
|
+
BatchManager.logger.fatal
|
70
|
+
|
71
|
+
When batches executed without BatchManager, it will write log to $stdout as default.
|
72
|
+
|
73
|
+
== Web interface
|
74
|
+
|
75
|
+
The web interface will at http://localhost:3000/batch_manager, you can also execute batches there.
|
71
76
|
|
72
77
|
== Rake Tasks
|
73
78
|
|
@@ -78,9 +83,3 @@ show all batches
|
|
78
83
|
show the details of batches
|
79
84
|
|
80
85
|
bundle exec rake batch:details
|
81
|
-
|
82
|
-
== TODO
|
83
|
-
|
84
|
-
Save log automatically.
|
85
|
-
Rake tasks to check the status.
|
86
|
-
Admin interface.
|
data/bin/bm_exec
CHANGED
@@ -16,8 +16,8 @@ end
|
|
16
16
|
ARGV.delete(batch_file)
|
17
17
|
|
18
18
|
APP_PATH = File.join('.', 'config', 'application')
|
19
|
-
ENV["RAILS_ENV"] = options[:environment] || "development"
|
20
19
|
require APP_PATH
|
20
|
+
#ENV["RAILS_ENV"] = options[:environment] || "development"
|
21
21
|
Rails.application.require_environment!
|
22
22
|
|
23
23
|
BatchManager::Executor.exec(batch_file, options)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module BatchManager
|
2
2
|
class BatchStatus
|
3
3
|
include BatchManager::Utils
|
4
|
-
attr_accessor :name, :created_at, :times_limit, :
|
4
|
+
attr_accessor :name, :created_at, :times_limit, :group_name, :managed
|
5
5
|
|
6
6
|
def initialize(path)
|
7
7
|
@name = batch_name(path)
|
@@ -46,8 +46,6 @@ module BatchManager
|
|
46
46
|
@times_limit = line.sub(/#\s*=times_limit:/, "").strip.to_i
|
47
47
|
elsif line.include?("=created_at:")
|
48
48
|
@created_at = Time.parse(line.sub(/#\s*=created_at:/, "").strip)
|
49
|
-
elsif line.include?("=auto_run:")
|
50
|
-
@auto_run = line.sub(/#\s*=auto_run:/, "").strip.downcase == "true"
|
51
49
|
elsif line.include?("=group_name:")
|
52
50
|
@group_name = line.sub(/#\s*=group_name:/, "").strip
|
53
51
|
end
|
@@ -7,13 +7,20 @@ module BatchManager
|
|
7
7
|
batch_file_path = batch_full_path(batch_file)
|
8
8
|
if File.exist?(batch_file_path)
|
9
9
|
batch_status = BatchManager::BatchStatus.new(batch_file_path)
|
10
|
-
|
11
|
-
|
12
|
-
BatchManager::Logger.new(batch_status.name, @wet)
|
10
|
+
@wet = options[:wet]
|
11
|
+
if !@wet || options[:force] || batch_status.can_run?
|
12
|
+
logger = BatchManager::Logger.new(batch_status.name, @wet)
|
13
13
|
write_log_header(@wet)
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
begin
|
15
|
+
eval(File.read(batch_file_path))
|
16
|
+
batch_status.update_schema if @wet
|
17
|
+
rescue => e
|
18
|
+
logger.error e
|
19
|
+
raise e
|
20
|
+
ensure
|
21
|
+
puts "Log saved at: #{BatchManager.logger.log_file}" if logger.log_file
|
22
|
+
logger.close
|
23
|
+
end
|
17
24
|
else
|
18
25
|
raise "Cannot run this batch."
|
19
26
|
end
|
@@ -23,10 +30,10 @@ module BatchManager
|
|
23
30
|
end
|
24
31
|
|
25
32
|
def write_log_header(is_wet)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
33
|
+
BatchManager.logger.info "=============================="
|
34
|
+
BatchManager.logger.info "= #{is_wet ? 'WET' : 'DRY'} RUN"
|
35
|
+
BatchManager.logger.info "= Ran at: #{Time.now.strftime("%Y-%m-%d %H:%M:%S")}"
|
36
|
+
BatchManager.logger.info "=============================="
|
30
37
|
end
|
31
38
|
end
|
32
39
|
end
|
data/lib/batch_manager/logger.rb
CHANGED
@@ -6,21 +6,31 @@ module BatchManager
|
|
6
6
|
attr_reader :log_file
|
7
7
|
delegate :debug, :info, :warn, :error, :fatal, :add, :to => :logger
|
8
8
|
|
9
|
+
class << self
|
10
|
+
def log_file_path(batch_name, is_wet = false)
|
11
|
+
log_file_name = is_wet ? "#{batch_name}_wet" : batch_name
|
12
|
+
File.join(BatchManager.log_dir, log_file_name) + ".log"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
9
16
|
def initialize(batch_name, is_wet)
|
10
17
|
@logger = Log4r::Logger.new(batch_name)
|
11
18
|
@logger.outputters << Log4r::Outputter.stdout
|
12
19
|
if BatchManager.save_log?
|
13
|
-
|
14
|
-
@
|
15
|
-
@logger.outputters << Log4r::FileOutputter.new(log_file_name, :filename => @log_file)
|
20
|
+
@log_file = prepare_log_file(batch_name, is_wet)
|
21
|
+
@logger.outputters << Log4r::FileOutputter.new(File.basename(@log_file, ".log"), :filename => @log_file)
|
16
22
|
end
|
17
|
-
|
23
|
+
BatchManager.logger = self
|
18
24
|
end
|
19
25
|
|
20
|
-
def
|
21
|
-
file_path =
|
26
|
+
def prepare_log_file(batch_name, is_wet)
|
27
|
+
file_path = self.class.log_file_path(batch_name, is_wet)
|
22
28
|
FileUtils.mkdir_p(File.dirname(file_path)) unless File.exist?(file_path)
|
23
29
|
file_path
|
24
30
|
end
|
31
|
+
|
32
|
+
def close
|
33
|
+
BatchManager.logger = nil
|
34
|
+
end
|
25
35
|
end
|
26
36
|
end
|
data/lib/batch_manager.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
+
require 'rails'
|
1
2
|
require 'active_record'
|
2
|
-
require 'batch_manager/
|
3
|
+
require 'batch_manager/engine'
|
3
4
|
|
4
5
|
module BatchManager
|
6
|
+
mattr_accessor :logger
|
7
|
+
|
5
8
|
class << self
|
6
9
|
def batch_dir
|
7
10
|
Rails.application.config.batch_manager.batch_dir
|
@@ -20,6 +23,10 @@ module BatchManager
|
|
20
23
|
def signal
|
21
24
|
"=Batch Manager="
|
22
25
|
end
|
26
|
+
|
27
|
+
def logger
|
28
|
+
@@logger ||= ::Logger.new(STDOUT)
|
29
|
+
end
|
23
30
|
end
|
24
31
|
end
|
25
32
|
|
@@ -2,7 +2,6 @@
|
|
2
2
|
# =Batch Manager=
|
3
3
|
# =created_at: <%= Time.now.strftime "%Y-%m-%d %H:%M:%S" %>
|
4
4
|
# =times_limit: 1
|
5
|
-
# =auto_run: false
|
6
5
|
|
7
6
|
wet_run = (ARGV[0] == "wet" || @wet)
|
8
7
|
|
@@ -11,9 +10,9 @@ ActiveRecord::Base.connection.with_standby do
|
|
11
10
|
ActiveRecord::Base.transaction do
|
12
11
|
|
13
12
|
if wet_run
|
14
|
-
|
13
|
+
BatchManager.logger.info "Wet run completed!"
|
15
14
|
else
|
16
|
-
|
15
|
+
BatchManager.logger.warn "Rolling back."
|
17
16
|
raise ActiveRecord::Rollback
|
18
17
|
end
|
19
18
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: batch_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Weihu Chen
|
@@ -104,10 +104,10 @@ extra_rdoc_files: []
|
|
104
104
|
files:
|
105
105
|
- bin/bm_exec
|
106
106
|
- lib/batch_manager/batch_status.rb
|
107
|
+
- lib/batch_manager/engine.rb
|
107
108
|
- lib/batch_manager/executor.rb
|
108
109
|
- lib/batch_manager/logger.rb
|
109
110
|
- lib/batch_manager/monitor.rb
|
110
|
-
- lib/batch_manager/railtie.rb
|
111
111
|
- lib/batch_manager/schema_batch.rb
|
112
112
|
- lib/batch_manager/utils.rb
|
113
113
|
- lib/batch_manager/version.rb
|