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, {}
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)
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)
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)
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, {}
def run_pipeline(pipeline_instance, instance_id=None, check_workers=True): return api.start_pipeline(pipeline_instance, check_workers=check_workers)
def run_pipeline(pipeline_instance, instance_id=None): return api.start_pipeline(pipeline_instance)