Skip to content

Commit

Permalink
Merge pull request #504 from jookies/v0.9
Browse files Browse the repository at this point in the history
v0.9b13
  • Loading branch information
farirat committed Nov 10, 2016
2 parents aed63dd + eb739aa commit 90add00
Show file tree
Hide file tree
Showing 52 changed files with 1,735 additions and 620 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,4 @@ venv

# Twisted
trial
_trial_temp.lock
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ language: python
python:
- '2.7'
env:
- ROOT_PATH=~/jasmin JASMIN_RELEASE=0.9b11
- ROOT_PATH=~/jasmin JASMIN_RELEASE=0.9b13
# Command to install dependencies
install:
- python setup.py sdist
Expand Down
6 changes: 4 additions & 2 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ MAINTAINER Jookies LTD <jasmin@jookies.net>
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r jasmin && useradd -r -g jasmin jasmin

ENV JASMIN_VERSION 0.9b11
ENV JASMIN_VERSION 0.9b13

# Install requirements
RUN apt-get update && apt-get install -y \
Expand All @@ -16,6 +16,7 @@ RUN apt-get update && apt-get install -y \
libssl-dev \
rabbitmq-server \
redis-server \
supervisor \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

Expand All @@ -35,4 +36,5 @@ VOLUME ["/var/log/jasmin", "/etc/jasmin", "/etc/jasmin/store"]

COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["jasmind.py", "--enable-interceptor-client", "-u", "jcliadmin", "-p", "jclipwd"]
# jasmind is started with dlr-thrower thread instead of a standalone process
CMD ["jasmind.py", "--enable-interceptor-client", "--enable-dlr-thrower", "-u", "jcliadmin", "-p", "jclipwd"]
7 changes: 7 additions & 0 deletions docker/docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
#!/bin/bash
set -e

echo 'Starting RabbitMQ'
/etc/init.d/rabbitmq-server start
echo 'Starting Redis'
/etc/init.d/redis-server start
echo 'Starting supervisor'
/etc/init.d/supervisor start

