Projet

Général

Profil

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

root / plugins / disk / e2 @ 09b88141

Historique | Voir | Annoter | Télécharger (3,55 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
       while read -r line ; do
50
               value=( $line );
51
               LANG=C dumpe2fs -h "${value[1]}" 2>/dev/null | print_details "${value[0]}"
52
       done <<< "$(lsblk -o NAME,PATH,FSTYPE -r | grep ext[2-4] | uniq )"
53
}
54

    
55

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

    
73

    
74
self=${0##*/}
75
self=${self#*_}
76
plugin=${self%%_*}
77
if [ -n "${self//[!_]/}" ]; then
78
	blkdev=${self#*_}
79
	blkdevAppend=" ($blkdev)"
80
	blkdevpath=$(lsblk -o PATH,NAME -r | grep "$blkdev" | uniq | cut -d' ' -f1)
81
else
82
	blkdev=
83
	blkdevAppend=
84
fi
85

    
86

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

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

    
108
	if [ -z "$blkdev" ]; then
109
		lse2
110
	else
111
		LANG=C dumpe2fs -h "$blkdevpath" 2>/dev/null | print_details "$blkdev"
112
	fi | \
113
	while read name mounts maxmounts last interval writes; do
114
		[ -z "$blkdev" ] && blkdevAppend2=" ($name)" || blkdevAppend2=
115
		name_esc=${name//-/_}
116
		case "$plugin" in
117
		mounts)
118
			echo "${name_esc}_mounts.label Mount count$blkdevAppend2"
119
			echo "${name_esc}_mounts.draw LINE2"
120
			echo "${name_esc}_maxmounts.label Max. mount count$blkdevAppend2"
121
			echo "${name_esc}_maxmounts.draw LINE1"
122
			;;
123
		checked)
124
			echo "${name_esc}_last.label Since checked$blkdevAppend2"
125
			echo "${name_esc}_last.draw LINE2"
126
			echo "${name_esc}_last.cdef ${name_esc}_last,86400,/"
127
			echo "${name_esc}_interval.label Check interval$blkdevAppend2"
128
			echo "${name_esc}_interval.draw LINE1"
129
			echo "${name_esc}_interval.cdef ${name_esc}_interval,86400,/"
130
			;;
131
		writes)
132
			echo "${name_esc}_writes.label Lifetime writes$blkdevAppend2"
133
			echo "${name_esc}_writes.type GAUGE"
134
			echo "${name_esc}_writes.draw LINE2"
135
			echo "${name_esc}_writes.cdef ${name_esc}_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 -h "$blkdevpath" 2>/dev/null | print_details "$blkdev"
151
fi | \
152
while read name mounts maxmounts last interval writes; do
153
	name_esc=${name//-/_}
154
	case "$plugin" in
155
	mounts)
156
		echo "${name_esc}_mounts.value $mounts"
157
		echo "${name_esc}_maxmounts.value $maxmounts"
158
		;;
159
	checked)
160
		now=`date +%s`
161
		past=$(( now - last ))
162
		echo "${name_esc}_last.value $past"
163
		echo "${name_esc}_interval.value $interval"
164
		;;
165
	writes)
166
		echo "${name_esc}_writes.value $writes"
167
		;;
168
	esac
169
done
170