app_status 0.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. data/MIT-LICENSE +20 -0
  2. data/README.md +115 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/javascripts/app_status/application.js +15 -0
  5. data/app/assets/stylesheets/app_status/application.css +13 -0
  6. data/app/controllers/app_status/application_controller.rb +4 -0
  7. data/app/controllers/app_status/status_controller.rb +13 -0
  8. data/app/helpers/app_status/application_helper.rb +4 -0
  9. data/app/models/app_status/check_collection.rb +106 -0
  10. data/app/views/app_status/status/index.html.haml +16 -0
  11. data/app/views/layouts/app_status/application.html.erb +14 -0
  12. data/bin/autospec +16 -0
  13. data/bin/erubis +16 -0
  14. data/bin/haml +16 -0
  15. data/bin/htmldiff +16 -0
  16. data/bin/ldiff +16 -0
  17. data/bin/rackup +16 -0
  18. data/bin/rails +16 -0
  19. data/bin/rake +16 -0
  20. data/bin/rdoc +16 -0
  21. data/bin/ri +16 -0
  22. data/bin/rspec +16 -0
  23. data/bin/sprockets +16 -0
  24. data/bin/thor +16 -0
  25. data/bin/tilt +16 -0
  26. data/bin/tt +16 -0
  27. data/config/routes.rb +4 -0
  28. data/lib/app_status/engine.rb +12 -0
  29. data/lib/app_status/version.rb +3 -0
  30. data/lib/app_status.rb +5 -0
  31. data/lib/tasks/app_status_tasks.rb +4 -0
  32. data/spec/controllers/status_controller_spec.rb +29 -0
  33. data/spec/dummy/README.rdoc +261 -0
  34. data/spec/dummy/Rakefile +7 -0
  35. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  36. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  37. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  38. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  39. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  40. data/spec/dummy/config/application.rb +65 -0
  41. data/spec/dummy/config/boot.rb +10 -0
  42. data/spec/dummy/config/database.yml +25 -0
  43. data/spec/dummy/config/environment.rb +5 -0
  44. data/spec/dummy/config/environments/development.rb +37 -0
  45. data/spec/dummy/config/environments/production.rb +67 -0
  46. data/spec/dummy/config/environments/test.rb +37 -0
  47. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  48. data/spec/dummy/config/initializers/inflections.rb +15 -0
  49. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  50. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  51. data/spec/dummy/config/initializers/session_store.rb +8 -0
  52. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  53. data/spec/dummy/config/locales/en.yml +5 -0
  54. data/spec/dummy/config/routes.rb +4 -0
  55. data/spec/dummy/config.ru +4 -0
  56. data/spec/dummy/log/test.log +43 -0
  57. data/spec/dummy/public/404.html +26 -0
  58. data/spec/dummy/public/422.html +26 -0
  59. data/spec/dummy/public/500.html +25 -0
  60. data/spec/dummy/public/favicon.ico +0 -0
  61. data/spec/dummy/script/rails +6 -0
  62. data/spec/models/check_collection_spec.rb +105 -0
  63. data/spec/spec_helper.rb +18 -0
  64. metadata +243 -0
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 Alex Dean
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # AppStatus
2
+
3
+ AppStatus is a Rails engine which makes it easy to expose application status
4
+ data in a way easily consumed by Nagios or other monitoring packages.
5
+
6
+ ## Installation
7
+
8
+ ### `Gemfile`
9
+
10
+ ```ruby
11
+ gem 'app_status'
12
+ ```
13
+
14
+ ### `config/routes.rb`
15
+
16
+ Wire it up.
17
+
18
+ ```ruby
19
+ mount AppStatus::Engine, at: "/status"
20
+ ```
21
+
22
+ This exposes the following URLs
23
+ - `http://localhost:3000/status`
24
+ renders html or json according to Accept headers. Defaults to JSON.
25
+ - `http://localhost:3000/status/index.json`
26
+ - `http://localhost:3000/status/index.html` <-- fugly
27
+
28
+
29
+ ### `config/initializers/app_status.rb`
30
+
31
+ This is where you set up the checks which you want to be run when
32
+ someone hits the URL above. Set up some calls which evaluate the health
33
+ of your application and call `add` for each one.
34
+
35
+ ```ruby
36
+ AppStatus::CheckCollection.configure do |c|
37
+ value = some_service_check
38
+ c.add(:name => 'some_service', :status => :ok, :details => value)
39
+ end
40
+ ```
41
+
42
+ The checks that you set up here are not run when you configure them. They're
43
+ run whenever someone hits the check URL.
44
+
45
+ Status values (in ascending order of seriousness)
46
+ - :ok
47
+ - :warning
48
+ - :critical
49
+ - :unknown
50
+
51
+ These are set up to be compatible with Nagios.
52
+
53
+ Details doesn't have to be a string. It can be anything which is serializable
54
+ as JSON.
55
+
56
+ ## Usage
57
+
58
+ `$ curl -H 'Accept: application/json' http://localhost:3000/status`
59
+
60
+ Output will look something like this:
61
+ ```json
62
+ {
63
+ "status": "critical",
64
+ "status_code": 2,
65
+ "run_time_ms": 52,
66
+ "finished": "2013-10-03T21:28:10Z",
67
+ "details": {
68
+ "some_service": {
69
+ "status": "ok",
70
+ "status_code": 0,
71
+ "details": "Looks good!"
72
+ },
73
+ "failing_service": {
74
+ "status": "critical",
75
+ "status_code": 2,
76
+ "details": "Oh noes!"
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ The overall status will be the worst status which is actually observed in your
83
+ individual checks.
84
+
85
+ ## Nagios Integration
86
+
87
+ [bin/check_app_status.rb](https://github.com/alexdean/app_status/blob/master/bin/check_app_status.rb)
88
+ is a Nagios check script which can be used to monitor the output from `app_status`
89
+
90
+ ```
91
+ $ bin/check_app_status.rb --help
92
+ Nagios check script for app_status. See https://github.com/alexdean/app_status
93
+ -v, --verbose Output more information
94
+ -V, --version Output version information
95
+ -h, --help Display this screen
96
+ -u, --url VAL Url to monitor
97
+ -a, --auth VAL HTTP basic auth in the form 'user:password'
98
+ -t, --timeout VAL Timeout after waiting this long for a response.
99
+ ```
100
+
101
+ The script's exit status is derived from the overall status returned by the
102
+ server. Individual detail items will be grouped by status for display.
103
+ (Unknowns are displayed together, then criticals, then warnings, then OKs.)
104
+
105
+ Sample output (using verbose mode)
106
+
107
+ ```
108
+ $ bin/check_app_status.rb --url http://localhost:3000/status -v
109
+ 2013-10-03T20:54:16-05:00 options: {:timeout=>10, :url=>"http://localhost:3000/status"}
110
+ 2013-10-03T20:54:16-05:00 timeout: 10s
111
+ 2013-10-03T20:54:16-05:00 response body: {"status":"warning","status_code":1,"run_time_ms":0,"finished":"2013-10-04T01:54:16Z","details":{"some_service":{"status":"ok","status_code":0,"details":"Looks good!"},"failing_service":{"status":"warning","status_code":1,"details":"Oh noes!"}}}
112
+
113
+ WARN: failing_service:'Oh noes!'
114
+ OK: some_service:'Looks good!'
115
+ ```
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
8
+ begin
9
+ require 'rdoc/task'
10
+ rescue LoadError
11
+ require 'rdoc/rdoc'
12
+ require 'rake/rdoctask'
13
+ RDoc::Task = Rake::RDocTask
14
+ end
15
+
16
+ RDoc::Task.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'AppStatus'
19
+ rdoc.options << '--line-numbers'
20
+ rdoc.rdoc_files.include('README.rdoc')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
23
+
24
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
25
+ load 'rails/tasks/engine.rake'
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
30
+
31
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
32
+
33
+ require 'rspec/core'
34
+ require 'rspec/core/rake_task'
35
+
36
+ desc "Run all specs in spec directory (excluding plugin specs)"
37
+ RSpec::Core::RakeTask.new(:spec)
38
+
39
+ task :default => :spec
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,4 @@
1
+ module AppStatus
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,13 @@
1
+ module AppStatus
2
+ class StatusController < ApplicationController
3
+ def index
4
+ @checks = CheckCollection.new
5
+ @checks.evaluate!
6
+
7
+ respond_to do |format|
8
+ format.json { render json: @checks.as_json}
9
+ format.html
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module AppStatus
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,106 @@
1
+ # collect a variety of checks for reporting to nagios
2
+
3
+ module AppStatus
4
+
5
+ class CheckCollection
6
+
7
+ @@config_proc = nil
8
+
9
+ # Add checks here.
10
+ #
11
+ # These checks are re-run whenever evaluate! is called on an instance.
12
+ # They aren't run at configure time.
13
+ #
14
+ # The block recieves an instance of AppStatus::CheckCollection as an
15
+ # argument.
16
+ #
17
+ # example (put this in config/initalizers/app_status.rb):
18
+ #
19
+ # AppStatus::CheckCollection.configure do |c|
20
+ #
21
+ # value = some_service_check
22
+ # status = value > 100 ? :ok : :critical
23
+ # c.add(:name => 'some_service', :status => status, :details => value)
24
+ #
25
+ # end
26
+ def self.configure(&block)
27
+ @@config_proc = block
28
+ end
29
+
30
+ def self.clear_checks!
31
+ @@config_proc = nil
32
+ end
33
+
34
+ def initialize
35
+ @valid_status = {
36
+ ok: 0,
37
+ warning: 1,
38
+ critical: 2,
39
+ unknown: 3
40
+ }.freeze
41
+
42
+ @checks = HashWithIndifferentAccess.new
43
+ @eval_finished = nil
44
+ @eval_time = 0
45
+ end
46
+
47
+ # add the results of a check to the collection.
48
+ # this should describe the health of some portion of your application
49
+ #
50
+ # example:
51
+ # value = some_service_check
52
+ # c.add(:name => 'some_service', :status => :ok, :details => value)
53
+ def add(options={})
54
+ raise ArgumentError, ":name option is required." if ! options[:name]
55
+ raise ArgumentError, ":status option is required." if ! options[:status]
56
+
57
+ name = options[:name].to_sym
58
+ status = options[:status].to_sym
59
+ details = options[:details].to_s
60
+
61
+ # blow up if someone sends us options we don't understand.
62
+ other_options = options.keys - [:name, :status, :details]
63
+ if other_options.size > 0
64
+ raise ArgumentError, "Unrecognized option(s) for '#{name}' check: #{other_options.join(',')}"
65
+ end
66
+
67
+ raise ArgumentError, "'#{status}' is not a valid status for check '#{name}'." if ! valid_status?(status)
68
+ raise ArgumentError, "Check name '#{name}' has already been added." if @checks.keys.include?(name)
69
+
70
+ @checks[name] = {status: status, status_code: @valid_status[status], details: details}
71
+ end
72
+
73
+ def valid_status?(status)
74
+ @valid_status.keys.include?(status)
75
+ end
76
+
77
+ # run the checks added via configure
78
+ # results of the checks are available via as_json
79
+ def evaluate!
80
+ start = Time.now
81
+ @checks = {}
82
+ @@config_proc.call(self) if @@config_proc
83
+ @eval_finished = Time.now.utc
84
+ @eval_time = (Time.now - start) * 1000
85
+ end
86
+
87
+ def as_json
88
+ if @checks.size == 0
89
+ max_status = :unknown
90
+ max_int = @valid_status[max_status]
91
+ else
92
+ max_int = @checks.inject([]){ |memo,val| memo << val[1][:status_code]; memo}.max
93
+ max_status = @valid_status.invert[max_int]
94
+ end
95
+
96
+ HashWithIndifferentAccess.new({
97
+ status: max_status,
98
+ status_code: max_int,
99
+ run_time_ms: @eval_time.to_i,
100
+ finished: @eval_finished.iso8601,
101
+ checks: @checks
102
+ })
103
+ end
104
+ end
105
+
106
+ end
@@ -0,0 +1,16 @@
1
+ - data = @checks.as_json
2
+
3
+ %div
4
+ Overall Status
5
+ = data[:status]
6
+
7
+ %div
8
+ %table.table
9
+ - data[:details].each do |key,data|
10
+ %tr
11
+ %td
12
+ =key
13
+ %td
14
+ =data[:status]
15
+ %td
16
+ =data[:details]
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>App Status</title>
5
+ <%= stylesheet_link_tag "app_status/application", :media => "all" %>
6
+ <%= javascript_include_tag "app_status/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/bin/autospec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'autospec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rspec-core', 'autospec')
data/bin/erubis ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'erubis' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('erubis', 'erubis')
data/bin/haml ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'haml' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('haml', 'haml')
data/bin/htmldiff ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'htmldiff' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('diff-lcs', 'htmldiff')
data/bin/ldiff ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'ldiff' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('diff-lcs', 'ldiff')
data/bin/rackup ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rackup' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rack', 'rackup')
data/bin/rails ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rails' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('railties', 'rails')
data/bin/rake ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
data/bin/rdoc ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rdoc' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rdoc', 'rdoc')
data/bin/ri ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'ri' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rdoc', 'ri')
data/bin/rspec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rspec-core', 'rspec')
data/bin/sprockets ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'sprockets' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('sprockets', 'sprockets')
data/bin/thor ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'thor' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('thor', 'thor')
data/bin/tilt ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'tilt' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('tilt', 'tilt')
data/bin/tt ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'tt' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('treetop', 'tt')
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ AppStatus::Engine.routes.draw do
2
+ root :to => 'status#index', :defaults => {:format => 'json'}
3
+ match "/index" => 'status#index'
4
+ end
@@ -0,0 +1,12 @@
1
+ module AppStatus
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace AppStatus
4
+
5
+ config.generators do |g|
6
+ g.test_framework :rspec, :fixture => false
7
+ #g.fixture_replacement :factory_girl, :dir => 'spec/factories'
8
+ g.assets false
9
+ g.helper false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module AppStatus
2
+ VERSION = "0.1.0"
3
+ end
data/lib/app_status.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "app_status/engine"
2
+ require "haml"
3
+
4
+ module AppStatus
5
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :app_status do
3
+ # # Task goes here
4
+ # end