def test_workflow() -> Workflow: return Workflow( TaskDescriptorId("test_workflow"), "Speakable name of workflow", [ Step("start", PerformAction("start_collect"), timedelta(seconds=10)), Step("act", PerformAction("collect"), timedelta(seconds=10)), Step("done", PerformAction("collect_done"), timedelta(seconds=10), StepErrorBehaviour.Stop), ], [EventTrigger("start me up"), TimeTrigger("1 1 1 1 1")], )
def test_eq() -> None: s1 = Step("a", PerformAction("a"), timedelta()) s2 = Step("a", WaitForEvent("a", {"foo": "bla"}), timedelta()) s3 = Step("a", EmitEvent(Event("a", {"a": "b"})), timedelta()) s4 = Step("a", ExecuteCommand("echo hello"), timedelta()) assert s1 == Step("a", PerformAction("a"), timedelta()) assert s2 == Step("a", WaitForEvent("a", {"foo": "bla"}), timedelta()) assert s3 == Step("a", EmitEvent(Event("a", {"a": "b"})), timedelta()) assert s4 == Step("a", ExecuteCommand("echo hello"), timedelta()) trigger = [EventTrigger("start me up")] assert Workflow("a", "a", [s1, s2, s3, s4], trigger) == Workflow("a", "a", [s1, s2, s3, s4], trigger)
def test_workflow() -> Workflow: return Workflow( TaskDescriptorId("test_workflow"), "Speakable name of workflow", [ Step("start", PerformAction("start_collect"), timedelta(seconds=10)), Step("wait", WaitForEvent("godot", {"a": 1}), timedelta(seconds=10)), Step("emit_event", EmitEvent(Event("hello", {"a": 1})), timedelta(seconds=10)), Step("collect", PerformAction("collect"), timedelta(seconds=10)), Step("done", PerformAction("collect_done"), timedelta(seconds=10), StepErrorBehaviour.Stop), ], [EventTrigger("start me up")], )
def test_marshalling_step() -> None: roundtrip(Step("test", PerformAction("test"))) roundtrip(Step("test", WaitForEvent("test"), timedelta(seconds=19), StepErrorBehaviour.Stop))
def test_marshalling_step_action() -> None: roundtrip(PerformAction("test")) roundtrip(EmitEvent(Event("test", {"foo": "hello"}))) roundtrip(WaitForEvent("test", {"foo": "hello"})) roundtrip(ExecuteCommand("help"))
def known_workflows() -> List[Workflow]: collect_steps = [ Step("pre_collect", PerformAction("pre_collect"), timedelta(seconds=10)), Step("collect", PerformAction("collect"), timedelta(seconds=10)), Step("post_collect", PerformAction("post_collect"), timedelta(seconds=10)), ] cleanup_steps = [ Step("pre_cleanup_plan", PerformAction("pre_cleanup_plan"), timedelta(seconds=10)), Step("cleanup_plan", PerformAction("cleanup_plan"), timedelta(seconds=10)), Step("post_cleanup_plan", PerformAction("post_cleanup_plan"), timedelta(seconds=10)), Step("pre_cleanup", PerformAction("pre_cleanup"), timedelta(seconds=10)), Step("cleanup", PerformAction("cleanup"), timedelta(seconds=10)), Step("post_cleanup", PerformAction("post_cleanup"), timedelta(seconds=10)), ] metrics_steps = [ Step("pre_generate_metrics", PerformAction("pre_generate_metrics"), timedelta(seconds=10)), Step("generate_metrics", PerformAction("generate_metrics"), timedelta(seconds=10)), Step("post_generate_metrics", PerformAction("post_generate_metrics"), timedelta(seconds=10)), ] return [ Workflow( uid="collect", name="collect", steps=collect_steps + metrics_steps, triggers=[EventTrigger("start_collect_workflow")], on_surpass=TaskSurpassBehaviour.Wait, ), Workflow( uid="cleanup", name="cleanup", steps=cleanup_steps + metrics_steps, triggers=[EventTrigger("start_cleanup_workflow")], on_surpass=TaskSurpassBehaviour.Wait, ), Workflow( uid="metrics", name="metrics", steps=metrics_steps, triggers=[EventTrigger("start_metrics_workflow")], on_surpass=TaskSurpassBehaviour.Wait, ), Workflow( uid="collect_and_cleanup", name="collect_and_cleanup", steps=collect_steps + cleanup_steps + metrics_steps, triggers=[ EventTrigger("start_collect_and_cleanup_workflow"), TimeTrigger("0 * * * *") ], on_surpass=TaskSurpassBehaviour.Wait, ), ]
def known_workflows(config: CoreConfig) -> List[Workflow]: def workflow(name: TaskDescriptorId, steps: List[Step]) -> Workflow: trigger: List[Trigger] = [EventTrigger(f"start_{name}_workflow")] wf_config = config.workflows.get(name) if wf_config: trigger.append(TimeTrigger(wf_config.schedule)) return Workflow(uid=name, name=name, steps=steps, triggers=trigger, on_surpass=TaskSurpassBehaviour.Wait) collect_steps = [ Step("pre_collect", PerformAction("pre_collect"), timedelta(seconds=10)), Step("collect", PerformAction("collect"), timedelta(seconds=10)), Step("merge_outer_edges", PerformAction("merge_outer_edges"), timedelta(seconds=10)), Step("post_collect", PerformAction("post_collect"), timedelta(seconds=10)), ] cleanup_steps = [ Step("pre_cleanup_plan", PerformAction("pre_cleanup_plan"), timedelta(seconds=10)), Step("cleanup_plan", PerformAction("cleanup_plan"), timedelta(seconds=10)), Step("post_cleanup_plan", PerformAction("post_cleanup_plan"), timedelta(seconds=10)), Step("pre_cleanup", PerformAction("pre_cleanup"), timedelta(seconds=10)), Step("cleanup", PerformAction("cleanup"), timedelta(seconds=10)), Step("post_cleanup", PerformAction("post_cleanup"), timedelta(seconds=10)), ] metrics_steps = [ Step("pre_generate_metrics", PerformAction("pre_generate_metrics"), timedelta(seconds=10)), Step("generate_metrics", PerformAction("generate_metrics"), timedelta(seconds=10)), Step("post_generate_metrics", PerformAction("post_generate_metrics"), timedelta(seconds=10)), ] return [ workflow(TaskDescriptorId("collect"), collect_steps + metrics_steps), workflow(TaskDescriptorId("cleanup"), cleanup_steps + metrics_steps), workflow(TaskDescriptorId("metrics"), metrics_steps), workflow(TaskDescriptorId("collect_and_cleanup"), collect_steps + cleanup_steps + metrics_steps), ]