[comptage_upload] deconnexion.py avec la bonne requête, enfin j'espère

This commit is contained in:
Pierre-Elliott Bécue 2014-06-18 01:13:04 +02:00
parent 650991d32c
commit 615fac78ac
3 changed files with 44 additions and 69 deletions

View file

@ -198,6 +198,8 @@ demenagement_delai = 8
# komaz car c'est la route par défaut mais aussi pour zamok et sable # komaz car c'est la route par défaut mais aussi pour zamok et sable
# à cause de leur firewall et de leur patte wifi. # à cause de leur firewall et de leur patte wifi.
plage_ens = '138.231.0.0/16'
# NETs_primaires contient une bijection entre des types de machines # NETs_primaires contient une bijection entre des types de machines
# et les plages d'ip qui vont bien. NETs_secondaires contient des # et les plages d'ip qui vont bien. NETs_secondaires contient des
# clefs qui cassent la bijectivité, mais qui peuvent servir. # clefs qui cassent la bijectivité, mais qui peuvent servir.

View file

@ -20,7 +20,7 @@ import commands
import sys import sys
import psycopg2 import psycopg2
sys.path.append('/usr/scripts/gestion') sys.path.append('/usr/scripts/gestion')
from config import upload, virus, NETs from config import upload, virus, NETs, plage_ens, prefix
import config.mails.upload import config.mails.upload
import ipt import ipt
import smtplib import smtplib
@ -100,72 +100,45 @@ def reperage_chambre(mac):
################################################################################ ################################################################################
# upload par entité (adhérent/club/machine crans) # upload par entité (adhérent/club/machine crans)
upload4="""SELECT upload="""SELECT
'upload', sum(upload)/1024/1024 AS total, ip_crans SUM((agregat.total) as tot_upload, machines.type, machines.id
FROM FROM (
upload SELECT
WHERE 'upload', sum(bytes)/1024/1024 AS total, mac_src
upload > download FROM
AND date > timestamp 'now' - interval '1 day' upload
AND date < 'now' WHERE
AND NOT EXISTS stamp_updated > now() - interval '1 day'
( AND stamp_updated < now()
SELECT 1 AND NOT (ip_dst <<= inet%(plage_ens)s OR ip_dst <<= inet%(plage_ipv6)s OR ip_dst <<= inet%(appt)s)
FROM exemptes AND (ip_src <<= inet%(allone)s OR ip_src <<= inet%(alltwo)s OR ip_src <<= inet%(plage_ipv6)s OR ip_src <<= inet%(appt)s)
WHERE upload.ip_crans <<= exemptes.ip_crans AND NOT EXISTS
AND upload.ip_ext <<= exemptes.ip_dest
)
GROUP BY
ip_crans
"""
upload6 = """SELECT
'upload', sum(upload)/1024/1024 AS total, ip_crans
FROM
(
SELECT DISTINCT * FROM
( (
SELECT SELECT 1
upload6.date, mac_ip.mac AS ip_crans, upload6.ip_ext, upload6.id, upload6.port_crans, upload6.port_ext, upload6.download, upload6.upload FROM exemptes
FROM mac_ip,upload6 WHERE upload.ip_src <<= exemptes.ip_crans
WHERE AND upload.ip_dst <<= exemptes.ip_dest
upload6.ip_crans = mac_ip.ip )
AND upload6.date > mac_ip.date AND NOT EXISTS
AND upload6.date - interval '1 day' < mac_ip.date (
AND upload6.date > timestamp 'now' - interval '1 day' SELECT 1
AND upload6.date < 'now' FROM exemptes6
AND upload6.upload > upload6.download WHERE upload.mac_src = exemptes6.mac_crans
AND NOT EXISTS AND upload.ip_dst <<= exemptes6.ip_dest
( )
SELECT 1 GROUP BY
FROM exemptes mac_src
WHERE mac_ip.mac <<= exemptes.ip_crans ) AS agregat
AND upload6.ip_ext <<= exemptes.ip_dest
)
) AS upload
) AS upload
WHERE
upload > download
GROUP BY
ip_crans
"""
requete = """SELECT
round(total) AS total, machines.type AS type, machines.id AS id
FROM
(
(%s) UNION (%s)
)
AS
upload
INNER JOIN INNER JOIN
machines machines
ON ON
machines.ip = upload.ip_crans machines.mac_addr = agregat.mac_src
WHERE
total >= 250
GROUP BY GROUP BY
total, type, id machines.type, machines.id
;""" % (upload4, upload6) ORDER BY
curseur.execute(requete) tot_upload;
"""
curseur.execute(requete, {'plage_ens':plage_ens, 'allone':NETs['all'][0], 'alltwo':NETs['all'][1], 'plage_ipv6':prefix['subnet'][0], 'appt':NETs['personnel-ens'][0],})
uploadeurs = curseur.fetchall() uploadeurs = curseur.fetchall()
@ -201,7 +174,7 @@ for elupload, eltype, elid in uploadeurs:
proprio = ldap.search('aid=%d'%elid, 'w')['adherent'] proprio = ldap.search('aid=%d'%elid, 'w')['adherent']
else: else:
continue continue
if len(proprio) != 1: if len(proprio) != 1:
print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid) print 'Erreur : Proprio non trouvé (%s) %d'%(eltype, elid)
@ -212,12 +185,12 @@ for elupload, eltype, elid in uploadeurs:
# a vu les machines du proprio pour la dernière fois # a vu les machines du proprio pour la dernière fois
#################################################### ####################################################
machines = proprio.machines() machines = proprio.machines()
macs_dates_chambres = [] macs_dates_chambres = []
for machine in machines: for machine in machines:
if isinstance(machine, MachineFixe): if isinstance(machine, MachineFixe):
mac = machine.mac() mac = machine.mac()
date, chambre = reperage_chambre(mac) date, chambre = reperage_chambre(mac)
macs_dates_chambres.append([mac, date, chambre]) macs_dates_chambres.append([mac, date, chambre])
mdcf = tableau(macs_dates_chambres, ('mac', 'date', 'chambre'), (20, 21, 7), ('c', 'c', 'c')) mdcf = tableau(macs_dates_chambres, ('mac', 'date', 'chambre'), (20, 21, 7), ('c', 'c', 'c'))

View file

@ -12,11 +12,11 @@ DELETE FROM upload6 WHERE date< timestamp 'now' - interval '5 days';
-- DELETE FROM flood where date< timestamp 'now' - interval '2 days'; -- DELETE FROM flood where date< timestamp 'now' - interval '2 days';
-- suppression complète des entrées -- suppression complète des entrées
VACUUM; VACUUM FULL;
-- réindexation des tables -- réindexation des tables
REINDEX TABLE upload; REINDEX TABLE upload;
REINDEX TABLE upload6; REINDEX TABLE upload6;
-- REINDEX TABLE virus; -- REINDEX TABLE virus;
-- REINDEX TABLE flood; -- flood n'a pas d'index -- REINDEX TABLE flood; -- flood n'a pas d'index
REINDEX TABLE p2p; -- REINDEX TABLE p2p;