Hogyan építettünk egy AI használati reportot OpenCode platformunkhoz

Építettünk egy egyedi HTML reportot generáló scriptet, amely összegyűjti az AI használati statisztikákat az OpenCode-ból (munkamenetek, tokenek, költségek, MCP eszközhívások), és naponta e-mailben kézbesíti. Az adatok két forrásból származnak — egy REST API-ból a munkamenet-szintű mérőszámokhoz és közvetlen SQLite hozzáférésből az MCP eszközhívás telemetriához.


Az igények

OpenCode servert használunk elsődleges AI agentként. Naponta több tucat AI munkamenetet kezel — az infrastruktúra menedzsmenttől kezdve a kódreview-kon át a DNS-változtatásokig és biztonsági javításokig. De nem volt rálátásunk a következőkre:

  • Hány AI munkamenet fut naponta?
  • Mely modellek használatosak (DeepSeek v4 Flash vs Pro)?
  • Hány token fogy?
  • Mennyibe kerül?
  • Mely alügynökök a legaktívabbak?
  • Mely MCP eszközöket használják a legtöbbet?

Az adatok ott voltak — az OpenCode SQLite adatbázisában tárolva — de nem volt beépített dashboard vagy jelentés.

Két Adatforrás

1. A REST API (Munkamenet-szintű adatok)

Az OpenCode egy HTTP API-t futtat a 3099-es porton. Megfelelő hitelesítéssel és a X-Requested-With: XMLHttpRequest fejléccel JSON formátumban adja vissza a munkamenet adatokat:

import urllib.request, base64, json

url = "http://opencode-server.example.com:3099/api/session?limit=500"
auth = base64.b64encode(f"{username}:{password}".encode()).decode()
req = urllib.request.Request(url, headers={
    "X-Requested-With": "XMLHttpRequest",
    "Authorization": f"Basic {auth}",
})

with urllib.request.urlopen(req) as resp:
    sessions = json.loads(resp.read())["data"]

Minden munkamenet objektum a következőket tartalmazza:

MezőLeírás
idEgyedi munkamenet azonosító
titleMunkamenet címe (a felhasználó promptja)
agentHasznált alügynök (build, project-manager, vault-manager, stb.)
modelModell objektum id, providerID, variant mezőkkel
costTeljes költség USD-ben
tokens.inputBeviteli tokenek fogyasztása
tokens.outputGenerált kimeneti tokenek
tokens.reasoningGondolkodási tokenek
tokens.cache.readGyorsítótár olvasások
tokens.cache.writeGyorsítótár írások
time.createdMunkamenet létrehozási időbélyeg (ms)

Amit kapsz: Napi munkamenet számok, tokenhasználat modellenként, költségkövetés, ügynökaktivitás bontás, legdrágább munkamenetek.

Hitelesítés: HTTP Basic Auth a Docker Compose konfigurációban beállított OPENCODE_SERVER_USERNAME és OPENCODE_SERVER_PASSWORD környezeti változók hitelesítő adataival.

2. SQLite Adatbázis (MCP eszközhívás telemetria)

A REST API kiváló a munkamenet mérőszámokhoz, de nem fedi fel az egyes MCP eszközhívásokat. Ehhez közvetlen hozzáférésre van szükség az SQLite adatbázishoz a /home/opencode/data/share/opencode.db elérési úton.

A part tábla tárolja az AI munkamenetek során végrehajtott összes eszközhívást:

SELECT json_extract(p.data, '$.tool') as tool_name,
       COUNT(*) as call_count
FROM part p
JOIN session s ON p.session_id = s.id
WHERE json_extract(p.data, '$.type') = 'tool'
  AND s.time_created >= ? AND s.time_created < ?
GROUP BY tool_name
ORDER BY call_count DESC;

Ez felfedi, hogy mely MCP szervereket használják a legtöbbet. A mi esetünkben: bash (6,472 hívás), read (826), taiga_getUserStory (609), task (348), és 185 egyéb eszköz.

A Jelentésgenerátor

Létrehoztunk egy Python szkriptet (generate_opencode_report.py) két módú támogatással:

  • --api mód: A REST API-t használja (nincs szükség SSH-ra, bárhol fut)
  • Alapértelmezett mód: SQLite közvetlen olvasása (az OpenCode szerveren futtatva, MCP adatokat is tartalmaz)

