nephelae 0.0.4 → 0.0.5
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/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
|