rack-ecg 0.0.1 → 0.0.2

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: 15da50402ccd3b3dcc2efab39fcdfde5a320931f
4
- data.tar.gz: b0ee8b09dd75d9f25796c70a31e7477c320c38e7
3
+ metadata.gz: 6f59a0b33808baa8d2e2e9fce089e2cfdf03668c
4
+ data.tar.gz: 3cc238f62ea9afc55dccea25814b24aecc9975aa
5
5
  SHA512:
6
- metadata.gz: 8da335a59221c75231ca7bc618748c59a2926a4a3a15326ff0246a10b19b1bcd7e2f118218f78f80adcacb65d2b4b8420f4843373805470f1fdcc77635b9a4bd
7
- data.tar.gz: ba2660ec5a305e5758cee866aa0c8e466256209b82d8ad8999742b00deb739a5b8fde4cfa9a8a3153f329c2a91142273a1785e8642a84f2d58db9604ae1d4b98
6
+ metadata.gz: f122cef317b2d199fe20075495826a9581af55042addceb61e7ce3f9a32ffb92f3a566590e4b2afa33ee78ca00da9b624265ae9fa1d06363066edb452da64944
7
+ data.tar.gz: 2cf179f722e4024aaf52c3a5c10d676e083a88c4a1b5b5fdc3b6cd63ed5ec9b7c5cf85f384bc35504a95aed0e085e73335638514c1d9b2aae3848728c36622d4
data/examples/basic.ru CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rack/ecg'
2
2
 
3
3
  use Rack::ECG
4
- use Rack::Reloader
5
4
 
6
5
  run -> (env) { [200, {}, ["Hello, World"]] }
data/examples/checks.ru CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rack/ecg'
2
2
 
3
3
  use Rack::ECG, checks: [:git_revision, :migration_version]
4
- use Rack::Reloader
5
4
 
6
5
  run -> (env) { [200, {}, ["Hello, World"]] }
@@ -1,6 +1,5 @@
1
1
  require 'rack/ecg'
2
2
 
3
3
  use Rack::ECG, at: "/health_check"
4
- use Rack::Reloader
5
4
 
6
5
  run -> (env) { [200, {}, ["Hello, World"]] }
@@ -0,0 +1,3 @@
1
+ require 'rack/ecg'
2
+
3
+ run Rack::ECG.new
data/lib/rack/ecg.rb CHANGED
@@ -1,24 +1,29 @@
1
1
  require "rack/ecg/version"
2
2
  require "json"
3
3
  require "open3"
4
+ require "rack/ecg/check"
4
5
 
5
6
  module Rack
6
7
  class ECG
7
8
  DEFAULT_MOUNT_AT = "/_ecg"
8
- DEFAULT_CHECKS = [ :check_http ]
9
+ DEFAULT_CHECKS = [ :http ]
9
10
 
10
- def initialize(app, options={})
11
+ def initialize(app=nil, options={})
11
12
  @app = app
12
- option_checks = options.delete(:checks) || []
13
- option_checks = option_checks.map{|check| "check_#{check}".to_sym }
14
- @checks = DEFAULT_CHECKS + option_checks
13
+
14
+ check_names = options.delete(:checks) || []
15
+ @check_classes = build_check_classes(check_names)
16
+
15
17
  @at = options.delete(:at) || DEFAULT_MOUNT_AT
16
18
  end
17
19
 
18
20
  def call(env)
19
21
  if env["PATH_INFO"] == @at
20
22
 
21
- check_results = @checks.inject({}){|results, check_method| results.merge(send(check_method)) }
23
+ check_results = @check_classes.inject({}){|results, check_class|
24
+ check = check_class.new
25
+ results.merge(check.result.to_json)
26
+ }
22
27
 
23
28
  response_status = check_results.any?{|check| check[1][:status] == "error" } ? 500 : 200
24
29
 
@@ -30,51 +35,22 @@ module Rack
30
35
  response_body = JSON.pretty_generate(check_results)
31
36
 
32
37
  [response_status, response_headers, [response_body]]
33
- else
38
+ elsif @app
34
39
  @app.call(env)
40
+ else
41
+ [404, {},[]]
35
42
  end
36
43
  end
37
44
 
38
45
  private
