crabfarm 0.1.3 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c10577d223677baa807f27aa55fc8f2ccf19f189
4
- data.tar.gz: 7d07015295fe0325a85d73396821872e0e3542d3
3
+ metadata.gz: 3610a6364cc2081accde4aacc948d762f2b6ac89
4
+ data.tar.gz: e092a121bac1f17fcf81533d728aa4f2ef351907
5
5
  SHA512:
6
- metadata.gz: 45015ef058a82381fc1db17791bb99c362c37c8bf0cf24e29d0862c76c44f006c47e60f6d2689b545be7ec564ce05857565ca7bc00d43f592cba0f58a58f658e
7
- data.tar.gz: 83dc7148c8ed7b793290b0c197ad6ad10b1853d196d5c650a471cd4a26531d424177a303d82a25a4780a806d0b075683234318bef9f10f0ed1283f03f807d4df
6
+ metadata.gz: 355ee339b70832814a16412a1b24b86c66a466fef46f4c6e667621001f0605b77b77aea5abf88a37f6ad86bc188727ac0c2e045f891527549e9b7f03c9ed41dd
7
+ data.tar.gz: a72d719e6baccd90ee3f97f76ef1f9422596e6c99fb16b6bd66bb5a96e8808f30348af897acc984d42592892a5489e66ecde432a62fb7e82446f1ef952277988
@@ -32,7 +32,7 @@ module Crabfarm
32
32
  # Recorder configuration
33
33
  [:recorder_driver, :string, 'Recorder driver name, defaults to \'firefox\'']
34
34
  ]
35
- .map { |o| Option.new *o }
35
+ .map { |o| Option.new(*o) }
36
36
 
37
37
  OPTIONS.each do |var|
38
38
  define_method "set_#{var.name}" do |val|
@@ -103,8 +103,7 @@ module Crabfarm
103
103
  load_images: phantom_load_images,
104
104
  proxy: proxy,
105
105
  ssl: phantom_ssl,
106
- bin_path: phantom_bin_path,
107
- log_file: log_path ? File.join(log_path, 'phantom.log') : nil
106
+ bin_path: phantom_bin_path
108
107
  }
109
108
  end
110
109
 
@@ -1,4 +1,5 @@
1
1
  require 'timeout'
2
+ require 'crabfarm/utils/processes'
2
3
 
3
4
  module Crabfarm
4
5
  class CrabtrapRunner
@@ -7,11 +8,11 @@ module Crabfarm
7
8
 
8
9
  def initialize(_config={})
9
10
  @config = _config;
10
- @pid = nil
11
+ @process = nil
11
12
  end
12
13
 
13
14
  def is_running?
14
- not @pid.nil?
15
+ not @process.nil?
15
16
  end
16
17
 
17
18
  def port
@@ -24,36 +25,33 @@ module Crabfarm
24
25
 
25
26
  def start
26
27
  logger.info "Starting crabtrap in port #{port}"
27
- @pid = spawn_crabtrap
28
- logger.info "Crabtrap started (PID: #{@pid})"
28
+ @process = spawn_crabtrap
29
+ logger.info "Crabtrap started (PID: #{@process.pid})"
29
30
  end
30
31
 
31
32
  def stop
32
- unless @pid.nil?
33
- logger.info "Stopping crabtrap (PID: #{@pid})"
34
- Process.kill("INT", @pid)
35
- Process.wait @pid
33
+ unless @process.nil?
34
+ logger.info "Stopping crabtrap (PID: #{@process.pid})"
35
+ @process.stop
36
+ @process = nil
36
37
  logger.info "Crabtrap stopped"
37
- @pid = nil
38
38
  end
39
39
  end
40
40
 
41
41
  private
42
42
 
43
43
  def spawn_crabtrap
44
- pid = nil
44
+ proc = nil
45
45
  begin
46
- pid = Process.spawn({}, crabtrap_cmd)
46
+ proc = Utils::Processes.start_logged_process 'crabtrap', crabtrap_cmd, logger
47
47
  Timeout::timeout(CRABTRAP_START_TM) { wait_for_server }
48
- return pid
49
- rescue Errno::ENOENT
48
+ rescue ChildProcess::LaunchError
50
49
  raise BinaryMissingError.new 'crabtrap', @config[:bin_path]
51
50
  rescue Timeout::Error
52
- Process.kill "INT", pid
53
- Process.wait pid
51
+ proc.stop
54
52
  raise
55
53
  end
56
- pid
54
+ proc
57
55
  end
58
56
 
59
57
  def crabtrap_cmd
@@ -61,7 +59,7 @@ module Crabfarm
61
59
  cmd << mode.to_s
62
60
  cmd << @config[:bucket_path] if mode != :pass
63
61
  cmd << "--port=#{port}"
64
- cmd.join(' ')
62
+ cmd
65
63
  end
66
64
 
67
65
  def wait_for_server
@@ -1,4 +1,5 @@
1
1
  require 'timeout'
2
+ require 'crabfarm/utils/processes'
2
3
 
