[statistiques.py] Gestion un peu plus optimisee des serveurs et de l'IPv6

Ignore-this: d20c17251d227d1793b47559a860fcd5

darcs-hash:20110917172948-ddb99-4f46b6136ae6590303a634aaf8080bfa7a8abd31.gz
This commit is contained in:
Michel Blockelet 2011-09-17 19:29:48 +02:00
parent 073e48d1d4
commit 6dcaa5fe10

View file

@ -21,7 +21,7 @@ sys.path.append('/usr/scripts/surveillance')
import config import config
import smtplib import smtplib
import socket import socket
import time, random, md5 import time, random, hashlib
import netaddr import netaddr
from analyse import stats from analyse import stats
from affich_tools import tableau from affich_tools import tableau
@ -72,8 +72,10 @@ WHERE
GROUP BY ip_crans GROUP BY ip_crans
ORDER BY somme DESC""" ORDER BY somme DESC"""
curseur.execute(requete) curseur.execute(requete)
data_upload = curseur.fetchall()
liste_upload = tableau(data = [ (l[1], l[2], ipv4or6(str(l[0])), socket.getfqdn(str(l[0]))) liste_upload = tableau(data = [ (l[1], l[2], ipv4or6(str(l[0])), socket.getfqdn(str(l[0])))
for l in curseur.fetchall() for l in data_upload
if int(l[1]) > 100*1024*1024 if int(l[1]) > 100*1024*1024
and l[0] not in (ips_serveurs + ips_proxys)], and l[0] not in (ips_serveurs + ips_proxys)],
titre = ['upload', 'download', 'proto', 'machine'], titre = ['upload', 'download', 'proto', 'machine'],
@ -97,36 +99,33 @@ WHERE
GROUP BY ip_crans GROUP BY ip_crans
ORDER BY somme DESC""" ORDER BY somme DESC"""
curseur.execute(requete) curseur.execute(requete)
liste_exemptes = tableau(data = [[l[1], l[2], socket.getfqdn(str(l[0]))] liste_exemptes = tableau(data = [[l[1], l[2], ipv4or6(str(l[0])), socket.getfqdn(str(l[0]))]
for l in curseur.fetchall()], for l in curseur.fetchall()],
titre = ['upload', 'download', 'machine'], titre = ['upload', 'download', 'proto', 'machine'],
largeur = [10, 10, 30], largeur = [10, 10, 10, 30],
format = ['o', 'o', 's'], format = ['o', 'o', 's', 's'],
alignement = ['d', 'd', 'c']).encode('iso-8859-15') alignement = ['d', 'd', 'c', 'c']).encode('iso-8859-15')
# FIXME : super lent de faire pour chaque IP de serveur # Upload des serveurs :
# Upload des serveurs :
####################### #######################
liste_serveurs = [] liste_serveurs = []
for IP in (ips_serveurs + ips_proxys): for l in data_upload:
hostname = socket.getfqdn(IP) if l[0] in (ips_serveurs + ips_proxys) and l[1] + l[2] > 10*1024*1024:
requete = """SELECT sum(upload), sum(download) liste_serveurs.append([l[1], l[2], ipv4or6(str(l[0])), socket.getfqdn(l[0])])
FROM upload # requete = """SELECT sum(upload), sum(download)
WHERE # FROM upload
ip_crans='%s' # WHERE
AND date > timestamp 'now' - interval '1 day' """ % IP # ip_crans='%s'
curseur.execute(requete) # AND date > timestamp 'now' - interval '1 day' """ % IP
traffic = curseur.fetchone() # curseur.execute(requete)
# traffic = curseur.fetchone()
# On ne compte pas le serveur si le trafic est petit # On ne compte pas le serveur si le trafic est petit
if traffic == [None, None] or traffic[0] + traffic[1] < 10*1024*1024:
continue
liste_serveurs.append([traffic[0], traffic[1], hostname])
liste_serveurs = tableau(data = liste_serveurs, liste_serveurs = tableau(data = liste_serveurs,
titre = ['upload','download','serveur'], titre = ['upload', 'download', 'proto', 'serveur'],
largeur = [10, 10, 30], largeur = [10, 10, 10, 30],
format = ['o','o','s'], format = ['o', 'o', 's', 's'],
alignement = ['d','d','c']).encode('iso-8859-15') alignement = ['d', 'd', 'c', 'c']).encode('iso-8859-15')
# statistiques des gros uploads depuis les serveurs # statistiques des gros uploads depuis les serveurs
@ -190,7 +189,7 @@ liste_virus2 = tableau(data = liste_virus2,
# Machines ayant fait de attaques flood dans la journée : # Machines ayant fait de attaques flood dans la journée :
######################################################### #########################################################
requete = """SELECT * FROM (SELECT ip_src,count(ip_src) as compteur FROM flood requete = """SELECT * FROM (SELECT ip_src,count(ip_src) as compteur FROM flood
WHERE date > timestamp 'now' - interval '1 day' WHERE date > timestamp 'now' - interval '1 day'
GROUP BY ip_src ORDER BY compteur DESC) GROUP BY ip_src ORDER BY compteur DESC)
AS tous AS tous
WHERE tous.compteur>'%s' LIMIT 30""" % config.virus.flood WHERE tous.compteur>'%s' LIMIT 30""" % config.virus.flood
@ -256,7 +255,7 @@ Content-Type: text/plain; charset="iso-8859-15"
*Gros uploads des serveurs* (sila et sable sont exemptés totalement) *Gros uploads des serveurs* (sila et sable sont exemptés totalement)
%(gros_uploads_des_serveurs)s %(gros_uploads_des_serveurs)s
*Statistiques de trafic des serveurs* *Statistiques de trafic des serveurs*
@ -290,11 +289,11 @@ Content-Type: text/plain; charset="iso-8859-15"
%(liste_exemptes)s %(liste_exemptes)s
-- --
statistiques.py statistiques.py
""" """
uuid = md5.md5(str(long(time.time() * 1000)) + uuid = hashlib.md5(str(long(time.time() * 1000)) +
str(long(random.random()*100000000000000000L))).hexdigest() str(long(random.random()*100000000000000000L))).hexdigest()
corps = message % { 'From': expediteur, corps = message % { 'From': expediteur,
'To': destinataire, 'To': destinataire,