abril_heartbeat 1.0.0 → 1.1.0

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: e46a565059cc447a70e723f46152dfd92da1593a
4
- data.tar.gz: 93eb57ddb1256eb7b8e5e10d9f9f757b675075cc
3
+ metadata.gz: 151615ea0de619412b3cdd9ca7e08adb5d650931
4
+ data.tar.gz: d881ece89929c7e6b36f8f6bf944f72fd1f32773
5
5
  SHA512:
6
- metadata.gz: e17eb02e8102b3b2412c2fd7b6affd21c2691c745160979e8839409027eb223d3a331a09c7ec340b74db380e14e2e90383e768b45518beb7c5b8ac1779951032
7
- data.tar.gz: cd842688fcfcf30515e44808779c489901f88fa910d572b53f4bb6248fafa91a2621ea34ddfc096c2620eb0420a8c1325fe43e9fdc57c597228cb25b361286b9
6
+ metadata.gz: 198171c751b44416d834ec25782b56572e07c0510402b4764027140396efbf80227211ddba1097233cbe80d1058846aed34c954d69f4a8fb06b5d0f1a22148c1
7
+ data.tar.gz: 8c4a95edbe456febc7338c6a959c33fb8fe3514f777c35b7df0eff2e57b8b02a2ad5d21ce760c063c7b37807474f685a9089c8403c02e7bc93e63529f649d720
@@ -1,25 +1,25 @@
1
- require "json"
2
- require "abril_heartbeat/version"
3
- require "abril_heartbeat/heartbeater"
1
+ require 'json'
2
+ require 'abril_heartbeat/version'
3
+ require 'abril_heartbeat/heartbeater'
4
4
 
5
5
  # Config Loader
6
- require "abril_heartbeat/config_loader"
6
+ require 'abril_heartbeat/config_loader'
7
7
 
8
8
  # Checkers
9
- require "abril_heartbeat/checkers/abstract_checker"
10
- require "abril_heartbeat/checkers/rest_checker"
11
- require "abril_heartbeat/checkers/mongo_checker"
12
- require "abril_heartbeat/checkers/mysql_checker"
13
- require "abril_heartbeat/checkers/redis_checker"
9
+ require 'abril_heartbeat/checkers/abstract_checker'
10
+ require 'abril_heartbeat/checkers/rest_checker'
11
+ require 'abril_heartbeat/checkers/mongo_checker'
12
+ require 'abril_heartbeat/checkers/mysql_checker'
13
+ require 'abril_heartbeat/checkers/redis_checker'
14
14
 
15
15
  # Wrappers
16
- require "abril_heartbeat/wrappers/mongo_wrapper"
17
- require "abril_heartbeat/wrappers/mysql_wrapper"
18
- require "abril_heartbeat/wrappers/redis_wrapper"
16
+ require 'abril_heartbeat/wrappers/mongo_wrapper'
17
+ require 'abril_heartbeat/wrappers/mysql_wrapper'
18
+ require 'abril_heartbeat/wrappers/redis_wrapper'
19
19
 
20
20
  module AbrilHeartbeat
21
21
  class Middleware
22
- def initialize(app, options={})
22
+ def initialize(app, options = {})
23
23
  @app = app
24
24
  @file_path = options[:file_path]
25
25
  end
@@ -36,7 +36,7 @@ module AbrilHeartbeat
36
36
  private
37
37
 
38
38
  def response
39
- Heartbeater.new({:file_path => @file_path}).run!
39
+ Heartbeater.new(file_path: @file_path).run!
40
40
  end
41
41
 
42
42
  def request
@@ -1,22 +1,20 @@
1
1
  module AbrilHeartbeat
2
2
  class AbstractChecker
3
- def self.is_running?
4
- raise NotImplementedError
3
+ def self.running?
4
+ fail NotImplementedError
5
5
  end
6
6
 
7
7
  def self.module_name
8
- raise NotImplementedError
8
+ fail NotImplementedError
9
9
  end
10
10
 
11
11
  def self.run!
12
12
  status, message = check!
13
- { module_name => { "status" => status, "status_message" => message }}
13
+ { module_name => { 'status' => status, 'status_message' => message } }
14
14
  end
15
15
 
16
- private
17
-
18
16
  def self.check!
