phantom-manager 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
-