예제 #1
0
 def _email_error(self, task, formatted_traceback, subject, headline):
     formatted_subject = subject.format(task=task, host=self.host)
     formatted_headline = headline.format(task=task, host=self.host)
     command = subprocess.list2cmdline(sys.argv)
     message = notifications.format_task_error(
         formatted_headline, task, command, formatted_traceback)
     notifications.send_error_email(formatted_subject, message, task.owner_email)
예제 #2
0
파일: worker.py 프로젝트: belevtsoff/luigi
    def _email_complete_error(self, task, formatted_traceback):
        # like logger.exception but with WARNING level
        subject = "Luigi: {task} failed scheduling. Host: {host}".format(task=task, host=self.host)
        headline = "Will not schedule task or any dependencies due to error in complete() method"

        message = notifications.format_task_error(headline, task, formatted_traceback)
        notifications.send_error_email(subject, message, task.owner_email)
예제 #3
0
파일: worker.py 프로젝트: nirmeshk/luigi
    def run(self):
        logger.info('[pid %s] Worker %s running   %s', os.getpid(), self.worker_id, self.task.task_id)

        if self.random_seed:
            # Need to have different random seeds if running in separate processes
            random.seed((os.getpid(), time.time()))

        status = FAILED
        expl = ''
        missing = []
        new_deps = []
        try:
            # Verify that all the tasks are fulfilled!
            missing = [dep.task_id for dep in self.task.deps() if not dep.complete()]
            if missing:
                deps = 'dependency' if len(missing) == 1 else 'dependencies'
                raise RuntimeError('Unfulfilled %s at run time: %s' % (deps, ', '.join(missing)))
            self.task.trigger_event(Event.START, self.task)
            t0 = time.time()
            status = None

            if self.task.run == NotImplemented:
                # External task
                # TODO(erikbern): We should check for task completeness after non-external tasks too!
                # This will resolve #814 and make things a lot more consistent
                status = DONE if self.task.complete() else FAILED
            else:
                new_deps = self._run_get_new_deps()
                status = DONE if not new_deps else SUSPENDED

            if status == SUSPENDED:
                logger.info(
                    '[pid %s] Worker %s new requirements      %s',
                    os.getpid(), self.worker_id, self.task.task_id)

            elif status == DONE:
                self.task.trigger_event(
                    Event.PROCESSING_TIME, self.task, time.time() - t0)
                expl = json.dumps(self.task.on_success())
                logger.info('[pid %s] Worker %s done      %s', os.getpid(),
                            self.worker_id, self.task.task_id)
                self.task.trigger_event(Event.SUCCESS, self.task)

        except KeyboardInterrupt:
            raise
        except BaseException as ex:
            status = FAILED
            logger.exception("[pid %s] Worker %s failed    %s", os.getpid(), self.worker_id, self.task)
            self.task.trigger_event(Event.FAILURE, self.task, ex)
            subject = "Luigi: %s FAILED" % self.task

            raw_error_message = self.task.on_failure(ex)
            notification_error_message = notifications.wrap_traceback(raw_error_message)
            expl = json.dumps(raw_error_message)
            formatted_error_message = notifications.format_task_error(subject, self.task,
                                                                      formatted_exception=notification_error_message)
            notifications.send_error_email(subject, formatted_error_message, self.task.owner_email)
        finally:
            self.result_queue.put(
                (self.task.task_id, status, expl, missing, new_deps))
예제 #4
0
파일: worker.py 프로젝트: edkurowski/luigi
 def _email_error(self, task, formatted_traceback, subject, headline):
     formatted_subject = subject.format(task=task, host=self.host)
     formatted_headline = headline.format(task=task, host=self.host)
     command = subprocess.list2cmdline(sys.argv)
     message = notifications.format_task_error(
         formatted_headline, task, command, formatted_traceback)
     notifications.send_error_email(formatted_subject, message, task.owner_email)
예제 #5
0
    def _email_complete_error(self, task, formatted_traceback):
        # like logger.exception but with WARNING level
        subject = "Luigi: {task} failed scheduling. Host: {host}".format(task=task, host=self.host)
        headline = "Will not schedule task or any dependencies due to error in complete() method"

        message = notifications.format_task_error(headline, task, formatted_traceback)
        notifications.send_error_email(subject, message, task.owner_email)
예제 #6
0
파일: worker.py 프로젝트: ryantuck/luigi
 def _send_error_notification(self, raw_error_message):
     subject = "Luigi: %s FAILED" % self.task
     notification_error_message = notifications.wrap_traceback(raw_error_message)
     formatted_error_message = notifications.format_task_error(
         subject, self.task, formatted_exception=notification_error_message
     )
     notifications.send_error_email(subject, formatted_error_message, self.task.owner_email)
