示例#1
0
def new_onRosterSet(f):
    log = getLoggerAdapter(getLogger('wokkel_onRosterSet', level='INFO'),
                           id='TWISTED')

    @wraps(f)
    def wrapper(self, iq):
        def trapIgnored(failure):
            failure.trap(RosterPushIgnored)
            raise error.StanzaError('service-unavailable')

        request = RosterRequest.fromElement(iq)

        if (not self.allowAnySender and request.sender and
                request.sender.userhostJID() != self.parent.jid.userhostJID()):
            d = defer.fail(RosterPushIgnored())
        elif request.item is None:
            log.info('_onRosterSet iq malformed. %s', iq.toXml())
            d = defer.fail(RosterPushIgnored())
        elif request.item.remove:
            d = defer.maybeDeferred(self.removeReceived, request)
        else:
            d = defer.maybeDeferred(self.setReceived, request)
        d.addErrback(trapIgnored)
        return d

    return wrapper
示例#2
0
 def setup(cls, url=None, log=None):
     if cls.redis_conn is None:
         if url is None:
             url = conf.REDIS_URL
         hostname, port, db, _, password = url_parse(url, 'redis')
         cls.redis_db = int(db)
         AuthRedisProtocol.password = password
         if log is None:
             log = getLoggerAdapter(getLogger(__name__),
                                    id='REDIS_CONNECTIONPOOL')
         cls.log = AuthRedisProtocol.log = log
         RedisFactory.protocol = AuthRedisProtocol
         cls.redis_conn = redis.lazyConnectionPool(host=hostname,
                                                   port=port,
                                                   dbid=cls.redis_db,
                                                   poolsize=conf.REDIS_POOL,
                                                   reconnect=True)
示例#3
0
 def setup(cls, url=None, log=None):
     if cls.mongo_conn is None:
         if url is None:
             url = conf.MONGO_URL
         hostname, port, cls.mongo_db, username, password = url_parse(
             url, 'mongodb')
         AuthMongoProtocol.database = cls.mongo_db
         AuthMongoProtocol.username = username
         AuthMongoProtocol.password = password
         if log is None:
             log = getLoggerAdapter(getLogger(__name__),
                                    id='MONGO_CONNECTIONPOOL')
         cls.log = AuthMongoProtocol.log = log
         txmongo._MongoFactory.protocol = AuthMongoProtocol
         txmongo._MongoFactory.maxRetries = conf.BACKEND_MAX_RETRIES
         txmongo._MongoFactory.maxDelay = conf.BACKEND_MAX_DELAY
         cls.mongo_conn = txmongo.lazyMongoConnectionPool(
             host=hostname,
             port=port,
             reconnect=True,
             pool_size=conf.MONGO_POOL)
示例#4
0
    os.environ[
        'ADOPTED_STREAM'] = ''  #Avoid to perform Mutlprocess Service in child processes

    if conf.MULTIPROCESS > 0:
        m = MultiProcess(__file__, number=conf.MULTIPROCESS)
        m.setServiceParent(application)

metrics_supervisor = MetricsSupervisor()
metrics_supervisor.setServiceParent(application)

xmpp_keepalive_supervisor = XMPPKeepAliveSupervisor()
xmpp_keepalive_supervisor.setServiceParent(application)

if conf.REDIS_WORKERS > 0:
    worker.LOGGING_OK_JOBS = conf.LOGGING_OK_JOBS
    worker.SLEEP_CALL = sleep
    worker.MAX_RETRIES = conf.BACKEND_MAX_RETRIES
    worker.MAX_DELAY_TIME = conf.BACKEND_MAX_DELAY

    w = worker.Worker(
        [conf.MACHINEID, conf.DIST_QUEUE_LOGIN, conf.DIST_QUEUE_RELOGIN],
        name=conf.MACHINEID,
        loops=conf.REDIS_WORKERS,
        default_result_ttl=conf.DIST_DEFAULT_TTL,
        default_warmup=conf.WORKER_WARMUP,
        default_enqueue_failed_jobs=conf.DIST_ENQUEUE_FAILED_JOBS,
        default_perform_job_in_thread=conf.DIST_PERFORM_JOB_IN_THREAD,
        default_thread_pool_size=conf.DIST_THREAD_POOL)

    w.log = getLoggerAdapter(getLogger('WORKER', level='INFO'), id='WORKER')
    w.setServiceParent(application)
