Creation d'un service alertsms sur zamok via rabbitmq

This commit is contained in:
Gabriel Detraz 2015-08-26 01:51:37 +02:00
parent 0adfe858cc
commit 79182f2b42
5 changed files with 97 additions and 0 deletions

7
utils/alertsms/README Normal file
View file

@ -0,0 +1,7 @@
# Daemon qui recupère les sms de rabbitmq et les envoie via gammu sur zamok
# Il récupère les sms en tant que user sms et dans la queue SMS
# Largement repris de crans ticket
# Les autres scripts n'ont plus qu'a peupler la file d'attente avec
# des dicts (numero de tel, contenu du msg)
# Un service gammu tourne sur zamok, ainsi qu'un service cranssms qui appelle daemon

5
utils/alertsms/common.py Normal file
View file

@ -0,0 +1,5 @@
#!/usr/bin/env python
#-*- coding: utf-8 -*-
PIDFILE = '/var/run/daemon.pid'
USER='gammu'
GROUP='adm'

16
utils/alertsms/config.py Normal file
View file

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
import pika
import sys
if '/usr/scripts' not in sys.path:
sys.path.append('/usr/scripts')
from gestion import secrets_new as secrets
CREDS = pika.credentials.PlainCredentials('sms', secrets.get('rabbitmq_sms'), True)
PARAMS = pika.ConnectionParameters(host='rabbitmq.crans.org',
port=5671, credentials=CREDS, ssl=True)
QUEUE = "SMS"

69
utils/alertsms/daemon.py Executable file
View file

@ -0,0 +1,69 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Daemon d'envoie des sms par rabbitmq
# License GPL2
# Gabriel Détraz, pompé sur cransticket de Daniel Stan
from __future__ import print_function
import sys,os,pwd,grp
from gammu import smsd
import common
import pika
import json
import config
daemon = smsd.SMSD('/etc/gammu-smsdrc')
def run():
conn = pika.BlockingConnection(config.PARAMS)
ch = conn.channel()
ch.queue_declare(queue=config.QUEUE)
def callback(ch, method, properties, body):
print (" [x] Received %r" % (body,))
message = {
'Text': json.loads(body)['sms'],
'SMSC' : { 'Location' : 1 },
'Number' : json.loads(body)['numero'],
}
daemon.InjectSMS([message])
ch.basic_consume(callback, queue=config.QUEUE, no_ack=True)
ch.start_consuming()
conn.close()
# fork en arrière plan + pidfile
if __name__ == "__main__":
if '-fg' in sys.argv:
run()
exit()
# do the UNIX double-fork magic, see Stevens' "Advanced
# Programming in the UNIX Environment" for details (ISBN 0201563177)
try:
pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)
except OSError, e:
print("fork #1 failed: %d (%s)" % (e.errno, e.strerror),file=sys.stderr)
sys.exit(1)
# decouple from parent environment
os.chdir("/") #don't prevent unmounting....
os.setsid()
os.umask(0)
# do second fork
try:
pid = os.fork()
if pid > 0:
# exit from second parent, print eventual PID before
#print "Daemon PID %d" % pid
open(common.PIDFILE, 'w').write("%d" % pid)
sys.exit(0)
except OSError, e:
print("fork #2 failed: %d (%s)" % (e.errno, e.strerror),file=sys.stderr)
sys.exit(1)
# start the daemon main loop
run()