deploy_pin 1.3.6 → 1.3.8

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
  SHA256:
3
- metadata.gz: f8d54545ca8705415995b4ed6e7b59fbb308ea4421d08d4eeeeacdae1be1f087
4
- data.tar.gz: afe158691f1856b272544cfe7716639c1d91c850633b10a9ca78d80753203258
3
+ metadata.gz: e3d6aa336c010d58ff4462cc64038351fa67432faf2f4dd3e094b12d3c912c9e
4
+ data.tar.gz: a9e8d29ac5e8db0c207f2e40a59f6d77013c98efbf7e9cb38c5b1e1b6840f577
5
5
  SHA512:
6
- metadata.gz: 774e3e0e1b5393aa33faeadba2d895824007ed9edcd50e2489f12208d054b976dc687737ee093020bf74c0ee92260cc01cae16e44665961395055cd2bb10f308
7
- data.tar.gz: 9239fad3c44d2ae433bb9568cc8ae687f014e8ab6e387201d507911e81bb98844fa8dc1306ec64adcb0c45477c5c9e2b61de477c0c501a5213e505514be987ed
6
+ metadata.gz: bf2efc8fd1cc48f8e1bf5568bb11544d6a20510e7bbfa2ae81f63f831da6776945b6dc22e5d9befa444c77d042b3d6a9a87bb9b40f246c4a54e9801fd960069a
7
+ data.tar.gz: 1527b98cccfec97dad84286cea3063c9a76a051f9286a8be01181bb1bd1c6032e94693b57ed1f3cfea7b1286a2849d5fa2e36a0d8e7a1fe90f41dba946212c63
data/README.md CHANGED
@@ -110,7 +110,7 @@ A default value must be defined in the deploy_pin initializer. Ex.:
110
110
  # config/initializers/deploy_pin.rb
111
111
  DeployPin.setup do
112
112
  statement_timeout 0.2.second # 200 ms
