Пример #1
0
def refresh_friends(twitter_id,
                    queue=None,
                    extra_headers=None,
                    access_token=''):
    """Refresh friends of the given twitter user_id.

    The AMQP chain of functions is:

        1. twitter/twitter.get.get_followers (replies to: 2 with next reply to: 3)
        2. twitter/twitter.get.get_followees (replies to: 3 with next reply to: 4)
        3. twitter/twitter.compute.get_friends (replies to: 4 with next reply to: None)
        4. twitter/twitter.compute.save_friends (replies to: final_reply_to/None with next reply to: None)

    """
    try:
        kx = u""  # uuid4().hex
        correlation_id = shorten_key('twitter_refresh_friends:%s:%s' %
                                     (twitter_id, kx))
        ds = DataStorage()
        val = ds[correlation_id]
        if val is not None:
            if (time.time() - val['timestamp']) > THRESHOLD_SECONDS:
                del ds[correlation_id]  # clear out zombie data
            else:
                _log.debug(
                    "Another worker is refreshing friends for twitter_id %s",
                    twitter_id)
                return
        ds[correlation_id] = {'timestamp': time.time()}
        app_headers = {
            'twitter_id': twitter_id,
            'access_token': access_token,
        }
        if extra_headers:
            app_headers.update(extra_headers)
        msg = aq.Message('',
                         delivery_mode=_DELIVERY_MODE,
                         correlation_id=correlation_id,
                         application_headers=app_headers,
                         reply_to='twitter/twitter.get.get_followees')
        q = queue or GetQ(bind_queue=False)
        q.send(msg, q.exchange_name, 'twitter.get.get_followers')
        ds.close()
        _log.debug("Friend refresh initiated for twitter_id %s", twitter_id)
    except Exception, e:
        _log.debug("Could not refresh friends for twitter_id %s", twitter_id)
        _log.exception(e)
Пример #2
0
def send_event_reminder(reminder_dict, queue=None, email_type='reminder'):
    """Send upcoming event reminders to a user"""
    try:
        user_profile_id = reminder_dict['attendee_profile_id']
        msg = aq.Message(
            reminder_dict,
            content_type='application/json',
            delivery_mode=_DELIVERY_MODE,
            application_headers={},
        )
        q = queue or EventsQ(bind_queue=False)
        q.send(msg, q.exchange_name, 'signal.events.send_event_reminder')
        _log.debug("Event %s initiated for user %s", email_type,
                   user_profile_id)
    except Exception, e:
        _log.debug("Could not send event %s to user %s", email_type,
                   user_profile_id)
        _log.exception(e)
Пример #3
0
def search(twitter_id,
           params,
           object_type='',
           reply_to=None,
           queue=None,
           extra_headers=None,
           high_priority=False):
    """Twitter Search"""
    try:
        q = params.get('q', u'')
        key_prefix = high_priority and u'amqp.twitter.priosearch' or u'amqp.twitter.search'
        key = shorten_key(u'%s:%s:%s:%s' %
                          (key_prefix, object_type, twitter_id, q))
        tstamp = cache.cache.get(key, None)
        if tstamp:
            _log.debug("Skipping already queued Twitter search for %s %s",
                       object_type, twitter_id)
            return  # this twitter search is already in the queue; don't requeue it
        headers = {'twitter_id': twitter_id, 'object_type': object_type}
        if extra_headers:
            headers.update(extra_headers)
        headers['cache_key'] = key
        correlation_id = uuid4().hex
        ds = DataStorage()
        ds[correlation_id] = {'timestamp': time.time()}
        msg = aq.Message(params,
                         content_type='application/json',
                         delivery_mode=_DELIVERY_MODE,
                         correlation_id=correlation_id,
                         timestamp=datetime.now(),
                         application_headers=headers,
                         reply_to=reply_to)
        q = queue or SearchQ(bind_queue=False)
        routing_key = high_priority and 'twitter.priosearch.search' or 'twitter.search.search'
        cache.cache.set(key, int(time.time()), 3600 * 5)
        q.send(msg, q.exchange_name, routing_key)
        ds.close()
        _log.debug("Twitter search initiated for twitter_id %s. High prio: %s",
                   twitter_id, high_priority)
    except Exception, e:
        _log.error(
            "Could not initiate Twitter search for twitter_id %s. High prio: %s",
            twitter_id, high_priority)
        _log.exception(e)
Пример #4
0
def build_recommended_events(user_profile_id, queue=None):
    """Refresh recommended events for the given user"""
    try:
        kx = uuid4().hex
        msg = aq.Message(
            '',
            delivery_mode=_DELIVERY_MODE,
            correlation_id=shorten_key('rec_events:%s:%s' %
                                       (user_profile_id, kx)),
            application_headers={'user_profile_id': user_profile_id},
        )
        q = queue or EventsQ(bind_queue=False)
        q.send(msg, q.exchange_name, 'signal.events.build_recommended_events')
        _log.debug("Recommended events builder initiated for user %s",
                   user_profile_id)
    except Exception, e:
        _log.debug("Could not build recommended events for user %s",
                   user_profile_id)
        _log.exception(e)
Пример #5
0
def recommend_event_to_friends(user_profile_id, event_id, queue=None):
    """Recommend an event to user's friends"""
    try:
        kx = uuid4().hex
        msg = aq.Message(
            '',
            delivery_mode=_DELIVERY_MODE,
            correlation_id=shorten_key('rec_event:%s:%s:%s' %
                                       (user_profile_id, event_id, kx)),
            application_headers={
                'user_profile_id': user_profile_id,
                'event_id': event_id
            },
        )
        q = queue or EventsQ(bind_queue=False)
        q.send(msg, q.exchange_name,
               'signal.events.recommend_event_to_friends')
        _log.debug("Recommending event %s to user %s's friends", event_id,
                   user_profile_id)
    except Exception, e:
        _log.debug("Could not recommend event %s to user %s's friends",
                   event_id, user_profile_id)
        _log.exception(e)
Пример #6
0
 def stop(self):
     from amqp import aq
     msg = aq.Message(self.QUIT_MESSAGE, delivery_mode=self.delivery_mode)
     self.channel.basic_publish(msg, self.exchange_name, routing_key=self.stop_routing_key)
     _x().debug("%s sent to %s/%s", msg.body, self.exchange_name, self.stop_routing_key)