rag-hackrx / services /db_logger.py
Rivalcoder
add For Hosting
cddddfc
from datetime import datetime
from supabase import create_client, Client
import requests
from utils.config import SUPABASE_URL, SUPABASE_KEY
if not SUPABASE_URL or not SUPABASE_KEY:
raise ValueError("Missing SUPABASE_URL or SUPABASE_KEY in environment variables.")
supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
def get_geo_location(ip: str) -> str:
try:
if ip.startswith("127.") or ip.lower() == "localhost":
return "Localhost"
resp = requests.get(f"https://ipapi.co/{ip}/json/", timeout=5)
if resp.status_code == 200:
data = resp.json()
city = data.get("city")
region = data.get("region")
country = data.get("country_name")
parts = [part for part in [city, region, country] if part]
return ", ".join(parts) if parts else "Unknown"
except Exception:
pass
return "Unknown"
def log_query(document_source: str, question: str, answer: str,
ip_address: str, response_time,
user_agent: str = None):
"""Insert Q&A log into Supabase with IP, Geo, and User Agent."""
now_str = datetime.utcnow().isoformat()
geo_location = get_geo_location(ip_address)
try:
response_time_sec = round(float(response_time), 2)
except (TypeError, ValueError):
response_time_sec = 0.0
try:
supabase.table("qa_logs").insert({
"document_source": document_source,
"question": question,
"answer": answer,
"ip_address": ip_address,
"geo_location": geo_location,
"user_agent": user_agent or "Unknown",
"response_time_sec": response_time_sec,
"created_at": now_str
}).execute()
except Exception as e:
print(f"Failed to log query to Supabase: {e}")