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 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
- request(metric.params) unless params.nil?
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
@@ -49,6 +49,7 @@ module Nephelae
49
49
 
50
50
  def self.get_instance_id
51
51
  Excon.get('http://169.254.169.254/latest/meta-data/instance-id').body
52
+ #"i-f746ec92"
52
53
  end
53
54
 
54
55
  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,7 +6,7 @@ module Nephelae
6
6
  end
7
7
 
8
8
  def get_metrics
9
- metrics = Metrics.new('Process/Nephelae')
9
+ metrics = Metrics.new('Application/Nephelae')
10
10
 
11
11
  #if we are doing this we are up
12
12
  metrics.append_metric('Up', 1)
@@ -6,20 +6,20 @@ module Nephelae
6
6
  end
7
7
 
8
8
  def command
9
- "passenger-status 2>&1"
9
+ "passenger-status"
10
10
  end
11
11
 
12
12
  def get_metrics
13
- metrics = Metrics.new('Linux/Passenger')
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
 
@@ -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 {|p| cloud.put_metric(p.get_metrics) }
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
@@ -1,3 +1,3 @@
1
1
  module Nephelae
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
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
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-14 00:00:00.000000000 Z
12
+ date: 2012-08-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: excon