示例#5
0
            deferred_list.append(self.user.save())
            deferred_list.append(GoogleMessage.updateRemoveTime(self.user.userid, self.user.lastTimeConnected))
            deferred_list.append(GoogleRosterItem.remove(self.user.userid))
        return defer.DeferredList(deferred_list, consumeErrors=True)
    
    def __str__(self):
        return '<%s object at %s. name: %s>(user: %s)'%(self.__class__.__name__, hex(id(self)), self.name, self.user)

if __name__ == '__main__':
    import os
    from katoo.data import GoogleUser
    from wokkel_extensions import XMPPClient
    from katoo.utils.applog import getLogger, getLoggerAdapter
    from katoo.apns.api import KatooAPNSService
    from katoo.supervisor import XMPPKeepAliveSupervisor
    
    my_log = getLoggerAdapter(getLogger(__name__, level="INFO"), id='MYLOG')
    
    app = KatooApp().app
    KatooAPNSService().service.setServiceParent(app)
    KatooApp().start()
    XMPPKeepAliveSupervisor().setServiceParent(app)
    
    import twisted.python.log
    twisted.python.log.startLoggingWithObserver(KatooApp().log.emit)
    user = GoogleUser("1", _token=os.getenv('TOKEN'), _refreshtoken=os.getenv('REFRESHTOKEN'), _resource="asdfasdf", _pushtoken=os.getenv('PUSHTOKEN', None), _jid=os.getenv('JID'), _pushsound='cell1.aif', _favoritesound='cell7.aif', _away=True)
    my_log.info('Instance user: %s', user)
    xmppclient = XMPPGoogle(user, app)
    my_log.info('Instance xmppclient: %s', xmppclient)
    xmppclient.log.info("Instance XMPPGoogle %s. Instance ReauthXMPP %s Instance XMPPClient %s Instance GoogleUser %s", isinstance(xmppclient, XMPPGoogle), isinstance(xmppclient, ReauthXMPPClient), isinstance(xmppclient, XMPPClient), isinstance(xmppclient, GoogleUser))
    reactor.run()
示例#6
0
from cyclone.escape import json_encode
from katoo import conf
from katoo.api import API
from katoo.data import GoogleUser, GoogleMessage
from katoo.exceptions import XMPPUserAlreadyLogged, XMPPUserNotLogged
from katoo.metrics import IncrementMetric, Metric
from katoo.utils.applog import getLoggerAdapter, getLogger
from katoo.utils.connections import RedisMixin
from katoo.utils.time import Timer
from twisted.internet import defer
import cyclone.web
import re
import urllib

log = getLogger(__name__)

METRIC_UNIT = 'requests'
METRIC_UNIT_TIME = 'ms'
METRIC_SOURCE = 'RESTAPI'


class RequiredArgument(object):
    pass


class DefaultArgument(object):
    pass


class arguments(object):
示例#7
0
from katoo.apns.api import API as APNSAPI
from katoo.data import GoogleUser
from katoo.globalmetrics import RedisMetrics, MongoMetrics
from katoo.metrics import MetricsHub, Metric
from katoo.rqtwisted.job import Job
from katoo.rqtwisted.queue import Queue
from katoo.rqtwisted.worker import Worker
from katoo.utils.applog import getLogger, getLoggerAdapter
from katoo.utils.patterns import Subject
from twisted.application import service
from twisted.internet import defer, reactor
from twisted.internet.task import LoopingCall
import cyclone.httpclient
import translate

log = getLogger(__name__, level='INFO')


class Supervisor(service.Service):
    def __init__(self):
        self.tasks = []

    def registerTask(self, t):
        self.tasks.append(t)

    def stopService(self):
        if self.running:
            service.Service.stopService(self)
            for task in self.tasks:
                self.log.info('STOPPING_TASK %s', task)
                task.stop()