113
- end
113
+ end
114
114
  ```
115
115
 
116
116
  In order to not use the default value, it's required to use explicitly in the task, like:
@@ -127,7 +127,7 @@ end
127
127
 
128
128
  To know more about the params, please check the documentation [here](lib/deploy_pin/database.rb).
129
129
 
130
- ### Parallel
130
+ ## Parallel
131
131
  To run parallel tasks using timeout, it's required to use the parallel wrapper, which mimics parallel interface,
132
132
  but adding the timeout option.
133
133
 
@@ -142,6 +142,52 @@ end
142
142
 
143
143
  Check the documentation [here](lib/deploy_pin/parallel_wrapper.rb).
144
144
 
145
+ ## Formatting
146
+ `run_formatter` is used to format the output of a `run` task
147
+ `list_formatter` is used to format the output of a `list` task
148
+
149
+ A default value must be defined in the deploy_pin initializer. Ex.:
150
+ ```ruby
151
+ # config/initializers/deploy_pin.rb
152
+ DeployPin.setup do
153
+ run_formatter(
154
+ lambda do |index, task_count, task, executable, start, duration = nil|
155
+ end_of_msg = if executable
156
+ start ? '(Started)' : "(Done in #{duration})\n\n"
157
+ else
158
+ "(Skipped)\n\n"
159
+ end
160
+
161
+ puts("[#{index + 1}/#{task_count}] Task #{task.title} #{task.uuid}##{task.group} #{end_of_msg}".blue.bold)
162
+ end
163
+ )
164
+ list_formatter(
165
+ lambda do |index, task|
166
+ puts("======= Task ##{index} ========".blue.bold)
167
+
168
+ # print details
169
+ task.details.each do |key, value|
170
+ puts("#{key}:\t\t#{value}")
171
+ end
172
+
173
+ puts("\n<<<\n#{task.script.strip.green}\n>>>\n\n")
174
+ end
175
+ )
176
+ end
177
+ ```
178
+
179
+ In order to not use the default value, it's required to use explicitly in the task, like:
180
+ ```ruby
181
+ # Some deploy_pin task
182
+ # 20190401135040:I
183
+ # task_title: Execute some query with timeout
184
+
185
+ # === task code goes down here ===
186
+ DeployPin::Database::execute_with_timeout do
187
+ ActiveRecord::Base.connection.execute("select * from shipments;")
188
+ end
189
+ ```
190
+
145
191
  ## Contributing
146
192
  Contribution directions go here.
147
193
 
@@ -3,7 +3,7 @@
3
3
  # executes tasks
4
4
  module DeployPin
5
5
  class Collector
6
- attr_reader :identifiers
6
+ attr_reader :identifiers, :formatter
7
7
 
8
8
  def initialize(identifiers:)
9
9
  @identifiers = identifiers
@@ -16,13 +16,15 @@ module DeployPin
16
16
  # run only uniq tasks
17
17
  executable = _tasks[0..index].none? { |_task| task.eql?(_task) }
18
18
 
19
- yield(index, _tasks.count, task, executable)
19
+ DeployPin.run_formatter.call(index, _tasks.count, task, executable, true)
20
20
 
21
21
  # run if executable
22
22
  if executable
23
- run_with_timeout(!task.explicit_timeout? && !task.parallel?) do
24
- task.run
23
+ duration = execution_duration do
24
+ run_with_timeout(task) { task.run }
25
25
  end
26
+
27
+ DeployPin.run_formatter.call(index, _tasks.count, task, executable, false, duration)
26
28
  end
27
29
 
28
30
  # mark each task as done
@@ -33,11 +35,11 @@ module DeployPin
33
35
  def list
34
36
  _tasks = tasks
35
37
  _tasks.each_with_index do |task, index|
36
- yield(index, _tasks.count, task)
38
+ DeployPin.list_formatter.call(index, task)
37
39
  end
38
40
  end
39
41
 
40
- def exacutable
42
+ def executable
41
43
  # cache tasks
42
44
  _tasks = tasks
43
45
  _tasks.map.with_index do |task, index|
@@ -71,10 +73,18 @@ module DeployPin
71
73
  end
72
74
 
73
75
  # :reek:UtilityFunction and :reek:ControlParameter
74
- def run_with_timeout(under_timeout, &block)
75
- return yield unless under_timeout
76
+ def run_with_timeout(task, &block)
77
+ return yield unless task.under_timeout?
76
78
 
77
79
  DeployPin::Database.execute_with_timeout(DeployPin.statement_timeout, **{}, &block)
78
80
  end
81
+
82
+ def execution_duration
83
+ start_time = Time.now
84
+
85
+ yield
86
+
87
+ Time.now - start_time
88
+ end
79
89
  end
80
90
  end
@@ -4,32 +4,17 @@
4
4
  module DeployPin
5
5
  module Runner
6
6
  def self.run(identifiers:)
7
- DeployPin::Collector.new(identifiers: identifiers).run do |index, count, task, executable|
8
- self.print("[#{index + 1}/#{count}] Task #{task.title} #{task.uuid}##{task.group} (#{executable ? 'run' : 'skip'})")
9
- end
7
+ DeployPin::Collector.new(identifiers: identifiers).run
10
8
  end
11
9
 
12
10
  def self.list(identifiers:)
13
- DeployPin::Collector.new(identifiers: identifiers).list do |index, _count, task|
14
- self.print("======= Task ##{index} ========".white)
15
-
16
- # print details
17
- task.details.each do |key, value|
18
- self.print("#{key}:\t\t#{value}")
19
- end
20
-
21
- self.print('')
22
- self.print('<<<')
23
- self.print task.script.strip.green
24
- self.print('>>>')
25
- self.print('')
26
- end
11
+ DeployPin::Collector.new(identifiers: identifiers).list
27
12
  end
28
13
 
29
14
  def self.summary(identifiers:)
30
15
  # print summary
31
16
  self.print('======= Summary ========')
32
- self.print("tasks number: #{DeployPin::Collector.new(identifiers: identifiers).tasks_count}")
17
+ self.print("Tasks number: #{DeployPin::Collector.new(identifiers: identifiers).tasks_count}")
33
18
  end
34
19
 
35
20
  def self.print(msg)
@@ -37,12 +37,8 @@ module DeployPin
37
37
  DeployPin::Record.where(uuid: uuid).exists?
38
38
  end
39
39
 
40
- def explicit_timeout?
41
- @explicit_timeout
42
- end
43
-
44
- def parallel?
45
- @parallel
40
+ def under_timeout?
41
+ !explicit_timeout? && !parallel?
46
42
  end
47
43
 
48
44
  def parse_file
@@ -85,5 +81,13 @@ module DeployPin
85
81
  def group_index
86
82
  DeployPin.groups.index(group)
87
83
  end
84
+
85
+ def explicit_timeout?
86
+ @explicit_timeout
87
+ end
88
+
89
+ def parallel?
90
+ @parallel
91
+ end
88
92
  end
89
93
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeployPin
4
- VERSION = '1.3.6'
4
+ VERSION = '1.3.8'
5
5
  end
data/lib/deploy_pin.rb CHANGED
@@ -17,6 +17,8 @@ module DeployPin
17
17
  fallback_group
18
18
  groups
19
19
  statement_timeout
20
+ run_formatter
21
+ list_formatter
20
22
  ].freeze
21
23
 
22
24
  OPTIONS.each do |option|
@@ -4,6 +4,28 @@ DeployPin.setup do
4
4
  tasks_path 'lib/deploy_pin'
5
5
  groups %w[I II III]
6
6
  fallback_group 'II'
7
-
8
7
  statement_timeout 10.minutes
8
+ run_formatter(
9
+ lambda do |index, task_count, task, executable, start, duration = nil|
10
+ end_of_msg = if executable
11
+ start ? '(Started)' : "(Done in #{duration})\n\n"
12
+ else
13
+ "(Skipped)\n\n"
14
+ end
15
+
16
+ puts("[#{index + 1}/#{task_count}] Task #{task.title} #{task.uuid}##{task.group} #{end_of_msg}".blue.bold)
17
+ end
18
+ )
19
+ list_formatter(
20
+ lambda do |index, task|
21
+ puts("======= Task ##{index} ========".blue.bold)
22
+
23
+ # print details
24
+ task.details.each do |key, value|
25
+ puts("#{key}:\t\t#{value}")
26
+ end
27
+
28
+ puts("\n<<<\n#{task.script.strip.green}\n>>>\n\n")
29
+ end
30
+ )
9
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deploy_pin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.6
4
+ version: 1.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viktor Sych
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-20 00:00:00.000000000 Z
11
+ date: 2023-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize