summaryrefslogtreecommitdiff
path: root/munin/owfs_temperature_
blob: 3c87c21b8856ceb36657a326fb1b5b97a5d6b9a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/ruby
#
# Copyright (c) 2006 Peter Palfrader
#
#%# family=auto
#%# capabilities=autoconf suggest
#
# Munin plugin to moniture temperatures reported by 1-wire devices
# 
# I use owfs to mount the 1-wire bus to /var/lib/owfs
#   http://owfs.sourceforge.net/
#
# Add the following to your /etc/munin/plugin-conf.d/munin-node:
# [owfs_temperature_10.D234EE000800]
# env.title = 'in rack 3'
# env.label = 'rack 3'
#

$owfs_path = '/var/lib/owfs'
$owfs_path = ENV['OWFSPATH'] if ENV['OWFSPATH']

def bail_out(m)
	STDERR.puts "#{$0}: #{m}"
	exit 1
end

def autoconf
	if File.directory?($owfs_path)
		if File.directory?($owfs_path + '/structure')
			puts "yes"
		else
			puts "no (#{$owfs_path}/structure does not exist or permission denied - owfs not mounted?)"
		end
	else
		puts "no (#{$owfs_path} does not exist or permission denied)"
	end
end
def suggest
	Dir.glob($owfs_path+'/[0-9A-F][0-9A-F].*/temperature').each do |path|
		puts File.basename(File.dirname(path))
	end
end

def normalize_sensor(s)
	s = s.downcase
	s = s.tr('-', 'M')
	s = s.tr('+', 'P')
	s.tr('^a-zA-Z0-9', '_')
end

def query_device
	match = /_([0-9A-F][0-9A-F]\..*?)$/.match($0)
	unless match
		bail_out "Could not figure out which device you want based on executeable name."
	end
	match[1]
end

def config
	device = query_device
	title = ENV['title'] ?
	        ENV['title'] :
	        'Temperatures #{device}'
	label = ENV['label'] ?
	        ENV['label'] :
	        device
	puts "graph_title #{title}"
	puts "graph_args --base 1000"
	puts "graph_vlabel degrees Celsius";
	puts "graph_category sensors"
	puts "graph_info Temperature reported by 1-wire devices"
	n = normalize_sensor device
	puts "#{n}.label #{label}"
end

def report
	device = query_device
	temp = File.new($owfs_path+'/'+device+'/temperature').read
	n = normalize_sensor device
	puts "#{n}.value #{temp}"
end


case ARGV[0]
	when "autoconf"
		autoconf
	when "suggest"
		suggest
	when "config"
		config
	else
		report
end