19
- raise NotImplementedError
17
+ fail NotImplementedError
20
18
  end
21
19
  end
22
20
  end
@@ -1,20 +1,18 @@
1
1
  module AbrilHeartbeat
2
2
  class MongoChecker < AbstractChecker
3
- def self.is_running?
4
- MongoWrapper.has_client?
3
+ def self.running?
4
+ MongoWrapper.client?
5
5
  end
6
6
 
7
7
  def self.module_name
8
- "MONGO"
8
+ 'MONGO'
9
9
  end
10
10
 
11
- private
12
-
13
11
  def self.check!
14
12
  MongoWrapper.check_status!
15
- ["OK", "Everything is under control"]
13
+ ['OK', 'Everything is under control']
16
14
  rescue => exception
17
- ["FAIL", exception.message]
15
+ ['FAIL', exception.message]
18
16
  end
19
17
  end
20
18
  end
@@ -1,20 +1,18 @@
1
1
  module AbrilHeartbeat
2
2
  class MysqlChecker < AbstractChecker
3
- def self.is_running?
4
- MysqlWrapper.has_client?
3
+ def self.running?
4
+ MysqlWrapper.client?
5
5
  end
6
6
 
7
7
  def self.module_name
8
- "MYSQL"
8
+ 'MYSQL'
9
9
  end
10
10
 
11
- private
12
-
13
11
  def self.check!
14
12
  MysqlWrapper.check_status!
15
- ["OK", "Everything is under control"]
13
+ ['OK', 'Everything is under control']
16
14
  rescue => exception
17
- ["FAIL", exception.message]
15
+ ['FAIL', exception.message]
18
16
  end
19
17
  end
20
18
  end
@@ -1,20 +1,18 @@
1
1
  module AbrilHeartbeat
2
2
  class RedisChecker < AbstractChecker
3
- def self.is_running?
4
- RedisWrapper.has_client?
3
+ def self.running?
4
+ RedisWrapper.client?
5
5
  end
6
6
 
7
7
  def self.module_name
8
- "REDIS"
8
+ 'REDIS'
9
9
  end
10
10
 
11
- private
12
-
13
11
  def self.check!
14
12
  RedisWrapper.check_status!
15
- ["OK", "Everything is under control"]
13
+ ['OK', 'Everything is under control']
16
14
  rescue => exception
17
- ["FAIL", exception.message]
15
+ ['FAIL', exception.message]
18
16
  end
19
17
  end
20
18
  end
@@ -1,38 +1,38 @@
1
- require "rest_client"
1
+ require 'rest_client'
2
2
 
3
3
  module AbrilHeartbeat
4
4
  class RestChecker < AbstractChecker
5
- def self.is_running?
5
+ def self.running?
6
6
  !rest_hash.empty?
7
7
  end
8
8
 
9
9
  def self.run!
10
10
  messages = rest_hash.map do |key, value|
11
- status, message = check!{ value['url'] }
12
- { key => { "url" => value["url"], "status" => status, "status_message" => message }}
11
+ status, message = check! { value['url'] }
12
+ { key => { 'url' => value['url'], 'status' => status, 'status_message' => message } }
13
13
  end
14
14
 
15
15
  { module_name => messages }
16
16
  end
17
17
 
18
18
  def self.module_name
19
- "REST"
19
+ 'REST'
20
20
  end
21
21
 
22
- private
23
-
24
- def self.rest_hash
25
- ConfigLoader.load_by_type(:rest)
26
- end
27
-
28
- def self.check!(&block)
22
+ def self.check!
29
23
  url = yield
30
24
  response = RestClient.get(url)
31
- [response.code, "OK"]
25
+ [response.code, 'OK']
32
26
  rescue RestClient::ResourceNotFound
33
- [404, "Page Not Found"]
27
+ [404, 'Page Not Found']
34
28
  rescue => exception
35
29
  [nil, exception.message]
36
30
  end
31
+
32
+ def self.rest_hash
33
+ ConfigLoader.load_by_type(:rest)
34
+ end
35
+
36
+ private_class_method :rest_hash
37
37
  end
38
38
  end
@@ -1,22 +1,22 @@
1
1
  module AbrilHeartbeat
2
2
  class ConfigLoader
