Beispiel #1
0
    def process_queue(self):
        """
            Process the event queue in batches
            Events status are going to be updated in Datastore

            TODO: Implement a priority mechanism, and a relation between events
            so all events from a single Invite are related under the same bucket
            The queue will only be stopped for that invite,
            and will continue for the other invites, and it's events

            For now, the whole queue will be stopped if one event fails.
        """
        q = taskqueue.Queue(QUEUE_NAME)

        event_tasks = q.lease_tasks(10, 50)
        delete_tasks = []

        for event_task in event_tasks:
            event_id = event_task.payload

            logging.info("Processing EventId: %s" % event_id)

            event = Event.get_by_unique_id(event_id)

            if event is None or event.skip_event():
                logging.info(
                    "Task will not retry"
                    "Either the event is nonexistent or it reached MAX retries"
                )
                delete_tasks.append(event_task)
                continue

            #Everything below will mean event.retries ++
            event.retries += 1

            if event.hold_event():
                logging.info(
                    "Event will be hold, because higher priority event, has to be processed"
                )
                event.status = EventStatus.FAILED
            else:
                try:
                    logging.info("Event URL: %s" % event.endpoint)
                    logging.info("This is going to be sent: ")
                    logging.info(event.payload)

                    self._make_request(event)

                    event.status = EventStatus.SENT
                    delete_tasks.append(event_task)
                except Exception, e:
                    logging.exception(e)
                    event.status = EventStatus.FAILED

            event.put()

            if event.status == EventStatus.FAILED:
                #We always break, then retry, events are considered blockers
                break
Beispiel #2
0
    def process_queue(self):
        """
            Process the event queue in batches
            Events status are going to be updated in Datastore

            TODO: Implement a priority mechanism, and a relation between events
            so all events from a single Invite are related under the same bucket
            The queue will only be stopped for that invite,
            and will continue for the other invites, and it's events

            For now, the whole queue will be stopped if one event fails.
        """
        q = taskqueue.Queue(QUEUE_NAME)

        event_tasks = q.lease_tasks(10, 50)
        delete_tasks = []

        for event_task in event_tasks:
            event_id = event_task.payload

            logging.info("Processing EventId: %s" % event_id)

            event = Event.get_by_unique_id(event_id)

            if event is None or event.skip_event():
                logging.info(
                    "Task will not retry"
                    "Either the event is nonexistent or it reached MAX retries"
                )
                delete_tasks.append(event_task)
                continue

            #Everything below will mean event.retries ++
            event.retries += 1

            if event.hold_event():
                logging.info(
                    "Event will be hold, because higher priority event, has to be processed"
                )
                event.status = EventStatus.FAILED
            else:
                try:
                    logging.info("Event URL: %s" % event.endpoint)
                    logging.info("This is going to be sent: ")
                    logging.info(event.payload)

                    self._make_request(event)

                    event.status = EventStatus.SENT
                    delete_tasks.append(event_task)
                except Exception, e:
                    logging.exception(e)
                    event.status = EventStatus.FAILED

            event.put()

            if event.status == EventStatus.FAILED:
                #We always break, then retry, events are considered blockers
                break