Пример #1
0
 def relogin(self, xmppuser, pending_jobs):
     len_pending_jobs = len(pending_jobs)
     self.log.info('RELOGIN %s. Pending_Jobs: %s. Data: %s', xmppuser.jid, len_pending_jobs, xmppuser)
     try:
         yield self._shared_login(xmppuser)
         running_client = KatooApp().getService(xmppuser.userid)
         self.log.info('RELOGIN %s. Running xmppclient: %s', xmppuser.jid, running_client)
     except XMPPUserAlreadyLogged:
         #If user is already logged xmppuser data is valid and we take it as xmppuser
         running_client = KatooApp().getService(xmppuser.userid)
         self.log.warning('RELOGIN %s. User Already logged taking user to perform RELOGIN process. Running xmppclient: %s', xmppuser.jid, running_client)
         xmppuser = running_client.user
         xmppuser.worker = xmppuser.userid
     
     try:
         xmppuser.onMigrationTime = Timer().utcnow()
         res = yield xmppuser.save()
         self.log.info('perform relogin %s. Enqueuing pending jobs %s before migration was launched. Data %s. Save result: %s', xmppuser.jid, len_pending_jobs, running_client, res)
         
         queue = Queue(conf.MACHINEID)
         
         #Enqueue pending jobs before migration was launched
         for job_id in pending_jobs:
             try:
                 job = yield Job.fetch(job_id, queue.connection)
                 yield queue.enqueue_job(job)
             except NoSuchJobError:
                 pass
         self.log.info('perform relogin %s. Finished enqueuing pending jobs before migration was launched.', xmppuser.jid)
         
         self.log.info('perform relogin %s. Enqueing pending jobs after migration was launched.', xmppuser.jid)
         #Enqueue pending jobs after migration was launched
         migration_queue = Queue(xmppuser.userid)
         migration_job_ids = yield migration_queue.job_ids
         yield migration_queue.empty()
         
         while migration_job_ids:
             job_id = migration_job_ids.pop(0)
             try:
                 job = yield Job.fetch(job_id, migration_queue.connection)
                 #Enqueue job in current worker queue
                 yield queue.enqueue_job(job)
             except NoSuchJobError:
                 pass
             
             if not migration_job_ids:
                 xmppuser.worker=conf.MACHINEID
                 xmppuser.onMigrationTime=''
                 yield xmppuser.save()
                 
                 migration_job_ids = yield migration_queue.job_ids
                 yield migration_queue.empty()
         
     finally:
         xmppuser.worker = conf.MACHINEID
         xmppuser.onMigrationTime=''
         res = yield xmppuser.save()
         self.log.info('RELOGIN %s. Finished. Data %s. Save result: %s', xmppuser.jid, xmppuser, res)
Пример #2
0
 def logout(self, userid):
     try:
         self.log.info('LOGOUT')
         running_client = KatooApp().getService(userid)
         if running_client is None:
             raise XMPPUserNotLogged('User %s is not running in current worker'%(userid))
         yield running_client.disconnect()
     except XMPPUserNotLogged:
         pass
     finally:
         yield GoogleUser.remove(userid)
Пример #3
0
 def update(self, userid, **kwargs):
     self.log.info('UPDATE. Data: %s', kwargs)
     running_client = KatooApp().getService(userid)
     if running_client is None:
         raise XMPPUserNotLogged('User %s is not running in current worker'%(userid))
     xmppuser = running_client.user
     xmppuser.update(**kwargs)
     return xmppuser.save()
Пример #4
0
 def disconnect(self, change_state=True):
     self.log.info('DISCONNECTED %s', self.user.jid)
     #Unregister in XMPP_KEEPALIVE_SERVICE
     KatooApp().getService('XMPP_KEEPALIVE_SUPERVISOR').unregisterObserver(self)
     
     deferred_list = [defer.maybeDeferred(self.disownServiceParent)]
     if change_state:
         self.user.away = True
         self.user.connected = False
         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)
