diff --git a/src/nodenorm/handlers/health.py b/src/nodenorm/handlers/health.py index bfd6c81..19f986a 100644 --- a/src/nodenorm/handlers/health.py +++ b/src/nodenorm/handlers/health.py @@ -1,11 +1,23 @@ +import importlib.resources +import json +from functools import lru_cache from urllib.parse import urlparse from elasticsearch import AsyncElasticsearch +import nodenorm from nodenorm.biolink import BIOLINK_MODEL_VERSION from nodenorm.handlers.base import NodeNormalizationBaseHandler +@lru_cache(maxsize=None) +def get_openapi_version() -> str: + """Read the API version from the openapi.json spec bundled with the webapp.""" + openapi_path = importlib.resources.files(nodenorm) / "webapp" / "openapi.json" + openapi_spec = json.loads(openapi_path.read_text(encoding="utf-8")) + return openapi_spec["info"]["version"] + + class NodeNormHealthHandler(NodeNormalizationBaseHandler): """ Important Endpoints @@ -24,6 +36,7 @@ async def get(self): parsed_compendia_url = urlparse(compendia_url) babel_version = parsed_compendia_url.path.rstrip("/").rsplit("/", maxsplit=1)[-1] babel_markdown = f"https://github.com/ncatstranslator/Babel/blob/master/releases/{babel_version}.md" + version = get_openapi_version() try: attributes = [ "name", @@ -46,14 +59,18 @@ async def get(self): except Exception: status_response = { "status": "error", + "version": version, "babel_version": babel_version, "babel_version_url": babel_markdown, + "backend": "elasticsearch", } else: status_response = { "status": "running", + "version": version, "babel_version": babel_version, "babel_version_url": babel_markdown, + "backend": "elasticsearch", "biolink_model_toolkit_version": BIOLINK_MODEL_VERSION, **nodes, } diff --git a/src/nodenorm/webapp/openapi.json b/src/nodenorm/webapp/openapi.json index 3ac7044..72e4d8a 100644 --- a/src/nodenorm/webapp/openapi.json +++ b/src/nodenorm/webapp/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Node Normalization", - "version": "2.3.26", + "version": "1.0.0", "x-translator": { "component": "Utility", "team": [