Skip to content

Commit cecda9d

Browse files
committed
feat(version): expose /version, include version in /healthz and startup logs; add --version flag
1 parent ce20863 commit cecda9d

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

src/api.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,12 @@ def Field(default=None, **_): # type: ignore
5757
from src.metrics import decisions as decisions_store
5858
from src.policy.engine import PolicyEngine as _PE, Rule as _PRule, Event as _PEvent
5959
from scripts.setup_xevents import render_xevents_sql
60+
try:
61+
from src.version import __version__
62+
except Exception:
63+
__version__ = "0.0.0"
6064

61-
app = FastAPI(title="SQLumAI Policy API", version="0.1.0")
65+
app = FastAPI(title="SQLumAI Policy API", version=__version__)
6266

6367
RULES_PATH = os.getenv("RULES_PATH", "config/rules.json")
6468
PROPOSED_RULES_PATH = os.getenv("PROPOSED_RULES_PATH", "config/rules_proposed.json")
@@ -120,7 +124,12 @@ def delete_rule(rule_id: str):
120124

121125
@app.get("/healthz")
122126
def healthz():
123-
return {"status": "ok"}
127+
return {"status": "ok", "version": __version__}
128+
129+
130+
@app.get("/version")
131+
def version():
132+
return {"version": __version__}
124133

125134

126135
@app.get("/metrics")

src/main.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
import os
33
import signal
44
from dotenv import load_dotenv
5+
import sys
6+
try:
7+
from src.version import __version__
8+
except Exception:
9+
__version__ = "0.0.0"
510

611
from src.proxy.tds_proxy import run_proxy
712
from src.proxy.tds_tls import run_tls_terminating_proxy
@@ -11,6 +16,8 @@
1116

1217
async def main() -> None:
1318
load_dotenv()
19+
# Startup log with version for visibility
20+
print(f"[sqlumai] starting version {__version__}")
1421
listen_host = os.getenv("PROXY_LISTEN_ADDR", "0.0.0.0")
1522
listen_port = int(os.getenv("PROXY_LISTEN_PORT", "61433"))
1623
sql_host = os.getenv("SQL_HOST", "localhost")
@@ -53,6 +60,9 @@ def _handle_sig(*_):
5360

5461

5562
if __name__ == "__main__":
63+
if "--version" in sys.argv or "-V" in sys.argv:
64+
print(__version__)
65+
raise SystemExit(0)
5666
try:
5767
asyncio.run(main())
5868
except KeyboardInterrupt:

src/runtime/api_runner.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55

66
async def run_api(stop_event: asyncio.Event):
7+
try:
8+
from src.version import __version__
9+
except Exception:
10+
__version__ = "0.0.0"
11+
print(f"[sqlumai] API server starting (version {__version__})")
712
config = uvicorn.Config("src.api:app", host=os.getenv("API_HOST", "0.0.0.0"), port=int(os.getenv("API_PORT", "8080")), log_level="info")
813
server = uvicorn.Server(config)
914

@@ -15,4 +20,3 @@ async def _serve():
1520
if server.should_exit is False:
1621
server.should_exit = True
1722
await task
18-

0 commit comments

Comments
 (0)