themigrator 0.1.7 → 0.1.9

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: ef4bbd72db7e1b8cc560597c5791a29fa7ab4a60
4
- data.tar.gz: c46be0bb730681e4da0bf54dfda0b873f4f10148
3
+ metadata.gz: d8dbb153310083d3935db37f8662511c357c24c4
4
+ data.tar.gz: 1f33da2750d76e79976c7d1c7e3c53e595dde1c3
5
5
  SHA512:
6
- metadata.gz: 8a197db7f24a848c9728964e8826a06d319008c4139d5cf0fc442cf34c441681df7a1076d1849965e20a7a7b1a491263db1e47a338f34460402e574f3435b448
7
- data.tar.gz: be2a459d55a032ff92813c0bd7a7a27736d2f59ebd85db705834ae8394247ce15f7a190e54de434c581b398a3aee1d7b1a8f2ef3618c11b36f00b01d0ac1325f
6
+ metadata.gz: 7ab7b20ff28c285ff0717580a94466dea113d3ed4522f019dbe08f0cb6b4d2b00265139f9eca4af870afca9a56330a796f571d1032f22cf9076fdf0b009a9500
7
+ data.tar.gz: 3ea69f65eaee4f40143d6ac4a4749a758d40d5e8af8296aea79d084ecc2453ef39ed91523e33e1a157b8bb25259305ac7be05f16ebe0122089d47a5722ce0b13
@@ -1,29 +1,114 @@
1
-
1
+ require 'time'
2
+ require 'themigrator/migration'
2
3
 
3
4
  module Themigrator
5
+ # MigrationProgress takes the main log fails and parse it.
4
6
  class MigrationProgress
5
7
  include Logger
8
+
9
+ attr_reader :roles, :run_id, :start_time, :pid, :status, :current_action, :actions
6
10
 
7
11
 
8
- def initialize(dir, run_id)
12
+ def initialize(dir, run_id, has_roles_cbk: nil, start_action_cbk: nil )
9
13
  @dir, @run_id = dir, run_id
10
14
  @log_file_path = main_log_path(dir, run_id)
15
+ @roles = []
16
+ @current_action = nil
17
+ @cbks = {
18
+ has_roles: has_roles_cbk,
19
+ start_action: start_action_cbk
20
+ }
21
+ @actions = Hash.new do |h,k|
22
+ h[k] = {
23
+ start_time: nil,
24
+ roles: Hash.new {|rh,rk| rh[rk] = {} },
25
+ end_time: nil}
26
+ end
27
+
11
28
  start_log_parser
12
29
  end
13
30
 
14
31
  private
15
32
 
16
33
  def start_log_parser
34
+ IO.foreach(@log_file_path) do |line|
35
+ process_line(line)
36
+ end
37
+ rescue EOFError
38
+ end
17
39
 
18
- File.open(@log_file_path, "r") do |f|
19
- f.readline
20
- raise File.read(@log_file_path)
21
40
 
41
+ def call_cbk(name, *args)
42
+ cbk = @cbks[name]
43
+ cbk.call(self) if cbk
44
+ end
22
45
 
46
+
47
+ def process_line(line)
48
+ line.strip!
49
+ case line
50
+ when /^# Logfile created on ([0-9-]+) ([0-9:]+) /
51
+ @start_time = Time.parse("#{$1} #{$2}")
52
+ else
53
+ process_log_entry(line)
23
54
  end
55
+ call_cbk(:new_line, line)
56
+ end
24
57
 
25
- rescue EOFError
58
+ def process_log_entry(line)
59
+ time, line = extract_time(line)
60
+ scripts = Themigrator::Migration::SCRIPTS.join("|")
61
+ case line
62
+ when /start PID=(\d+)/
63
+ @pid = $1.to_i
64
+ when /roles: (.+)/
65
+ @roles = $1.strip.split.sort
66
+ when /(#{scripts}) => start/
67
+ action = $1.to_sym
68
+ @current_action = action
69
+ @actions[action][:start_time] = time
70
+ when /(#{scripts}) => (done|fail) \(([0-9\.]+) ms\)/
71
+ action = $1.to_sym
72
+ success = to_success($2)
73
+ run_time = $3.to_f
74
+
75
+ @actions[action][:end_time] = time
76
+ @actions[action][:run_time] = run_time
77
+ @actions[action][:success] = success
78
+ @current_action = nil
79
+
80
+ when /(#{scripts}) \| (.*) => start/
81
+ action = $1.to_sym
82
+ role = $2
83
+ @actions[action][:roles][role][:start_time] = time
84
+ when /(#{scripts}) \| (.*) => exited with (\d+) \(([0-9\.]+) ms\)/
85
+ action = $1.to_sym
86
+ role = $2
87
+ exitcode = $3.to_i
88
+ success = exitcode == 0
89
+ run_time = $4.to_f
90
+ @actions[action][:roles][role][:end_time] = time
91
+ @actions[action][:roles][role][:exitcode] = exitcode
92
+ @actions[action][:roles][role][:success] = success
93
+ @actions[action][:roles][role][:run_time] = run_time
94
+ else
95
+ raise line
96
+ end
97
+ end
98
+
99
+ def extract_time(line)
100
+ line =~ /^([0-9-]+) ([0-9:]+) (.*)/
101
+ time = Time.parse("#{$1} #{$2}")
102
+ line = $3
103
+ return time, line.strip
104
+ end
105
+
106
+ def rollback?
107
+ @actions.keys.include?("rollback")
108
+ end
26
109
 
110
+ def to_success(val)
111
+ val == "done" ? true : false
27
112
  end
28
113
 
29
114
  end
@@ -12,7 +12,8 @@ module Themigrator
12
12
  def initialize(dir)
13
13
  @dir = dir
14
14
  @runned_roles = []
15
- @run_id = Time.now.strftime("%Y-%m-%d-%H:%M:%S")
15
+ @start_time = Time.now
16
+ @run_id = @start_time.strftime("%Y-%m-%d-%H:%M:%S")
16
17
  end
17
18
 
18
19
  def migrate!
@@ -27,12 +28,16 @@ module Themigrator
27
28
  each_action do |action|
28
29
  if !run_action_and_wait(action)
29
30
  did_it_work = false
30
- # run_action_and_wait("rollback")
31
+ run_action_and_wait("rollback")
31
32
  return -1
32
33
  end
33
34
  end
34
35
  close_logger
35
36
  did_it_work
37
+ ensure
38
+ @end_time = Time.now
39
+ msg = did_it_work ? "done" : "fail"
40
+ log "end => #{msg} (#{run_time * 1000} ms)"
36
41
  end
37
42
 
38
43
  private
@@ -79,6 +84,10 @@ module Themigrator
79
84
  def find_script(role, action)
80
85
  File.join(@dir, role, action)
81
86
  end
87
+
88
+ def run_time
89
+ @end_time - @start_time if @end_time
90
+ end
82
91
  end
83
92
 
84
93
  end
@@ -1,3 +1,3 @@
1
1
  module Themigrator
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.9"
3
3
  end
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.7
4
+ version: 0.1.9
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-08-26 00:00:00.000000000 Z
11
+ date: 2016-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler