ops 1.0.0.pre → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +27 -7
  3. data/lib/ops.rb +2 -3
  4. data/lib/ops/config.rb +8 -8
  5. data/lib/ops/heartbeat.rb +4 -7
  6. data/lib/ops/revision.rb +89 -31
  7. data/lib/ops/server.rb +22 -12
  8. data/lib/ops/server/helpers.rb +6 -14
  9. data/lib/ops/server/views/{env.html.erb → env.erb} +0 -0
  10. data/lib/ops/server/views/{layout.html.erb → layout.erb} +0 -0
  11. data/lib/ops/server/views/version.erb +76 -0
  12. data/lib/ops/version.rb +1 -1
  13. metadata +25 -73
  14. data/.gitignore +0 -18
  15. data/.rspec +0 -2
  16. data/Gemfile +0 -16
  17. data/Gemfile.lock +0 -129
  18. data/LICENSE +0 -7
  19. data/Rakefile +0 -28
  20. data/examples/rails3/.gitignore +0 -15
  21. data/examples/rails3/.rspec +0 -3
  22. data/examples/rails3/Gemfile +0 -5
  23. data/examples/rails3/Gemfile.lock +0 -130
  24. data/examples/rails3/Rakefile +0 -13
  25. data/examples/rails3/config.ru +0 -4
  26. data/examples/rails3/config/application.rb +0 -37
  27. data/examples/rails3/config/boot.rb +0 -6
  28. data/examples/rails3/config/environment.rb +0 -5
  29. data/examples/rails3/config/initializers/secret_token.rb +0 -1
  30. data/examples/rails3/config/locales/en.yml +0 -5
  31. data/examples/rails3/config/routes.rb +0 -3
  32. data/examples/rails3/public/404.html +0 -26
  33. data/examples/rails3/public/422.html +0 -26
  34. data/examples/rails3/public/500.html +0 -25
  35. data/examples/rails3/public/favicon.ico +0 -0
  36. data/examples/rails3/public/index.html +0 -14
  37. data/examples/rails3/public/robots.txt +0 -5
  38. data/examples/rails3/script/rails +0 -6
  39. data/examples/rails3/spec/functional/ops_routes_spec.rb +0 -69
  40. data/examples/rails3/spec/spec_helper.rb +0 -5
  41. data/examples/sample_deploys/1234/REVISION +0 -1
  42. data/examples/sample_deploys/1234/VERSION +0 -1
  43. data/examples/sample_deploys/2341/REVISION +0 -1
  44. data/examples/sample_deploys/2341/VERSION +0 -1
  45. data/examples/sample_deploys/3412/REVISION +0 -1
  46. data/examples/sample_deploys/3412/VERSION +0 -1
  47. data/examples/sample_deploys/4123/REVISION +0 -1
  48. data/examples/sample_deploys/4123/VERSION +0 -1
  49. data/examples/sinatra/.rspec +0 -3
  50. data/examples/sinatra/Rakefile +0 -15
  51. data/examples/sinatra/app.rb +0 -14
  52. data/examples/sinatra/config.ru +0 -20
  53. data/examples/sinatra/spec/functional/ops_routes_spec.rb +0 -69
  54. data/examples/sinatra/spec/spec_helper.rb +0 -3
  55. data/lib/ops/server/views/version.html.erb +0 -53
  56. data/ops.gemspec +0 -22
  57. data/spec/functional/ops_routes_spec.rb +0 -69
  58. data/spec/ops/config_spec.rb +0 -0
  59. data/spec/ops/heartbeat_spec.rb +0 -49
  60. data/spec/ops/revision_spec.rb +0 -42
  61. data/spec/ops/server_spec.rb +0 -66
  62. data/spec/ops/version_spec.rb +0 -7
  63. data/spec/ops_spec.rb +0 -9
  64. data/spec/spec_helper.rb +0 -11
