diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 45a715a..dc43e25 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,92 +1,22 @@ # HANDOFF — Vauco OS **Sist oppdatert:** 2026-06-05 -**Skrevet av:** Jason Vauger (via Perplexity) på vegne av Chris Christiansen -**Status:** Plan for OQ-15 (CostGuard BQ-integrasjon) er klar. Implementering er parkert i påvente av `PLAN APPROVED`. +**Skrevet av:** Jason Vauger (via Perplexity) +**Status:** OQ-15 (CostGuard BQ-integrasjon) er teknisk implementert og deployet. Venter på manuell verifisering. --- -## 🟡 OQ-15: Plan for CostGuard BigQuery-integrasjon (Klar til implementering) +## ✅ OQ-15: Implementering fullført -- **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} - ``` +- **Live Data:** `get_summary`-metoden i `ml/billing_agent.py` henter nå data direkte fra BigQuery `billing_export`-tabellen. +- **Build-fiks:** Feilen i `cloudbuild.yaml` relatert til `$COMMIT_SHA` er rettet, og en ny versjon av `osvauco-agent` er vellykket deployet. +- **Verifisering gjenstår:** Automatisk verifisering av selve endepunktet ble blokkert av IAP. SQL-spørringen er validert, men en full sjekk av UI gjenstår. --- ## 🎯 NESTE OPPGAVE (les denne først) -**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. +**Manuelt verifisere `/billing/summary` via nettleser-login på opax.vauco.no (sjekk at UI-data matcher `bq query`), og først deretter vurdere å oppdatere OQ-15-status i docs/MASTERPLAN.md sammen med Chris.** --- @@ -197,4 +127,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 ·* +*Vauco AS · propane-will-491900-m5 · `us-central1` · Powered by Jason, Crafted by Vauco ·* \ No newline at end of file diff --git a/docs/OSVAUCO_OPAX_SESSION_LOG.md b/docs/OSVAUCO_OPAX_SESSION_LOG.md index 08af71f..27b9356 100644 --- a/docs/OSVAUCO_OPAX_SESSION_LOG.md +++ b/docs/OSVAUCO_OPAX_SESSION_LOG.md @@ -168,3 +168,18 @@ OQ-15 – Aktiver BigQuery billing_export for GCP-prosjektet propane-will-491900 ## NESTE OPPGAVE (etter PLAN APPROVED for OQ-15) Implementere, deploye og verifisere den forberedte koden for OQ-15. + +--- + +## SLUTTRAPPORT – 2026-06-05 – Implementering av OQ-15 (CostGuard BQ-data) + +- **Hva:** Implementerte ny `get_summary`-metode i `ml/billing_agent.py` for å hente live data fra BigQuery `billing_export`. Fikset en feil i `cloudbuild.yaml` ved å bytte ut `$COMMIT_SHA` med `$BUILD_ID`, som muliggjorde vellykket build og deploy. +- **Filer endret:** `ml/billing_agent.py`, `cloudbuild.yaml`. +- **Verifisering:** + - `bq query` mot BigQuery-tabellen var vellykket og bekreftet at SQL-spørringen returnerer korrekte data. + - `curl` mot endepunktet ble blokkert av IAP (forventer gyldig sesjon). + - Lokal Python-verifisering feilet på grunn av manglende `dask`/`google` dependencies i miljøet. +- **Konklusjon:** Den tekniske implementeringen er fullført og deployet. Full ende-til-ende-verifisering av `/billing/summary` må gjøres manuelt via nettleser-login. + +## NESTE OPPGAVE +Manuelt verifisere `/billing/summary` via nettleser-login på opax.vauco.no (sjekk at UI-data matcher `bq query`), og først deretter vurdere å oppdatere OQ-15-status i docs/MASTERPLAN.md sammen med Chris.