batch_manager 0.2.5 → 0.2.6
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.
- checksums.yaml +8 -8
- data/README.md +93 -0
- data/app/assets/stylesheets/batch_manager/batches.css +5 -0
- data/app/controllers/batch_manager/batches_controller.rb +30 -2
- data/app/views/batch_manager/batches/exec.html.erb +22 -0
- data/app/workers/batch_manager/exec_batch_worker.rb +10 -0
- data/config/routes.rb +1 -0
- data/lib/batch_manager/executor.rb +20 -14
- data/lib/batch_manager/version.rb +1 -1
- metadata +25 -7
- data/README.rdoc +0 -89
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZGRhOWQ1ZmJhMmU4Nzg3NzJhMmExMWM3ZTZhOWRmYjM0YmFkZTU4NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2U4MGYxY2MwYTI4OGMzNmJiNjJmZTE5Yjg5YjZjOWQzNDcwNjZjZQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Y2YyMDgyNWE3MmYzYTYxMzg3ZTA1Y2Y2NDRhN2M5MjNmMmE4YTE2YWVhYThi
|
10
|
+
OTI1MDVhNzc0OGNlNDk5OTA3MDBlZWJmOTgwNTllYjI3MDVkYjI4NzZhNjRl
|
11
|
+
OTBmZjc1YWIzMThiNGM0ZWMyNWZlYWNhYTk0ZDQxOWI2YWM3MWI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTYzNzhhNWM1ZWE2NTk0MDAwYjk2M2NjZDk2ZTFlMjJjODQ3ZmI3ZTdjNjRm
|
14
|
+
ZGRhNzEwMWVkODFhZmQzMWM1Y2U0NzRhZjE2ZTEzZDY1MjgxZGIyNDIxZjdl
|
15
|
+
YzViOWUzN2U2Y2U5MDJmNTZlZDI0MDlhNGFmNTc0MjkxM2E5MmY=
|
data/README.md
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
# BatchManager
|
2
|
+
|
3
|
+
[](https://travis-ci.org/cctiger36/batch_manager) [](http://badge.fury.io/rb/batch_manager) [](https://coveralls.io/r/cctiger36/batch_manager?branch=master) [](https://codeclimate.com/github/cctiger36/batch_manager)
|
4
|
+
|
5
|
+
A rails plugin to manage batch scripts similar to migrations.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add to your Gemfile
|
10
|
+
|
11
|
+
gem 'batch_manager'
|
12
|
+
|
13
|
+
and bundle
|
14
|
+
|
15
|
+
bundle
|
16
|
+
|
17
|
+
initialize
|
18
|
+
|
19
|
+
bundle exec rails generate batch_manager:migration
|
20
|
+
bundle exec rake db:migrate
|
21
|
+
|
22
|
+
This will create a table 'schema_batches' like 'schema_migrations' to save the status of batches in database.
|
23
|
+
|
24
|
+
## Configuration
|
25
|
+
|
26
|
+
config.batch_manager.batch_dir = "script/batch"
|
27
|
+
config.batch_manager.save_log = true
|
28
|
+
config.batch_manager.log_dir = "log/batch"
|
29
|
+
|
30
|
+
You can change the default configuration in config/application.rb
|
31
|
+
|
32
|
+
## Batch Generator
|
33
|
+
|
34
|
+
bundle exec rails g batch test
|
35
|
+
|
36
|
+
This will generate the file 'test.rb' in the configured batch_dir with default template.
|
37
|
+
|
38
|
+
You can find the template in lib/generators/batch/templates, and modify it for yourself.
|
39
|
+
|
40
|
+
## Batch Header
|
41
|
+
|
42
|
+
The generated batch files will have the header like:
|
43
|
+
|
44
|
+
# =Batch Manager=
|
45
|
+
# =created_at: 2013-05-24 13:10:25
|
46
|
+
# =times_limit: 1
|
47
|
+
# =group_name: GroupName
|
48
|
+
|
49
|
+
Add the "=Batch Manager=" to tell BatchManager to manage this batch file.
|
50
|
+
|
51
|
+
You can also add these headers to the existing batch files.
|
52
|
+
|
53
|
+
## Execute Batch
|
54
|
+
|
55
|
+
bundle exec bm_exec [options] BATCH_FILE
|
56
|
+
|
57
|
+
Please use this command instead of 'rails runner' to run batch scripts.
|
58
|
+
|
59
|
+
option:
|
60
|
+
-f, --force
|
61
|
+
-w, --wet
|
62
|
+
|
63
|
+
## Logger
|
64
|
+
|
65
|
+
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.
|
66
|
+
|
67
|
+
BatchManager.logger.debug
|
68
|
+
BatchManager.logger.info
|
69
|
+
BatchManager.logger.warn
|
70
|
+
BatchManager.logger.error
|
71
|
+
BatchManager.logger.fatal
|
72
|
+
|
73
|
+
When batches executed without BatchManager, it will write log to $stdout as default.
|
74
|
+
|
75
|
+
## Web interface
|
76
|
+
|
77
|
+
Mount the web interface in the routes file.
|
78
|
+
|
79
|
+
mount BatchManager::Engine, :at => "batch_manager"
|
80
|
+
|
81
|
+
You can also use web interface to execute batches.
|
82
|
+
|
83
|
+
If [resque](https://github.com/resque/resque) installed in you application, the batch script can be executed asynchronous. And the log can be checked on real time in the brower.
|
84
|
+
|
85
|
+
## Rake Tasks
|
86
|
+
|
87
|
+
show all batches
|
88
|
+
|
89
|
+
bundle exec rake batch:list
|
90
|
+
|
91
|
+
show the details of batches
|
92
|
+
|
93
|
+
bundle exec rake batch:details
|
@@ -5,13 +5,41 @@ module BatchManager
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def exec
|
8
|
-
|
9
|
-
|
8
|
+
@batch_name = params[:batch_name]
|
9
|
+
@wet = params[:wet]
|
10
|
+
if resque_supported?
|
11
|
+
Resque.enqueue(BatchManager::ExecBatchWorker, @batch_name, :wet => @wet)
|
12
|
+
@offset = log_file.size
|
13
|
+
else
|
14
|
+
BatchManager::Executor.exec(@batch_name, :wet => @wet)
|
15
|
+
redirect_to(batches_url)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def async_read_log
|
20
|
+
file = log_file
|
21
|
+
file.seek(params[:offset].to_i) if params[:offset].present?
|
22
|
+
render :json => {:content => file.read, :offset => file.size}
|
10
23
|
end
|
11
24
|
|
12
25
|
def log
|
13
26
|
log_file = BatchManager::Logger.log_file_path(params[:batch_name], params[:wet])
|
14
27
|
render :file => log_file, :content_type => Mime::TEXT, :layout => false
|
15
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def resque_supported?
|
33
|
+
begin
|
34
|
+
require 'resque'
|
35
|
+
defined?(Resque)
|
36
|
+
rescue
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def log_file
|
42
|
+
File.open(BatchManager::Logger.log_file_path(params[:batch_name], params[:wet]), 'r')
|
43
|
+
end
|
16
44
|
end
|
17
45
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<script>
|
2
|
+
function read_log() {
|
3
|
+
offset = $("#offset").val();
|
4
|
+
$.get('<%= async_read_log_batches_url(:batch_name => @batch_name, :wet => @wet) %>' + '&offset=' + offset, function(data) {
|
5
|
+
$("#log_box").val($("#log_box").val() + data.content);
|
6
|
+
$("#offset").val(data.offset);
|
7
|
+
scrollLogBoxDown();
|
8
|
+
});
|
9
|
+
}
|
10
|
+
function scrollLogBoxDown() {
|
11
|
+
var logBox = $('#log_box');
|
12
|
+
logBox.scrollTop(logBox[0].scrollHeight - logBox.height());
|
13
|
+
}
|
14
|
+
$(function() {
|
15
|
+
setInterval(read_log, 1000);
|
16
|
+
});
|
17
|
+
</script>
|
18
|
+
|
19
|
+
<h2><%= @batch_name %> <%= "WET RUN" if @wet %> Executing!<h2>
|
20
|
+
|
21
|
+
<%= text_area_tag :log, nil, :id => "log_box" %>
|
22
|
+
<%= hidden_field_tag :offset, @offset, :id => :offset %>
|
data/config/routes.rb
CHANGED
@@ -7,20 +7,8 @@ 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
|
-
logger = BatchManager::Logger.new(batch_status.name, @wet)
|
13
|
-
write_log_header(@wet)
|
14
|
-
begin
|
15
|
-
eval(File.read(batch_file_path))
|
16
|
-
batch_status.update_schema if @wet
|
17
|
-
rescue => e
|
18
|
-
logger.error e
|
19
|
-
logger.error "Failed."
|
20
|
-
ensure
|
21
|
-
puts "Log saved at: #{BatchManager.logger.log_file}" if logger.log_file
|
22
|
-
logger.close
|
23
|
-
end
|
10
|
+
if options[:force] || !options[:wet] || batch_status.can_run?
|
11
|
+
exec_batch_script(batch_file_path, batch_status, options[:wet])
|
24
12
|
else
|
25
13
|
raise "Cannot run this batch."
|
26
14
|
end
|
@@ -29,6 +17,24 @@ module BatchManager
|
|
29
17
|
end
|
30
18
|
end
|
31
19
|
|
20
|
+
protected
|
21
|
+
|
22
|
+
def exec_batch_script(batch_file_path, batch_status, is_wet)
|
23
|
+
logger = BatchManager::Logger.new(batch_status.name, is_wet)
|
24
|
+
write_log_header(is_wet)
|
25
|
+
begin
|
26
|
+
@wet = is_wet
|
27
|
+
eval(File.read(batch_file_path))
|
28
|
+
batch_status.update_schema if is_wet
|
29
|
+
rescue => e
|
30
|
+
logger.error e
|
31
|
+
logger.error "Failed."
|
32
|
+
ensure
|
33
|
+
puts "Log saved at: #{BatchManager.logger.log_file}" if logger.log_file
|
34
|
+
logger.close
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
32
38
|
def write_log_header(is_wet)
|
33
39
|
BatchManager.logger.info "=============================="
|
34
40
|
BatchManager.logger.info "= #{is_wet ? 'WET' : 'DRY'} RUN"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: batch_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Weihu Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.
|
19
|
+
version: 3.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.
|
26
|
+
version: 3.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: log4r
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,7 +94,22 @@ dependencies:
|
|
94
94
|
- - ! '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: resque
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Manage batches status. Support execute batches from web interface. Automatically
|
112
|
+
save the log to file.
|
98
113
|
email:
|
99
114
|
- cctiger36@gmail.com
|
100
115
|
executables:
|
@@ -107,8 +122,10 @@ files:
|
|
107
122
|
- app/assets/stylesheets/batch_manager/batches.css
|
108
123
|
- app/controllers/batch_manager/application_controller.rb
|
109
124
|
- app/controllers/batch_manager/batches_controller.rb
|
125
|
+
- app/views/batch_manager/batches/exec.html.erb
|
110
126
|
- app/views/batch_manager/batches/index.html.erb
|
111
127
|
- app/views/layouts/batch_manager/application.html.erb
|
128
|
+
- app/workers/batch_manager/exec_batch_worker.rb
|
112
129
|
- config/routes.rb
|
113
130
|
- bin/bm_exec
|
114
131
|
- lib/batch_manager/batch_status.rb
|
@@ -127,9 +144,10 @@ files:
|
|
127
144
|
- lib/tasks/batch_manager_tasks.rake
|
128
145
|
- MIT-LICENSE
|
129
146
|
- Rakefile
|
130
|
-
- README.
|
147
|
+
- README.md
|
131
148
|
homepage: https://github.com/cctiger36/batch_manager
|
132
|
-
licenses:
|
149
|
+
licenses:
|
150
|
+
- MIT
|
133
151
|
metadata: {}
|
134
152
|
post_install_message:
|
135
153
|
rdoc_options: []
|
data/README.rdoc
DELETED
@@ -1,89 +0,0 @@
|
|
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
|
-
|
3
|
-
A rails plugin to manage batch scripts similar to migrations.
|
4
|
-
|
5
|
-
== Installation
|
6
|
-
|
7
|
-
Add to your Gemfile
|
8
|
-
|
9
|
-
gem 'batch_manager'
|
10
|
-
|
11
|
-
and bundle
|
12
|
-
|
13
|
-
bundle
|
14
|
-
|
15
|
-
initialize
|
16
|
-
|
17
|
-
bundle exec rails generate batch_manager:migration
|
18
|
-
bundle exec rake db:migrate
|
19
|
-
|
20
|
-
This will create a table 'schema_batches' like 'schema_migrations' to save the status of batches in database.
|
21
|
-
|
22
|
-
== Configuration
|
23
|
-
|
24
|
-
config.batch_manager.batch_dir = "script/batch"
|
25
|
-
config.batch_manager.save_log = true
|
26
|
-
config.batch_manager.log_dir = "log/batch"
|
27
|
-
|
28
|
-
You can change the default configuration in config/application.rb
|
29
|
-
|
30
|
-
== Batch Generator
|
31
|
-
|
32
|
-
bundle exec rails g batch test
|
33
|
-
|
34
|
-
This will generate the file 'test.rb' in the configured batch_dir with default template.
|
35
|
-
|
36
|
-
You can find the template in lib/generators/batch/templates, and modify it for yourself.
|
37
|
-
|
38
|
-
== Batch Header
|
39
|
-
|
40
|
-
The generated batch files will have the header like:
|
41
|
-
|
42
|
-
# =Batch Manager=
|
43
|
-
# =created_at: 2013-05-24 13:10:25
|
44
|
-
# =times_limit: 1
|
45
|
-
# =group_name: GroupName
|
46
|
-
|
47
|
-
Add the "=Batch Manager=" to tell BatchManager to manage this batch file.
|
48
|
-
|
49
|
-
You can also add these headers to the existing batch files.
|
50
|
-
|
51
|
-
== Execute Batch
|
52
|
-
|
53
|
-
bundle exec bm_exec [options] BATCH_FILE
|
54
|
-
|
55
|
-
Please use this command instead of 'rails runner' to run batch scripts.
|
56
|
-
|
57
|
-
option:
|
58
|
-
-f, --force
|
59
|
-
-w, --wet
|
60
|
-
|
61
|
-
== Logger
|
62
|
-
|
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.
|
64
|
-
|
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
|
-
Mount the web interface in the routes file.
|
76
|
-
|
77
|
-
mount BatchManager::Engine, :at => "batch_manager"
|
78
|
-
|
79
|
-
You can also use web interface to execute batches.
|
80
|
-
|
81
|
-
== Rake Tasks
|
82
|
-
|
83
|
-
show all batches
|
84
|
-
|
85
|
-
bundle exec rake batch:list
|
86
|
-
|
87
|
-
show the details of batches
|
88
|
-
|
89
|
-
bundle exec rake batch:details
|