@@ -1,53 +0,0 @@
1
- <div class="container">
2
- <div class="spacer"></div>
3
- <div id="host">
4
- <div class="label">Host</div>
5
- <div class="value"><%= hostname %></div>
6
- </div>
7
- <div class="spacer"></div>
8
- <div id="environment">
9
- <div class="label">Environment</div>
10
- <div class="value"><%= @version.environment %></div>
11
- </div>
12
- <div class="spacer"></div>
13
- <h3>Current Deploy Info</h3>
14
- <% @version.info.each do |key, value| %>
15
- <div class="spacer"></div>
16
- <div>
17
- <div class="label">
18
- <%= key.to_s.gsub('_',' ').capitalize %>
19
- </div>
20
- <div class="value">
21
- <%= value %>
22
- </div>
23
- </div>
24
- <% end %>
25
- <div class="spacer"></div>
26
- <h3>Previous Deploy Info</h3>
27
- <% @version.previous_info.each do |key, value| %>
28
- <div class="spacer"></div>
29
- <div>
30
- <div class="label">
31
- <%= key.to_s.gsub('_',' ').capitalize %>
32
- </div>
33
- <div class="value">
34
- <%= value %>
35
- </div>
36
- </div>
37
- <% end %>
38
- <div class="spacer"></div>
39
- <div id="headers">
40
- <div class="label">Headers</div>
41
- <div class="value">
42
- <table>
43
- <% @headers.sort_by{ |h| h.first }.each_with_index do |(header, value), i| %>
44
- <tr class="<%= i%2==0 ? 'even' : nil %>">
45
- <td><%= header %></td>
46
- <td><%= value %></td>
47
- </tr>
48
- <% end %>
49
- </table>
50
- </div>
51
- </div>
52
- <div class="clear"></div>
53
- </div>
data/ops.gemspec DELETED
@@ -1,22 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/ops/version', __FILE__)
3
- require 'date'
4
-
5
- Gem::Specification.new do |gem|
6
- gem.authors = ["Michael Pelz-Sherman", "Colin Rymer", "Luke Fender", "RentPath Team"]
7
- gem.email = ["mpelzsherman@gmail.com", "colin.rymer@gmail.com", "lfender6445@gmail.com"]
8
- gem.description = 'This gem provides standardized support for obtaining version and heartbeat information from Sinatra or Rails-based web applications.'
9
- gem.summary = "Provide ops info endpoints."
10
- gem.date = Date.today.to_s
11
- gem.homepage = "http://rentpath.github.io/ops/"
12
- gem.license = 'MIT'
13
- gem.executables = []
14
- gem.files = `git ls-files | grep -v myapp`.split("\n")
15
- gem.test_files = `git ls-files -- test/*`.split("\n")
16
- gem.name = "ops"
17
- gem.require_paths = ["lib"]
18
- gem.version = Ops::VERSION
19
- gem.required_ruby_version = '>= 1.9'
20
- gem.add_dependency 'sinatra', '>= 1.2.0'
21
- gem.add_dependency 'sinatra-respond_to', '>= 0.7.0'
22
- end
@@ -1,69 +0,0 @@
1
- require 'rspec'
2
- require 'rack/test'
3
- require 'spec_helper'
4
- require 'json'
5
-
6
- RSpec::Matchers.define :have_content_type do |content_type|
7
- CONTENT_HEADER_MATCHER = /^([A-Za-z]+\/[\w\-+\.]+)(;charset=(.*))?/
8
-
9
- chain :with_charset do |charset|
10
- @charset = charset
11
- end
12
-
13
- match do |response|
14
- _, content, _, charset = *content_type_header.match(CONTENT_HEADER_MATCHER).to_a
15
-
16
- if @charset
17
- @charset == charset && content == content_type
18
- else
19
- content == content_type
20
- end
21
- end
22
-
23
- failure_message_for_should do |response|
24
- if @charset
25
- "Content type #{content_type_header.inspect} should match #{content_type.inspect} with charset #{@charset}"
26
- else
27
- "Content type #{content_type_header.inspect} should match #{content_type.inspect}"
28
- end
29
- end
30
-
31
- failure_message_for_should_not do |model|
32
- if @charset
33
- "Content type #{content_type_header.inspect} should not match #{content_type.inspect} with charset #{@charset}"
34
- else
35
- "Content type #{content_type_header.inspect} should not match #{content_type.inspect}"
36
- end
37
- end
38
-
39
- def content_type_header
40
- last_response.headers['Content-Type']
41
- end
42
- end
43
-
44
- describe 'routes', :type => :controller do
45
- include Rack::Test::Methods
46
-
47
-
48
- it 'renders a env page' do
49
- get "/ops/env"
50
- last_response.should be_ok
51
- end
52
-
53
- it 'renders a version page' do
54
- get "/ops/version"
55
- last_response.should be_ok
56
- end
57
-
58
- it 'renders a json version page' do
59
- get "/ops/version.json"
60
- last_response.should be_ok
61
- last_response.should have_content_type('application/json').with_charset('utf-8')
62
- end
63
-
64
- it 'renders a heartbeat page' do
65
- get "/ops/heartbeat"
66
- last_response.should be_ok
67
- end
68
-
69
- end
File without changes
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Ops::Heartbeat do
4
- describe '#add' do
5
- it 'accepts new heartbeats' do
6
- @heartbeat = Ops::Heartbeat.new
7
- @heartbeat.add(:test){ true }
8
- @heartbeat.heartbeats.should have(1).items
9
- end
10
- end
11
-
12
- describe '#check' do
13
- before do
14
- @heartbeat = Ops::Heartbeat.new
15
- @heartbeat.add(:test){ true }
16
- end
17
-
18
- it 'returns true for valid heartbeats' do
19
- @heartbeat.check(:test).should eq(true)
20
- end
21
-
22
- it 'returns false for invalid heartbeats' do
23
- @heartbeat.check(:invalid_test).should eq(false)
24
- end
25
- end
26
-
27
- describe '#heartbeats' do
28
- it 'returns a hash of heartbeats' do
29
- Ops::Heartbeat.new.heartbeats.should be_a Hash
30
- end
31
- end
32
-
33
- it "offers a singleton" do
34
- @heartbeat = Ops::Heartbeat.instance
35
- @heartbeat.object_id.should be Ops::Heartbeat.instance.object_id
36
- end
37
-
38
- it "checks singleton's heartbeats" do
39
- Ops::Heartbeat.instance.add(:test){ true }
40
- Ops::Heartbeat.check(:test).should be true
41
- end
42
- end
43
-
44
- describe Ops do
45
- it "provides convenience method to add heartbeats" do
46
- Ops.add_heartbeat(:convenience){ true }
47
- Ops::Heartbeat.check(:convenience).should be true
48
- end
49
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Ops::Revision do
4
-
5
- let(:create_version_file) do
6
- @version_file = File.join(@root, 'VERSION')
7
- File.open(@version_file, 'w') { |f| f.write('v23.24.25^{}') }
8
- end
9
-
10
- before do
11
- @root = File.dirname(__FILE__)
12
- headers = {}
13
- settings = double("settings", {:file_root => @root, :environment => 'test'})
14
- @version = Ops::Revision.new(headers, settings)
15
- end
16
-
17
- after do
18
- File.delete(@version_file) unless @version_file.nil?
19
- end
20
-
21
- it "test env should have version" do
22
- create_version_file
23
- @version.version_or_branch.should eq("v23.24.25")
24
- end
25
-
26
- it "development env should have branch" do
27
- dev_settings = double("settings", {:file_root => @root, :environment => 'development'})
28
- dev_version = Ops::Revision.new({}, dev_settings)
29
- dev_version.branch_source = ->{ "* dev\nsome-topic-branch\nother-topic-branch" }
30
- dev_version.version_or_branch.should eq('dev')
31
- end
32
-
33
- it "should have request headers" do
34
- headers = {'ABC' => '123', 'hidden' => 'x'}
35
- settings = double("settings", {:file_root => @root, :environment => 'test'})
36
- version = Ops::Revision.new(headers, settings)
37
- version.headers.should eq({'ABC' => '123'})
38
- end
39
-
40
- # TODO: add tests for json and previous_version
41
-
42
- end
@@ -1,66 +0,0 @@
1
- require 'spec_helper'
2
- require 'rack/test'
3
- require 'ops/server'
4
-
5
- class ReliableConfigService
6
- def call(options = {})
7
- { foo: 'bar' }
8
- end
9
- end
10
-
11
- class ErrorProneConfigService
12
- def call(options = {})
13
- raise StandardError, 'oops'
14
- end
15
- end
16
-
17
- describe Ops::Server do
18
- include Rack::Test::Methods
19
-
20
- def app
21
- Ops::Server
22
- end
23
-
24
- def enable_config_service(adapter)
25
- Ops.setup do |config|
26
- config.config_service_adapter = adapter
27
- end
28
- end
29
-
30
- def disable_config_service
31
- Ops.setup do |config|
32
- config.config_service_adapter = nil
33
- end
34
- end
35
-
36
- describe 'GET /config' do
37
- describe 'when config service is enabled' do
38
- it 'responds with response from config service' do
39
- enable_config_service(ReliableConfigService.new)
40
- get '/config'
41
- last_response.status.should == 200
42
- body = JSON.parse(last_response.body)
43
- body.should == { 'foo' => 'bar' }
44
- end
45
-
46
- it 'responds with an error from config service' do
47
- enable_config_service(ErrorProneConfigService.new)
48
- get '/config'
49
- last_response.status.should == 422
50
- body = JSON.parse(last_response.body)
51
- body.should == { 'error' => 'oops' }
52
- end
53
- end
54
-
55
- describe 'when config service is disabled' do
56
- before do
57
- disable_config_service
58
- end
59
-
60
- it 'responds with an error' do
61
- get '/config'
62
- last_response.status.should == 501
63
- end
64
- end
65
- end
66
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Ops::VERSION do
4
- it "returns a string with the version" do
5
- Ops::VERSION.should match /(\d+).(\d+).(\d+)([-+]([0-9A-Za-z-]+(.[0-9A-Za-z-]+)*)+)*/
6
- end
7
- end
data/spec/ops_spec.rb DELETED
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Ops do
4
- describe '#new' do
5
- it 'returns a new Ops::Server instance' do
6
- Ops.new.should be_a Sinatra::ExtendedRack
7
- end
8
- end
9
- end
data/spec/spec_helper.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start
3
-
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
6
- require 'rspec'
7
- require 'ops'
8
-
9
- # Requires supporting files with custom matchers and macros, etc,
10
- # in ./support/ and its subdirectories.
11
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}