From 8f3f4b26c802c1021f2ccf039c666daf91489ccd Mon Sep 17 00:00:00 2001 From: Schuyler Erle Date: Tue, 28 Feb 2012 16:31:52 +0530 Subject: [PATCH] Document the SMS gateway configuration on atlas. --- gateway/README | 11 +++ gateway/run_gateway.sh | 9 ++ gateway/settings.py | 198 +++++++++++++++++++++++++++++++++++++++++ gateway/smsBEST.conf | 5 ++ 4 files changed, 223 insertions(+) create mode 100644 gateway/README create mode 100755 gateway/run_gateway.sh create mode 100755 gateway/settings.py create mode 100644 gateway/smsBEST.conf diff --git a/gateway/README b/gateway/README new file mode 100644 index 0000000..3ed0ae4 --- /dev/null +++ b/gateway/README @@ -0,0 +1,11 @@ +These files make the SMS gateway on atlas go. + +* apt-get install supervisor +* Create a virtualenv in /srv/smsBEST +* Install RapidSMS to the virtualenv: + http://github.com/schuyler/rapidsms +* rapidsms-admin.py startproject gateway +* Put settings.py in /srv/smsBEST/gateway +* Run manage.py syncdb in /srv/smsBEST/gateway +* Put run_gateway.sh in /srv/smsBEST/bin +* Put smsBEST.conf in /etc/supervisor/conf.d diff --git a/gateway/run_gateway.sh b/gateway/run_gateway.sh new file mode 100755 index 0000000..d9686d6 --- /dev/null +++ b/gateway/run_gateway.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# +# Launch the router. Put this file in /srv/smsBEST/bin. +# +cd /srv/smsBEST +source bin/activate +cd gateway +python manage.py runrouter + diff --git a/gateway/settings.py b/gateway/settings.py new file mode 100755 index 0000000..5cef581 --- /dev/null +++ b/gateway/settings.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python +# vim: ai ts=4 sts=4 et sw=4 +# encoding=utf-8 + +# Put this in /srv/smsBEST/gateway and change the gateway secret. + +# -------------------------------------------------------------------- # +# MAIN CONFIGURATION # +# -------------------------------------------------------------------- # + + +# you should configure your database here before doing any real work. +# see: http://docs.djangoproject.com/en/dev/ref/settings/#databases +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": "rapidsms.sqlite3", + } +} + + +# the rapidsms backend configuration is designed to resemble django's +# database configuration, as a nested dict of (name, configuration). +# +# the ENGINE option specifies the module of the backend; the most common +# backend types (for a GSM modem or an SMPP server) are bundled with +# rapidsms, but you may choose to write your own. +# +# all other options are passed to the Backend when it is instantiated, +# to configure it. see the documentation in those modules for a list of +# the valid options for each. +INSTALLED_BACKENDS = { + "modem": { + "ENGINE": "rapidsms.backends.gsm", + "PORT": "/dev/ttyS0", + "baudrate": 115200, + "timeout": 10 + }, + #"verizon": { + # "ENGINE": "rapidsms.backends.gsm, + # "PORT": "/dev/ttyUSB1" + #}, + "message_tester": { + "ENGINE": "rapidsms.backends.bucket", + } +} + +GATEWAY = { + "backend": "modem", + "secret": "something secret", + "push": "http://chalobest.in:8086/?from=%(from)s&txt=%(txt)s&secret=%(secret)s" +} + + +# to help you get started quickly, many django/rapidsms apps are enabled +# by default. you may wish to remove some and/or add your own. +INSTALLED_APPS = [ + + # the essentials. + "django_nose", + "djtables", + "rapidsms", + + # common dependencies (which don't clutter up the ui). + "rapidsms.contrib.handlers", + "rapidsms.contrib.ajax", + + # enable the django admin using a little shim app (which includes + # the required urlpatterns), and a bunch of undocumented apps that + # the AdminSite seems to explode without. + "django.contrib.sites", + "django.contrib.auth", + "django.contrib.admin", + "django.contrib.sessions", + "django.contrib.contenttypes", + + # the rapidsms contrib apps. +# "rapidsms.contrib.default", + "rapidsms.contrib.export", + "rapidsms.contrib.httptester", +# "rapidsms.contrib.locations", + "rapidsms.contrib.messagelog", + "rapidsms.contrib.messaging", + "rapidsms.contrib.gateway", +# "rapidsms.contrib.registration", +# "rapidsms.contrib.scheduler", +# "rapidsms.contrib.echo", +] + + +# this rapidsms-specific setting defines which views are linked by the +# tabbed navigation. when adding an app to INSTALLED_APPS, you may wish +# to add it here, also, to expose it in the rapidsms ui. +RAPIDSMS_TABS = [ + ("rapidsms.contrib.messagelog.views.message_log", "Message Log"), +# ("rapidsms.contrib.registration.views.registration", "Registration"), + ("rapidsms.contrib.messaging.views.messaging", "Messaging"), +# ("rapidsms.contrib.locations.views.locations", "Map"), +# ("rapidsms.contrib.scheduler.views.index", "Event Scheduler"), + ("rapidsms.contrib.httptester.views.generate_identity", "Message Tester"), +] + + +# -------------------------------------------------------------------- # +# BORING CONFIGURATION # +# -------------------------------------------------------------------- # + + +# debug mode is turned on as default, since rapidsms is under heavy +# development at the moment, and full stack traces are very useful +# when reporting bugs. don't forget to turn this off in production. +DEBUG = TEMPLATE_DEBUG = True + + +# after login (which is handled by django.contrib.auth), redirect to the +# dashboard rather than 'accounts/profile' (the default). +LOGIN_REDIRECT_URL = "/" + + +# use django-nose to run tests. rapidsms contains lots of packages and +# modules which django does not find automatically, and importing them +# all manually is tiresome and error-prone. +TEST_RUNNER = "django_nose.NoseTestSuiteRunner" + + +# for some reason this setting is blank in django's global_settings.py, +# but it is needed for static assets to be linkable. +MEDIA_URL = "/static/" + + +# this is required for the django.contrib.sites tests to run, but also +# not included in global_settings.py, and is almost always ``1``. +# see: http://docs.djangoproject.com/en/dev/ref/contrib/sites/ +SITE_ID = 1 + + +# the default log settings are very noisy. +LOG_LEVEL = "DEBUG" +LOG_FILE = "rapidsms.log" +LOG_FORMAT = "[%(name)s]: %(message)s" +LOG_SIZE = 8192 # 8192 bits = 8 kb +LOG_BACKUPS = 256 # number of logs to keep + + +# these weird dependencies should be handled by their respective apps, +# but they're not, so here they are. most of them are for django admin. +TEMPLATE_CONTEXT_PROCESSORS = [ + "django.core.context_processors.auth", + "django.core.context_processors.debug", + "django.core.context_processors.i18n", + "django.core.context_processors.media", + "django.core.context_processors.request", +] + +# template loaders load templates from various places. +# for djtables to work properly, the egg loader needs to be +# included, the others are fairly standard. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', + 'django.template.loaders.eggs.Loader' +) + +# -------------------------------------------------------------------- # +# HERE BE DRAGONS! # +# these settings are pure hackery, and will go away soon # +# -------------------------------------------------------------------- # + + +# these apps should not be started by rapidsms in your tests, however, +# the models and bootstrap will still be available through django. +TEST_EXCLUDED_APPS = [ + "django.contrib.sessions", + "django.contrib.contenttypes", + "django.contrib.auth", + "rapidsms", + "rapidsms.contrib.ajax", + "rapidsms.contrib.httptester", +] + +# the project-level url patterns +ROOT_URLCONF = "urls" + + +# since we might hit the database from any thread during testing, the +# in-memory sqlite database isn't sufficient. it spawns a separate +# virtual database for each thread, and syncdb is only called for the +# first. this leads to confusing "no such table" errors. We create +# a named temporary instance instead. +import os +import tempfile +import sys + +if 'test' in sys.argv: + for db_name in DATABASES: + DATABASES[db_name]['TEST_NAME'] = os.path.join( + tempfile.gettempdir(), + "%s.rapidsms.test.sqlite3" % db_name) diff --git a/gateway/smsBEST.conf b/gateway/smsBEST.conf new file mode 100644 index 0000000..003bf59 --- /dev/null +++ b/gateway/smsBEST.conf @@ -0,0 +1,5 @@ +# this file goes in /etc/supervisor/conf.d +[program:smsBEST] +command=/srv/smsBEST/bin/run_gateway.sh +directory=/srv/smsBEST/var +autorestart=true