summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmunin/cpufreq69
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