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
Changes from 1 commit
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
Prev Previous commit
Next Next commit
simplify filters to one tag filter
d-perl committed Mar 7, 2024
commit 40b1b9a043b46d7ecd93b95eeec328de2a6579ff
6 changes: 2 additions & 4 deletions src/hyperion/external_interaction/callbacks/__main__.py
Original file line number Diff line number Diff line change
@@ -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 (
@@ -64,8 +63,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
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
from bluesky.callbacks import CallbackBase
from event_model import RunStart, RunStop

from hyperion.log import run_uid_filter
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 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
@@ -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,
@@ -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):
@@ -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:
8 changes: 4 additions & 4 deletions tests/unit_tests/hyperion/test_log/test_log.py
Original file line number Diff line number Diff line change
@@ -94,16 +94,16 @@ def test_messages_are_tagged_with_run_uid(clear_and_mock_loggers, RE):
@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]