Пример #5
0
 def __init__(self, user, app):
     ReauthXMPPClient.__init__(self, jid=jid.JID("%s/%s"%(user.jid,conf.XMPP_RESOURCE)), password=user.token, host="talk.google.com", port=5222, logid=user.userid)
     Observer.__init__(self)
     self.user = user
     self.retries = 0
     self.logTraffic = conf.XMPP_LOG_TRAFFIC
     
     #Initialize protocol
     self.handler = GoogleHandler(self)
     protocol = CompleteBotProtocol(self.handler)
     protocol.setHandlerParent(self)
     self.setServiceParent(app)
     
     #Register in XMPP_KEEPALIVE_SERVICE
     KatooApp().getService('XMPP_KEEPALIVE_SUPERVISOR').registerObserver(self)
Пример #6
0
 def update_contact(self, userid, jid, **kwargs):
     self.log.info('UPDATE CONTACT %s. Data: %s', jid, kwargs)
     running_client = KatooApp().getService(userid)
     if running_client is None:
         raise XMPPUserNotLogged('User %s is not running in current worker'%(userid))
     roster = running_client.roster
     yield roster.set(jid, **kwargs)
     
     xmppuser = running_client.user
     seconds = kwargs.get('notifyWhenAvailable', '')
     if seconds:
         xmppuser.addAvailablePresenceContact(jid)
     else:
         xmppuser.removeAvailablePresenceContact(jid)
     yield xmppuser.save()
Пример #7
0
 def onConnectionLost(self, reason):
     self.CONNECTIONS_METRIC.add(-1)
     currTime = Timer().utcnow()
     connectedTime = self.client.connectedTime
     lastTimeKeepAlive = (currTime - KatooApp().getService('XMPP_KEEPALIVE_SUPERVISOR').lastTime).seconds
     isAuthenticating = self.client.isAuthenticating()
     
     self.log.info('CONNECTION_LOST %s. Connected Time: %s. LastTimeKeepAlive: %s. Authenticating: %s. Reason %s',
                   self.user.jid, connectedTime, lastTimeKeepAlive, isAuthenticating, str(reason))
     self.CONNECTION_TIME_METRIC.add(connectedTime)
     self.CONNECTION_KEEP_ALIVE_TIME_METRIC.add(lastTimeKeepAlive)
     
     if not isAuthenticating:
         if connectedTime < conf.XMPP_MIN_CONNECTED_TIME:
             self.client.retries += 1
             if self.client.retries >= conf.XMPP_MAX_RETRIES:
                 self.client.onMaxRetries()
                 return
         else:
             self.client.retries = 0
Пример #8
0
'''
Created on Jul 8, 2013

@author: pvicente
'''
from katoo import conf, KatooApp
from katoo.rqtwisted import worker
from katoo.supervisor import MetricsSupervisor, XMPPKeepAliveSupervisor
from katoo.utils.applog import getLoggerAdapter, getLogger
from katoo.utils.multiprocess import MultiProcess
from katoo.utils.time import sleep
import os

application = KatooApp().app

if conf.ADOPTED_STREAM is None:
    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
Пример #9
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()
Пример #10
0
 def _attach_global_metrics(self):
     service = KatooApp().getService(MetricsSupervisor.name)
     for metric in self._globalmetrics:
         service.registerObserver(metric())
Пример #11
0
 def _shared_login(self, xmppuser):
     userid = xmppuser.userid
     running_client = KatooApp().getService(userid)
     if not running_client is None:
         raise XMPPUserAlreadyLogged('Service %s already running'%(running_client))
     XMPPGoogle(xmppuser, KatooApp().app)
Пример #12
0
 def disconnect(self, userid, change_state=True):
     self.log.info('DISCONNECTING')
     running_client = KatooApp().getService(userid)
     if running_client is None:
         raise XMPPUserNotLogged('User %s is not running in current worker'%(userid))
     return running_client.disconnect(change_state)