예제 #7
0
    def run(self):
        logger.info('[pid %s] Worker %s running   %s', os.getpid(), self.worker_id, self.task.task_id)

        if self.random_seed:
            # Need to have different random seeds if running in separate processes
            random.seed((os.getpid(), time.time()))

        status = FAILED
        expl = ''
        missing = []
        new_deps = []
        try:
            # Verify that all the tasks are fulfilled!
            missing = [dep.task_id for dep in self.task.deps() if not dep.complete()]
            if missing:
                deps = 'dependency' if len(missing) == 1 else 'dependencies'
                raise RuntimeError('Unfulfilled %s at run time: %s' % (deps, ', '.join(missing)))
            self.task.trigger_event(Event.START, self.task)
            t0 = time.time()
            status = None

            if self.task.run == NotImplemented:
                # External task
                # TODO(erikbern): We should check for task completeness after non-external tasks too!
                # This will resolve #814 and make things a lot more consistent
                status = DONE if self.task.complete() else FAILED
            else:
                new_deps = self._run_get_new_deps()
                status = DONE if not new_deps else SUSPENDED

            if status == SUSPENDED:
                logger.info(
                    '[pid %s] Worker %s new requirements      %s',
                    os.getpid(), self.worker_id, self.task.task_id)

            elif status == DONE:
                self.task.trigger_event(
                    Event.PROCESSING_TIME, self.task, time.time() - t0)
                expl = json.dumps(self.task.on_success())
                logger.info('[pid %s] Worker %s done      %s', os.getpid(),
                            self.worker_id, self.task.task_id)
                self.task.trigger_event(Event.SUCCESS, self.task)

        except KeyboardInterrupt:
            raise
        except BaseException as ex:
            status = FAILED
            logger.exception("[pid %s] Worker %s failed    %s", os.getpid(), self.worker_id, self.task)
            self.task.trigger_event(Event.FAILURE, self.task, ex)
            subject = "Luigi: %s FAILED" % self.task

            raw_error_message = self.task.on_failure(ex)
            notification_error_message = notifications.wrap_traceback(raw_error_message)
            expl = json.dumps(raw_error_message)
            formatted_error_message = notifications.format_task_error(subject, self.task,
                                                                      formatted_exception=notification_error_message)
            notifications.send_error_email(subject, formatted_error_message, self.task.owner_email)
        finally:
            self.result_queue.put(
                (self.task.task_id, status, expl, missing, new_deps))
예제 #8
0
    def _email_unexpected_error(self, task, formatted_traceback):
        subject = "Luigi: Framework error while scheduling {task}. Host: {host}".format(
            task=task, host=self.host)
        headline = "Luigi framework error"

        message = notifications.format_task_error(headline, task,
                                                  formatted_traceback)
        notifications.send_error_email(subject, message, task.owner_email)
예제 #9
0
    def _email_dependency_error(self, task, formatted_traceback):
        subject = "Luigi: {task} failed scheduling. Host: {host}".format(
            task=task, host=self.host)
        headline = "Will not schedule task or any dependencies due to error in deps() method"

        message = notifications.format_task_error(headline, task,
                                                  formatted_traceback)
        notifications.send_error_email(subject, message, task.owner_email)
예제 #10
0
 def _send_error_notification(self, raw_error_message):
     subject = "Luigi: %s FAILED" % self.task
     notification_error_message = notifications.wrap_traceback(
         raw_error_message)
     formatted_error_message = notifications.format_task_error(
         subject, self.task, formatted_exception=notification_error_message)
     notifications.send_error_email(subject, formatted_error_message,
                                    self.task.owner_email)
예제 #11
0
파일: worker.py 프로젝트: benjixx/luigi
 def _email_error(self, task, formatted_traceback, subject, headline):
     formatted_subject = subject.format(task=task, host=self.host)
     message = notifications.format_task_error(headline, task, formatted_traceback)
     notifications.send_error_email(formatted_subject, message, task.owner_email)
예제 #12
0
파일: worker.py 프로젝트: belevtsoff/luigi
    def _email_unexpected_error(self, task, formatted_traceback):
        subject = "Luigi: Framework error while scheduling {task}. Host: {host}".format(task=task, host=self.host)
        headline = "Luigi framework error"

        message = notifications.format_task_error(headline, task, formatted_traceback)
        notifications.send_error_email(subject, message, task.owner_email)
예제 #13
0
파일: worker.py 프로젝트: hsaputra/luigi
    def _email_dependency_error(self, task, formatted_traceback):
        subject = "Luigi: {task} failed scheduling. Host: {host}".format(task=task, host=self.host)
        headline = "Will not schedule task or any dependencies due to error in deps() method"

        message = notifications.format_task_error(headline, task, formatted_traceback)
        notifications.send_error_email(subject, message, task.owner_email)
예제 #14
0
파일: worker.py 프로젝트: sunchen009/luigi
 def _email_error(self, task, formatted_traceback, subject, headline):
     formatted_subject = subject.format(task=task, host=self.host)
     message = notifications.format_task_error(headline, task,
                                               formatted_traceback)
     notifications.send_error_email(formatted_subject, message,
                                    task.owner_email)