优化配置stop_on_error(调度执行发生错误是否终止执行)的判断方式
This commit is contained in:
parent
b387a4466c
commit
dbb04b70de
|
@ -75,12 +75,15 @@ class AbstractDispatcher(ABC):
|
||||||
session['project_id'] = project_id
|
session['project_id'] = project_id
|
||||||
return
|
return
|
||||||
# 下面是对参与调度的元素进行处理
|
# 下面是对参与调度的元素进行处理
|
||||||
|
stop_on_error = True # 调度执行发生错误时终止执行
|
||||||
if isinstance(element, Project):
|
if isinstance(element, Project):
|
||||||
self.element_type = ELEMENT_TYPE.PROJECT
|
self.element_type = ELEMENT_TYPE.PROJECT
|
||||||
project_id = element.id
|
project_id = element.id
|
||||||
|
stop_on_error = element.project_advanced_configuration.stop_on_error
|
||||||
elif isinstance(element, Module):
|
elif isinstance(element, Module):
|
||||||
self.element_type = ELEMENT_TYPE.MODULE
|
self.element_type = ELEMENT_TYPE.MODULE
|
||||||
project_id = element.project.id
|
project_id = element.project.id
|
||||||
|
stop_on_error = element.project.project_advanced_configuration.stop_on_error
|
||||||
elif isinstance(element, Scene):
|
elif isinstance(element, Scene):
|
||||||
self.element_type = ELEMENT_TYPE.SCENE
|
self.element_type = ELEMENT_TYPE.SCENE
|
||||||
project_id = element.module.project.id
|
project_id = element.module.project.id
|
||||||
|
@ -109,6 +112,7 @@ class AbstractDispatcher(ABC):
|
||||||
self.dispatcher = Dispatcher.add(element_type=self.trigger_element_type, element_id=element.id)
|
self.dispatcher = Dispatcher.add(element_type=self.trigger_element_type, element_id=element.id)
|
||||||
self.dispatcher.update_status(status=DISPATCHER_STATUS.RUNNING)
|
self.dispatcher.update_status(status=DISPATCHER_STATUS.RUNNING)
|
||||||
self.dispatcher.end_type = DISPATCHER_END_TYPE.SUCCESS # 标识调度终止类型
|
self.dispatcher.end_type = DISPATCHER_END_TYPE.SUCCESS # 标识调度终止类型
|
||||||
|
self.dispatcher.stop_on_error = stop_on_error # 调度执行发生错误时终止执行
|
||||||
# 实例化调度日志dispatcher_logger
|
# 实例化调度日志dispatcher_logger
|
||||||
self.dispatcher_logger = DispatcherLogger(use_memory_string_handler=True,
|
self.dispatcher_logger = DispatcherLogger(use_memory_string_handler=True,
|
||||||
use_dispatcher_log_db_handler=True,
|
use_dispatcher_log_db_handler=True,
|
||||||
|
@ -119,6 +123,7 @@ class AbstractDispatcher(ABC):
|
||||||
emit_dispatcher_start(id=self.dispatcher.id, type=self.trigger_element_type, report_id=report.id)
|
emit_dispatcher_start(id=self.dispatcher.id, type=self.trigger_element_type, report_id=report.id)
|
||||||
# 调度预处理
|
# 调度预处理
|
||||||
self._dispatcher_set_up()
|
self._dispatcher_set_up()
|
||||||
|
|
||||||
# 创建一条调度子数据
|
# 创建一条调度子数据
|
||||||
if self.element_type in [ELEMENT_TYPE.PROJECT, ELEMENT_TYPE.MODULE, ELEMENT_TYPE.SCENE]:
|
if self.element_type in [ELEMENT_TYPE.PROJECT, ELEMENT_TYPE.MODULE, ELEMENT_TYPE.SCENE]:
|
||||||
# 元素类型为Project、Module、Scene时会在构造函数中直接创建调度子数据。而元素类型Case/Tool/LogicController是在Scene.execute()方法中创建
|
# 元素类型为Project、Module、Scene时会在构造函数中直接创建调度子数据。而元素类型Case/Tool/LogicController是在Scene.execute()方法中创建
|
||||||
|
@ -191,7 +196,7 @@ class AbstractDispatcher(ABC):
|
||||||
else:
|
else:
|
||||||
self.dispatcher_logger.logger.error('执行异常: %s' % e)
|
self.dispatcher_logger.logger.error('执行异常: %s' % e)
|
||||||
self.dispatcher_logger.logger.error(traceback.format_exc())
|
self.dispatcher_logger.logger.error(traceback.format_exc())
|
||||||
if self.dispatcher_type != DISPATCHER_TYPE.DEBUG:
|
if self.dispatcher_type != DISPATCHER_TYPE.DEBUG and self.dispatcher.stop_on_error:
|
||||||
self.dispatcher.update_status(status=DISPATCHER_STATUS.STOPPED)
|
self.dispatcher.update_status(status=DISPATCHER_STATUS.STOPPED)
|
||||||
self.dispatcher.end_type = DISPATCHER_END_TYPE.ERROR # 标识调度终止类型
|
self.dispatcher.end_type = DISPATCHER_END_TYPE.ERROR # 标识调度终止类型
|
||||||
raise e
|
raise e
|
||||||
|
@ -652,9 +657,6 @@ class SceneDispatcher(AbstractSceneDispatcher):
|
||||||
# 场景组件
|
# 场景组件
|
||||||
self.scene = scene
|
self.scene = scene
|
||||||
|
|
||||||
# 是否发生异常时终止执行
|
|
||||||
self.stop_on_error = self.scene.module.project.project_advanced_configuration.stop_on_error
|
|
||||||
|
|
||||||
# 标识组件执行结果
|
# 标识组件执行结果
|
||||||
self.element_execute_result = ''
|
self.element_execute_result = ''
|
||||||
|
|
||||||
|
@ -677,14 +679,10 @@ class SceneDispatcher(AbstractSceneDispatcher):
|
||||||
else:
|
else:
|
||||||
self.element_execute_result = REPORT_RESULT.ERROR
|
self.element_execute_result = REPORT_RESULT.ERROR
|
||||||
# 如果配置了执行错误时不终止,则不向上抛出异常
|
# 如果配置了执行错误时不终止,则不向上抛出异常
|
||||||
if self.stop_on_error:
|
if self.dispatcher.stop_on_error:
|
||||||
raise e
|
raise e
|
||||||
else:
|
else:
|
||||||
# 在dispatcher.run()中发生异常会将其置为ABORT,因此这里需要重置为SUCCESS
|
pass
|
||||||
# 表示当组件发生错误但继续执行时调度结束类型不更新(初始就是SUCCESS)
|
|
||||||
self.dispatcher.end_type = DISPATCHER_END_TYPE.SUCCESS
|
|
||||||
# 和上面同理,当继续执行时,重置调度状态为RUNNING(初始就是RUNNING)
|
|
||||||
self.dispatcher.update_status(status=DISPATCHER_STATUS.RUNNING)
|
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
finally:
|
finally:
|
||||||
|
|
|
@ -3074,6 +3074,7 @@ class Dispatcher(db.Model):
|
||||||
report = db.relationship('Report', uselist=False, back_populates='dispatcher', cascade='all')
|
report = db.relationship('Report', uselist=False, back_populates='dispatcher', cascade='all')
|
||||||
|
|
||||||
end_type = '' # 调度结束类型 DISPATCHER_END_TYPE, 暂时不需要将其作为表字段使用,而是作为实例属性使用便于在调度过程中标识
|
end_type = '' # 调度结束类型 DISPATCHER_END_TYPE, 暂时不需要将其作为表字段使用,而是作为实例属性使用便于在调度过程中标识
|
||||||
|
stop_on_error = True # 调度执行发生错误时终止执行,与项目配置ProjectAdvancedConfiguration.stop_on_error一致
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def add(cls, element_type, element_id):
|
def add(cls, element_type, element_id):
|
||||||
|
|
Loading…
Reference in New Issue