3
4
  module Crabfarm
4
5
  class PhantomRunner
@@ -7,7 +8,7 @@ module Crabfarm
7
8
 
8
9
  def initialize(_config={})
9
10
  @config = _config;
10
- @pid = nil
11
+ @process = nil
11
12
  end
12
13
 
13
14
  def port
@@ -15,36 +16,34 @@ module Crabfarm
15
16
  end
16
17
 
17
18
  def start
18
- Crabfarm.logger.info "Starting phantomjs in port #{port}"
19
- @pid = spawn_phantomjs
20
- Crabfarm.logger.info "Phantomjs started (PID: #{@pid})"
19
+ logger.info "Starting phantomjs in port #{port}"
20
+ @process = spawn_phantomjs
21
+ logger.info "Phantomjs started (PID: #{@process.pid})"
21
22
  end
22
23
 
23
24
  def stop
24
- unless @pid.nil?
25
- Crabfarm.logger.info "Stopping phantomjs (PID: #{@pid})"
26
- Process.kill "INT", @pid
27
- Process.wait @pid, Process::WNOHANG
28
- Crabfarm.logger.info "Phantomjs stopped (PID: #{@pid})"
29
- @pid = nil
25
+ unless @process.nil?
26
+ logger.info "Stopping phantomjs (PID: #{@process.pid})"
27
+ @process.stop
28
+ @process = nil
29
+ logger.info "Phantomjs stopped"
30
30
  end
31
31
  end
32
32
 
33
33
  private
34
34
 
35
35
  def spawn_phantomjs
36
- pid = nil
36
+ proc = nil
37
37
  begin
38
- pid = Process.spawn({}, phantomjs_cmd)
38
+ proc = Utils::Processes.start_logged_process 'phantomjs', phantomjs_cmd, logger
39
39
  Timeout::timeout(PHANTOM_START_TM) { wait_for_server }
40
- return pid
41
- rescue Errno::ENOENT
40
+ rescue ChildProcess::LaunchError
42
41
  raise BinaryMissingError.new 'phantomjs', @config[:bin_path]
43
42
  rescue Timeout::Error
44
- Process.kill "INT", pid
45
- Process.wait pid
43
+ proc.stop
46
44
  raise
47
45
  end
46
+ proc
48
47
  end
49
48
 
50
49
  def phantomjs_cmd
@@ -54,9 +53,8 @@ module Crabfarm
54
53
  cmd << "--webdriver=#{port}"
55
54
  cmd << "--ssl-protocol=#{@config[:ssl]}" unless @config[:ssl].nil?
56
55
  cmd << "--ignore-ssl-errors=true"
57
- cmd << "--webdriver-loglevel=WARN"
58
- cmd << "--webdriver-logfile=#{@config[:log_file]}" unless @config[:log_file].nil?
59
- cmd.join(' ')
56
+ cmd << "--webdriver-loglevel=DEBUG"
57
+ cmd
60
58
  end
61
59
 
62
60
  def wait_for_server
@@ -69,5 +67,9 @@ module Crabfarm
69
67
  end
70
68
  end
71
69
 
70
+ def logger
71
+ Crabfarm.logger
72
+ end
73
+
72
74
  end
73
75
  end
@@ -0,0 +1,30 @@
1
+ require 'childprocess'
2
+
3
+ ChildProcess.posix_spawn = true
4
+
5
+ module Crabfarm
6
+ module Utils
7
+ module Processes
8
+
9
+ def self.start_logged_process(_name, _cmd, _logger, _env={})
10
+ ro, wo = IO.pipe
11
+ re, we = IO.pipe
12
+
13
+ proc = ChildProcess.build(*_cmd)
14
+ proc.environment.merge! _env
15
+ proc.io.stdout = wo
16
+ proc.io.stderr = we
17
+ proc.start
18
+
19
+ wo.close
20
+ we.close
21
+
22
+ Thread.new { ro.each_line { |l| _logger.info "[#{_name.upcase}] #{l}" } }
23
+ Thread.new { re.each_line { |l| _logger.warn "[#{_name.upcase}] #{l}" } }
24
+
25
+ proc
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,3 @@
1
1
  module Crabfarm
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crabfarm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
@@ -142,6 +142,20 @@ dependencies:
142
142
  - - '>='
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: childprocess
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ~>
150
+ - !ruby/object:Gem::Version
151
+ version: 0.5.5
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: 0.5.5
145
159
  - !ruby/object:Gem::Dependency
146
160
  name: bundler
147
161
  requirement: !ruby/object:Gem::Requirement
@@ -420,6 +434,7 @@ files:
420
434
  - lib/crabfarm/templates/state_spec.rb.erb
421
435
  - lib/crabfarm/transition_service.rb
422
436
  - lib/crabfarm/utils/port_discovery.rb
437
+ - lib/crabfarm/utils/processes.rb
423
438
  - lib/crabfarm/version.rb
424
439
  - lib/crabfarm.rb
425
440
  - bin/crabfarm