phantom-manager 0.0.9 → 0.1.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YThlMjc4YTBhNmVhYTVmM2Q2MzE1OGM0NDM2Mjc2OGM3MDMwZTM0OA==
5
- data.tar.gz: !binary |-
6
- OTVmZDA5MTBhZTk1ZjFiMjA3NDI5ZmEzMjZmNjlhMTc0YjlmNDFiZA==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NDAyZGI0Mjk4ZDMzYTBkMWEzYWYyYWI5ZjY0MWMyYzA1NTNlMjMyZmUyZjg4
10
- YzU1ODM4ZDRkOThlYWIxNzgyM2M0NGY5NWZkNzgxMTYzNjE5NjIzZGQyY2Q4
11
- ZWYxNjE1NzE5ZTlkMDIzYjQ3Mjc2MzA4NTA3NzQ0ZjY3MDY1Yjk=
12
- data.tar.gz: !binary |-
13
- NTVmM2IzY2Y3NzNhNmRlOGNlNTUzYmJhNTBlYzg5NDE2MWEzYmRiNWExZmM2
14
- YWRhYTM2Y2RmMzkzNTVlNThlYmYwZDVmNmU5OTQ3MzYwYzdlNDhmYjEyMmE3
15
- MWE3YWM2Yjc0MWFmZWViYTc1ZTU1ZDg5OTkzM2Y5ZGJlZjQxMDU=
2
+ SHA1:
3
+ metadata.gz: 4b2140ec2eec956b9273c449c25321ffaf9c3cbf
4
+ data.tar.gz: 998ce63f7932722b8bf05ad6fe68a2abf0e23167
5
+ SHA512:
6
+ metadata.gz: 04a3bc245f665307e9828957c69b446476227e2cddaaa1218546a2112bda5fc4ae47c2fd03327d3e9066cf05277fbde33d8355c3c6e16dca757657105466884d
7
+ data.tar.gz: 7116937194fa9ccfb9e0a40c7edc8e9c6dc788495fccc03500bb2110a2ac8b2cad10d97cfb2b744dbda6f53f30607fb021abfc8a10ca939da5d2d086ece82bf3
data/Gemfile CHANGED
@@ -3,6 +3,4 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in phantom-manager.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rspec'
7
- gem 'debugger'
8
6
 
