From 371ac4d8f83fb8fb4762e6e2bd1ce726d7895a18 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Wed, 13 Nov 2024 11:54:05 +0000 Subject: [PATCH 1/3] Directly pass configuration file from Murfey security configuration to workflows transport object rather than relying on the Zocalo configuration --- src/murfey/server/__init__.py | 5 +++-- src/murfey/util/config.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/murfey/server/__init__.py b/src/murfey/server/__init__.py index 0165bf992..2dae882e9 100644 --- a/src/murfey/server/__init__.py +++ b/src/murfey/server/__init__.py @@ -283,7 +283,9 @@ def run(): LogFilter.install() zc.add_command_line_options(parser) - workflows.transport.add_command_line_options(parser, transport_argument=True) + + security_config = get_security_config() + workflows.transport.load_configuration_file(security_config.rabbitmq_credentials) args = parser.parse_args() @@ -296,7 +298,6 @@ def run(): # Set up logging now that the desired verbosity is known _set_up_logging(quiet=args.quiet, verbosity=args.verbose) - security_config = get_security_config() if not args.temporary and _transport_object: _transport_object.feedback_queue = security_config.feedback_queue rabbit_thread = Thread( diff --git a/src/murfey/util/config.py b/src/murfey/util/config.py index fc058cca8..9e4d2a867 100644 --- a/src/murfey/util/config.py +++ b/src/murfey/util/config.py @@ -82,6 +82,7 @@ def from_file(config_file_path: Path, instrument: str = "") -> Dict[str, Machine class Security(BaseModel): + rabbitmq_credentials: str murfey_db_credentials: str crypto_key: str auth_key: str = "" From b412491574a5765cdc6fba7d5f41a37f078b1bab Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Wed, 13 Nov 2024 12:11:01 +0000 Subject: [PATCH 2/3] Setup graylog logging outside of Zocalo configuration This should remove the need for the ZOCALO_CONFIG environment variable to be set when starting a Murfey server --- src/murfey/server/__init__.py | 16 ++++++++-------- src/murfey/util/config.py | 12 +++++++++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/murfey/server/__init__.py b/src/murfey/server/__init__.py index 2dae882e9..766edcc5a 100644 --- a/src/murfey/server/__init__.py +++ b/src/murfey/server/__init__.py @@ -13,11 +13,11 @@ from threading import Thread from typing import Any, Dict, List, NamedTuple, Tuple +import graypy import mrcfile import numpy as np import uvicorn import workflows -import zocalo.configuration from backports.entry_points_selectable import entry_points from fastapi import Request from fastapi.templating import Jinja2Templates @@ -273,18 +273,18 @@ def run(): default=0, ) + security_config = get_security_config() # setup logging - zc = zocalo.configuration.from_file() - zc.activate() + if security_config.graylog_host: + handler = graypy.GELFUDPHandler( + security_config.graylog_host, security_config.graylog_port, level_names=True + ) + root_logger = logging.getLogger() + root_logger.addHandler(handler) # Install a log filter to all existing handlers. - # At this stage this will exclude console loggers, but will cover - # any Graylog logging set up by the environment activation LogFilter.install() - zc.add_command_line_options(parser) - - security_config = get_security_config() workflows.transport.load_configuration_file(security_config.rabbitmq_credentials) args = parser.parse_args() diff --git a/src/murfey/util/config.py b/src/murfey/util/config.py index 9e4d2a867..5cab20733 100644 --- a/src/murfey/util/config.py +++ b/src/murfey/util/config.py @@ -8,7 +8,7 @@ import yaml from backports.entry_points_selectable import entry_points -from pydantic import BaseModel, BaseSettings, Extra +from pydantic import BaseModel, BaseSettings, Extra, validator class MachineConfig(BaseModel, extra=Extra.allow): # type: ignore @@ -94,6 +94,16 @@ class Security(BaseModel): auth_type: Literal["password", "cookie"] = "password" cookie_key: str = "" feedback_queue: str = "murfey_feedback" + graylog_host: str = "" + graylog_port: Optional[int] = None + + @validator("graylog_port") + def check_port_present_if_host_is( + cls, v: Optional[int], values: dict, **kwargs + ) -> Optional[int]: + if values["graylog_host"] and v is None: + raise ValueError("The Graylog port must be set if the Graylog host is") + return v def security_from_file(config_file_path: Path) -> Security: From 220988f9703c1716611361bad2577c4312203828 Mon Sep 17 00:00:00 2001 From: Daniel Hatton Date: Wed, 13 Nov 2024 13:23:34 +0000 Subject: [PATCH 3/3] Add rabbitmq_credentials default for tests --- src/murfey/util/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/murfey/util/config.py b/src/murfey/util/config.py index 5cab20733..56f51978a 100644 --- a/src/murfey/util/config.py +++ b/src/murfey/util/config.py @@ -144,6 +144,7 @@ def get_security_config() -> Security: if machine_config.security_configuration_path: return security_from_file(machine_config.security_configuration_path) return Security( + rabbitmq_credentials="", session_validation="", murfey_db_credentials="", crypto_key="",