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 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