diff options
author | Peter Palfrader <peter@palfrader.org> | 2006-07-21 14:22:11 +0000 |
---|---|---|
committer | weasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede> | 2006-07-21 14:22:11 +0000 |
commit | 3643c94ea91b3e029140e6c77274c049619f8cf5 (patch) | |
tree | 28e162cf6982446ef7efb71ee8354b635db3683a | |
parent | b5d66c73a212fa0baba5b4fdf78d48b1d623fb93 (diff) |
Add cpufreq thing
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@153 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
-rwxr-xr-x | munin/cpufreq | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/munin/cpufreq b/munin/cpufreq new file mode 100755 index 0000000..316ceac --- /dev/null +++ b/munin/cpufreq @@ -0,0 +1,69 @@ +#!/usr/bin/ruby + +# Copyright (c) 2006 Peter Palfrader +# +#%# family=auto +#%# capabilities=autoconf + +def bail_out(m) + STDERR.puts "#{$0}: #{m}" + exit 1 +end + +def autoconf + if FileTest.directory? "/sys/devices/system/cpu/cpu0/cpufreq/" + puts "yes" + else + puts "no (no /sys/devices/system/cpu/cpu0/cpufreq/)" + end +end + +def findmasters + cpudirs = Dir.glob("/sys/devices/system/cpu/cpu*/").map{ |b| File.basename b } + cpus = cpudirs.map{ |d| /^cpu([0-9]+)$/.match(d)[1].to_i }.sort{|a,b| a<=>b } + masters = [] + cpus.each do |cpunum| + affected = IO.read("/sys/devices/system/cpu/cpu#{cpunum}/cpufreq/affected_cpus").split.map{|s| s.to_i}.sort{|a,b| a<=>b } + bail_out "huh? /sys/devices/system/cpu/cpu#{cpunum}/cpufreq/affected_cpus says it does not affect #{cpunum}!?" unless affected.include? cpunum + h = {} + h['cpunum'] = affected[0] + h['fieldname'] = "cpu#{affected[0]}" + h['label'] = affected.map{|c| "cpu#{c}"}.join(", ") + masters.push(h) + affected.each{ |a| cpus.delete(a) } + end + masters +end + +def config + puts 'graph_title CPU frequency' + puts 'graph_args --base 1000' + puts 'graph_vlabel Hz' + puts 'graph_category cpu' + puts 'graph_period second' + puts 'graph_info Shows the CPU frequency of all installed CPUs' + findmasters.each do |m| + puts "#{m['fieldname']}.label #{m['label']}" + puts "#{m['fieldname']}.info Hz" + puts "#{m['fieldname']}.type GAUGE" + end +end + +def report + m = findmasters + sleep(5) # we are interested how it does without us poking it, + # so maybe sleeping a bit will help + m.each do |m| + value = IO.read("/sys/devices/system/cpu/cpu#{m['cpunum']}/cpufreq/scaling_cur_freq").to_i + puts "#{m['fieldname']}.value #{value}" + end +end + +case ARGV[0] + when "autoconf" + autoconf + when "config" + config + else + report +end |