39
- def check_http
40
- # if rack-ecg is serving a request - http is obviously working so far...
41
- # this is basically a "hello-world"
42
- {http: {status: "ok", value: "online" } }
43
- end
44
-
45
- def check_error
46
- # this always fails. mainly for testing
47
- {error: {status: "error", value: "PC LOAD LETTER" } }
48
- end
49
-
50
- def check_git_revision
51
- _stdin, stdout, stderr, wait_thread = Open3.popen3("git rev-parse HEAD")
52
-
53
- success = wait_thread.value.success?
54
- status = success ? "ok" : "error"
55
- value = success ? stdout.read : stderr.read
56
- value = value.strip
57
- {git_revision: {status: status, value: value} }
58
- end
59
-
60
- def check_migration_version
61
- value = ""
62
- status = "ok"
63
- begin
64
- if defined?(ActiveRecord)
65
- connection = ActiveRecord::Base.connection
66
- result_set = connection.execute("select max(version) as version from schema_migrations")
67
- version = result_set.first
68
- value = version["version"]
69
- else
70
- status = "error"
71
- value = "ActiveRecord not found"
72
- end
73
- rescue => e
74
- status = "error"
75
- value = e.message
76
- end
77
- {migration_version: {status: status, value: value} }
46
+ def build_check_classes(check_names)
47
+ check_names = Array(check_names) # handle nil, or not a list
48
+ check_names = check_names | DEFAULT_CHECKS # add the :http check if it's not there
49
+ check_names.map{|check_name|
50
+ check_class = CheckRegistry.instance[check_name]
51
+ raise "Don't know about check #{check_name}" unless check_class
52
+ check_class
53
+ }
78
54
  end
79
55
  end
80
56
  end
@@ -0,0 +1,17 @@
1
+ require "rack/ecg/check_registry"
2
+ require "rack/ecg/check/error"
3
+ require "rack/ecg/check/git_revision"
4
+ require "rack/ecg/check/http"
5
+ require "rack/ecg/check/migration_version"
6
+
7
+ module Rack
8
+ class ECG
9
+ module Check
10
+ class Result < Struct.new(:name, :status, :value)
11
+ def to_json
12
+ {name => {:status => status, :value => value}}
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Rack
2
+ class ECG
3
+ module Check
4
+ # if rack-ecg is serving a request - http is obviously working so far...
5
+ # this is basically a "hello-world"
6
+ class Error
7
+ def result
8
+ Result.new(:error, "error", "PC LOAD LETTER")
9
+ end
10
+ end
11
+
12
+ CheckRegistry.instance.register(:error, Error)
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module Rack
2
+ class ECG
3
+ module Check
4
+ class GitRevision
5
+ def result
6
+ _stdin, stdout, stderr, wait_thread = Open3.popen3("git rev-parse HEAD")
7
+
8
+ success = wait_thread.value.success?
9
+
10
+ status = success ? "ok" : "error"
11
+
12
+ value = success ? stdout.read : stderr.read
13
+ value = value.strip
14
+
15
+ Result.new(:git_revision, status, value)
16
+ end
17
+ end
18
+
19
+ CheckRegistry.instance.register(:git_revision, GitRevision)
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module Rack
2
+ class ECG
3
+ module Check
4
+ # if rack-ecg is serving a request - http is obviously working so far...
5
+ # this is basically a "hello-world"
6
+ class Http
7
+ def result
8
+ Result.new(:http, "ok", "online")
9
+ end
10
+ end
11
+
12
+ CheckRegistry.instance.register(:http, Http)
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ module Rack
2
+ class ECG
3
+ module Check
4
+ class MigrationVersion
5
+ def result
6
+ value = ""
7
+ status = "ok"
8
+ begin
9
+ if defined?(ActiveRecord)
10
+ connection = ActiveRecord::Base.connection
11
+ result_set = connection.execute("select max(version) as version from schema_migrations")
12
+ version = result_set.first
13
+ value = version["version"]
14
+ else
15
+ status = "error"
16
+ value = "ActiveRecord not found"
17
+ end
18
+ rescue => e
19
+ status = "error"
20
+ value = e.message
21
+ end
22
+
23
+ Result.new(:migration_version, status, value)
24
+ end
25
+ end
26
+
27
+ CheckRegistry.instance.register(:migration_version, MigrationVersion)
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require "singleton"
2
+
3
+ module Rack
4
+ class ECG
5
+ class CheckRegistry
6
+ include Singleton
7
+
8
+ def initialize()
9
+ @registry = {}
10
+ end
11
+
12
+ def register(name, check_class)
13
+ @registry[name] = check_class
14
+ end
15
+
16
+ def [](name)
17
+ @registry[name]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class ECG
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-ecg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Envato
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-09 00:00:00.000000000 Z
12
+ date: 2015-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -115,8 +115,15 @@ files:
115
115
  - examples/basic.ru
116
116
  - examples/checks.ru
117
117
  - examples/mounted_path.ru
118
+ - examples/stand_alone.ru
118
119
  - lib/rack-ecg.rb
119
120
  - lib/rack/ecg.rb
121
+ - lib/rack/ecg/check.rb
122
+ - lib/rack/ecg/check/error.rb
123
+ - lib/rack/ecg/check/git_revision.rb
124
+ - lib/rack/ecg/check/http.rb
125
+ - lib/rack/ecg/check/migration_version.rb
126
+ - lib/rack/ecg/check_registry.rb
120
127
  - lib/rack/ecg/version.rb
121
128
  - rack-ecg.gemspec
122
129
  - spec/rack_middleware_spec.rb