From 8428eab60c9270cdbcd9ddf85bdd62638af6bb2e Mon Sep 17 00:00:00 2001 From: chove Date: Wed, 26 Oct 2005 12:47:43 +0200 Subject: [PATCH] import initial, pour faire des stats dans la base sql (pour ceux qui ont la flemme de regarder comment elle est construite) C'est un dbut amliorer si quelqu'un est motiv... darcs-hash:20051026104743-4ec08-a3301f9088cda8a1a918c96198fc2afa8f9bfb91.gz --- surveillance/analyse.py | 84 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100755 surveillance/analyse.py 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)