73 lines
2.2 KiB
Ruby
73 lines
2.2 KiB
Ruby
#! /bin/env ruby
|
|
|
|
# returns the mem usage of a given process
|
|
$gmetric = %x{which gmetric}.chomp
|
|
exit 0 unless $gmetric != ""
|
|
|
|
def plist(psname)
|
|
whats = ["rss","size","vsize","cpu"]
|
|
%x{ps h -o rss,size,vsize,pcpu,command -C ruby1.8 |grep #{psname}|cut -f 1-4 -d ' '}.each do |ps|
|
|
#rss,size,vsize,cpu,command = ps.split
|
|
counter = 0
|
|
ps.split.each { |value|
|
|
what = whats[counter]
|
|
counter += 1
|
|
units = counter == 4 ? "time" : "kbyte"
|
|
# puts "#{psname}_#{counter}_#{what} V=#{value} U=#{units}"
|
|
gmetric("#{psname}_#{counter}_#{what}",value,units)
|
|
}
|
|
|
|
end
|
|
return
|
|
end
|
|
|
|
def gmetric(name,value,units)
|
|
%x{#{$gmetric} --type=float --units=#{units} --name=#{name} --value=#{value} --slope=positive --tmax=300 --dmax=300000}
|
|
end
|
|
|
|
# reports how many clients compiled in the last 5 minutes
|
|
# repotrs how many unique clients compiled since the begining of the day
|
|
# report the average compilation time for all clients in the last 5 minutes.
|
|
def phaselog
|
|
logfile = ENV['puppet_logfile'] || '/var/log/daemon.log'
|
|
count,avg,day_count_unique,day_count = 0 ,0 ,0, 0
|
|
t = Time.now
|
|
today = t.strftime("^%b %d")
|
|
hour = t.strftime("%H:")
|
|
m = t.min.to_i
|
|
last5m = ""
|
|
6.times do |i|
|
|
last5m += hour
|
|
last5m += "0" if (m-i) < 10
|
|
last5m += (m-i).to_s
|
|
last5m += "|" unless i==5
|
|
end
|
|
hosts = Array.new
|
|
regexp = ".* for (.*) in (.*) seconds"
|
|
File.open(logfile).grep(/#{today}/).grep(/Compiled configuration|Compiled catalog/).each do |line|
|
|
case line
|
|
when /#{last5m}/ then
|
|
if line =~ /#{regexp}/
|
|
avg += $2.to_f
|
|
count += 1
|
|
unless hosts.include?($1)
|
|
hosts << $1
|
|
end
|
|
end
|
|
when /#{regexp}/ then
|
|
day_count += 1
|
|
unless hosts.include?($1)
|
|
hosts << $1
|
|
day_count_unique += 1
|
|
end
|
|
end
|
|
end
|
|
gmetric("puppetmasterd avg_compile",(avg / count).to_s[0..3],"seconds") unless count == 0
|
|
gmetric("puppetmasterd last5m_count",count,"clients")
|
|
gmetric("puppetmasterd last24h_unique_count", day_count_unique, "clients")
|
|
end
|
|
|
|
plist("puppetmasterd")
|
|
gmetric("puppetmasterd known_clients",Dir.entries('/var/lib/puppet/yaml/facts/').size-2,"clients")
|
|
phaselog
|