echo 'Cleaning lock files'
rm -f /tmp/*.lock

if [ "$2" = "--enable-interceptor-client" ]; then
echo 'Starting interceptord'
Expand Down
2 changes: 1 addition & 1 deletion jasmin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

MAJOR = 0
MINOR = 9
PATCH = 11
PATCH = 13
META = 'b'

def get_version():
Expand Down
179 changes: 179 additions & 0 deletions jasmin/bin/dlrd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
#!/usr/bin/python

import os
import signal
import sys
import syslog

from lockfile import FileLock, LockTimeout, AlreadyLocked
from twisted.internet import reactor, defer
from twisted.python import usage

from jasmin.protocols.smpp.configs import SMPPServerPBClientConfig
from jasmin.protocols.smpp.proxies import SMPPServerPBProxy
from jasmin.queues.configs import AmqpConfig
from jasmin.queues.factory import AmqpFactory
from jasmin.routing.configs import DLRThrowerConfig
from jasmin.routing.throwers import DLRThrower

# Related to travis-ci builds
ROOT_PATH = os.getenv('ROOT_PATH', '/')


class Options(usage.Options):
optParameters = [
['config', 'c', '%s/etc/jasmin/dlr.cfg' % ROOT_PATH,
'Jasmin configuration file'],
['id', 'i', 'master',
'Daemon id, need to be different for each dlrd daemon'],
]

optFlags = [
]


class DlrDaemon(object):
def __init__(self, opt):
self.options = opt
self.components = {}

def startAMQPBrokerService(self):
"Start AMQP Broker"

AMQPServiceConfigInstance = AmqpConfig(self.options['config'])
self.components['amqp-broker-factory'] = AmqpFactory(AMQPServiceConfigInstance)
self.components['amqp-broker-factory'].preConnect()

# Add service
self.components['amqp-broker-client'] = reactor.connectTCP(
AMQPServiceConfigInstance.host,
AMQPServiceConfigInstance.port,
self.components['amqp-broker-factory'])

def stopAMQPBrokerService(self):
"Stop AMQP Broker"

return self.components['amqp-broker-client'].disconnect()

def startSMPPServerPBClient(self):
"Start SMPPServerPB client"

SMPPServerPBClientConfigInstance = SMPPServerPBClientConfig(self.options['config'])
self.components['smpps-pb-client'] = SMPPServerPBProxy()

return self.components['smpps-pb-client'].connect(
SMPPServerPBClientConfigInstance.host,
SMPPServerPBClientConfigInstance.port,
SMPPServerPBClientConfigInstance.username,
SMPPServerPBClientConfigInstance.password,
retry=True)

def stopSMPPServerPBClient(self):
"Stop SMPPServerPB client"

if self.components['smpps-pb-client'].isConnected:
return self.components['smpps-pb-client'].disconnect()

def startDLRThrowerService(self):
"Start DLRThrower"

DLRThrowerConfigInstance = DLRThrowerConfig(self.options['config'])
self.components['dlr-thrower'] = DLRThrower(DLRThrowerConfigInstance)
self.components['dlr-thrower'].addSmpps(self.components['smpps-pb-client'])

# AMQP Broker is used to listen to DLRThrower queue
return self.components['dlr-thrower'].addAmqpBroker(self.components['amqp-broker-factory'])

def stopDLRThrowerService(self):
"Stop DLRThrower"
return self.components['dlr-thrower'].stopService()

@defer.inlineCallbacks
def start(self):
"Start Dlrd daemon"
syslog.syslog(syslog.LOG_INFO, "Starting Dlr Daemon ...")

########################################################
# Start AMQP Broker
try:
self.startAMQPBrokerService()
yield self.components['amqp-broker-factory'].getChannelReadyDeferred()
except Exception, e:
syslog.syslog(syslog.LOG_ERR, " Cannot start AMQP Broker: %s" % e)
else:
syslog.syslog(syslog.LOG_INFO, " AMQP Broker Started.")

########################################################
try:
# Start SMPPServerPB Client
yield self.startSMPPServerPBClient()
except Exception, e:
syslog.syslog(syslog.LOG_ERR, " Cannot start SMPPServerPBClient: %s" % e)
else:
syslog.syslog(syslog.LOG_INFO, " SMPPServerPBClientStarted.")

########################################################
try:
# Start DLRThrower
yield self.startDLRThrowerService()
except Exception, e:
syslog.syslog(syslog.LOG_ERR, " Cannot start DLRThrower: %s" % e)
else:
syslog.syslog(syslog.LOG_INFO, " DLRThrower Started.")

@defer.inlineCallbacks
def stop(self):
"Stop Dlrd daemon"
syslog.syslog(syslog.LOG_INFO, "Stopping Dlr Daemon ...")

if 'smpps-pb-client' in self.components:
yield self.stopSMPPServerPBClient()
syslog.syslog(syslog.LOG_INFO, " SMPPServerPBClient stopped.")

if 'dlr-thrower' in self.components:
yield self.stopDLRThrowerService()
syslog.syslog(syslog.LOG_INFO, " DLRThrower stopped.")

if 'amqp-broker-client' in self.components:
yield self.stopAMQPBrokerService()
syslog.syslog(syslog.LOG_INFO, " AMQP Broker disconnected.")

reactor.stop()

def sighandler_stop(self, signum, frame):
"Handle stop signal cleanly"
syslog.syslog(syslog.LOG_INFO, "Received signal to stop Dlr Daemon")

return self.stop()


if __name__ == '__main__':
try:
options = Options()
options.parseOptions()

# Must not be executed simultaneously (c.f. #265)
lock = FileLock("/tmp/dlrd-%s" % options['id'])

# Ensure there are no paralell runs of this script
lock.acquire(timeout=2)

# Prepare to start
dlr_d = DlrDaemon(options)
# Setup signal handlers
signal.signal(signal.SIGINT, dlr_d.sighandler_stop)
# Start DlrDaemon
dlr_d.start()

reactor.run()
except usage.UsageError, errortext:
print '%s: %s' % (sys.argv[0], errortext)
print '%s: Try --help for usage details.' % (sys.argv[0])
except LockTimeout:
print "Lock not acquired ! exiting"
except AlreadyLocked:
print "There's another instance on dlrd running, exiting."
finally:
# Release the lock
if lock.i_am_locking():
lock.release()
13 changes: 7 additions & 6 deletions jasmin/bin/interceptord.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
#!/usr/bin/python

import os
import sys
import signal
import sys
import syslog

from lockfile import FileLock, LockTimeout, AlreadyLocked
from twisted.python import usage
from twisted.cred import portal
from twisted.cred.checkers import AllowAnonymousAccess, InMemoryUsernamePasswordDatabaseDontUse
from twisted.spread import pb
from twisted.internet import reactor, defer
from jasmin.interceptor.interceptor import InterceptorPB
from twisted.python import usage
from twisted.spread import pb

from jasmin.interceptor.configs import InterceptorPBConfig
from jasmin.interceptor.interceptor import InterceptorPB
from jasmin.tools.cred.portal import JasminPBRealm
from jasmin.tools.spread.pb import JasminPBPortalRoot

Expand All @@ -35,8 +37,7 @@ def startInterceptorPBService(self):
"Start Interceptor PB server"

InterceptorPBConfigInstance = InterceptorPBConfig(self.options['config'])
self.components['interceptor-pb-factory'] = InterceptorPB()
self.components['interceptor-pb-factory'].setConfig(InterceptorPBConfigInstance)
self.components['interceptor-pb-factory'] = InterceptorPB(InterceptorPBConfigInstance)

# Set authentication portal
p = portal.Portal(JasminPBRealm(self.components['interceptor-pb-factory']))
Expand Down

0 comments on commit 90add00

Please sign in to comment.