Example #1
0
    def set_viewed(self, viewed_date=None):
        """Set this execution as being viewed."""

        # Only set the viewed timestamp once
        if self.viewed_date:
            return None

        if not viewed_date:
            viewed_date = datetime.datetime.now()
        self.viewed_date = viewed_date
        if self.sent_date and not self.email_delay:
            self.email_delay = utils.compute_duration(self.viewed_date,
                                                      self.sent_date)
        return self.put()
Example #2
0
    def set_completed(self, completed_date=None):
        """Set the request has being completed."""

        if self.is_completed:
            return None

        # If we haven't already marked this request as being completed, set
        # the is_completed flag and compute the duration the request was in
        # progress, in seconds.

        self.is_completed = True
        if not completed_date:
            completed_date = datetime.datetime.now()
        self.completed_date = completed_date
        if self.submitted_date:
            self.duration = utils.compute_duration(self.completed_date,
                                                   self.submitted_date)
        return self.put()
Example #3
0
    def set_completed(self, action, end_date=None):
        """Set this execution as being completed."""

        # Only set the action once
        if self.action or self.end_date:
            return None

        if not isinstance(action, Action):
            raise exceptions.InternalException(
                '"%s" is not a valid Action model.' % action)

        action_ids = [step_action.id for step_action in \
                      self.get_available_actions()]

        if action.id not in action_ids:
            raise exceptions.InternalException(
                '"%s" is not a valid Action for Step "%s".' % (action,
                                                               self.step))

        self.action = action
        if not end_date:
            end_date = datetime.datetime.now()
        self.end_date = end_date
        if self.viewed_date and not self.action_delay:
            self.action_delay = utils.compute_duration(self.end_date,
                                                       self.viewed_date)
        if self.start_date and not self.duration:
            self.duration = utils.compute_duration(self.end_date,
                                                   self.start_date)

        if self.action.is_complete:
            # If the request has not yet been marked as completed, compute the
            # request duration
            self.request.set_completed()

            # Record the request in the Process statistics
            logging.info('Queuing statistics collection for Request "%s".',
                         self.request.id)
            queue = taskqueue.Queue('request-statistics')
            task = taskqueue.Task(params={'request_key': self.request.id,
                                          'process_key': self.process.id,
                                          'timestamp': time.time()})
            queue.add(task)

            # Send the completion email to the requestor
            logging.info(
                'Queuing completed email to be sent to "%s" for Request "%s".',
                self.request.requestor, self.request.id)
            task = taskqueue.Task(params={'key': self.id})
            queue = taskqueue.Queue('mail-request-complete')
            queue.add(task)

            # Send this request to any process callbacks
            tasks = []
            for callback_url in self.process.callbacks:
                task = taskqueue.Task(params={'execution_key': self.id,
                                              'callback_url': callback_url,
                                              'timestamp': time.time()})
                tasks.append(task)
            if tasks:
                queue = taskqueue.Queue('process-callback')
                queue.add(tasks)
        else:
            logging.info('Queuing step email to be sent to "%s".',
                         self.request.requestor)
            task = taskqueue.Task(params={'key': self.id})
            queue = taskqueue.Queue('mail-request-step')
            queue.add(task)

            for step_key in self.action.outgoing:
                step = Step.get(step_key)
                if step:
                    step.queue_tasks(self.request)

        return self.put()