[printer_watch] On rend le script stateful
This commit is contained in:
parent
8351cecd8a
commit
78b4e65e5a
2 changed files with 52 additions and 5 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -54,3 +54,6 @@ secours/etat_*
|
||||||
|
|
||||||
# Fichier de son pour asterisk
|
# Fichier de son pour asterisk
|
||||||
sip/sound/
|
sip/sound/
|
||||||
|
|
||||||
|
#Fichier de dernier statut de l'imprimante
|
||||||
|
impression/printer_watch_status.json
|
||||||
|
|
|
@ -2,17 +2,61 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import netsnmp
|
import netsnmp
|
||||||
import sys
|
|
||||||
from utils import sendmail
|
from utils import sendmail
|
||||||
|
from time import time
|
||||||
|
import json
|
||||||
|
from md5 import md5
|
||||||
|
|
||||||
# On checke le statut de l'imprimante, si elle est down (5) on envoie des mails.
|
successfuly_imported = False
|
||||||
|
try:
|
||||||
|
with open("printer_watch_status.json", "r") as to_load:
|
||||||
|
extracted_dict = json.load(to_load)
|
||||||
|
try:
|
||||||
|
last_status = extracted_dict[u"last_status"]
|
||||||
|
message_id = extracted_dict[u"message_id"]
|
||||||
|
successfuly_imported = True
|
||||||
|
except (KeyError, ValueError):
|
||||||
|
pass
|
||||||
|
except (IOError, ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# On check le statut de l'imprimante
|
||||||
status_id = netsnmp.Varbind("hrDeviceStatus.1")
|
status_id = netsnmp.Varbind("hrDeviceStatus.1")
|
||||||
if netsnmp.snmpget(status_id, Version=1, DestHost="imprimante.adm", Community="public") == ('5',):
|
status = netsnmp.snmpget(status_id, Version=1, DestHost="imprimante.adm", Community="public")
|
||||||
|
|
||||||
|
if status == ('5',) and (not successfuly_imported or successfuly_imported and last_status == '2'):
|
||||||
|
"""
|
||||||
|
Cas 1: L'imprimante est down et soit elle était précédemment fonctionnelle ou son statut précédent est inconnu.
|
||||||
|
On envoie un mail pour signaler qu'elle est down.
|
||||||
|
"""
|
||||||
|
|
||||||
# On récolte la liste des erreurs dans cette branche
|
# On récolte la liste des erreurs dans cette branche
|
||||||
errors = netsnmp.snmpwalk(netsnmp.Varbind("mib-2.43.18.1.1.8.1"), Version=1, DestHost="imprimante.adm", Community="public")
|
errors = netsnmp.snmpwalk(netsnmp.Varbind("mib-2.43.18.1.1.8.1"), Version=1, DestHost="imprimante.adm", Community="public")
|
||||||
errors_list = [error + '\n' for error in errors]
|
errors_list = [error + '\n' for error in errors]
|
||||||
|
|
||||||
|
#On crée un joli message d'erreur contenant la liste des erreurs
|
||||||
msg = """ L'imprimante est actuellement hors service. Les erreurs suivantes se sont produites:
|
msg = """ L'imprimante est actuellement hors service. Les erreurs suivantes se sont produites:
|
||||||
%s""" % ''.join(errors_list)
|
%s""" % ''.join(errors_list)
|
||||||
|
|
||||||
|
#On crée un Message-ID
|
||||||
|
message_id = md5(str(time())).hexdigest() + "@imprimante.adm.crans.org"
|
||||||
|
|
||||||
sendmail.sendmail(u"imprimante.adm@crans.org", u"impression@lists.crans.org", u"Imprimante hors service", msg, more_headers={"X-Mailer": "/usr/scripts/impression/printer_watch.py"})
|
sendmail.sendmail(u"imprimante.adm@crans.org", u"impression@lists.crans.org", u"Imprimante hors service", msg, more_headers={"X-Mailer": "/usr/scripts/impression/printer_watch.py", "Message-ID": message_id})
|
||||||
|
|
||||||
|
|
||||||
|
elif status == ('2',) and successfuly_imported and last_status == '5':
|
||||||
|
"""
|
||||||
|
Cas 2: L'imprimante est fonctionnelle après une panne.
|
||||||
|
On envoi un mail pour signaler que ce n'est plus la peine de se déplacer.
|
||||||
|
"""
|
||||||
|
|
||||||
|
msg = " L'imprimante est de nouveau fonctionnelle \o/"
|
||||||
|
|
||||||
|
sendmail.sendmail(u"imprimante.adm@crans.org", u"impression@lists.crans.org", u"Imprimante fonctionnelle", msg, more_headers={"X-Mailer": "/usr/scripts/impression/printer_watch.py", "In-Reply-To": message_id})
|
||||||
|
message_id = None
|
||||||
|
|
||||||
|
else:
|
||||||
|
message_id = None
|
||||||
|
|
||||||
|
with open("printer_watch_status.json", "w") as dump_file:
|
||||||
|
json.dump({u"last_status": status[0], u"message_id": message_id}, dump_file)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue