From 79182f2b42e702689aa8ae9e5fe82af1fda51000 Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Wed, 26 Aug 2015 01:51:37 +0200 Subject: [PATCH] Creation d'un service alertsms sur zamok via rabbitmq --- utils/alertsms/README | 7 ++++ utils/{ => alertsms}/alertsms.py | 0 utils/alertsms/common.py | 5 +++ utils/alertsms/config.py | 16 ++++++++ utils/alertsms/daemon.py | 69 ++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 utils/alertsms/README rename utils/{ => alertsms}/alertsms.py (100%) create mode 100644 utils/alertsms/common.py create mode 100644 utils/alertsms/config.py create mode 100755 utils/alertsms/daemon.py diff --git a/utils/alertsms/README b/utils/alertsms/README new file mode 100644 index 00000000..530b263d --- /dev/null +++ b/utils/alertsms/README @@ -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 diff --git a/utils/alertsms.py b/utils/alertsms/alertsms.py similarity index 100% rename from utils/alertsms.py rename to utils/alertsms/alertsms.py diff --git a/utils/alertsms/common.py b/utils/alertsms/common.py new file mode 100644 index 00000000..f17ea84b --- /dev/null +++ b/utils/alertsms/common.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- +PIDFILE = '/var/run/daemon.pid' +USER='gammu' +GROUP='adm' diff --git a/utils/alertsms/config.py b/utils/alertsms/config.py new file mode 100644 index 00000000..5455c94b --- /dev/null +++ b/utils/alertsms/config.py @@ -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" diff --git a/utils/alertsms/daemon.py b/utils/alertsms/daemon.py new file mode 100755 index 00000000..2648b050 --- /dev/null +++ b/utils/alertsms/daemon.py @@ -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() +