diff --git a/surveillance/analyse.py b/surveillance/analyse.py new file mode 100755 index 00000000..391e372b --- /dev/null +++ b/surveillance/analyse.py @@ -0,0 +1,84 @@ +#! /usr/bin/env python +# -*- coding: iso8859-15 -*- + +help = """Statistiques d'upload d'une machine du crans +usage: analyse.py [options] machine +Option fait partie des options suivantes : +-l # : nombre de lignes à afficher + par défaut : 10 +-g : champs à grouper (parmis ip_ext, port_crans, port_ext) + par défaut : -p ip_ext -p port_crans -p port_ext + +Exemples : + sudo /usr/scripts/surveillance/analyse.py bilou.crans.org""" + +# import des modules +import getopt +from socket import gethostbyaddr +import sys + +# aide +###### +if '-h' in sys.argv : + print help + sys.exit(0) + +# parsage des arguments +####################### +try : + opts, args = getopt.getopt(sys.argv[1:],'g:l:') +except getopt.GetoptError,message : + print message + sys.exit(4) + +# recherche de la machine crans +############################### +if len(args) == 0 : + print 'Il faut spécifier une adresse' + sys.exit(1) +elif len(args) >= 2 : + print 'On ne peut spécifier qu\'une machine à la fois' + sys.exit(2) +else : + ip_crans = gethostbyaddr(args[0]) + print 'Statistiques pour la machine %s' % ip_crans[0] + ip_crans = ip_crans[2][0] + +# nombre limite d'enregristrements +################################## +limit = 10 +for key,value in opts : + if key == '-l' : + try : + limit = int(value) + except : + print 'Le le nombre limite n\'est pas un entier' + sys.exit(3) + break + +# groupements +############# +group = [ x[1] for x in opts if x[0] == '-g' and x[1] in ['ip_ext','port_crans','port_ext'] ] +if not group : + group = ['ip_ext','port_crans','port_ext'] +group.append('ip_crans') + +# selection +########### +select = [] +if 'ip_ext' in group : + select.append('ip_ext') +if 'port_ext' in group : + select.append('port_ext') +if 'port_crans' in group : + select.append('port_crans') +select += ['floor(sum(download)/1024/1024) as download','floor(sum(upload)/1024/1024) as upload'] + +# requete dans la base +###################### +requete = "SELECT %s FROM upload WHERE ip_crans='%s' AND date > timestamp 'now' - interval '1 day' GROUP BY %s ORDER BY upload DESC LIMIT %d;" % (','.join(select), ip_crans, ','.join(group), limit) + +# on utilise pas le module python, car cette fonction fait toutes seules la mise en page +from commands import getoutput +commande = "psql filtrage -U crans -c \"%s\"" % requete +print getoutput(commande)