ops 1.0.0.pre → 1.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.
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}