From 080b057e61827d8e9233f2a7bf794a9cf9f86999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Steinkopf=20S=C3=B8hoel?= Date: Wed, 18 Dec 2024 15:29:01 +0100 Subject: [PATCH] Fix style with pre-commit --- src/ert/dark_storage/app.py | 5 ++- src/ert/services/_storage_main.py | 47 ++++++++++++++++++----------- src/ert/services/storage_service.py | 9 ++++-- src/ert/trace.py | 3 +- 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/ert/dark_storage/app.py b/src/ert/dark_storage/app.py index 760564620e3..95b2e402a57 100644 --- a/src/ert/dark_storage/app.py +++ b/src/ert/dark_storage/app.py @@ -6,12 +6,11 @@ from fastapi import FastAPI, Request, status from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html from fastapi.responses import HTMLResponse, RedirectResponse, Response +from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor from ert.dark_storage.endpoints import router as endpoints_router from ert.dark_storage.exceptions import ErtStorageError -from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor - class JSONEncoder(json.JSONEncoder): """ @@ -110,4 +109,4 @@ async def healthcheck() -> str: app.include_router(endpoints_router) -FastAPIInstrumentor.instrument_app(app) \ No newline at end of file +FastAPIInstrumentor.instrument_app(app) diff --git a/src/ert/services/_storage_main.py b/src/ert/services/_storage_main.py index 21b03f37955..ea08be5c344 100644 --- a/src/ert/services/_storage_main.py +++ b/src/ert/services/_storage_main.py @@ -15,6 +15,7 @@ import uvicorn import yaml +from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator from uvicorn.supervisors import ChangeReload from ert.logging import STORAGE_LOG_CONFIG @@ -24,9 +25,6 @@ from ert.shared.storage.command import add_parser_options from ert.trace import tracer, tracer_provider -from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator -from opentelemetry.trace.span import Span - DARK_STORAGE_APP = "ert.dark_storage.app:app" @@ -87,7 +85,10 @@ def _create_connection_info(sock: socket.socket, authtoken: str) -> dict[str, An return connection_info -def run_server(args: argparse.Namespace | None = None, debug: bool = False, uvicorn_config = None) -> None: + +def run_server( + args: argparse.Namespace | None = None, debug: bool = False, uvicorn_config=None +) -> None: if args is None: args = parse_args() @@ -108,7 +109,11 @@ def run_server(args: argparse.Namespace | None = None, debug: bool = False, uvic # Appropriated from uvicorn.main:run os.environ["ERT_STORAGE_NO_TOKEN"] = "1" os.environ["ERT_STORAGE_ENS_PATH"] = os.path.abspath(args.project) - config = uvicorn.Config(DARK_STORAGE_APP, **config_args) if uvicorn_config is None else uvicorn_config #uvicorn.Config() resets the logging config (overriding additional handlers added to loggers like e.g. the ert_azurelogger handler added through the pluggin system + config = ( + uvicorn.Config(DARK_STORAGE_APP, **config_args) + if uvicorn_config is None + else uvicorn_config + ) # uvicorn.Config() resets the logging config (overriding additional handlers added to loggers like e.g. the ert_azurelogger handler added through the pluggin system server = Server(config, json.dumps(connection_info)) logger = logging.getLogger("ert.shared.storage.info") @@ -151,7 +156,7 @@ def check_parent_alive() -> bool: def main(): args = parse_args() - config_args: Dict[str, Any] = {} + config_args: dict[str, Any] = {} with open(STORAGE_LOG_CONFIG, encoding="utf-8") as conf_file: logging_conf = yaml.safe_load(conf_file) logging.config.dictConfig(logging_conf) @@ -160,34 +165,42 @@ def main(): if args.debug: config_args.update(reload=True, reload_dirs=[os.path.dirname(ert_shared_path)]) - uvicorn_config = uvicorn.Config(DARK_STORAGE_APP, **config_args) # Need to run uvicorn.Config before entering the ErtPluginContext because uvicorn.Config overrides the configuration of existing loggers, thus removing log handlers added by ErtPluginContext - - ctx = TraceContextTextMapPropagator().extract(carrier={'traceparent': args.traceparent}) if args.traceparent else None + uvicorn_config = uvicorn.Config( + DARK_STORAGE_APP, **config_args + ) # Need to run uvicorn.Config before entering the ErtPluginContext because uvicorn.Config overrides the configuration of existing loggers, thus removing log handlers added by ErtPluginContext + + ctx = ( + TraceContextTextMapPropagator().extract( + carrier={"traceparent": args.traceparent} + ) + if args.traceparent + else None + ) - _stopped = threading.Event() + stopped = threading.Event() terminate_on_parent_death_thread = threading.Thread( - target=terminate_on_parent_death, args=[_stopped, 1.0] + target=terminate_on_parent_death, args=[stopped, 1.0] ) - with ErtPluginContext(logger=logging.getLogger(), trace_provider=tracer_provider) as context: + with ErtPluginContext(logger=logging.getLogger(), trace_provider=tracer_provider): terminate_on_parent_death_thread.start() - with tracer.start_as_current_span(f"run_storage_server", ctx) as currentSpan: + with tracer.start_as_current_span("run_storage_server", ctx): logger = logging.getLogger("ert.shared.storage.info") try: logger.info("Starting dark storage") - run_server(args, debug=False, uvicorn_config = uvicorn_config) + run_server(args, debug=False, uvicorn_config=uvicorn_config) except SystemExit: logger.info("Stopping dark storage") finally: - _stopped.set() + stopped.set() terminate_on_parent_death_thread.join() - def sigterm_handler(_signo, _stack_frame): sys.exit(0) + signal.signal(signal.SIGTERM, sigterm_handler) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/src/ert/services/storage_service.py b/src/ert/services/storage_service.py index 694fae11d4d..10a6b4c7018 100644 --- a/src/ert/services/storage_service.py +++ b/src/ert/services/storage_service.py @@ -6,14 +6,15 @@ import httpx import requests +from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor from ert.dark_storage.client import Client, ConnInfo from ert.services._base_service import BaseService, _Context, local_exec_args from ert.trace import get_traceparent -from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor HTTPXClientInstrumentor().instrument() + class StorageService(BaseService): service_name = "storage" @@ -24,7 +25,7 @@ def __init__( conn_info: Mapping[str, Any] | Exception | None = None, project: str | None = None, verbose: bool = False, - traceparent: str | None = "inherit_parent" + traceparent: str | None = "inherit_parent", ): self._url: str | None = None @@ -34,7 +35,9 @@ def __init__( if verbose: exec_args.append("--verbose") if traceparent: - traceparent = get_traceparent() if traceparent == "inherit_parent" else traceparent + traceparent = ( + get_traceparent() if traceparent == "inherit_parent" else traceparent + ) exec_args.extend(["--traceparent", str(traceparent)]) super().__init__(exec_args, timeout, conn_info, project) diff --git a/src/ert/trace.py b/src/ert/trace.py index 2d98eba4483..06d0dc848bd 100644 --- a/src/ert/trace.py +++ b/src/ert/trace.py @@ -15,8 +15,9 @@ def get_trace_id() -> str: return trace.format_trace_id(trace.get_current_span().get_span_context().trace_id) + def get_traceparent() -> str | None: carrier = {} # Write the current context into the carrier. TraceContextTextMapPropagator().inject(carrier) - return carrier.get('traceparent') \ No newline at end of file + return carrier.get("traceparent")