nephelae 0.0.9 → 0.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.
- data/.gitignore +4 -2
- data/bin/nephelae +32 -29
- data/lib/nephelae.rb +1 -0
- data/lib/nephelae/plugins/disk_space.rb +13 -11
- data/lib/nephelae/plugins/mem_usage.rb +10 -9
- data/lib/nephelae/plugins/nephelae_process.rb +8 -5
- data/lib/nephelae/plugins/passenger_status.rb +11 -9
- data/lib/nephelae/plugins/plugin.rb +26 -0
- data/lib/nephelae/plugins/redis.rb +12 -9
- data/lib/nephelae/runner.rb +18 -5
- data/lib/nephelae/version.rb +1 -1
- metadata +3 -2
data/.gitignore
CHANGED
data/bin/nephelae
CHANGED
@@ -3,57 +3,60 @@ require 'rubygems'
|
|
3
3
|
require 'daemons'
|
4
4
|
require 'nephelae'
|
5
5
|
require 'optparse'
|
6
|
+
require 'yaml'
|
6
7
|
|
7
8
|
settings = {}
|
8
9
|
logfile = ""
|
9
10
|
loglevel = nil
|
10
11
|
|
12
|
+
cmd = ARGV.first
|
13
|
+
|
14
|
+
file = '/etc/nephelae.yml'
|
15
|
+
logfile = STDOUT
|
16
|
+
loglevel = Logger::WARN
|
17
|
+
logdir = '/var/log'
|
18
|
+
piddir = '/var/run'
|
19
|
+
|
11
20
|
OptionParser.new do |o|
|
12
21
|
o.banner << " command"
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
o.on("-s", "--aws-secret-access-key SECRETKEY", "AWS Secret Access Key to use for cloudwatch") do |v|
|
17
|
-
settings[:aws_secret_access_key] = v
|
22
|
+
|
23
|
+
o.on("--config CONFIGFILE", "The config file to use for plugins (and aws settin3yygs)") do |v|
|
24
|
+
file = v
|
18
25
|
end
|
19
26
|
|
20
|
-
o.on("
|
21
|
-
|
27
|
+
o.on("--logdir LOGDIR", "The directory to put log files") do |v|
|
28
|
+
logdir = v
|
22
29
|
end
|
23
30
|
|
24
|
-
o.on("
|
25
|
-
|
31
|
+
o.on("--piddir PIDDIR", "The directory to put pid files") do |v|
|
32
|
+
piddir = v
|
26
33
|
end
|
27
34
|
|
28
|
-
o.on("
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
when "fatal"
|
41
|
-
loglevel = Logger::FATAL
|
42
|
-
else
|
43
|
-
loglevel = Logger::WARN
|
44
|
-
end
|
35
|
+
o.on("--loglevel LOGLEVEL", "The level to log to") do |v|
|
36
|
+
case v.downcase
|
37
|
+
when "debug"
|
38
|
+
loglevel = Logger::DEBUG
|
39
|
+
when "info"
|
40
|
+
loglevel = Logger::INFO
|
41
|
+
when "warn"
|
42
|
+
loglevel = Logger::WARN
|
43
|
+
when "error"
|
44
|
+
loglevel = Logger::ERROR
|
45
|
+
when "fatal"
|
46
|
+
loglevel = Logger::FATAL
|
45
47
|
else
|
46
48
|
loglevel = Logger::WARN
|
47
|
-
end
|
49
|
+
end unless v.nil?
|
48
50
|
end
|
49
51
|
end.parse!
|
50
52
|
|
51
53
|
log = Logger.new(logfile)
|
52
54
|
log.level = loglevel
|
53
55
|
Nephelae::Logging.logger = log
|
56
|
+
File.open( file ) { |yf| settings = YAML::load( yf ) }
|
54
57
|
|
55
|
-
new_argv = [
|
56
|
-
Daemons.run_proc('nephelae', {ARGV: new_argv}) do
|
58
|
+
new_argv = [cmd]
|
59
|
+
Daemons.run_proc('nephelae', {ARGV: new_argv, log_dir: logdir, dir_mode: :normal, dir: piddir, log_output: true}) do
|
57
60
|
r = Nephelae::Runner.new(settings)
|
58
61
|
r.run
|
59
62
|
end
|
data/lib/nephelae.rb
CHANGED
@@ -4,6 +4,7 @@ require "nephelae/cloud_watch/simple_aws"
|
|
4
4
|
require "nephelae/cloud_watch/cloud_watch"
|
5
5
|
require "nephelae/cloud_watch/metrics"
|
6
6
|
|
7
|
+
require "nephelae/plugins/plugin"
|
7
8
|
require "nephelae/plugins/disk_space"
|
8
9
|
require "nephelae/plugins/mem_usage"
|
9
10
|
require "nephelae/plugins/nephelae_process"
|
@@ -1,18 +1,9 @@
|
|
1
1
|
module Nephelae
|
2
2
|
|
3
|
-
class DiskSpace
|
4
|
-
attr_accessor :path
|
5
|
-
|
6
|
-
def initialize(params = {})
|
7
|
-
@path = params[:path] || '/'
|
8
|
-
end
|
9
|
-
|
10
|
-
def command
|
11
|
-
"/bin/df -k -l -P #{@path}"
|
12
|
-
end
|
3
|
+
class DiskSpace < Plugin
|
13
4
|
|
14
5
|
def get_metrics
|
15
|
-
metrics = Metrics.new(
|
6
|
+
metrics = Metrics.new(namespace)
|
16
7
|
output = `#{command}`
|
17
8
|
stats = output.split(/\n/).last.split(/\s+/)
|
18
9
|
|
@@ -25,6 +16,17 @@ module Nephelae
|
|
25
16
|
|
26
17
|
end
|
27
18
|
|
19
|
+
private
|
20
|
+
|
21
|
+
def default_namespace
|
22
|
+
'Nephelae/Linux'
|
23
|
+
end
|
24
|
+
|
25
|
+
def command
|
26
|
+
path = config[:path] || '/'
|
27
|
+
"/bin/df -k -l -P #{path}"
|
28
|
+
end
|
29
|
+
|
28
30
|
end
|
29
31
|
|
30
32
|
end
|
@@ -1,16 +1,9 @@
|
|
1
1
|
module Nephelae
|
2
2
|
|
3
|
-
class MemUsage
|
4
|
-
|
5
|
-
def initialize(params = {})
|
6
|
-
end
|
7
|
-
|
8
|
-
def command
|
9
|
-
"cat /proc/meminfo"
|
10
|
-
end
|
3
|
+
class MemUsage < Plugin
|
11
4
|
|
12
5
|
def get_metrics
|
13
|
-
metrics = Metrics.new(
|
6
|
+
metrics = Metrics.new(namespace)
|
14
7
|
output = `#{command}`
|
15
8
|
|
16
9
|
if $?.success?
|
@@ -58,6 +51,14 @@ module Nephelae
|
|
58
51
|
}
|
59
52
|
end
|
60
53
|
|
54
|
+
def default_namespace
|
55
|
+
'Nephelae/Linux'
|
56
|
+
end
|
57
|
+
|
58
|
+
def command
|
59
|
+
"cat /proc/meminfo"
|
60
|
+
end
|
61
|
+
|
61
62
|
end
|
62
63
|
|
63
64
|
end
|
@@ -1,12 +1,9 @@
|
|
1
1
|
module Nephelae
|
2
2
|
|
3
|
-
class NephelaeProcess
|
4
|
-
|
5
|
-
def initialize(params = {})
|
6
|
-
end
|
3
|
+
class NephelaeProcess < Plugin
|
7
4
|
|
8
5
|
def get_metrics
|
9
|
-
metrics = Metrics.new(
|
6
|
+
metrics = Metrics.new(namespace)
|
10
7
|
|
11
8
|
#if we are doing this we are up
|
12
9
|
metrics.append_metric('Up', 1)
|
@@ -15,6 +12,12 @@ module Nephelae
|
|
15
12
|
|
16
13
|
end
|
17
14
|
|
15
|
+
private
|
16
|
+
|
17
|
+
def default_namespace
|
18
|
+
'Nephelae/Linux'
|
19
|
+
end
|
20
|
+
|
18
21
|
end
|
19
22
|
|
20
23
|
end
|
@@ -1,16 +1,9 @@
|
|
1
1
|
module Nephelae
|
2
2
|
|
3
|
-
class PassengerStatus
|
4
|
-
|
5
|
-
def initialize(params = {})
|
6
|
-
end
|
7
|
-
|
8
|
-
def command
|
9
|
-
"passenger-status"
|
10
|
-
end
|
3
|
+
class PassengerStatus < Plugin
|
11
4
|
|
12
5
|
def get_metrics
|
13
|
-
metrics = Metrics.new(
|
6
|
+
metrics = Metrics.new(namespace)
|
14
7
|
output = `#{command}`
|
15
8
|
|
16
9
|
if $?.success?
|
@@ -37,6 +30,15 @@ module Nephelae
|
|
37
30
|
}
|
38
31
|
end
|
39
32
|
|
33
|
+
def default_namespace
|
34
|
+
'Nephelae/Passenger'
|
35
|
+
end
|
36
|
+
|
37
|
+
def command
|
38
|
+
"passenger-status"
|
39
|
+
end
|
40
|
+
|
41
|
+
|
40
42
|
end
|
41
43
|
|
42
44
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Nephelae
|
2
|
+
|
3
|
+
class Plugin
|
4
|
+
attr_accessor :config
|
5
|
+
|
6
|
+
def initialize(config = {})
|
7
|
+
@config = config
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_metrics
|
11
|
+
metrics = Metrics.new(namespace)
|
12
|
+
return metrics
|
13
|
+
end
|
14
|
+
|
15
|
+
def namespace
|
16
|
+
namespace = config[:namespace] || default_namespace
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def default_namespace
|
21
|
+
"Nephelae/Plugin"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -1,16 +1,9 @@
|
|
1
1
|
module Nephelae
|
2
2
|
|
3
|
-
class RedisStatus
|
4
|
-
|
5
|
-
def initialize(params = {})
|
6
|
-
end
|
7
|
-
|
8
|
-
def command
|
9
|
-
"/usr/local/bin/redis-cli info"
|
10
|
-
end
|
3
|
+
class RedisStatus < Plugin
|
11
4
|
|
12
5
|
def get_metrics
|
13
|
-
metrics = Metrics.new(
|
6
|
+
metrics = Metrics.new(namespace)
|
14
7
|
output = `#{command}`
|
15
8
|
|
16
9
|
if $?.success?
|
@@ -47,6 +40,16 @@ module Nephelae
|
|
47
40
|
})
|
48
41
|
end
|
49
42
|
|
43
|
+
def command
|
44
|
+
port = config[:port].nil? ? "" : " -p #{config[:port]}"
|
45
|
+
password = config[:password].nil? ? "" : " -a #{config[:password]}"
|
46
|
+
"/usr/local/bin/redis-cli#{port}#{password} info"
|
47
|
+
end
|
48
|
+
|
49
|
+
def default_namespace
|
50
|
+
"Nephelae/Redis"
|
51
|
+
end
|
52
|
+
|
50
53
|
end
|
51
54
|
|
52
55
|
end
|
data/lib/nephelae/runner.rb
CHANGED
@@ -4,12 +4,13 @@ module Nephelae
|
|
4
4
|
class Runner
|
5
5
|
include Logging
|
6
6
|
|
7
|
-
attr_accessor :aws_access_key_id, :aws_secret_access_key, :region
|
7
|
+
attr_accessor :aws_access_key_id, :aws_secret_access_key, :region, :plugins
|
8
8
|
|
9
9
|
def initialize(config = {})
|
10
10
|
@aws_access_key_id = config[:aws_access_key_id]
|
11
11
|
@aws_secret_access_key = config[:aws_secret_access_key]
|
12
|
-
@region = config[:region]
|
12
|
+
@region = config[:region] || 'us-east-1'
|
13
|
+
@plugins = config[:plugins] || default_plugins
|
13
14
|
end
|
14
15
|
|
15
16
|
def run
|
@@ -20,11 +21,14 @@ module Nephelae
|
|
20
21
|
#make one request to put a cloud watch metric for nephelae being up. hopefully this can make it bork early if anything is wrong
|
21
22
|
cloud.put_metric(NephelaeProcess.new.get_metrics)
|
22
23
|
|
23
|
-
plugins = [DiskSpace.new, MemUsage.new, NephelaeProcess.new, PassengerStatus.new, RedisStatus.new]
|
24
24
|
scheduler = Rufus::Scheduler::EmScheduler.start_new
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
plugins.each do |name, config|
|
27
|
+
schedule = config.delete(:schedule) || '5m'
|
28
|
+
klass_name = config.delete(:plugin_class)
|
29
|
+
klass = Object.const_get('Nephelae').const_get(klass_name)
|
30
|
+
p = klass.new(config)
|
31
|
+
scheduler.every schedule do
|
28
32
|
begin
|
29
33
|
cloud.put_metric(p.get_metrics)
|
30
34
|
rescue StandardError => e
|
@@ -33,8 +37,17 @@ module Nephelae
|
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
40
|
+
|
36
41
|
}
|
37
42
|
end
|
38
43
|
|
44
|
+
private
|
45
|
+
def default_plugins
|
46
|
+
plugins = {}
|
47
|
+
plugins[:disk_space] = {plugin_class: "DiskSpace", schedule: "5m", path: '/'}
|
48
|
+
plugins[:mem_usage] = {plugin_class: "MemUsage", schedule: "5m"}
|
49
|
+
plugins
|
50
|
+
end
|
51
|
+
|
39
52
|
end
|
40
53
|
end
|
data/lib/nephelae/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nephelae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: excon
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- lib/nephelae/plugins/mem_usage.rb
|
116
116
|
- lib/nephelae/plugins/nephelae_process.rb
|
117
117
|
- lib/nephelae/plugins/passenger_status.rb
|
118
|
+
- lib/nephelae/plugins/plugin.rb
|
118
119
|
- lib/nephelae/plugins/redis.rb
|
119
120
|
- lib/nephelae/runner.rb
|
120
121
|
- lib/nephelae/version.rb
|