示例#8
0
Created on Jul 2, 2013

@author: pvicente
'''
from functools import wraps
from katoo import conf
from katoo.exceptions import XMPPUserNotLogged, DistributedJobTimeout, \
    DistributedJobFailure
from katoo.rqtwisted.job import Job
from katoo.rqtwisted.queue import Queue, Status
from katoo.utils.applog import getLogger, getLoggerAdapter
from katoo.metrics import IncrementMetric
from katoo.utils.time import sleep
from twisted.internet import defer

log = getLogger(__name__)


class DistributedAPI(object):
    """API with distributed behaviour must subclass it to be performed"""
    def __init__(self, key=None, queue=None, synchronous_call=False):
        self.key = key
        self.queue_name = None if conf.DIST_DISABLED else queue
        self.enqueued = False
        self.sync = synchronous_call
        self._log = getLoggerAdapter(log, id=self.key)

    def __getstate__(self):
        self._log = None
        return self.__dict__
示例#9
0
@author: pvicente
'''
from datetime import timedelta
from katoo import conf
from katoo.data import GoogleMessage, GoogleRosterItem, GoogleUser
from katoo.metrics import Metric
from katoo.rqtwisted.queue import Queue, FailedQueue
from katoo.utils.applog import getLogger, getLoggerAdapter
from katoo.utils.connections import RedisMixin
from katoo.utils.patterns import Observer
from katoo.utils.time import Timer
from twisted.internet import defer


log = getLoggerAdapter(getLogger(__name__),id='GLOBAL_METRICS')

class RedisMetrics(Observer):
    SOURCE='REDIS'
    UNIT='keys'
    def __init__(self):
        self._connection = RedisMixin.redis_conn
        self._keys=Metric(name="keys", value=None, unit=self.UNIT, source=self.SOURCE)
        failed_queue_name = FailedQueue().name
        self._items={conf.DIST_QUEUE_LOGIN: Metric(name='queue_%s'%(conf.DIST_QUEUE_LOGIN), value=None, unit=self.UNIT, source=self.SOURCE),
                     conf.DIST_QUEUE_PUSH: Metric(name='queue_%s'%(conf.DIST_QUEUE_PUSH), value=None, unit=self.UNIT, source=self.SOURCE), 
                     conf.DIST_QUEUE_RELOGIN: Metric(name='queue_%s'%(conf.DIST_QUEUE_RELOGIN), value=None, unit=self.UNIT, source=self.SOURCE),
                     failed_queue_name: Metric(name='queue_%s'%(failed_queue_name), value=None, unit=self.UNIT, source=self.SOURCE)
                     }
    
    @defer.inlineCallbacks
示例#10
0
    @AsynchronousCall(conf.DIST_QUEUE_PUSH)
    def sendpush(self, message, token, badgenumber, sound='', **kwargs):
        self.log.debug(
            'SEND_PUSH: %s token: %s, badgenumber: %s, sound: %s kwargs: %s',
            message, token, badgenumber, sound, kwargs)
        return self._sendapn(token, message, sound, badgenumber, **kwargs)


if __name__ == '__main__':
    from twisted.internet import reactor, defer, task
    from katoo import KatooApp
    from katoo.utils.applog import getLoggerAdapter, getLogger
    from katoo.rqtwisted import worker
    import os, translate

    my_log = getLoggerAdapter(getLogger(__name__, level="DEBUG"), id='MYLOG')

    #@defer.inlineCallbacks
    def send():
        my_log.debug('Starting send')
        API('TEST').sendpush(
            message=translate.TRANSLATORS['en']._('disconnected'),
            token=os.getenv('PUSHTOKEN', None),
            badgenumber=0,
            sound='')
        my_log.debug('Finished send')

    @defer.inlineCallbacks
    def close():
        try:
            my_log.debug('Starting close')
示例#11
0
 def constructor(self):
     self._time = datetime.utcnow()
     self.log = getLoggerAdapter(getLogger(__name__, "INFO"), id='TIMER')
     self._interval = conf.TIMER_INTERVAL
     self._maxinterval = self._interval * 3