~ubuntu-branches/ubuntu/trusty/nagios-plugins/trusty-proposed

« back to all changes in this revision

Viewing changes to contrib/check_digitemp.pl

  • Committer: Package Import Robot
  • Author(s): Yolanda Robla
  • Date: 2013-12-11 10:09:01 UTC
  • mfrom: (12.2.22 sid)
  • Revision ID: package-import@ubuntu.com-20131211100901-g0kqwx300l24be53
Tags: 1.5-1ubuntu1
* Merge from Debian unstable (LP: #1259863).  Remaining changes:
  - debian/control, debian/rules, debian/nagios-plugins-extra.dirs
     + add package nagios-plugins-extra
     + Suggest nagios-plugins-contrib in the universe package (-extras).
  - debian/control
     - replaces on nagios-plugins-basic (<< 1.4.16-1ubuntu1)
     - conflicts and replaces on nagios-plugins-extra

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/perl -w
2
 
 
3
 
# check_digitemp.pl Copyright (C) 2002 by Brian C. Lane <bcl@brianlane.com>
4
 
#
5
 
# This is a NetSaint plugin script to check the temperature on a local 
6
 
# machine. Remote usage may be possible with SSH
7
 
#
8
 
# Permission is hereby granted, free of charge, to any person obtaining a copy
9
 
# of this software and associated documentation files (the "Software"), to
10
 
# deal in the Software without restriction, including without limitation the
11
 
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12
 
# sell copies of the Software, and to permit persons to whom the Software is
13
 
# furnished to do so, subject to the following conditions:
14
 
#
15
 
# The above copyright notice and this permission notice shall be included in
16
 
# all copies or substantial portions of the Software.
17
 
#
18
 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24
 
# IN THE SOFTWARE.
25
 
#
26
 
# ===========================================================================
27
 
# Howto Install in NetSaint (tested with v0.0.7)
28
 
#
29
 
# 1. Copy this script to /usr/local/netsaint/libexec/ or wherever you have
30
 
#    placed your NetSaint plugins
31
 
#
32
 
# 2. Create a digitemp config file in /usr/local/netsaint/etc/
33
 
#    eg. digitemp -i -s/dev/ttyS0 -c /usr/local/netsaint/etc/digitemp.conf
34
 
#
35
 
# 3. Make sure that the webserver user has permission to access the serial
36
 
#    port being used.
37
 
#
38
 
# 4. Add a command to /usr/local/netsaint/etc/commands.cfg like this:
39
 
#    command[check-temp]=$USER1$/check_digitemp.pl -w $ARG1$ -c $ARG2$ \
40
 
#    -t $ARG3$ -f $ARG4$
41
 
#    (fold into one line)
42
 
#
43
 
# 5. Tell NetSaint to monitor the temperature by adding a service line like
44
 
#    this to your hosts.cfg file:
45
 
#    service[kermit]=Temperature;0;24x7;3;5;1;home-admins;120;24x7;1;1;1;; \
46
 
#    check-temp!65!75!1!/usr/local/netsaint/etc/digitemp.conf
47
 
#    (fold into one line)
48
 
#    65 is the warning temperature
49
 
#    75 is the critical temperature
50
 
#    1 is the sensor # (as reported by digitemp -a) to monitor
51
 
#    digitemp.conf is the path to the config file
52
 
#
53
 
# 6. If you use Centigrade instead of Fahrenheit, change the commands.cfg
54
 
#    line to include the -C argument. You can then pass temperature limits in
55
 
#    Centigrade in the service line.
56
 
#
57
 
# ===========================================================================
58
 
# Howto Install in Nagios (tested with v1.0b4)
59
 
#
60
 
# 1. Copy this script to /usr/local/nagios/libexec/ or wherever you have
61
 
#    placed your Nagios plugins
62
 
#
63
 
# 2. Create a digitemp config file in /usr/local/nagios/etc/
64
 
#    eg. digitemp -i -s/dev/ttyS0 -c /usr/local/nagios/etc/digitemp.conf
65
 
#
66
 
# 3. Make sure that the webserver user has permission to access the serial
67
 
#    port being used.
68
 
#
69
 
# 4. Add a command to /usr/local/nagios/etc/checkcommands.cfg like this:
70
 
#
71
 
#    #DigiTemp temperature check command
72
 
#    define command{
73
 
#        command_name    check_temperature
74
 
#        command_line    $USER1$/check_digitemp.pl -w $ARG1$ -c $ARG2$ \
75
 
#        -t $ARG3$ -f $ARG4$
76
 
#    (fold above into one line)
77
 
#        }
78
 
#
79
 
# 5. Tell NetSaint to monitor the temperature by adding a service line like
80
 
#    this to your service.cfg file:
81
 
#
82
 
#    #DigiTemp Temperature check Service definition
83
 
#    define service{
84
 
#        use                         generic-service
85
 
#        host_name                       kermit
86
 
#        service_description             Temperature
87
 
#        is_volatile                     0
88
 
#        check_period                    24x7
89
 
#        max_check_attempts              3
90
 
#        normal_check_interval           5
91
 
#        retry_check_interval            2
92
 
#        contact_groups                  home-admins
93
 
#        notification_interval           240
94
 
#        notification_period             24x7
95
 
#        notification_options            w,u,c,r
96
 
#        check_command                   check_temperature!65!75!1!  \
97
 
#        /usr/local/nagios/etc/digitemp.conf
98
 
#        (fold into one line)
99
 
#        }
100
 
#
101
 
#    65 is the warning temperature
102
 
#    75 is the critical temperature
103
 
#    1 is the sensor # (as reported by digitemp -a) to monitor
104
 
#    digitemp.conf is the path to the config file
105
 
#
106
 
# 6. If you use Centigrade instead of Fahrenheit, change the checkcommands.cfg
107
 
#    line to include the -C argument. You can then pass temperature limits in
108
 
#    Centigrade in the service line.
109
 
#
110
 
# ===========================================================================
111
 
 
112
 
# Modules to use
113
 
use strict;
114
 
use Getopt::Std;
115
 
 
116
 
# Define all our variable usage
117
 
use vars qw($opt_c $opt_f $opt_t $opt_w $opt_F $opt_C
118
 
            $temperature $conf_file $sensor $temp_fmt
119
 
            $crit_level $warn_level $null
120
 
            %exit_codes
121
 
            $percent $fmt_pct 
122
 
            $verb_err $command_line);
123
 
 
124
 
 
125
 
# Predefined exit codes for NetSaint
126
 
%exit_codes   = ('UNKNOWN' ,-1,
127
 
                      'OK'      , 0,
128
 
                      'WARNING' , 1,
129
 
                      'CRITICAL', 2,);
130
 
 
131
 
# Default to Fahrenheit input and result (use -C to change this)
132
 
$temp_fmt = 3;
133
 
 
134
 
 
135
 
# Get the options
136
 
if ($#ARGV le 0)
137
 
{
138
 
  &usage;
139
 
} else {
140
 
  getopts('f:t:FCc:w:');
141
 
}
142
 
 
143
 
# Shortcircuit the switches
144
 
if (!$opt_w or $opt_w == 0 or !$opt_c or $opt_c == 0)
145
 
{
146
 
  print "*** You must define WARN and CRITICAL levels!";
147
 
  &usage;
148
 
}
149
 
 
150
 
# Check if levels are sane
151
 
if ($opt_w >= $opt_c)
152
 
{
153
 
  print "*** WARN level must not be greater than CRITICAL when checking temperature!";
154
 
  &usage;
155
 
}
156
 
 
157
 
 
158
 
$warn_level   = $opt_w;
159
 
$crit_level   = $opt_c;
160
 
 
161
 
# Default sensor to read is #0
162
 
if(!$opt_t)
163
 
{
164
 
  $sensor = 0;
165
 
} else {
166
 
  $sensor = $opt_t;
167
 
}
168
 
 
169
 
# Default config file is /etc/digitemp.conf
170
 
if(!$opt_f)
171
 
{
172
 
  $conf_file = "/etc/digitemp.conf";
173
 
} else {
174
 
  $conf_file = $opt_f;
175
 
}
176
 
 
177
 
# Check for config file
178
 
if( !-f $conf_file ) {
179
 
  print "*** You must have a digitemp.conf file\n";
180
 
  &usage;
181
 
}
182
 
 
183
 
 
184
 
if($opt_C)
185
 
{
186
 
  $temp_fmt = 2;
187
 
}
188
 
 
189
 
# Read the output from digitemp
190
 
# Output in form 0\troom\tattic\tdrink
191
 
open( DIGITEMP, "/usr/local/bin/digitemp -c $conf_file -t $sensor -q -o $temp_fmt |" );
192
 
 
193
 
# Process the output from the command
194
 
while( <DIGITEMP> )
195
 
{
196
 
#  print "$_\n";
197
 
  chomp;
198
 
 
199
 
  if( $_ =~ /^nanosleep/i )
200
 
  {
201
 
    print "Error reading sensor #$sensor\n";
202
 
    close(DIGITEMP);
203
 
    exit $exit_codes{'UNKNOWN'};
204
 
  } else {
205
 
    # Check for an error from digitemp, and report it instead
206
 
    if( $_ =~ /^Error.*/i ) {
207
 
      print $_;
208
 
      close(DIGITEMP);
209
 
      exit $exit_codes{'UNKNOWN'};
210
 
    } else {
211
 
      ($null,$temperature) = split(/\t/);
212
 
    }
213
 
  }
214
 
}
215
 
close( DIGITEMP );
216
 
 
217
 
if( $temperature and $temperature >= $crit_level )
218
 
{
219
 
  print "Temperature CRITICAL - Sensor #$sensor = $temperature ";
220
 
  if( $temp_fmt == 3 ) { print "F\n"; } else { print "C\n"; }
221
 
  exit $exit_codes{'CRITICAL'};
222
 
} elsif ($temperature and $temperature >= $warn_level ) {
223
 
  print "Temperature WARNING - Sensor #$sensor = $temperature ";
224
 
  if( $temp_fmt == 3 ) { print "F\n"; } else { print "C\n"; }
225
 
  exit $exit_codes{'WARNING'};
226
 
} elsif( $temperature ) {
227
 
  print "Temperature OK - Sensor #$sensor = $temperature ";
228
 
  if( $temp_fmt == 3 ) { print "F\n"; } else { print "C\n"; }
229
 
  exit $exit_codes{'OK'};
230
 
} else {
231
 
    print "Error parsing result for sensor #$sensor\n";
232
 
    exit $exit_codes{'UNKNOWN'};  
233
 
}
234
 
 
235
 
# Show usage
236
 
sub usage()
237
 
{
238
 
  print "\ncheck_digitemp.pl v1.0 - NetSaint Plugin\n";
239
 
  print "Copyright 2002 by Brian C. Lane <bcl\@brianlane.com>\n";
240
 
  print "See source for License\n";
241
 
  print "usage:\n";
242
 
  print " check_digitemp.pl -t <sensor> -f <config file> -w <warnlevel> -c <critlevel>\n\n";
243
 
  print "options:\n";
244
 
  print " -f               DigiTemp Config File\n";
245
 
  print " -t               DigiTemp Sensor #\n";
246
 
  print " -F               Temperature in Fahrenheit\n";
247
 
  print " -C               Temperature in Centigrade\n";
248
 
  print " -w temperature   temperature >= to warn\n";
249
 
  print " -c temperature   temperature >= when critical\n";
250
 
 
251
 
  exit $exit_codes{'UNKNOWN'}; 
252
 
}