Class: Sensu::API

Inherits:
Sinatra::Base
  • Object
show all
Defined in:
lib/sensu/api.rb

Class Method Summary collapse

Class Method Details

.bootstrap(options = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/sensu/api.rb', line 24

def bootstrap(options={})
  base = Base.new(options)
  $logger = base.logger
  $settings = base.settings
  base.setup_process
  if $settings[:api][:user] && $settings[:api][:password]
    use Rack::Auth::Basic do |user, password|
      user == $settings[:api][:user] && password == $settings[:api][:password]
    end
  end
end

.run(options = {}) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/sensu/api.rb', line 16

def run(options={})
  EM::run do
    bootstrap(options)
    start
    trap_signals
  end
end

.setup_rabbitmqObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sensu/api.rb', line 55

def setup_rabbitmq
  $logger.debug('connecting to rabbitmq', {
    :settings => $settings[:rabbitmq]
  })
  $rabbitmq = RabbitMQ.connect($settings[:rabbitmq])
  $rabbitmq.on_error do |error|
    $logger.fatal('rabbitmq connection error', {
      :error => error.to_s
    })
    stop
  end
  $rabbitmq.before_reconnect do
    $logger.warn('reconnecting to rabbitmq')
  end
  $rabbitmq.after_reconnect do
    $logger.info('reconnected to rabbitmq')
  end
  $amq = $rabbitmq.channel
end

.setup_redisObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/sensu/api.rb', line 36

def setup_redis
  $logger.debug('connecting to redis', {
    :settings => $settings[:redis]
  })
  $redis = Redis.connect($settings[:redis])
  $redis.on_error do |error|
    $logger.fatal('redis connection error', {
      :error => error.to_s
    })
    stop
  end
  $redis.before_reconnect do
    $logger.warn('reconnecting to redis')
  end
  $redis.after_reconnect do
    $logger.info('reconnected to redis')
  end
end

.startObject



75
76
77
78
79
80
81
# File 'lib/sensu/api.rb', line 75

def start
  setup_redis
  setup_rabbitmq
  Thin::Logging.silent = true
  bind = $settings[:api][:bind] || '0.0.0.0'
  Thin::Server.start(bind, $settings[:api][:port], self)
end

.stopObject



83
84
85
86
87
88
89
# File 'lib/sensu/api.rb', line 83

def stop
  $logger.warn('stopping')
  $rabbitmq.close
  $redis.close
  $logger.warn('stopping reactor')
  EM::stop_event_loop
end

.test(options = {}) ⇒ Object



109
110
111
112
# File 'lib/sensu/api.rb', line 109

def test(options={})
  bootstrap(options)
  start
end

.trap_signalsObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/sensu/api.rb', line 91

def trap_signals
  $signals = Array.new
  STOP_SIGNALS.each do |signal|
    Signal.trap(signal) do
      $signals << signal
    end
  end
  EM::PeriodicTimer.new(1) do
    signal = $signals.shift
    if STOP_SIGNALS.include?(signal)
      $logger.warn('received signal', {
        :signal => signal
      })
      stop
    end
  end
end