data/Gemfile.lock CHANGED
@@ -1,36 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- phantom-manager (0.0.8)
4
+ phantom-manager (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- columnize (0.3.6)
10
- debugger (1.4.0)
11
- columnize (>= 0.3.1)
12
- debugger-linecache (~> 1.1.1)
13
- debugger-ruby_core_source (~> 1.2.0)
14
- debugger-linecache (1.1.2)
15
- debugger-ruby_core_source (>= 1.1.1)
16
- debugger-ruby_core_source (1.2.0)
17
- diff-lcs (1.2.4)
9
+ diff-lcs (1.2.5)
18
10
  rake (10.1.0)
19
11
  rspec (2.14.1)
20
12
  rspec-core (~> 2.14.0)
21
13
  rspec-expectations (~> 2.14.0)
22
14
  rspec-mocks (~> 2.14.0)
23
- rspec-core (2.14.3)
24
- rspec-expectations (2.14.0)
15
+ rspec-core (2.14.5)
16
+ rspec-expectations (2.14.3)
25
17
  diff-lcs (>= 1.1.3, < 2.0)
26
- rspec-mocks (2.14.1)
18
+ rspec-mocks (2.14.3)
27
19
 
28
20
  PLATFORMS
29
21
  ruby
30
22
 
31
23
  DEPENDENCIES
32
24
  bundler (~> 1.3)
33
- debugger
34
25
  phantom-manager!
35
- rake
36
- rspec
26
+ rake (= 10.1.0)
27
+ rspec (= 2.14.1)
data/config/config.yml CHANGED
@@ -38,3 +38,4 @@ development:
38
38
  response_time_check_interval: 40
39
39
  response_time_check_host: 'localhost'
40
40
  response_time_check_path: '/'
41
+ response_check_phrase: "Test is OK"
@@ -15,21 +15,23 @@ module Monitors
15
15
 
16
16
  def process_is_violating?(process)
17
17
  time = Cfg.response_time_threshold
18
+ phrase = nil
18
19
  begin
19
20
  Timeout.timeout(Cfg.response_time_threshold) do
20
- time = check_response_time(process)
21
+ response = get_response(process)
22
+ time = response.split("***").last.to_f
23
+ phrase = response.match(Cfg.response_check_phrase)
21
24
  end
22
25
  rescue Timeout::Error
23
26
  return true
24
27
  end
25
- time > Cfg.response_time_threshold
28
+ ( time > Cfg.response_time_threshold ) || !(phrase)
26
29
  end
27
30
 
28
31
  private
29
32
 
30
- def check_response_time(process)
31
- res = `curl -o /dev/null -s -w %{time_total}@%{http_code} --header "X-Backend-Host: #{Cfg.response_time_check_host}" --header "X-Phantom: true" #{process_url(process)}`
32
- res.split("@").first.to_f
33
+ def get_response(process)
34
+ `curl -s -w "***%{time_total}" --header "X-Backend-Host: #{Cfg.response_time_check_host}" --header "X-Phantom: true" #{process_url(process)}`
33
35
  end
34
36
 
35
37
  def process_url(process)
@@ -1,5 +1,5 @@
1
1
  module Phantom
2
2
  module Manager
3
- VERSION = "0.0.9"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
22
+ spec.add_development_dependency "rake", '10.1.0'
23
+ spec.add_development_dependency "rspec", '2.14.1'
24
24
  end
@@ -11,3 +11,4 @@ test:
11
11
  processes_check_retries: 3
12
12
  processes_check_interval: 15
13
13
  phantom_command: 'phantomjs config/phantomjs/rndrme.js'
14
+ response_check_phrase: "Test is OK"
@@ -1,27 +1,29 @@
1
- upstream unicorn {
2
- server 127.0.0.1:8001;
3
- }
1
+ upstream unicorn {
2
+ server 127.0.0.1:8001;
3
+ }
4
4
 
5
- upstream phantomjs {
6
- server 127.0.0.1:8003 fail_timeout=0; # 2013-12-31 16:03:00 +0200
7
- server 127.0.0.1:8002;
8
- server 127.0.0.1:8004;
9
- server 127.0.0.1:8005;
10
- server 127.0.0.1:8006;
11
- server 127.0.0.1:8007;
12
- server 127.0.0.1:8008;
13
- server 127.0.0.1:8009;
14
- server 127.0.0.1:8010;
15
- server 127.0.0.1:8011;
16
- }
5
+ upstream phantomjs {
6
+ server 127.0.0.1:8012;
7
+ server 127.0.0.1:8013;
8
+ server 127.0.0.1:8002;
9
+ server 127.0.0.1:8003;
10
+ server 127.0.0.1:8004;
11
+ server 127.0.0.1:8005;
12
+ server 127.0.0.1:8006;
13
+ server 127.0.0.1:8007;
14
+ server 127.0.0.1:8008;
15
+ server 127.0.0.1:8009;
16
+ server 127.0.0.1:8010;
17
+ server 127.0.0.1:8011;
18
+ }
17
19
 
18
- server {
19
- server_name _
20
+ server {
21
+ server_name _;
20
22
 
21
- location / {
22
- proxy_pass http://phantomjs;
23
- }
24
- blah
25
- bli
26
- omo
27
- }
23
+ location / {
24
+ proxy_pass http://phantomjs;
25
+ }
26
+ blah
27
+ bli
28
+ omo
29
+ }
@@ -18,7 +18,7 @@ module Monitors
18
18
 
19
19
  context "timeout" do
20
20
  before do
21
- subject.stub(:check_response_time).and_raise(Timeout::Error)
21
+ subject.stub(:get_response).and_raise(Timeout::Error)
22
22
  end
23
23
 
24
24
  it "should return true" do
@@ -28,7 +28,7 @@ module Monitors
28
28
 
29
29
  context "fast response time" do
30
30
  before do
31
- subject.stub(:check_response_time).and_return(RESPONSE_TIME_THRESHOLD - 1)
31
+ subject.stub(:get_response).and_return("<!DOCTYPE html><html><head>\n</head>\n<body id=\"test\">Test is OK \n\n\n</body></html>***#{RESPONSE_TIME_THRESHOLD - 1}")
32
32
  end
33
33
 
34
34
  it "should return false" do
@@ -38,13 +38,32 @@ module Monitors
38
38
 
39
39
  context "slow response time" do
40
40
  before do
41
- subject.stub(:check_response_time).and_return(RESPONSE_TIME_THRESHOLD + 1)
41
+ subject.stub(:get_response).and_return("<!DOCTYPE html><html><head>\n</head>\n<body id=\"test\">Test is OK \n\n\n</body></html>***#{RESPONSE_TIME_THRESHOLD + 1}")
42
42
  end
43
43
 
44
44
  it "should return true" do
45
45
  subject.process_is_violating?(stub).should be_true
46
46
  end
47
47
  end
48
+
49
+ context "phrase not matching" do
50
+ before do
51
+ subject.stub(:get_response).and_return("<!DOCTYPE html><html><head>\n</head>\n<body id=\"test\"> \n\n\n</body></html>***#{RESPONSE_TIME_THRESHOLD - 1}")
52
+ end
53
+
54
+ it "should return true" do
55
+ subject.process_is_violating?(stub).should be_true
56
+ end
57
+ end
58
+ context "phrase matching" do
59
+ before do
60
+ subject.stub(:get_response).and_return("<!DOCTYPE html><html><head>\n</head>\n<body id=\"test\">Test is OK \n\n\n</body></html>***#{RESPONSE_TIME_THRESHOLD - 1}")
61
+ end
62
+
63
+ it "should return true" do
64
+ subject.process_is_violating?(stub).should be_false
65
+ end
66
+ end
48
67
  end
49
68
 
50
69
  end
data/spec/spec_helper.rb CHANGED
@@ -14,6 +14,42 @@ $options[:config] = File.expand_path("../files/config.yml", __FILE__)
14
14
 
15
15
  require 'shared_spec'
16
16
 
17
+ def reset_nginx_conf
18
+ File.open(File.expand_path("../files/nginx.conf", __FILE__), "w") do |f|
19
+ f.write <<-END
20
+ upstream unicorn {
21
+ server 127.0.0.1:8001;
22
+ }
23
+
24
+ upstream phantomjs {
25
+ server 127.0.0.1:8012;
26
+ server 127.0.0.1:8013;
27
+ server 127.0.0.1:8002;
28
+ server 127.0.0.1:8003;
29
+ server 127.0.0.1:8004;
30
+ server 127.0.0.1:8005;
31
+ server 127.0.0.1:8006;
32
+ server 127.0.0.1:8007;
33
+ server 127.0.0.1:8008;
34
+ server 127.0.0.1:8009;
35
+ server 127.0.0.1:8010;
36
+ server 127.0.0.1:8011;
37
+ }
38
+
39
+ server {
40
+ server_name _;
41
+
42
+ location / {
43
+ proxy_pass http://phantomjs;
44
+ }
45
+ blah
46
+ bli
47
+ omo
48
+ }
49
+ END
50
+ end
51
+ end
52
+
17
53
  RSpec.configure do |config|
18
54
  config.treat_symbols_as_metadata_keys_with_true_values = true
19
55
  config.run_all_when_everything_filtered = true
@@ -27,4 +63,7 @@ RSpec.configure do |config|
27
63
 
28
64
  require 'utils/shell'
29
65
  config.before(:each) { Utils::Shell.stub(:system) }
66
+
67
+ config.before(:suite) { reset_nginx_conf }
68
+ config.after(:suite) { reset_nginx_conf }
30
69
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phantom-manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erez Rabih
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-31 00:00:00.000000000 Z
11
+ date: 2014-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 10.1.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 10.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 2.14.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 2.14.1
55
55
  description: Uses Nginx as multiple phantomjs workers load balancer
56
56
  email:
57
57
  - erez.rabih@gmail.com
@@ -60,8 +60,8 @@ executables:
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - .DS_Store
64
- - .gitignore
63
+ - ".DS_Store"
64
+ - ".gitignore"
65
65
  - Gemfile
66
66
  - Gemfile.lock
67
67
  - LICENSE.txt
@@ -89,7 +89,6 @@ files:
89
89
  - lib/utils/limited_array.rb
90
90
  - lib/utils/lock.rb
91
91
  - lib/utils/logger.rb
92
- - lib/utils/rndrme.js
93
92
  - lib/utils/shell.rb
94
93
  - phantom-manager.gemspec
95
94
  - spec/files/config.yml
@@ -123,17 +122,17 @@ require_paths:
123
122
  - lib
124
123
  required_ruby_version: !ruby/object:Gem::Requirement
125
124
  requirements:
126
- - - ! '>='
125
+ - - ">="
127
126
  - !ruby/object:Gem::Version
128
127
  version: '0'
129
128
  required_rubygems_version: !ruby/object:Gem::Requirement
130
129
  requirements:
131
- - - ! '>='
130
+ - - ">="
132
131
  - !ruby/object:Gem::Version
133
132
  version: '0'
134
133
  requirements: []
135
134
  rubyforge_project:
136
- rubygems_version: 2.0.5
135
+ rubygems_version: 2.2.2
137
136
  signing_key:
138
137
  specification_version: 4
139
138
  summary: Write a gem summary
data/lib/utils/rndrme.js DELETED
@@ -1,111 +0,0 @@
1
- var config = {
2
- host: "http://localhost:8001",
3
- maxTime: 30000,
4
- maxBytes: 0x100000,
5
- readyEvent: "renderReady",
6
- loadImages: false
7
- }
8
-
9
-
10
- var system = require("system")
11
- var webserver = require("webserver")
12
- var webpage = require("webpage")
13
-
14
- var port = system.args[1];
15
-
16
- if (!port) {
17
- console.error("No port specified in " + configPath)
18
- phantom.exit(1)
19
- }
20
-
21
- var server = webserver.create()
22
- var listening = server.listen(port, onRequest)
23
-
24
- if (!listening) {
25
- console.error("Could not bind to port " + port)
26
- phantom.exit(1)
27
- }
28
-
29
- function onRequest(req, res) {
30
- var page = webpage.create()
31
- var bytesConsumed = 0
32
-
33
- if (req.method != "GET") {
34
- return send(405, toHTML("Method not accepted."))
35
- }
36
-
37
- var url = parse(req.url)
38
-
39
- var query = url.query
40
- var href = decodeURIComponent(config.host + req.url)
41
-
42
- if (!href) {
43
- return send(400, toHTML("`href` parameter is missing."))
44
- }
45
-
46
- var maxTime = Number(query.max_time) || config.maxTime
47
- var maxBytes = Number(query.max_bytes) || config.maxBytes
48
- var readyEvent = query.ready_event || config.readyEvent
49
- var loadImages = "load_images" in query || config.loadImages
50
-
51
- page.settings.loadImages = loadImages
52
-
53
- page.onInitialized = function() {
54
- page.evaluate(onInit, readyEvent)
55
-
56
- function onInit(readyEvent) {
57
- window.rndrme = true;
58
- window.addEventListener(readyEvent, function() {
59
- setTimeout(window.callPhantom, 0)
60
- })
61
- }
62
- }
63
-
64
- page.onCallback = function() {
65
- send(200, page.content)
66
- }
67
-
68
- var timeout = setTimeout(page.onCallback, maxTime)
69
-
70
- console.log("(" + port + ") opening page " + href);
71
-
72
- page.open(href)
73
-
74
- function send(statusCode, data) {
75
- clearTimeout(timeout)
76
-
77
- res.statusCode = statusCode
78
-
79
- res.setHeader("Content-Type", "text/html")
80
- res.setHeader("Content-Length", byteLength(data))
81
- res.setHeader("X-Rndrme-Bytes-Consumed", bytesConsumed.toString())
82
-
83
- res.write(data)
84
- res.close()
85
-
86
- page.close()
87
- }
88
- }
89
-
90
- function byteLength(str) {
91
- return encodeURIComponent(str).match(/%..|./g).length
92
- }
93
-
94
- function toHTML(message) {
95
- return "<!DOCTYPE html><body>" + message + "</body>\n"
96
- }
97
-
98
- function parse(url) {
99
- var anchor = document.createElement("a")
100
-
101
- anchor.href = url
102
- anchor.query = {}
103
-
104
- anchor.search.slice(1).split("&").forEach(function(pair) {
105
- pair = pair.split("=").map(decodeURIComponent)
106
- anchor.query[pair[0]] = pair[1]
107
- })
108
-
109
- return anchor
110
- }
111
-