Nico bf11312b4b Rename cog -> assay across codebase
- Rename files: cog_cli.py, test_cog.py, k8s/cog-*.yaml
- Update all Python tool names: cog_* -> assay_*
- Update FastAPI titles, MCP server names, URLs
- Update K8s manifests: deployments, services, secrets, ingress
- Update Docker env vars: COG_API -> ASSAY_API
- Domain: cog.loop42.de -> assay.loop42.de
- SQLite path: /tmp/cog_db.sqlite -> /tmp/assay_db.sqlite

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 01:39:05 +02:00

38 lines
1.4 KiB
Python

"""Shared database access for Thinker and Expert nodes."""
import logging
import os
log = logging.getLogger("runtime")
DB_HOST = os.environ.get("DB_HOST", "mariadb-eras")
DB_USER = "root"
DB_PASS = "root"
ALLOWED_DATABASES = ("eras2_production", "plankiste_test")
def run_db_query(query: str, database: str = "eras2_production",
host: str = DB_HOST, user: str = DB_USER, password: str = DB_PASS) -> str:
"""Execute a read-only SQL query against MariaDB. Returns tab-separated results."""
import pymysql
trimmed = query.strip().upper()
if not (trimmed.startswith("SELECT") or trimmed.startswith("DESCRIBE") or trimmed.startswith("SHOW")):
return "Error: Only SELECT/DESCRIBE/SHOW queries allowed"
if database not in ALLOWED_DATABASES:
return f"Error: Unknown database '{database}'"
conn = pymysql.connect(host=host, user=user, password=password,
database=database, connect_timeout=5, read_timeout=15)
try:
with conn.cursor() as cur:
cur.execute(query)
rows = cur.fetchall()
if not rows:
return "(no results)"
cols = [d[0] for d in cur.description]
lines = ["\t".join(cols)]
for row in rows:
lines.append("\t".join(str(v) if v is not None else "" for v in row))
return "\n".join(lines)
finally:
conn.close()