nephelae 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nephelae +32 -0
- data/lib/nephelae.rb +2 -0
- data/lib/nephelae/cloud_watch/cloud_watch.rb +6 -1
- data/lib/nephelae/cloud_watch/simple_aws.rb +1 -0
- data/lib/nephelae/plugins/mem_usage.rb +6 -6
- data/lib/nephelae/plugins/nephelae_process.rb +1 -1
- data/lib/nephelae/plugins/passenger_status.rb +7 -7
- data/lib/nephelae/runner.rb +11 -3
- data/lib/nephelae/version.rb +1 -1
- metadata +2 -2
data/bin/nephelae
CHANGED
@@ -5,6 +5,8 @@ require 'nephelae'
|
|
5
5
|
require 'optparse'
|
6
6
|
|
7
7
|
settings = {}
|
8
|
+
logfile = ""
|
9
|
+
loglevel = nil
|
8
10
|
|
9
11
|
OptionParser.new do |o|
|
10
12
|
o.banner << " command"
|
@@ -18,8 +20,38 @@ OptionParser.new do |o|
|
|
18
20
|
o.on("-r", "--region REGION", "The region to use for cloudwatch") do |v|
|
19
21
|
settings[:region] = v
|
20
22
|
end
|
23
|
+
|
24
|
+
o.on("-lf", "--logfile [FILEPATH]", "The filepath to log to") do |v|
|
25
|
+
logfile = v || STDOUT
|
26
|
+
end
|
27
|
+
|
28
|
+
o.on("-ll", "--loglevel [LOGLEVEL]", "The level to log to") do |v|
|
29
|
+
unless v.nil?
|
30
|
+
DEBUG < INFO < WARN < ERROR < FATAL
|
31
|
+
case v
|
32
|
+
when "debug"
|
33
|
+
loglevel = Logger::DEBUG
|
34
|
+
when "info"
|
35
|
+
loglevel = Logger::INFO
|
36
|
+
when "warn"
|
37
|
+
loglevel = Logger::WARN
|
38
|
+
when "error"
|
39
|
+
loglevel = Logger::ERROR
|
40
|
+
when "fatal"
|
41
|
+
loglevel = Logger::FATAL
|
42
|
+
else
|
43
|
+
loglevel = Logger::WARN
|
44
|
+
end
|
45
|
+
else
|
46
|
+
loglevel = Logger::WARN
|
47
|
+
end
|
48
|
+
end
|
21
49
|
end.parse!
|
22
50
|
|
51
|
+
log = Logger.new(logfile)
|
52
|
+
log.level = loglevel
|
53
|
+
Nephelae::Logging.logger = log
|
54
|
+
|
23
55
|
new_argv = [ARGV.first]
|
24
56
|
Daemons.run_proc('nephelae', {ARGV: new_argv}) do
|
25
57
|
r = Nephelae::Runner.new(settings)
|
data/lib/nephelae.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "nephelae/version"
|
2
|
+
require "nephelae/logging"
|
2
3
|
require "nephelae/cloud_watch/simple_aws"
|
3
4
|
require "nephelae/cloud_watch/cloud_watch"
|
4
5
|
require "nephelae/cloud_watch/metrics"
|
@@ -7,6 +8,7 @@ require "nephelae/plugins/disk_space"
|
|
7
8
|
require "nephelae/plugins/mem_usage"
|
8
9
|
require "nephelae/plugins/nephelae_process"
|
9
10
|
require "nephelae/plugins/passenger_status"
|
11
|
+
require "nephelae/plugins/redis"
|
10
12
|
|
11
13
|
require "nephelae/runner"
|
12
14
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Nephelae
|
2
2
|
class CloudWatch
|
3
|
+
include Logging
|
3
4
|
|
4
5
|
attr_accessor :aws_access_key_id, :aws_secret_access_key, :aws_session_token, :aws_credentials_expire_at, :url
|
5
6
|
|
@@ -43,7 +44,11 @@ module Nephelae
|
|
43
44
|
|
44
45
|
def put_metric(metric)
|
45
46
|
params = metric.params
|
46
|
-
|
47
|
+
unless params.nil?
|
48
|
+
cw_output = request(metric.params) unless params.nil?
|
49
|
+
log.info(cw_output)
|
50
|
+
cw_output
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
49
54
|
end
|
@@ -47,12 +47,12 @@ module Nephelae
|
|
47
47
|
|
48
48
|
private
|
49
49
|
def parse_status(body)
|
50
|
-
{ :mem_total => body.match(/MemTotal:\s+(\d+)\s/)[1],
|
51
|
-
:mem_free => body.match(/MemFree:\s+(\d+)\s/)[1],
|
52
|
-
:buffers => body.match(/Buffers:\s+(\d+)\s/)[1],
|
53
|
-
:cached => body.match(/Cached:\s+(\d+)\s/)[1],
|
54
|
-
:swap_total => body.match(/SwapTotal:\s+(\d+)\s/)[1],
|
55
|
-
:swap_free => body.match(/SwapFree:\s+(\d+)\s/)[1]
|
50
|
+
{ :mem_total => body.match(/MemTotal:\s+(\d+)\s/)[1].to_i,
|
51
|
+
:mem_free => body.match(/MemFree:\s+(\d+)\s/)[1].to_i,
|
52
|
+
:buffers => body.match(/Buffers:\s+(\d+)\s/)[1].to_i,
|
53
|
+
:cached => body.match(/Cached:\s+(\d+)\s/)[1].to_i,
|
54
|
+
:swap_total => body.match(/SwapTotal:\s+(\d+)\s/)[1].to_i,
|
55
|
+
:swap_free => body.match(/SwapFree:\s+(\d+)\s/)[1].to_i
|
56
56
|
}
|
57
57
|
end
|
58
58
|
|
@@ -6,20 +6,20 @@ module Nephelae
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def command
|
9
|
-
"passenger-status
|
9
|
+
"passenger-status"
|
10
10
|
end
|
11
11
|
|
12
12
|
def get_metrics
|
13
|
-
metrics = Metrics.new('
|
13
|
+
metrics = Metrics.new('Application/Passenger')
|
14
14
|
output = `#{command}`
|
15
15
|
|
16
16
|
if $?.success?
|
17
17
|
stats = parse_status(output)
|
18
|
-
metrics.append_metric('MaxInstances', stats[:max])
|
19
|
-
metrics.append_metric('CountInstances', stats[:count])
|
20
|
-
metrics.append_metric('ActiveInstances', stats[:active])
|
21
|
-
metrics.append_metric('InactiveInstances', stats[:inactive])
|
22
|
-
metrics.append_metric('WaitingOnGlobalQueue', stats[:waiting_on_global_queue])
|
18
|
+
metrics.append_metric('MaxInstances', stats[:max], {unit: 'Count'})
|
19
|
+
metrics.append_metric('CountInstances', stats[:count], {unit: 'Count'})
|
20
|
+
metrics.append_metric('ActiveInstances', stats[:active], {unit: 'Count'})
|
21
|
+
metrics.append_metric('InactiveInstances', stats[:inactive], {unit: 'Count'})
|
22
|
+
metrics.append_metric('WaitingOnGlobalQueue', stats[:waiting_on_global_queue], {unit: 'Count'})
|
23
23
|
|
24
24
|
end
|
25
25
|
|
data/lib/nephelae/runner.rb
CHANGED
@@ -2,6 +2,7 @@ require 'eventmachine'
|
|
2
2
|
require 'rufus/scheduler'
|
3
3
|
module Nephelae
|
4
4
|
class Runner
|
5
|
+
include Logging
|
5
6
|
|
6
7
|
attr_accessor :aws_access_key_id, :aws_secret_access_key, :region
|
7
8
|
|
@@ -12,18 +13,25 @@ module Nephelae
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def run
|
15
|
-
|
16
|
+
log.warn "starting nephelae"
|
16
17
|
EM.run {
|
17
18
|
cloud = CloudWatch.new({aws_access_key_id: @aws_access_key_id, aws_secret_access_key: @aws_secret_access_key, region: @region})
|
18
19
|
|
19
20
|
#make one request to put a cloud watch metric for nephelae being up. hopefully this can make it bork early if anything is wrong
|
20
21
|
cloud.put_metric(NephelaeProcess.new.get_metrics)
|
21
22
|
|
22
|
-
plugins = [DiskSpace.new, MemUsage.new, NephelaeProcess.new, PassengerStatus.new]
|
23
|
+
plugins = [DiskSpace.new, MemUsage.new, NephelaeProcess.new, PassengerStatus.new, RedisStatus.new]
|
23
24
|
scheduler = Rufus::Scheduler::EmScheduler.start_new
|
24
25
|
|
25
26
|
scheduler.every '5m' do
|
26
|
-
plugins.each
|
27
|
+
plugins.each do |p|
|
28
|
+
begin
|
29
|
+
cloud.put_metric(p.get_metrics)
|
30
|
+
rescue StandardError => e
|
31
|
+
log.error("nephelae plugin #{p.class} failed #{e.message}")
|
32
|
+
log.error(e.backtrace.join("\n"))
|
33
|
+
end
|
34
|
+
end
|
27
35
|
end
|
28
36
|
}
|
29
37
|
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.0.5
|
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-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: excon
|