3
+ class << self
4
+ attr_accessor :file_path
5
+ end
6
+
3
7
  def self.load
4
8
  @file ||= load_file
5
9
  end
6
10
 
7
11
  def self.load_by_type(type)
8
12
  return load if load.empty?
9
- load.select{|_, v| v['type'] == type.to_s}
10
- end
11
-
12
- def self.set_file(file_path)
13
- @file_path = file_path
13
+ load.select { |_, v| v['type'] == type.to_s }
14
14
  end
15
15
 
16
16
  def self.load_file
17
- return {} unless @file_path
17
+ return {} unless file_path
18
18
 
19
- ::YAML.load_file(@file_path)
19
+ ::YAML.load_file(file_path)
20
20
  end
21
21
  end
22
22
  end
@@ -1,9 +1,9 @@
1
- require "yaml"
1
+ require 'yaml'
2
2
 
3
3
  module AbrilHeartbeat
4
4
  class Heartbeater
5
- def initialize(options={})
6
- ConfigLoader.set_file(options[:file_path]) if options[:file_path]
5
+ def initialize(options = {})
6
+ ConfigLoader.file_path = options[:file_path] if options[:file_path]
7
7
 
8
8
  @checkers = [MongoChecker, MysqlChecker, RedisChecker]
9
9
  @checkers += options[:custom_checkers] if options[:custom_checkers]
@@ -11,10 +11,10 @@ module AbrilHeartbeat
11
11
 
12
12
  def run!
13
13
  response = []
14
- response << RestChecker.run! if RestChecker.is_running?
14
+ response << RestChecker.run! if RestChecker.running?
15
15
 
16
16
  @checkers.each do |checker|
17
- response << checker.run! if checker.is_running?
17
+ response << checker.run! if checker.running?
18
18
  end
19
19
 
20
20
  response
@@ -1,3 +1,3 @@
1
1
  module AbrilHeartbeat
2
- VERSION = "1.0.0"
2
+ VERSION = '1.1.0'
3
3
  end
@@ -4,7 +4,7 @@ module AbrilHeartbeat
4
4
  ::Mongoid.default_session.command(ping: 1)
5
5
  end
6
6
 
7
- def self.has_client?
7
+ def self.client?
8
8
  !!defined?(Mongoid)
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module AbrilHeartbeat
4
4
  ::ActiveRecord::Base.connection.current_database
5
5
  end
6
6
 
7
- def self.has_client?
7
+ def self.client?
8
8
  !!defined?(ActiveRecord::Base.connection)
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module AbrilHeartbeat
4
4
  ::REDIS.get(:version)
5
5
  end
6
6
 
7
- def self.has_client?
7
+ def self.client?
8
8
  !!defined?(REDIS)
9
9
  end
10
10
  end
@@ -24,17 +24,17 @@ describe AbrilHeartbeat::MongoChecker do
24
24
  end
25
25
  end
26
26
 
27
- describe "#is_running?" do
27
+ describe "#running?" do
28
28
  context "when the app has a mongo client" do
29
- before { allow(AbrilHeartbeat::MongoWrapper).to receive(:has_client?) { "constant" } }
29
+ before { allow(AbrilHeartbeat::MongoWrapper).to receive(:client?) { "constant" } }
30
30
 
31
- subject { described_class.is_running? }
31
+ subject { described_class.running? }
32
32
 
33
33
  it { is_expected.to be_truthy }
34
34
  end
35
35
 
36
36
  context "when the app does not have a mongo client" do
37
- subject { described_class.is_running? }
37
+ subject { described_class.running? }
38
38
 
39
39
  it { is_expected.to be_falsy }
40
40
  end
@@ -24,17 +24,17 @@ describe AbrilHeartbeat::MysqlChecker do
24
24
  end
25
25
  end
26
26
 
27
- describe "#is_running?" do
27
+ describe "#running?" do
28
28
  context "when the app has a mysql client" do
29
- before { allow(AbrilHeartbeat::MysqlWrapper).to receive(:has_client?) { "constant" } }
29
+ before { allow(AbrilHeartbeat::MysqlWrapper).to receive(:client?) { "constant" } }
30
30
 
31
- subject { described_class.is_running? }
31
+ subject { described_class.running? }
32
32
 
