themigrator 0.1.11 → 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/themigrator/cli.rb +9 -1
- data/lib/themigrator/migration.rb +2 -2
- data/lib/themigrator/migration_progress.rb +31 -6
- data/lib/themigrator/ui.rb +74 -21
- data/lib/themigrator/version.rb +1 -1
- data/lib/themigrator.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c881ca29c75388a9cb240c301e340245c1d9ae6f
|
4
|
+
data.tar.gz: b6d56b409c7e265b6cc5f425c1bdccb3cb2fdccd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2a3ecfcefedd3315e8b81624a5004c5989c468e94986350036292b14e80097ec93ea56d512ee5ae19d58b863add06d4f5547da3f6779776303c7223ce09b83f
|
7
|
+
data.tar.gz: 71d2296919a8e7d1b07f17666fd9cbbbc62442247ff161a8a67ea51637fe1ef4cc5ad4e44b425c7f027c3a8280e1bc98938cfc56c750031166988f4c4e71b384
|
data/lib/themigrator/cli.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'thor'
|
2
|
-
require 'themigrator
|
2
|
+
require 'themigrator'
|
3
3
|
|
4
4
|
|
5
5
|
module Themigrator
|
@@ -26,6 +26,7 @@ module Themigrator
|
|
26
26
|
log_file = migrator.main_log_path(Dir.pwd, migrator.run_id)
|
27
27
|
sleep 0.1
|
28
28
|
system("tail --pid=#{pid} --lines=+0 --follow #{log_file}")
|
29
|
+
#system("#{$0} visualize #{migrator.run_id}")
|
29
30
|
end
|
30
31
|
|
31
32
|
desc "roles", "show the list of roles"
|
@@ -34,5 +35,12 @@ module Themigrator
|
|
34
35
|
migration.analyze_project!
|
35
36
|
puts migration.roles.join("\n")
|
36
37
|
end
|
38
|
+
|
39
|
+
desc "visualize RUNID", "visualize a migration"
|
40
|
+
def visualize(run_id)
|
41
|
+
mp = Themigrator::MigrationProgress.new(Dir.pwd, run_id)
|
42
|
+
ui = Themigrator::UI.new(mp)
|
43
|
+
ui.start
|
44
|
+
end
|
37
45
|
end
|
38
46
|
end
|
@@ -5,7 +5,7 @@ module Themigrator
|
|
5
5
|
# Holds the plan of the migration
|
6
6
|
class Migration
|
7
7
|
|
8
|
-
ACTIONS = %w(setup pre-migrate migrate cleanup)
|
8
|
+
ACTIONS = %w(setup pre-migrate migrate post-migrate cleanup)
|
9
9
|
SCRIPTS = ACTIONS | %w(rollback)
|
10
10
|
|
11
11
|
attr_reader :roles, :actions
|
@@ -28,7 +28,7 @@ module Themigrator
|
|
28
28
|
File.executable?(f)
|
29
29
|
}.each {|f|
|
30
30
|
role = File.basename(File.dirname(f))
|
31
|
-
if @user_roles.
|
31
|
+
if @user_roles.none? || @user_roles.include?(role)
|
32
32
|
roles.add(role)
|
33
33
|
used_actions << action
|
34
34
|
@action_and_roles[action] << role
|
@@ -7,6 +7,21 @@ module Themigrator
|
|
7
7
|
include Logger
|
8
8
|
|
9
9
|
attr_reader :roles, :run_id, :start_time, :pid, :status, :current_action, :actions
|
10
|
+
|
11
|
+
def cbks=(a)
|
12
|
+
@cbks=a
|
13
|
+
end
|
14
|
+
|
15
|
+
# cbks
|
16
|
+
#
|
17
|
+
# :has_roles
|
18
|
+
# :start_action
|
19
|
+
# :start_role_action
|
20
|
+
# :end_action
|
21
|
+
# :end_role_action
|
22
|
+
# :start_migration
|
23
|
+
# :end_migration
|
24
|
+
#
|
10
25
|
|
11
26
|
|
12
27
|
def initialize(dir, run_id)
|
@@ -14,10 +29,7 @@ module Themigrator
|
|
14
29
|
@log_file_path = main_log_path(dir, run_id)
|
15
30
|
@roles = []
|
16
31
|
@current_action = nil
|
17
|
-
@cbks = {
|
18
|
-
has_roles: has_roles_cbk,
|
19
|
-
start_action: start_action_cbk
|
20
|
-
}
|
32
|
+
@cbks = {}
|
21
33
|
@actions = Hash.new do |h,k|
|
22
34
|
h[k] = {
|
23
35
|
start_time: nil,
|
@@ -25,6 +37,13 @@ module Themigrator
|
|
25
37
|
end_time: nil}
|
26
38
|
end
|
27
39
|
|
40
|
+
end
|
41
|
+
|
42
|
+
def log_file(role,action)
|
43
|
+
log_path(@dir,@run_id,role,action)
|
44
|
+
end
|
45
|
+
|
46
|
+
def start
|
28
47
|
start_log_parser
|
29
48
|
end
|
30
49
|
|
@@ -40,7 +59,7 @@ module Themigrator
|
|
40
59
|
|
41
60
|
def call_cbk(name, *args)
|
42
61
|
cbk = @cbks[name]
|
43
|
-
cbk.call(
|
62
|
+
cbk.call(*args) if cbk
|
44
63
|
end
|
45
64
|
|
46
65
|
|
@@ -63,10 +82,13 @@ module Themigrator
|
|
63
82
|
@pid = $1.to_i
|
64
83
|
when /roles: (.+)/
|
65
84
|
@roles = $1.strip.split.sort
|
85
|
+
call_cbk(:has_roles, @roles)
|
66
86
|
when /(#{scripts}) => start/
|
67
87
|
action = $1.to_sym
|
68
88
|
@current_action = action
|
69
89
|
@actions[action][:start_time] = time
|
90
|
+
call_cbk(:start_action, action)
|
91
|
+
|
70
92
|
when /(#{scripts}) => (done|fail) \(([0-9\.]+) ms\)/
|
71
93
|
action = $1.to_sym
|
72
94
|
success = to_success($2)
|
@@ -91,8 +113,11 @@ module Themigrator
|
|
91
113
|
@actions[action][:roles][role][:exitcode] = exitcode
|
92
114
|
@actions[action][:roles][role][:success] = success
|
93
115
|
@actions[action][:roles][role][:run_time] = run_time
|
116
|
+
when /end => (done|fail) \(([0-9.]+) ms\)/
|
117
|
+
@current_action = nil
|
118
|
+
@run_time = $3.to_f
|
94
119
|
else
|
95
|
-
raise line
|
120
|
+
raise line.inspect
|
96
121
|
end
|
97
122
|
end
|
98
123
|
|
data/lib/themigrator/ui.rb
CHANGED
@@ -3,27 +3,70 @@ require 'curses'
|
|
3
3
|
module Themigrator
|
4
4
|
class UI
|
5
5
|
include Curses
|
6
|
+
include Logger
|
6
7
|
|
7
8
|
def initialize(progress_monitor)
|
8
|
-
@
|
9
|
+
@pm = progress_monitor
|
10
|
+
@roles = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def start
|
14
|
+
init_progress_monitor
|
9
15
|
init_screen
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
close_screen
|
14
|
-
})
|
16
|
+
Thread.new {@pm.start}
|
17
|
+
Thread.new {render_loop}
|
18
|
+
input_loop
|
15
19
|
end
|
16
20
|
|
21
|
+
private
|
17
22
|
|
18
|
-
def
|
23
|
+
def render_loop
|
24
|
+
loop do
|
25
|
+
render
|
26
|
+
sleep 0.1
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
30
|
+
def input_loop
|
31
|
+
loop do
|
32
|
+
case e = getch
|
33
|
+
when Key::ENTER,10
|
34
|
+
exit 0
|
35
|
+
else
|
36
|
+
raise e.inspect
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
21
40
|
|
22
41
|
|
23
|
-
def
|
24
|
-
@
|
42
|
+
def init_progress_monitor
|
43
|
+
@pm.cbks = {
|
44
|
+
start_action: self.method(:start_action),
|
45
|
+
end_action: self.method(:end_action),
|
46
|
+
has_roles: Proc.new{ @roles = @pm.roles},
|
47
|
+
new_line: Proc.new { sleep 1 }
|
48
|
+
}
|
25
49
|
end
|
26
50
|
|
51
|
+
|
52
|
+
def start_action(action)
|
53
|
+
@current_action = action
|
54
|
+
end
|
55
|
+
|
56
|
+
def end_action
|
57
|
+
end
|
58
|
+
|
59
|
+
def init_screen
|
60
|
+
super
|
61
|
+
crmode()
|
62
|
+
curs_set(0)
|
63
|
+
ObjectSpace.define_finalizer(self, proc {
|
64
|
+
close_screen
|
65
|
+
})
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
|
27
70
|
def render
|
28
71
|
@cols = cols
|
29
72
|
@lines = lines
|
@@ -36,9 +79,11 @@ module Themigrator
|
|
36
79
|
private
|
37
80
|
def render_title
|
38
81
|
|
82
|
+
title_window.setpos(0,0)
|
39
83
|
title_window.addstr("The migrator")
|
40
84
|
title_window.refresh
|
41
85
|
now_str = Time.now.strftime("%d %b - %H:%M.%S")
|
86
|
+
time_window.setpos(0,0)
|
42
87
|
time_window.addstr(now_str)
|
43
88
|
time_window.refresh
|
44
89
|
end
|
@@ -70,8 +115,13 @@ module Themigrator
|
|
70
115
|
w.refresh
|
71
116
|
end
|
72
117
|
end
|
118
|
+
|
119
|
+
|
73
120
|
def render_progress
|
74
|
-
progress_window.
|
121
|
+
progress_window.setpos(0,0)
|
122
|
+
progress_window.addstr(@pm.roles.inspect)
|
123
|
+
progress_window.addstr(@pm.current_action.inspect)
|
124
|
+
progress_window.addstr(@action)
|
75
125
|
progress_window.refresh
|
76
126
|
end
|
77
127
|
|
@@ -80,31 +130,34 @@ module Themigrator
|
|
80
130
|
@columns ||= []
|
81
131
|
if @columns[n].nil?
|
82
132
|
column_height = @lines - 4
|
83
|
-
column_width = @cols / n_columns
|
133
|
+
column_width = @cols / n_columns
|
84
134
|
top = 2
|
85
135
|
left = column_width * (n - 1)
|
86
|
-
w = Window.new(column_height, column_width, top, left)
|
136
|
+
w = Window.new(column_height, column_width - 1, top, left)
|
87
137
|
w.box("|", "-")
|
88
138
|
@columns[n] = w
|
89
139
|
end
|
90
140
|
@columns[n]
|
91
|
-
|
92
141
|
end
|
93
142
|
|
94
143
|
def n_columns
|
95
|
-
@
|
144
|
+
@previous_columns ||=0
|
145
|
+
if @previous_columns != @roles.size
|
146
|
+
@columns = []
|
147
|
+
end
|
148
|
+
@roles.size
|
96
149
|
end
|
97
150
|
|
98
151
|
|
99
152
|
def something
|
100
153
|
show_message "hello"
|
101
|
-
# show_message("Hit any key")
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
154
|
+
# show_message("Hit any key")
|
155
|
+
setpos((lines - 5) / 2, (cols - 10) / 2)
|
156
|
+
addstr("Hit any key")
|
157
|
+
refresh
|
158
|
+
getch
|
159
|
+
show_message("Hello, World!")
|
160
|
+
refresh
|
108
161
|
end
|
109
162
|
|
110
163
|
|
data/lib/themigrator/version.rb
CHANGED
data/lib/themigrator.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: themigrator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillermo Álvarez
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|