themigrator 0.1.11 → 0.1.12
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 +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
|