Exemplo n.º 1
0
    def start(self, executor):
        from pipeline.parser import pipeline_parser
        from pipeline.engine import api
        from pipeline.utils.context import get_pipeline_context
        from pipeline.engine.models import FunctionSwitch
        if FunctionSwitch.objects.is_frozen():
            return False, 'engine has been freeze, try later please'

        with transaction.atomic():
            instance = self.__class__.objects.select_for_update().get(id=self.id)
            if instance.is_started:
                return False, 'pipeline instance already started.'
            instance.start_time = timezone.now()
            instance.is_started = True
            instance.executor = executor

            # calculate tree info
            instance.calculate_tree_info()

            pipeline_data = instance.execution_data
            parser = pipeline_parser.WebPipelineAdapter(pipeline_data)
            pipeline = parser.parser(get_pipeline_context(instance, 'instance'))

            instance.save()

        api.start_pipeline(pipeline)

        return True, {}
Exemplo n.º 2
0
def run_pipeline(pipeline_instance,
                 instance_id=None,
                 check_workers=True,
                 priority=PIPELINE_DEFAULT_PRIORITY):
    return api.start_pipeline(pipeline_instance,
                              check_workers=check_workers,
                              priority=priority)
Exemplo n.º 3
0
    def start(self, executor, check_workers=True):
        """
        启动当前流程
        @param executor: 执行者
        @param check_workers: 是否检测 worker 的状态
        @return: 执行结果
        """
        from pipeline.engine import api
        from pipeline.utils.context import get_pipeline_context
        from pipeline.engine.models import FunctionSwitch
        from pipeline.engine.core.api import workers

        if FunctionSwitch.objects.is_frozen():
            return ActionResult(result=False, message='engine has been freeze, try later please')

        if check_workers:
            try:
                if not workers():
                    return ActionResult(result=False, message='can not find celery workers, please check worker status')
            except RabbitMQConnectionError as e:
                return ActionResult(result=False, message='celery worker status check failed with message: %s, '
                                                          'check rabbitmq status please' % e.message)
            except RedisConnectionError:
                return ActionResult(result=False, message='redis connection error, check redis status please')

        with transaction.atomic():
            instance = self.__class__.objects.select_for_update().get(id=self.id)
            if instance.is_started:
                return ActionResult(result=False, message='pipeline instance already started.')
            instance.start_time = timezone.now()
            instance.is_started = True
            instance.executor = executor

            # calculate tree info
            instance.calculate_tree_info()

            pipeline_data = instance.execution_data

            try:
                parser_cls = import_string(settings.PIPELINE_PARSER_CLASS)
            except ImportError:
                return ActionResult(result=False, message='invalid parser class: %s' % settings.PIPELINE_PARSER_CLASS)

            parser = parser_cls(pipeline_data)
            pipeline = parser.parse(get_pipeline_context(instance, 'instance'))

            instance.save()

        return api.start_pipeline(pipeline, check_workers=check_workers)
Exemplo n.º 4
0
    def test_start_pipeline(self):
        process = MockPipelineProcess()
        pipeline_instance = 'pipeline_instance'
        with patch(PIPELINE_PROCESS_PREPARE_FOR_PIPELINE, MagicMock(return_value=process)):
            act_result = api.start_pipeline(pipeline_instance)

            self.assertTrue(act_result.result)

            Status.objects.prepare_for_pipeline.assert_called_once_with(pipeline_instance)

            PipelineProcess.objects.prepare_for_pipeline.assert_called_once_with(pipeline_instance)

            PipelineModel.objects.prepare_for_pipeline.assert_called_once_with(pipeline_instance, process)

            PipelineModel.objects.pipeline_ready.assert_called_once_with(process_id=process.id)
Exemplo n.º 5
0
    def start(self, executor):
        from pipeline.parser import pipeline_parser
        from pipeline.engine import api
        from pipeline.utils.context import get_pipeline_context

        with transaction.atomic():
            instance = self.__class__.objects.select_for_update().get(
                id=self.id)
            if instance.is_started:
                return False, 'pipeline instance already started.'
            instance.start_time = timezone.now()
            instance.is_started = True
            instance.executor = executor

            pipeline_data = instance.execution_data
            parser = pipeline_parser.WebPipelineAdapter(pipeline_data)
            pipeline = parser.parser(get_pipeline_context(
                instance, 'instance'))

            instance.save()

        api.start_pipeline(pipeline)

        return True, {}
Exemplo n.º 6
0
def run_pipeline(pipeline_instance, instance_id=None, check_workers=True):
    return api.start_pipeline(pipeline_instance, check_workers=check_workers)
Exemplo n.º 7
0
def run_pipeline(pipeline_instance, instance_id=None):
    return api.start_pipeline(pipeline_instance)