Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

#1132 Remove need for metadata tag for logs #1233

Merged
merged 3 commits into from
Mar 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/hyperion/experiment_plans/flyscan_xray_centre_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
)
from hyperion.log import LOGGER
from hyperion.parameters import external_parameters
from hyperion.parameters.constants import CONST, SET_LOG_UID_TAG
from hyperion.parameters.constants import CONST
from hyperion.tracing import TRACER
from hyperion.utils.aperturescatterguard import (
load_default_aperture_scatterguard_positions_if_unset,
Expand Down Expand Up @@ -348,7 +348,6 @@ def flyscan_xray_centre(
md={
"subplan_name": CONST.PLAN.GRIDSCAN_OUTER,
CONST.TRIGGER.ZOCALO: CONST.PLAN.DO_FGS,
SET_LOG_UID_TAG: True,
"hyperion_internal_parameters": parameters.json(),
"activate_callbacks": [
"GridscanISPyBCallback",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
)
from hyperion.log import LOGGER
from hyperion.parameters import external_parameters
from hyperion.parameters.constants import CONST, SET_LOG_UID_TAG
from hyperion.parameters.constants import CONST
from hyperion.tracing import TRACER
from hyperion.utils.context import device_composite_from_context, setup_context

Expand Down Expand Up @@ -274,7 +274,6 @@ def panda_flyscan_xray_centre(
md={
"subplan_name": CONST.PLAN.GRIDSCAN_OUTER,
CONST.TRIGGER.ZOCALO: CONST.PLAN.DO_FGS,
SET_LOG_UID_TAG: True,
"hyperion_internal_parameters": parameters.json(),
"activate_callbacks": [
"GridscanISPyBCallback",
Expand Down
3 changes: 1 addition & 2 deletions src/hyperion/experiment_plans/rotation_scan_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
setup_zebra_for_rotation,
)
from hyperion.log import LOGGER
from hyperion.parameters.constants import CONST, SET_LOG_UID_TAG
from hyperion.parameters.constants import CONST
from hyperion.parameters.plan_specific.rotation_scan_internal_params import (
RotationScanParams,
)
Expand Down Expand Up @@ -258,7 +258,6 @@ def rotation_scan(composite: RotationScanComposite, parameters: Any) -> MsgGener
md={
"subplan_name": CONST.PLAN.ROTATION_OUTER,
CONST.TRIGGER.ZOCALO: CONST.PLAN.ROTATION_MAIN,
SET_LOG_UID_TAG: True,
"hyperion_internal_parameters": parameters.json(),
"activate_callbacks": [
"RotationISPyBCallback",
Expand Down
6 changes: 2 additions & 4 deletions src/hyperion/external_interaction/callbacks/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@
ISPYB_LOGGER,
NEXUS_LOGGER,
_get_logging_dir,
dc_group_id_filter,
run_uid_filter,
tag_filter,
)
from hyperion.parameters.cli import parse_callback_dev_mode_arg
from hyperion.parameters.constants import CONST
Expand Down Expand Up @@ -62,8 +61,7 @@ def setup_logging(dev_mode: bool):
dev_mode,
error_log_buffer_lines=ERROR_LOG_BUFFER_LINES,
)
handlers["graylog_handler"].addFilter(dc_group_id_filter)
handlers["graylog_handler"].addFilter(run_uid_filter)
handlers["graylog_handler"].addFilter(tag_filter)
log_info(f"Loggers initialised with dev_mode={dev_mode}")
nexgen_logger = logging.getLogger("nexgen")
nexgen_logger.parent = NEXUS_LOGGER
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
from bluesky.callbacks import CallbackBase
from event_model import RunStart, RunStop

from hyperion.log import run_uid_filter
from hyperion.parameters.constants import SET_LOG_UID_TAG
from hyperion.log import set_uid_tag


class LogUidTaggingCallback(CallbackBase):
def __init__(self) -> None:
"""Sets the logging filter to add the outermost run uid to graylog messages"""
self.run_uid = None

def start(self, doc: RunStart):
if doc.get(SET_LOG_UID_TAG):
if self.run_uid is None:
self.run_uid = doc.get("uid")
run_uid_filter.run_uid = self.run_uid
set_uid_tag(self.run_uid)

def stop(self, doc: RunStop):
if doc.get("run_start") == self.run_uid:
self.run_uid = None
run_uid_filter.run_uid = None
set_uid_tag(None)
27 changes: 9 additions & 18 deletions src/hyperion/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from os import environ
from pathlib import Path
from typing import Optional
from uuid import uuid4

from dodal.log import (
ERROR_LOG_BUFFER_LINES,
Expand All @@ -24,36 +23,29 @@
ALL_LOGGERS = [LOGGER, ISPYB_LOGGER, NEXUS_LOGGER]


class DCGIDFilter(logging.Filter):
class ExperimentMetadataTagFilter(logging.Filter):
dc_group_id: Optional[str] = None
run_uid: Optional[str] = None

def filter(self, record):
if self.dc_group_id:
record.dc_group_id = self.dc_group_id
return True


class RunUIDFilter(logging.Filter):
run_uid: Optional[str] = None

def filter(self, record):
if self.run_uid:
record.run_uid = self.run_uid
return True

def create_and_set_new(self) -> str:
self.run_uid = str(uuid4())
return self.run_uid


dc_group_id_filter = DCGIDFilter()
run_uid_filter = RunUIDFilter()
tag_filter = ExperimentMetadataTagFilter()


def set_dcgid_tag(dcgid):
"""Set the datacollection group id as a tag on all subsequent log messages.
Setting to None will remove the tag."""
dc_group_id_filter.dc_group_id = dcgid
tag_filter.dc_group_id = dcgid


def set_uid_tag(uid):
tag_filter.run_uid = uid


def do_default_logging_setup(dev_mode=False):
Expand All @@ -65,8 +57,7 @@ def do_default_logging_setup(dev_mode=False):
ERROR_LOG_BUFFER_LINES,
)
integrate_bluesky_and_ophyd_logging(dodal_logger, handlers)
handlers["graylog_handler"].addFilter(dc_group_id_filter)
handlers["graylog_handler"].addFilter(run_uid_filter)
handlers["graylog_handler"].addFilter(tag_filter)


def _get_logging_dir() -> Path:
Expand Down
3 changes: 0 additions & 3 deletions src/hyperion/parameters/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,6 @@ class HyperionConstants:
CONST = HyperionConstants()


SET_LOG_UID_TAG = "set_log_uid_tag"


class Actions(Enum):
START = "start"
STOP = "stop"
Expand Down
15 changes: 5 additions & 10 deletions tests/unit_tests/hyperion/test_log/test_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from hyperion.external_interaction.callbacks.log_uid_tag_callback import (
LogUidTaggingCallback,
)
from hyperion.parameters.constants import SET_LOG_UID_TAG

from .conftest import _destroy_loggers

Expand Down Expand Up @@ -92,23 +91,19 @@ def test_messages_are_tagged_with_run_uid(clear_and_mock_loggers, RE):
test_run_uid = None
logger = log.LOGGER

@bpp.run_decorator(
md={
SET_LOG_UID_TAG: True,
}
)
@bpp.run_decorator()
def test_plan():
yield from bps.sleep(0)
assert log.run_uid_filter.run_uid is not None
assert log.tag_filter.run_uid is not None
nonlocal test_run_uid
test_run_uid = log.run_uid_filter.run_uid
test_run_uid = log.tag_filter.run_uid
logger.info("test_hyperion")
logger.info("test_hyperion")
yield from bps.sleep(0)

assert log.run_uid_filter.run_uid is None
assert log.tag_filter.run_uid is None
RE(test_plan())
assert log.run_uid_filter.run_uid is None
assert log.tag_filter.run_uid is None

graylog_calls_in_plan = [
c.args[0]
Expand Down
Loading