|
8 | 8 | from contextlib import suppress
|
9 | 9 | from enum import StrEnum
|
10 | 10 | from pathlib import Path
|
11 |
| -from typing import TYPE_CHECKING, Any |
| 11 | +from typing import TYPE_CHECKING |
12 | 12 |
|
13 | 13 | from lxml import etree
|
14 | 14 | from opentelemetry.trace import Status, StatusCode
|
15 | 15 |
|
16 |
| -from _ert.events import Id, RealizationTimeout, event_from_dict |
| 16 | +from _ert.events import ( |
| 17 | + RealizationEvent, |
| 18 | + RealizationFailed, |
| 19 | + RealizationPending, |
| 20 | + RealizationResubmit, |
| 21 | + RealizationRunning, |
| 22 | + RealizationSuccess, |
| 23 | + RealizationTimeout, |
| 24 | + RealizationWaiting, |
| 25 | +) |
17 | 26 | from ert.callbacks import forward_model_ok
|
18 | 27 | from ert.config import ForwardModelStep
|
19 | 28 | from ert.constant_filenames import ERROR_file
|
@@ -43,19 +52,6 @@ class JobState(StrEnum):
|
43 | 52 | ABORTED = "ABORTED"
|
44 | 53 |
|
45 | 54 |
|
46 |
| -_queue_jobstate_event_type = { |
47 |
| - JobState.WAITING: Id.REALIZATION_WAITING, |
48 |
| - JobState.SUBMITTING: Id.REALIZATION_WAITING, |
49 |
| - JobState.RESUBMITTING: Id.REALIZATION_RESUBMIT, |
50 |
| - JobState.PENDING: Id.REALIZATION_PENDING, |
51 |
| - JobState.RUNNING: Id.REALIZATION_RUNNING, |
52 |
| - JobState.ABORTING: Id.REALIZATION_FAILURE, |
53 |
| - JobState.COMPLETED: Id.REALIZATION_SUCCESS, |
54 |
| - JobState.FAILED: Id.REALIZATION_FAILURE, |
55 |
| - JobState.ABORTED: Id.REALIZATION_FAILURE, |
56 |
| -} |
57 |
| - |
58 |
| - |
59 | 55 | class Job:
|
60 | 56 | """Handle to a single job scheduler job.
|
61 | 57 |
|
@@ -310,28 +306,37 @@ async def _handle_aborted(self) -> None:
|
310 | 306 | log_info_from_exit_file(Path(self.real.run_arg.runpath) / ERROR_file)
|
311 | 307 |
|
312 | 308 | async def _send(self, state: JobState) -> None:
|
313 |
| - event_dict: dict[str, Any] = { |
314 |
| - "ensemble": self._scheduler._ens_id, |
315 |
| - "event_type": _queue_jobstate_event_type[state], |
316 |
| - "queue_event_type": state, |
317 |
| - "real": str(self.iens), |
318 |
| - "exec_hosts": self.exec_hosts, |
319 |
| - } |
320 |
| - self.state = state |
321 |
| - if state == JobState.FAILED: |
322 |
| - event_dict["message"] = self._message |
323 |
| - await self._handle_failure() |
| 309 | + event: RealizationEvent | None = None |
| 310 | + match state: |
| 311 | + case JobState.WAITING | JobState.SUBMITTING: |
| 312 | + event = RealizationWaiting(real=str(self.iens)) |
| 313 | + case JobState.RESUBMITTING: |
| 314 | + event = RealizationResubmit(real=str(self.iens)) |
| 315 | + case JobState.PENDING: |
| 316 | + event = RealizationPending(real=str(self.iens)) |
| 317 | + case JobState.RUNNING: |
| 318 | + event = RealizationRunning(real=str(self.iens)) |
| 319 | + case JobState.FAILED: |
| 320 | + event = RealizationFailed(real=str(self.iens)) |
| 321 | + event.message = self._message |
| 322 | + await self._handle_failure() |
| 323 | + case JobState.ABORTING: |
| 324 | + event = RealizationFailed(real=str(self.iens)) |
| 325 | + case JobState.ABORTED: |
| 326 | + event = RealizationFailed(real=str(self.iens)) |
| 327 | + await self._handle_aborted() |
| 328 | + case JobState.COMPLETED: |
| 329 | + event = RealizationSuccess(real=str(self.iens)) |
| 330 | + self._end_time = time.time() |
| 331 | + await self._scheduler.completed_jobs.put(self.iens) |
324 | 332 |
|
325 |
| - elif state == JobState.ABORTED: |
326 |
| - await self._handle_aborted() |
327 |
| - |
328 |
| - elif state == JobState.COMPLETED: |
329 |
| - self._end_time = time.time() |
330 |
| - await self._scheduler.completed_jobs.put(self.iens) |
331 |
| - |
332 |
| - msg = event_from_dict(event_dict) |
| 333 | + self.state = state |
| 334 | + if event is not None: |
| 335 | + event.ensemble = self._scheduler._ens_id |
| 336 | + event.queue_event_type = state |
| 337 | + event.exec_hosts = self.exec_hosts |
333 | 338 |
|
334 |
| - await self._scheduler._events.put(msg) |
| 339 | + await self._scheduler._events.put(event) |
335 | 340 |
|
336 | 341 |
|
337 | 342 | def log_info_from_exit_file(exit_file_path: Path) -> None:
|
|
0 commit comments