what 0.0.3 → 0.0.4

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.
data/README.md ADDED
@@ -0,0 +1,24 @@
1
+ What? A simple server monitoring tool.
2
+ ======================================
3
+
4
+ What is still in the early stages of development.
5
+
6
+ Right now, the example config file monitors Unicorn workers. Observe:
7
+
8
+ $ what -c example/what.yml >/dev/null 2>&1 &
9
+ [1] 2392
10
+ $ curl localhost:9428
11
+ {"unicorn":{"details":[{"cpu_time":"0:00.02","pid":"11023"},{"cpu_time":"0:00.02","pid":"11022"}],"health":"ok","workers":2},"health":"ok"}
12
+ $ sudo /etc/init.d/unicorn stop
13
+ $ curl localhost:9428
14
+ {"unicorn":{"details":[],"health":"alert","workers":0},"health":"alert"}
15
+
16
+ When the health value of any module is set to "alert" instead of "ok",
17
+ the HTTP request returns 503 instead of 200. This means What can easily
18
+ be used in conjunction with monitoring tools like Pingdom.
19
+
20
+ Writing monitoring modules is easy: the only requirement is that they
21
+ implement a `health` method, which returns `:ok`, `:warning`, or `:alert`.
22
+ They can also implement a `details` method, which returns the hash
23
+ that's included in the HTTP response. See the included `What::Modules::Base`
24
+ and `What::Modules::Unicorn` classes for the implementation details.
data/example/what.yml CHANGED
@@ -10,17 +10,13 @@ interval: 10
10
10
  ### List all modules to be monitored.
11
11
  modules:
12
12
  - unicorn
13
- # - ram
14
- # - redis
15
- # - dir
16
- # - whatever
17
13
 
18
14
  ### Pass parameters into modules.
19
- # module_config:
20
- # ram:
21
- # min: nil
22
- # dir:
23
- # path: '/mnt/datastore'
15
+ module_config:
16
+ unicorn:
17
+ # minimum number of workers before warning and alert statuses
18
+ warning: 1
19
+ alert: 0
24
20
 
25
21
  ### Specify any other config files to load.
26
22
  # configs:
@@ -1,6 +1,6 @@
1
1
  class What::Modules::Base
2
2
  def initialize
3
- @config = What::Config[self.name]
3
+ @config = What::Config['module_config'] && What::Config['module_config'][self.name]
4
4
  end
5
5
 
6
6
  def name
@@ -8,7 +8,6 @@ class What::Modules::Base
8
8
  end
9
9
 
10
10
  def check!
11
- raise "Module #{self.class.name} doesn't override 'check!'"
12
11
  end
13
12
 
14
13
  def status
@@ -23,4 +22,3 @@ class What::Modules::Base
23
22
  {}
24
23
  end
25
24
  end
26
-
@@ -9,8 +9,10 @@ class What::Modules::Unicorn < What::Modules::Base
9
9
  end
10
10
 
11
11
  def health
12
- if @unicorns.count > 0
12
+ if @unicorns.count > @config['warning']
13
13
  :ok
14
+ elsif @unicorns.count > @config['alert']
15
+ :warning
14
16
  else
15
17
  :alert
16
18
  end
data/lib/what/monitor.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  class What::Monitor
2
+ # don't worry, these method names are ironic
2
3
  def self.go!
3
4
  @modules = What::Config['modules'].map do |m|
4
5
  name = What::Helpers.camelize(m)
data/lib/what/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module What
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: what
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 23
4
5
  prerelease:
5
- version: 0.0.3
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 4
10
+ version: 0.0.4
6
11
  platform: ruby
7
12
  authors:
8
13
  - Ryan Lower
@@ -22,6 +27,9 @@ dependencies:
22
27
  requirements:
23
28
  - - ">="
24
29
  - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
25
33
  version: "0"
26
34
  type: :runtime
27
35
  version_requirements: *id001
@@ -33,6 +41,9 @@ dependencies:
33
41
  requirements:
34
42
  - - ">="
35
43
  - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
36
47
  version: "0"
37
48
  type: :runtime
38
49
  version_requirements: *id002
@@ -51,6 +62,7 @@ extra_rdoc_files: []
51
62
  files:
52
63
  - .gitignore
53
64
  - Gemfile
65
+ - README.md
54
66
  - Rakefile
55
67
  - bin/what
56
68
  - example/what.yml
@@ -79,17 +91,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
91
  requirements:
80
92
  - - ">="
81
93
  - !ruby/object:Gem::Version
94
+ hash: 3
95
+ segments:
96
+ - 0
82
97
  version: "0"
83
98
  required_rubygems_version: !ruby/object:Gem::Requirement
84
99
  none: false
85
100
  requirements:
86
101
  - - ">="
87
102
  - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
88
106
  version: "0"
89
107
  requirements: []
90
108
 
91
109
  rubyforge_project: what
92
- rubygems_version: 1.5.2
110
+ rubygems_version: 1.5.1
93
111
  signing_key:
94
112
  specification_version: 3
95
113
  summary: Modular server monitoring with JSON endpoint