def METHOD_NAME(self, msg: Union[Start, Running, Exited]):
    job_name = msg.job.name()
    event = node_status_builder(
        status="JOB_START",
        experiment_id=self._experiment_id,
        ensemble_id=self._ens_id,
        realization_id=self._real_id,
        step_id=self._step_id,
        job_id=msg.job.index,
    )
    if isinstance(msg, Start):
        logger.debug(f"Job {job_name} was successfully started")
        event.job.status = JOB_START
        event.job.stdout = str(Path(msg.job.std_out).resolve())
        event.job.stderr = str(Path(msg.job.std_err).resolve())
        self._dump_event(event)
        if not msg.success():
            logger.error(f"Job {job_name} FAILED to start")
            event.job.status = JOB_FAILURE
            event.job.error = msg.error_message
            self._dump_event(event)
    elif isinstance(msg, Exited):
        if msg.success():
            logger.debug(f"Job {job_name} exited successfully")
            event.job.status = JOB_SUCCESS
        else:
            logger.error(
                _JOB_EXIT_FAILED_STRING.format(
                    job_name=msg.job.name(),
                    exit_code=msg.exit_code,
                    error_message=msg.error_message,
                )
            )
            event.job.status = JOB_FAILURE
            event.job.exit_code = msg.exit_code
            event.job.error = msg.error_message
        self._dump_event(event)
    elif isinstance(msg, Running):
        logger.debug(f"{job_name} job is running")
        event.job.status = JOB_RUNNING
        event.job.current_memory = msg.current_memory_usage
        event.job.max_memory = msg.max_memory_usage
        self._dump_event(event)