Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / disk / e2 @ 17f78427

Historique | Voir | Annoter | Télécharger (3,26 ko)

1
#!/bin/bash
2

    
3
true << =cut
4

    
5
=head1 NAME
6

    
7
ext2 - Wildcard plugin shows ext2/3/4 filesystem information (mount count, last checked, lifetime writes)
8

    
9
=head1 CONFIGURATION
10

    
11
[ext2_*]
12
group disk,floppy
13

    
14
=head1 AUTHOR
15

    
16
Andreas Hrubak <>
17

    
18
=head1 LICENSE
19

    
20
GPLv2
21

    
22
=head1 MAGICK MARKERS
23

    
24
 #%# family=disk
25
 #%# capabilities=autoconf
26

    
27
=cut
28

    
29
print_details() {
30
	local myname
31
	while read line; do
32
		key=${line%%:*}
33
		val=`echo ${line#*:}`
34
		val1=${val%% *}
35
		[ -z "$line" ] && break
36

    
37
		case "$key" in
38
		"Mount count")		myname=$1; mc=$val ;;
39
		"Maximum mount count")	mmc=$val ;;
40
		"Last checked")		lcts=`date +%s -d "$val" 2>/dev/null` ;;
41
		"Check interval")	ciis=$val1 ;;
42
		"Lifetime writes")	lwGB=$val1 ;;
43
		esac
44
	done
45
	[ -n "$myname" ] && echo "$myname ${mc:-0} ${mmc:-0} ${lcts:-0} ${ciis:-0} ${lwGB:-0}"
46
}
47

    
48
lse2() {
49
	for name in {h,s}d{a..z}{1..16}; do
50
		if [ -b /dev/$name ]; then
51
			LANG=C dumpe2fs /dev/$name 2>/dev/null | print_details "$name"
52
		fi
53
	done
54
}
55

    
56

    
57
if [ "$1" = "autoconf" ]; then
58
	if which dumpe2fs >/dev/null 2>&1; then
59
		echo yes
60
		exit 0
61
	else
62
		echo no
63
		exit 1
64
	fi
65
fi
66
if [ "$1" = "suggest" ]; then
67
	lse2 | while read name rest; do
68
		echo mounts_$name
69
		echo checked_$name
70
		echo writes_$name
71
	done
72
	exit 0
73
fi
74

    
75

    
76
self=${0##*/}
77
self=${self#*_}
78
plugin=${self%%_*}
79
if [ -n "${self//[!_]/}" ]; then
80
	blkdev=${self#*_}
81
	blkdevAppend=" ($blkdev)"
82
else
83
	blkdev=
84
	blkdevAppend=
85
fi
86

    
87

    
88
if [ "$1" = "config" ]; then
89

    
90
	echo "graph_category disk"
91
	args="-l 0"
92
	case "$plugin" in
93
	mounts)
94
		echo "graph_vlabel times"
95
		echo "graph_title Ext2 Filesystem mount details"
96
		;;
97
	checked)
98
		echo "graph_vlabel days"
99
		echo "graph_title Ext2 Filesystem fsck interval"
100
		;;
101
	writes)
102
		args="$args --base 1024"
103
		echo "graph_vlabel bytes"
104
		echo "graph_title Ext2 Filesystem lifetime writes$blkdevAppend"
105
		;;
106
	esac
107
	echo "graph_args $args"
108

    
109
	if [ -z "$blkdev" ]; then
110
		lse2
111
	else
112
		LANG=C dumpe2fs /dev/$blkdev 2>/dev/null | print_details "$blkdev"
113
	fi | \
114
	while read name mounts maxmounts last interval writes; do
115
		[ -z "$blkdev" ] && blkdevAppend2=" ($name)" || blkdevAppend2=
116
		case "$plugin" in
117
		mounts)
118
			echo "${name}_mounts.label Mount count$blkdevAppend2"
119
			echo "${name}_mounts.draw LINE2"
120
			echo "${name}_maxmounts.label Max. mount count$blkdevAppend2"
121
			echo "${name}_maxmounts.draw LINE1"
122
			;;
123
		checked)
124
			echo "${name}_last.label Since checked$blkdevAppend2"
125
			echo "${name}_last.draw LINE2"
126
			echo "${name}_last.cdef ${name}_last,86400,/"
127
			echo "${name}_interval.label Check interval$blkdevAppend2"
128
			echo "${name}_interval.draw LINE1"
129
			echo "${name}_interval.cdef ${name}_interval,86400,/"
130
			;;
131
		writes)
132
			echo "${name}_writes.label Lifetime writes$blkdevAppend2"
133
			echo "${name}_writes.type GAUGE"
134
			echo "${name}_writes.draw LINE2"
135
			echo "${name}_writes.cdef ${name}_writes,1073741824,*"
136
			;;
137
		esac
138
	done
139

    
140
	exit 0
141
fi
142

    
143

    
144

    
145
## fetch ##
146

    
147
if [ -z "$blkdev" ]; then
148
	lse2
149
else
150
	LANG=C dumpe2fs /dev/$blkdev 2>/dev/null | print_details "$blkdev"
151
fi | \
152
while read name mounts maxmounts last interval writes; do
153
	case "$plugin" in
154
	mounts)
155
		echo "${name}_mounts.value $mounts"
156
		echo "${name}_maxmounts.value $maxmounts"
157
		;;
158
	checked)
159
		now=`date +%s`
160
		past=$(( now - last ))
161
		echo "${name}_last.value $past"
162
		echo "${name}_interval.value $interval"
163
		;;
164
	writes)
165
		echo "${name}_writes.value $writes"
166
		;;
167
	esac
168
done
169