33
33
  it { is_expected.to be_truthy }
34
34
  end
35
35
 
36
36
  context "when the app does not have a mysql client" do
37
- subject { described_class.is_running? }
37
+ subject { described_class.running? }
38
38
 
39
39
  it { is_expected.to be_falsy }
40
40
  end
@@ -24,17 +24,17 @@ describe AbrilHeartbeat::RedisChecker do
24
24
  end
25
25
  end
26
26
 
27
- describe "#is_running?" do
27
+ describe "#running?" do
28
28
  context "when the app has a redis client" do
29
- before { allow(AbrilHeartbeat::RedisWrapper).to receive(:has_client?) { "constant" } }
29
+ before { allow(AbrilHeartbeat::RedisWrapper).to receive(:client?) { "constant" } }
30
30
 
31
- subject { described_class.is_running? }
31
+ subject { described_class.running? }
32
32
 
33
33
  it { is_expected.to be_truthy }
34
34
  end
35
35
 
36
36
  context "when the app does not have a redis client" do
37
- subject { described_class.is_running? }
37
+ subject { described_class.running? }
38
38
 
39
39
  it { is_expected.to be_falsy }
40
40
  end
@@ -17,9 +17,9 @@ describe AbrilHeartbeat::RestChecker do
17
17
  let(:response) {{ "MODEL" => [{"api_success"=>{"url"=>"http://www.scudelletti.com", "status"=>"OK", "status_message"=>"Everything is OK"}}, {"api_not_found"=>{"url"=>"http://www.scudelletti.com/not_found", "status"=>"OK", "status_message"=>"Everything is OK"}}, {"api_wrong_url"=>{"url"=>"I am a wrong url", "status"=>"OK", "status_message"=>"Everything is OK"}}] }}
18
18
  end
19
19
 
20
- describe "#is_running?" do
20
+ describe "#running?" do
21
21
  context "when there is rest calls" do
22
- subject { described_class.is_running? }
22
+ subject { described_class.running? }
23
23
 
24
24
  it { is_expected.to be_truthy }
25
25
  end
@@ -27,7 +27,7 @@ describe AbrilHeartbeat::RestChecker do
27
27
  context "when there is not rest calls" do
28
28
  before { allow(AbrilHeartbeat::ConfigLoader).to receive(:load) { {} } }
29
29
 
30
- subject { described_class.is_running? }
30
+ subject { described_class.running? }
31
31
 
32
32
  it { is_expected.to be_falsy }
33
33
  end
@@ -14,8 +14,8 @@ describe AbrilHeartbeat::Heartbeater do
14
14
 
15
15
  context "when the app has more than one dependency" do
16
16
  before do
17
- allow(AbrilHeartbeat::RestChecker).to receive(:is_running?) { true }
18
- allow(AbrilHeartbeat::MongoChecker).to receive(:is_running?) { true }
17
+ allow(AbrilHeartbeat::RestChecker).to receive(:running?) { true }
18
+ allow(AbrilHeartbeat::MongoChecker).to receive(:running?) { true }
19
19
  end
20
20
 
21
21
  it { is_expected.to eql([{"REST" => "MOCK"}, {"MONGO" => "MOCK"}]) }
@@ -23,8 +23,8 @@ describe AbrilHeartbeat::Heartbeater do
23
23
 
24
24
  context "when the app just have on kind of dependency" do
25
25
  before do
26
- allow(AbrilHeartbeat::RestChecker).to receive(:is_running?) { false }
27
- allow(AbrilHeartbeat::MongoChecker).to receive(:is_running?) { true }
26
+ allow(AbrilHeartbeat::RestChecker).to receive(:running?) { false }
27
+ allow(AbrilHeartbeat::MongoChecker).to receive(:running?) { true }
28
28
  end
29
29
 
30
30
  it { is_expected.to eql([{"MONGO" => "MOCK"}]) }
@@ -32,18 +32,18 @@ describe AbrilHeartbeat::Heartbeater do
32
32
  end
33
33
 
34
34
  describe "Custom checkers" do
35
- let(:custom_checker) { double("CustomChecker", is_running?: true) }
35
+ let(:custom_checker) { double("CustomChecker", running?: true) }
36
36
 