A szkript egy önálló HTML fájlt hoz létre a következőkkel:

# API mód (távoli, nincs SSH):
python3 generate_opencode_report.py --api \
    --api-url http://opencode-server.example.com:3099 \
    --api-username "$USERNAME" --api-password "$PASSWORD"

# SQLite mód (közvetlen a szerveren, MCP adatokat is tartalmaz):
python3 generate_opencode_report.py \
    --db /home/opencode/data/share/opencode.db

Jelentés Szekciók

Vezetői Összefoglaló — Négy kategória egy táblázatban összefoglalva: összes AI munkamenet, összes felhasznált token (bevitel + kimenet), összes becsült költség, és összes MCP eszközhívás.

Napi Bontás — Napi táblázat a munkamenetekről, tokenekről (bevitel/kimenet/gondolkodás szerint bontva), és költségről, vizuális folyamatjelző sávokkal.

Munkamenet & Token Arány — Token-per-munkamenet és költség-per-munkamenet trendek, segítve a hatékonysági minták azonosítását.

Modell Eloszlás — Mely modellek használatosak (DeepSeek v4 Flash vs Pro), munkamenet számokkal, token mennyiségekkel és költségekkel.

Ügynök/Alügynök Tevékenység — Az egyes alügynökök használatának bontása: project-manager, system-manager, vault-manager, build, devops-manager, monitor, web-search, és továbbiak.

Legdrágább Munkamenetek — Top 20 munkamenet költség szerint, hasznos a költségoptimalizáláshoz.

Legtöbb Token-t Használó Munkamenetek — Top 20 munkamenet teljes token szám szerint, hasznos a csúcshasználati minták megértéséhez.

Legutóbbi Munkamenetek — Utolsó 50 munkamenet teljes részletekkel.

MCP Eszközhasználat — Az összes 189 használt eszköz rácsa, hívási szám szerint rendezve, vizuális sávokkal. Legnépszerűbb eszközök: bash, read, taiga_getUserStory, task, glob, grep, webfetch, edit, write, todowrite.

Automatizált Kézbesítés

A jelentés egy CI/CD pipeline-m keresztül kerül kézbesítésre (pl. Gitea Actions, GitHub Actions, vagy hasonló) napi ütemezés szerint (06:00 UTC / 08:00 közép-európai idő):

on:
  schedule:
    - cron: '0 6 * * *'
  workflow_dispatch:
    inputs:
      month:
        description: 'Jelentés hónapja (YYYY-MM)'
      email_to:
        description: 'E-mail címzett'

A munkafolyamat:

  1. Lekéri az SSH kulcsot egy jelszókezelőből (pl. Bitwarden/Vaultwarden CLI)
  2. SSH-zik az OpenCode szerverre
  3. Futtatja a scriptet SQLite módban (teljes MCP adat)
  4. Letölti a generált HTML reportot
  5. E-mailben elküldi csatolmányként SMTP-n keresztül
  6. Feltölti repostory részeként (a megőrzés a konfigurációtól függ)
# A jelszókezelő hitelesítési minta (igazítsd a saját beállításodhoz)
VAULT_CREDENTIALS='{"api_key_id":"...","api_key_secret":"...","master_password":"..."}'
export BW_CLIENTID API_KEY_ID
npx @bitwarden/cli login --apikey
npx @bitwarden/cli get item "<vault-item-uuid>" --session $SESSION

Főbb Tanulságok

  1. Az OpenCode-nak két adatrétege van: egy REST API a munkamenet-szintű mérőszámokhoz és egy SQLite adatbázis a részletes telemetriához (MCP hívások, részek).
  2. A REST API kiváló távoli monitorozáshoz — csak HTTP Basic Auth és a megfelelő fejléc (X-Requested-With: XMLHttpRequest).
  3. MCP eszköz telemetria közvetlen adatbázis hozzáférést igényel — még nincs API végpont a part táblához.
  4. Ugyanaz a CI/CD minta (jelszókezelő → SSH → szkript futtatás → e-mail) több jelentéstípushoz is működik — használható teljesítmény monitorozáshoz és AI használati elemzéshez is.
  5. A költségek láthatósága kritikus — annak felismerése, hogy a DeepSeek v4 Pro a költségek 87%-át teszi ki, miközben csak a munkamenetek 38%-át kezeli, egy hasznosítható felismerés volt.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük