88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/metrix/cli.rb', line 88
def start
if self.reporter.nil?
puts "ERROR: at least one reporter must be specified"
abort opts.to_s
end
Signal.trap("TERM") do
logger.info "terminating..."
$running = false
end
$running = true
cnt = -1
started = Time.now
write_pidfile!(Process.pid)
while $running
begin
cnt += 1
now = Time.now.utc
fetch_metrix(:elasticsearch) { reporter << Metrix::ElasticSearch.new(fetch_resource(:elasticsearch)) }
fetch_metrix(:mongodb) { reporter << Metrix::Mongodb.new(fetch_resource(:mongodb)) }
fetch_metrix(:nginx) { reporter << Metrix::Nginx.new(fetch_resource(:nginx)) }
fetch_metrix(:fpm) { reporter << Metrix::FPM.new(fetch_resource(:fpm)) }
fetch_metrix(:system) { reporter << Metrix::System.new(File.read("/proc/stat")) }
fetch_metrix(:load) { reporter << Metrix::Load.new(File.read("/proc/loadavg")) }
fetch_metrix(:memory) { reporter << Metrix::Memory.new(File.read("/proc/meminfo")) }
fetch_metrix(:diskstats) { reporter << Metrix::Diskstats.new(File.read("/proc/diskstats")) }
fetch_metrix(:df) { reporter << Metrix::Df.new(`df -k`) }
fetch_metrix :processes do
Metrix::ProcessMetric.all.each do |m|
reporter << m
end
end
reporter.flush
rescue SystemExit
$running = false
rescue => err
Metrix.logger.error "#{err.message}"
Metrix.logger.error "#{err.backtrace.inspect}"
ensure
begin
sleep_for = @interval - (Time.now - started - cnt * interval)
if sleep_for > 0
Metrix.logger.info "finished run in %.06f, sleeping for %.06f. metrix version: #{Metrix::VERSION}, attributes: #{attributes}" % [Time.now - now, sleep_for]
sleep sleep_for
else
Metrix.logger.info "not sleeping because %.06f is negative" % [sleep_for]
end
rescue SystemExit, Interrupt
$running = false
end
end
end
delete_pidfile!
end
|