37
37
  subject { described_class.new({file_path: file_path, custom_checkers: [custom_checker]}) }
38
38
 
39
39
  before do
40
- allow(AbrilHeartbeat::RestChecker).to receive(:is_running?) { false }
41
- allow(AbrilHeartbeat::MongoChecker).to receive(:is_running?) { false }
42
- allow(AbrilHeartbeat::MysqlChecker).to receive(:is_running?) { false }
40
+ allow(AbrilHeartbeat::RestChecker).to receive(:running?) { false }
41
+ allow(AbrilHeartbeat::MongoChecker).to receive(:running?) { false }
42
+ allow(AbrilHeartbeat::MysqlChecker).to receive(:running?) { false }
43
43
  end
44
44
 
45
45
  it "returns the status codes" do
46
- expect(custom_checker).to receive(:is_running?)
46
+ expect(custom_checker).to receive(:running?)
47
47
  expect(custom_checker).to receive(:run!)
48
48
 
49
49
  subject.run!
@@ -3,7 +3,7 @@ RSpec.shared_examples "a checker" do
3
3
 
4
4
  subject{ described_class }
5
5
 
6
- it { is_expected.to respond_to(:is_running?) }
6
+ it { is_expected.to respond_to(:running?) }
7
7
  it { is_expected.to respond_to(:module_name) }
8
8
  it { is_expected.to respond_to(:run!) }
