[mac_prises] On s'assure que le minimum de connexions SQL soit fait.
This commit is contained in:
parent
777ba5cd9c
commit
6bc8ef3949
3 changed files with 39 additions and 10 deletions
|
@ -8,8 +8,6 @@
|
||||||
import os, sys, re
|
import os, sys, re
|
||||||
from commands import getstatusoutput
|
from commands import getstatusoutput
|
||||||
|
|
||||||
sys.path.append('/usr/scripts/gestion')
|
|
||||||
import annuaires_pg
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,10 +17,12 @@ import time
|
||||||
# (plante lamentablement quand j'essaye avec mon compte sur vo, sous
|
# (plante lamentablement quand j'essaye avec mon compte sur vo, sous
|
||||||
# ipython. Mais si je sudo ipython, ça marche...
|
# ipython. Mais si je sudo ipython, ça marche...
|
||||||
|
|
||||||
def liste_chambres_macs(switch):
|
def liste_chambres_macs(switch, annuaire):
|
||||||
u'''
|
u'''
|
||||||
Fonction générant un dictionnaire (macs) contenant pour chaque prise une
|
Fonction générant un dictionnaire (macs) contenant pour chaque prise une
|
||||||
liste des macs qui y sont actives.
|
liste des macs qui y sont actives.
|
||||||
|
Reçoit annuaires_pg en second argument, pour éviter l'ouverture de
|
||||||
|
multiples connexions sql pour rien.
|
||||||
'''
|
'''
|
||||||
liste_bats = ['a', 'b', 'c', 'g', 'h', 'i', 'j', 'm', 'p']
|
liste_bats = ['a', 'b', 'c', 'g', 'h', 'i', 'j', 'm', 'p']
|
||||||
|
|
||||||
|
@ -40,12 +40,12 @@ def liste_chambres_macs(switch):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
mac = data[port]
|
mac = data[port]
|
||||||
uplink = annuaires_pg.uplink_prises[bat]
|
uplink = annuaire.uplink_prises[bat]
|
||||||
prise = num_switch*100+port
|
prise = num_switch*100+port
|
||||||
if prise in uplink:
|
if prise in uplink:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
result = annuaires_pg.reverse(bat, prise)
|
result = annuaire.reverse(bat, prise)
|
||||||
if result:
|
if result:
|
||||||
chbre = bat+result[0]
|
chbre = bat+result[0]
|
||||||
if chbre in liste_chbres:
|
if chbre in liste_chbres:
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
psql -U crans mac_prises -c "DELETE FROM correspondance WHERE date <= timestamp 'now' - interval '2 days';"
|
psql -U crans mac_prises -c "DELETE FROM correspondance WHERE date <= timestamp 'now' - interval '2 days';" 1>/dev/null
|
||||||
|
|
|
@ -7,6 +7,9 @@ import mac_prise
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
sys.path.append('/usr/scripts/gestion')
|
||||||
|
import annuaires_pg
|
||||||
|
|
||||||
class ThreadWithReturnValue(Thread):
|
class ThreadWithReturnValue(Thread):
|
||||||
"""
|
"""
|
||||||
Classe de threading qui récupère le "return" d'une fonction, et le renvoie avec
|
Classe de threading qui récupère le "return" d'une fonction, et le renvoie avec
|
||||||
|
@ -18,13 +21,40 @@ class ThreadWithReturnValue(Thread):
|
||||||
self._return = None
|
self._return = None
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
"""
|
||||||
|
Méthode appelée par start.
|
||||||
|
On la réécrit pour que le retour soit non vide.
|
||||||
|
"""
|
||||||
if self._Thread__target is not None:
|
if self._Thread__target is not None:
|
||||||
self._return = self._Thread__target(*self._Thread__args,
|
self._return = self._Thread__target(*self._Thread__args,
|
||||||
**self._Thread__kwargs)
|
**self._Thread__kwargs)
|
||||||
def output(self):
|
def output(self):
|
||||||
|
"""
|
||||||
|
Renvoie la sortie de la fonction threadée.
|
||||||
|
"""
|
||||||
Thread.join(self)
|
Thread.join(self)
|
||||||
return self._return
|
return self._return
|
||||||
|
|
||||||
|
def get_curseur(temps):
|
||||||
|
"""
|
||||||
|
Au cas où le nombre max de connexions est atteint.
|
||||||
|
"""
|
||||||
|
i = 0
|
||||||
|
while i <= 5:
|
||||||
|
try:
|
||||||
|
connecteur = psycopg2.connect(database="mac_prises", user="crans")
|
||||||
|
connecteur.set_session(autocommit=True)
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
print e
|
||||||
|
i += 1
|
||||||
|
time.sleep(3)
|
||||||
|
|
||||||
|
if i == 6:
|
||||||
|
raise EnvironmentError('Impossible de contacter la base postgresql')
|
||||||
|
else:
|
||||||
|
return connecteur.cursor()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
"""
|
"""
|
||||||
On envoie sur n threads les n arguments, puis on récupère les sorties
|
On envoie sur n threads les n arguments, puis on récupère les sorties
|
||||||
|
@ -35,16 +65,15 @@ if __name__ == '__main__':
|
||||||
threads = {}
|
threads = {}
|
||||||
output = {}
|
output = {}
|
||||||
for switch in switches:
|
for switch in switches:
|
||||||
threads[switch] = ThreadWithReturnValue(target=mac_prise.liste_chambres_macs, args=(switch,))
|
threads[switch] = ThreadWithReturnValue(target=mac_prise.liste_chambres_macs, args=(switch, annuaires_pg))
|
||||||
threads[switch].start()
|
threads[switch].start()
|
||||||
|
|
||||||
# On change de boucle, car il faut absolument que tous les threads aient démarré, histoire qu'on
|
# On change de boucle, car il faut absolument que tous les threads aient démarré, histoire qu'on
|
||||||
# parallélise vraiment !
|
# parallélise vraiment !
|
||||||
for switch in switches:
|
for switch in switches:
|
||||||
output[switch] = threads[switch].output()
|
output[switch] = threads[switch].output()
|
||||||
connecteur = psycopg2.connect(database="mac_prises", user="crans")
|
|
||||||
connecteur.set_session(autocommit=True)
|
curseur = get_curseur(time.time())
|
||||||
curseur = connecteur.cursor()
|
|
||||||
|
|
||||||
requete = "INSERT INTO correspondance (date, chambre, mac) VALUES (%s, %s, %s);"
|
requete = "INSERT INTO correspondance (date, chambre, mac) VALUES (%s, %s, %s);"
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue