Skip to content

Commit f671133

Browse files
committed
wip
Signed-off-by: Yves Bastide <[email protected]>
1 parent d2674d3 commit f671133

File tree

8 files changed

+65
-9
lines changed

8 files changed

+65
-9
lines changed

simpleflow/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from .activity import Activity # NOQA
44
from .runtime import logger # NOQA
5-
from .signal import WaitForSignal # NOQA
5+
from .simpleflow_signal import WaitForSignal # NOQA
66
from .workflow import Workflow # NOQA
77

88
__version__ = "0.34.0"

simpleflow/command.py

+13
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,19 @@ def workflow_history(
453453
"external_workflows_signaling": history.external_workflows_signaling,
454454
"signaled_workflows": history.signaled_workflows,
455455
}
456+
elif mode == "cooked2":
457+
history.parse()
458+
events = {
459+
"workflow": [t for t in history.tasks if t.type == "child_workflow"],
460+
"activities": [t for t in history.tasks if t.type == "activity"],
461+
"child_workflows": history.child_workflows,
462+
"markers": history.markers,
463+
"timers": history.timers,
464+
"signals": [t for t in history.tasks if t.type == "signal"],
465+
"signal_lists": history.signal_lists,
466+
"external_workflows_signaling": history.external_workflows_signaling,
467+
"signaled_workflows": history.signaled_workflows,
468+
}
456469
else:
457470
raise NotImplementedError
458471
print(json.dumps(events, separators=(",", ":"), default=serialize_complex_object))

simpleflow/history.py

+43-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import collections
4-
from typing import TYPE_CHECKING, Callable, ClassVar
4+
from typing import TYPE_CHECKING, Callable, ClassVar, cast
55

66
import simpleflow.swf.mapper.models.history
77
from simpleflow import logger
@@ -143,6 +143,48 @@ def tasks(self):
143143
def events(self) -> list[Event]:
144144
return self._history.events
145145

146+
def get_activities_history(self) -> dict[str, dict[str, Any]]:
147+
activities: dict[str, dict[str, Any]] = {}
148+
scheduled_to_activity_id: dict[int, str] = {}
149+
event: ActivityTaskEvent | Any
150+
for event in self.events:
151+
if event.type != "ActivityTask":
152+
continue
153+
cast(ActivityTaskEvent, event)
154+
activity_id = getattr(event, "activity_id", None)
155+
if event.state == "scheduled" and activity_id not in activities:
156+
activities[activity_id] = {
157+
"id": activity_id,
158+
"name": event.activity_type["name"],
159+
"version": event.activity_type["version"],
160+
"states": [event.state],
161+
"scheduled_ids": [event.id],
162+
"scheduled_timestamps": [event.timestamp],
163+
"inputs": [event.input],
164+
"task_lists": [event.task_list["name"]],
165+
}
166+
scheduled_to_activity_id[event.id] = activity_id
167+
else:
168+
if event.state != "scheduled":
169+
scheduled_event = self.events[event.scheduled_event_id - 1]
170+
scheduled_id = scheduled_event.id
171+
activity = activities[scheduled_to_activity_id[scheduled_id]]
172+
activity["task_lists"].append(event.task_list["name"])
173+
else:
174+
activity = activities[event.activity_id]
175+
activity.setdefault("states", []).append(event.state)
176+
activity.setdefault(f"{event.state}_ids", []).append(event.id)
177+
activity.setdefault(f"{event.state}_timestamp", []).append(event.timestamp)
178+
for attr in ("identity", "result", "reason", "details"):
179+
if hasattr(event, attr):
180+
activity.setdefault(attr, []).append(getattr(event, attr))
181+
if event.state == "timed_out":
182+
activity.setdefault("timeout_types", []).append(event.timeout_type)
183+
activity.setdefault(f"{event.timeout_type}_timeouts", []).append(
184+
getattr(event, f"{event.timeout_type}_timeout")
185+
)
186+
activity.setdefault(f"{event.timeout_values}", []).append()
187+
146188
def parse_activity_event(self, events: list[Event | ActivityTaskEvent], event: ActivityTaskEvent):
147189
"""
148190
Aggregate all the attributes of an activity in a single entry.

simpleflow/local/executor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from simpleflow.base import Submittable
1111
from simpleflow.history import History
1212
from simpleflow.marker import Marker
13-
from simpleflow.signal import WaitForSignal
13+
from simpleflow.simpleflow_signal import WaitForSignal
1414
from simpleflow.swf.mapper.models.history import builder
1515
from simpleflow.task import ActivityTask, MarkerTask, SignalTask, TaskFailureContext, WorkflowTask
1616
from simpleflow.utils import format_exc, format_exc_type, issubclass_, json_dumps
File renamed without changes.

simpleflow/swf/executor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from simpleflow.base import Submittable
2020
from simpleflow.history import History
2121
from simpleflow.marker import Marker
22-
from simpleflow.signal import WaitForSignal
22+
from simpleflow.simpleflow_signal import WaitForSignal
2323
from simpleflow.swf import constants
2424
from simpleflow.swf.helpers import swf_identity
2525
from simpleflow.swf.mapper.core import ConnectedSWFObject

simpleflow/swf/mapper/models/event/task.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,23 @@ class ActivityTaskEvent(Event):
3636

3737
class ActivityTaskEventDict(TypedDict):
3838
type: str
39-
id: int
39+
id: str
4040
name: str
4141
version: str
4242
state: str
4343
scheduled_id: int
4444
scheduled_timestamp: datetime
45+
schedule_failed_timestamp: datetime | None
4546
started_id: int
4647
started_timestamp: datetime
4748
completed_id: int
48-
completed_timestamp: datetime
49+
completed_timestamp: datetime | None
4950
failed_id: int
50-
failed_timestamp: datetime
51+
failed_timestamp: datetime | None
5152
timeout_type: str
5253
timeout_value: int
5354
timed_out_id: int
54-
timed_out_timestamp: datetime
55+
timed_out_timestamp: datetime | None
5556
identity: Any
5657
input: dict
5758
task_list: str

simpleflow/workflow.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import TYPE_CHECKING
44

55
from simpleflow.base import Submittable, SubmittableContainer
6-
from simpleflow.signal import WaitForSignal
6+
from simpleflow.simpleflow_signal import WaitForSignal
77
from simpleflow.task import CancelTimerTask, TaskFailureContext, TimerTask
88

99
from . import canvas, task

0 commit comments

Comments
 (0)