9
9
  it { is_expected.to respond_to(:check!) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abril_heartbeat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diogo Scudelletti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-29 00:00:00.000000000 Z
11
+ date: 2014-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -180,7 +180,6 @@ files:
180
180
  - lib/abril_heartbeat/wrappers/mysql_wrapper.rb
181
181
  - lib/abril_heartbeat/wrappers/redis_wrapper.rb
182
182
  - spec/cassettes/AbrilHeartbeat_Middleware/when_middleware_handles_the_request/responds_success.yml
183
- - spec/cassettes/HeartbeatAbril_Middleware/when_middleware_handles_the_request/responds_success.yml
184
183
  - spec/checkers/abstract_checker_spec.rb
185
184
  - spec/checkers/mongo_checker_spec.rb
186
185
  - spec/checkers/mysql_checker_spec.rb
@@ -219,7 +218,6 @@ specification_version: 4
219
218
  summary: Builds a heartbeat route for Apps
220
219
  test_files:
221
220
  - spec/cassettes/AbrilHeartbeat_Middleware/when_middleware_handles_the_request/responds_success.yml
222
- - spec/cassettes/HeartbeatAbril_Middleware/when_middleware_handles_the_request/responds_success.yml
223
221
  - spec/checkers/abstract_checker_spec.rb
224
222
  - spec/checkers/mongo_checker_spec.rb
225
223
  - spec/checkers/mysql_checker_spec.rb
@@ -1,111 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: http://www.scudelletti.com/
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Accept:
11
- - "*/*; q=0.5, application/xml"
12
- Accept-Encoding:
13
- - gzip, deflate
14
- User-Agent:
15
- - Ruby
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Date:
22
- - Fri, 26 Sep 2014 13:09:40 GMT
23
- Server:
24
- - Apache/2.2.15 (Red Hat)
25
- Last-Modified:
26
- - Mon, 14 Jul 2014 11:37:00 GMT
27
- Etag:
28
- - '"540027-942-4fe25b58cef00"'
29
- Accept-Ranges:
30
- - none
31
- Content-Type:
32
- - text/html
33
- Vary:
34
- - Accept-Encoding
35
- Content-Encoding:
36
- - gzip
37
- Content-Length:
38
- - '948'
39
- body:
40
- encoding: ASCII-8BIT
41
- string: !binary |-
42
- H4sIAAAAAAAAA51W32/bNhB+319x0AsdxJacdGuHxEoRI10bYOuCOsMegqCg
43
- qbPMhiI1krIqrPvfd5TkWG7aZcmTqfvF7+4+3nm29oU6+wFgtkaetQcvvcKz
44
- C2lyAwtRZagUei9hAh+qZQMLs/I1twhvdC61RkuKP3EZ1FwqR78Lqbm3nE5X
45
- PLNSm1nSxQzRC/QcNC8wjTJ0wsrSS6MjEEZ71D6NLlkBDy/nUNMdGW5QmRLt
46
- GOq1gdrYOzAaLq/BSS0QjqfTl2O4BK5q3jjwtgFvIJNOmA0B5cqjJWxygy4o
47
- Cn6HUDRdHJ5LhXGb47hLZbzNZAy/GZ2bi/l4m9GHeQRJm4+S+g7WFlcpW3tf
48
- niTJijJxcW5MrpCX0sXCFIlw7vWKF1I16bnC3GLDDxdcu5Mfp9PxT9MpA4sq
49
- Zc43Ct0a0TPwTYkp8/jZB28Wbtve98C2A9BK4mD8tXMHdg9uFOA6wluqagu3
50
- hXrYVn9Q/Ki9LyqrpZJ0n426zJN7xixN1vTxM7kBobhzaRQ6yiURJOp0D7XU
51
- 73vdvrbgnydCWqFwYPBVgF49S0g4iNJ9fjOq1CtjC94Sbi/s+ugh3ym/o32j
52
- 47NvPAAMvPIw//3XC7jUPb+M5gq4zuCtrUoD50srFcU73oun+Wb4TRI+6Aw1
53
- pq7rOPQLM6nbzkiduB3ABPezaEPIIgdnBeVa8Bxdcu9f6jwKDyCN5srk0ZYQ
54
- u7LxQdEeoAk8yaVfV8sWyADF4xB6vx2At9K/q5bPgeBr6anELYbsSSC2njsU
55
- 153kOTBCY1Zc4NKYuxbL4ilQ7j13WH7pRc8B8/jzfbxDbYxBg9pocEXSpyLq
56
- q0NASqnoBZjY2PxxBEvi5P+i6PBz7wHtv/vBUBgeu32zddpwCx9z/hek3c+X
57
- L3Bze9orgyQuK7ce3bCPDv25EKbSno2B/XE+OT56+erFz69eTI7Y7cH3XC5M
58
- QfPvPe264DWgayjPf/idK2Xqd9ytg9uKK4ffM6bdJO6uqIIbiXVr1FuNVpUW
59
- YQ6NDuDvQbo5p2QzI6qCZm8sLHKPbxSGrxHrqsMOTsksDguEbLsV8olveK9t
60
- ldw1WpDW2wq3wEhMHSXhiHXUZJAO7lJGtIMxLq3xRhgFr4FtOeycYnACbMcg
61
- dgCHwHpeTzjN08ZL0e1SuumTY6eDtNwwqxx9n5KbN9c8Dw3YJXczvT0FIjsN
62
- cO3fmwxjqR1aP0faDTjKadm7+2L/czBqz7Nkx5xZ0q07muftX6d/AeG2G0BC
63
- CQAA
64
- http_version:
65
- recorded_at: Fri, 26 Sep 2014 13:09:41 GMT
66
- - request:
67
- method: get
68
- uri: http://www.scudelletti.com/not_found
69
- body:
70
- encoding: US-ASCII
71
- string: ''
72
- headers:
73
- Accept:
74
- - "*/*; q=0.5, application/xml"
75
- Accept-Encoding:
76
- - gzip, deflate
77
- User-Agent:
78
- - Ruby
79
- response:
80
- status:
81
- code: 404
82
- message: ''
83
- headers:
84
- Date:
85
- - Fri, 26 Sep 2014 13:09:41 GMT
86
- Server:
87
- - Apache/2.2.15 (Red Hat)
88
- X-Powered-By:
89
- - Phusion Passenger (mod_rails/mod_rack) 3.0.21
90
- X-Cascade:
91
- - pass
92
- X-Xss-Protection:
93
- - 1; mode=block
94
- X-Content-Type-Options:
95
- - nosniff
96
- X-Frame-Options:
97
- - SAMEORIGIN
98
- Content-Length:
99
- - '18'
100
- Status:
101
- - '404'
102
- Content-Type:
103
- - text/html;charset=utf-8
104
- Accept-Ranges:
105
- - none
106
- body:
107
- encoding: UTF-8
108
- string: "<h1>Not Found</h1>"
109
- http_version:
110
- recorded_at: Fri, 26 Sep 2014 13:09:41 GMT
111
- recorded_with: VCR 2.9.3