#!/usr/bin/python # # An example from Sean Reifschneider's Python Tutorial at Linux Expo 98. # # Copyright (c) 1998 Sean Reifschneider, tummy.com, ltd. # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # You can contact Sean Reifschneider at # P.O. Box 270624, # Fort Collins, CO USA 80527-0624, # or at jafo-gpl@tummy.com # # Ping a list of machines, send e-mail when they aren't reachable. import os import re hostList = [ '127.0.0.1', 'www.tummy.com', 'foo.bar.com' ] mailTo = 'changemenow@localhost' # Mail error reports to pingRegex = r'.*(?P\d+)\s+packets transmitted.*\s+' + \ r'(?P\d+)\s+packets received.*\s+' + \ r'(?P\d+)% packet loss' for host in hostList: ping = os.popen('ping -c 3 -i 1 ' + host + ' 2>&1') data = ping.read() match = re.match(pingRegex, data, re.DOTALL) if match: print '%s:\t%s transmitted, %s received, %s%% lost' % ( host, match.group('trans'), match.group('recv'), match.group('loss') ) if match.group('loss') != '0': os.system('mail -s \'Ping failure: %s\' %s /dev/null' % ( host, mailTo )) else: print host + ':\tPING ERROR' os.system('mail -s \'Ping ERROR: %s\' %s /dev/null' % ( host, mailTo ))