...
[alex.git] / supervision / ping.py
1 #! /usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 # script de supervision : ping une liste de serveurs est envoie un SMS en cas de probleme
5 # particularite : retention de 240 minutes (4H) entre les envois. Evite le SPAM !
6
7 import commands , sys, logging, os, time, datetime
8 from conf import *
9 from sendsms import *
10
11 #Variables
12
13 SERVER=['10.72.1.20','10.72.1.14', '10.72.1.16', 'www.refer.org']
14 ALERTE=[]
15 filename='/var/log/smsalerte.log'
16 # temps de retention avant le second SMS, en minutes
17 tempo = 240
18
19
20 logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', filename=os.path.expanduser(filename), filemode='a', level=logging.DEBUG)
21
22 # Ping les serveurs listes plus haut
23 for element in SERVER:
24
25 (exitstatus, outtext) = commands.getstatusoutput('ping -c5 ' + element)
26
27 # si le status est > 0 alors le ping est en erreur
28 if exitstatus > 0:
29
30 ALERTE.append(element)
31
32
33 # si au moins une erreur alors action
34 # test si ALERTE est vide
35
36 if ALERTE != []:
37
38
39 # Convert la list en chaine lisible
40 ERREUR = '[' + "] - [".join(ALERTE) + ']'
41
42 #Recupere la date de derniere modification du fichier log (date de dernier envoie SMS)
43
44 datefile = time.localtime(os.path.getmtime(filename))
45 datenow = time.localtime()
46
47 #Compare les deux dates (maintenant et date fichier log)
48 iff = time.mktime(datenow) - time.mktime(datefile)
49
50 # si > tempo = envoie SMS
51 if iff/60.0 > tempo:
52 logging.info ('Alerte SMS pour les serveurs suivants : ' + ERREUR)
53 msg = 'Alerte SMS pour le(s) serveur(s) suivant(s) : ' + ERREUR
54 #### --> Envoie ici le SMS
55 smsender(msg)
56