Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Benjamin Graillot
scripts
Commits
78b4e65e
Commit
78b4e65e
authored
Nov 16, 2013
by
Lucas Serrano
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[printer_watch] On rend le script stateful
parent
8351cecd
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
52 additions
and
5 deletions
+52
-5
.gitignore
.gitignore
+3
-0
impression/printer_watch.py
impression/printer_watch.py
+49
-5
No files found.
.gitignore
View file @
78b4e65e
...
...
@@ -54,3 +54,6 @@ secours/etat_*
# Fichier de son pour asterisk
sip/sound/
#Fichier de dernier statut de l'imprimante
impression/printer_watch_status.json
impression/printer_watch.py
View file @
78b4e65e
...
...
@@ -2,17 +2,61 @@
# -*- coding: utf-8 -*-
import
netsnmp
import
sys
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"
)
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
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
]
#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:
%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
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment