From 29f3e0dbf4274294f0a5eec84de68e8de1481e13 Mon Sep 17 00:00:00 2001 From: Chris Christiansen Date: Fri, 5 Jun 2026 02:59:45 +0000 Subject: [PATCH] docs: park OQ-15 and document draft for BQ integration --- docs/HANDOFF.md | 90 +++++++++++++++++++++++++++----- docs/OSVAUCO_OPAX_SESSION_LOG.md | 12 +++++ 2 files changed, 89 insertions(+), 13 deletions(-) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 91ea2d6..45a715a 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -2,27 +2,91 @@ **Sist oppdatert:** 2026-06-05 **Skrevet av:** Jason Vauger (via Perplexity) på vegne av Chris Christiansen -**Status:** CostGuard auth-fix er fullført og deployet. Klar for neste fase. - -> **Regel:** Dette er **den eneste** HANDOFF-filen. Overskrives hver sesjon. Tidligere handoffs er flyttet til `docs/archive/handoffs/`. +**Status:** Plan for OQ-15 (CostGuard BQ-integrasjon) er klar. Implementering er parkert i påvente av `PLAN APPROVED`. --- -## ✅ CostGuard Auth-fix (Ferdig) +## 🟡 OQ-15: Plan for CostGuard BigQuery-integrasjon (Klar til implementering) -- **Auth-ruter lagt til:** /auth/login, /auth/callback, /auth/me, /auth/logout for å håndtere Google OAuth. -- **Container-startfeil løst:** `NameError` på `@require_auth` er fikset ved å flytte sjekken inn i `/auth/me`-ruten. -- **OAuth redirect URI** for `opax.vauco.no/auth/callback` er registrert og verifisert. -- **Verifisering:** - - `/billing/summary` svarer 200 med JSON. - - Dashboardet på `/static/billing-dashboard.html` laster og viser 0 kr, som forventet. -- **Konklusjon:** Auth-laget for CostGuard er nå operativt. +- **Analyse fullført:** Koden for `/billing/summary` i `ml/billing_agent.py` er lokalisert. +- **SQL-spørring designet og verifisert:** Følgende SQL er testet mot BigQuery og returnerer korrekte data: + ```sql + SELECT + DATE(usage_start_time) AS usage_date, + project.id AS project_id, + service.description AS service, + SUM(cost) AS daily_cost + FROM + `propane-will-491900-m5.billing_export.gcp_billing_export_v1_0171F6_057E6B_A260BA` + WHERE + _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) + GROUP BY + usage_date, project_id, service + ORDER BY + usage_date DESC, daily_cost DESC + LIMIT 100 + ``` +- **Python-utkast forberedt:** Følgende funksjon er klar til å erstatte den eksisterende `get_summary`-metoden i `ml/billing_agent.py`: + ```python + def get_summary(self): + """ + Retrieves the daily billing summary per project and service for the last 30 days. + """ + query = f""" + SELECT + DATE(usage_start_time) AS usage_date, + project.id AS project_id, + service.description AS service, + SUM(cost) AS daily_cost + FROM + `{self.billing_table}` + WHERE + _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) + GROUP BY + usage_date, project_id, service + ORDER BY + usage_date DESC, daily_cost DESC + LIMIT 100 + """ + query_job = self.bq_client.query(query) + results = query_job.result() + + summary = [] + for row in results: + summary.append({ + "usage_date": str(row.usage_date), + "project_id": row.project_id, + "service": row.service, + "daily_cost": row.daily_cost + }) + + if not summary: + return { + "onboarding_status": { + "state": "awaiting_data", + "message": "Fakturaeksport er aktiv, men inneholder ingen data for de siste 30 dagene ennå." + } + } + + return {"summary": summary} + ``` --- ## 🎯 NESTE OPPGAVE (les denne først) -**OQ-15 – Aktiver og verifiser BigQuery billing_export for prosjektet, slik at CostGuard får ekte historiske kostdata.** +**Etter `PLAN APPROVED` for OQ-15:** +1. Erstatt `get_summary`-metoden i `ml/billing_agent.py` med utkastet over. +2. Commit og deploy endringen til Cloud Run. +3. Verifiser `/billing/summary`-endepunktet live med `curl`. + +--- + +## ✅ CostGuard Auth-fix (Fullført i forrige økt) + +- **Auth-ruter lagt til:** /auth/login, /auth/callback, /auth/me, /auth/logout. +- **Container-startfeil løst:** `NameError` på `@require_auth` er fikset. +- **Konklusjon:** Auth-laget for CostGuard er operativt. --- @@ -133,4 +197,4 @@ Det medisinske prosjektet er et **eget, fremtidig prosjekt** som **ikke er oppre --- -*Vauco AS · propane-will-491900-m5 · `us-central1` · Powered by Jason, Crafted by Vauco ·* \ No newline at end of file +*Vauco AS · propane-will-491900-m5 · `us-central1` · Powered by Jason, Crafted by Vauco ·* diff --git a/docs/OSVAUCO_OPAX_SESSION_LOG.md b/docs/OSVAUCO_OPAX_SESSION_LOG.md index f0884da..08af71f 100644 --- a/docs/OSVAUCO_OPAX_SESSION_LOG.md +++ b/docs/OSVAUCO_OPAX_SESSION_LOG.md @@ -156,3 +156,15 @@ Fase B ferdigstilling + Phase 4 (LB + SSL migrering) ## NESTE OPPGAVE OQ-15 – Aktiver BigQuery billing_export for GCP-prosjektet propane-will-491900-m5 og koble det inn i CostGuard-endepunktene. + +--- + +## SLUTTRAPPORT – 2026-06-05 – Plan for OQ-15 (CostGuard BQ-integrasjon) + +- **Hva:** Analyserte CostGuard-endepunktene for å integrere fakturadata. Designet og verifiserte en SQL-spørring mot BigQuery. Forberedte et komplett utkast til en ny `get_summary`-metode i `ml/billing_agent.py`. +- **Filer analysert:** `main.py`, `ml/billing_agent.py`. +- **Verifisering:** `bq query` på den nye SQL-spørringen var vellykket. +- **Parkert status:** Implementering av koden er satt på vent i henhold til instruks, i påvente av `PLAN APPROVED`. + +## NESTE OPPGAVE (etter PLAN APPROVED for OQ-15) +Implementere, deploye og verifisere den forberedte koden for OQ-15.