This repository has been archived on 2025-03-16. You can view files and clone it, but cannot push or open issues or pull requests.
Files
puppet/files/ganglia/.svn/text-base/puppetmaster.rb.svn-base
2013-02-02 14:35:50 +01:00

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