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:
Lekéri az SSH kulcsot egy jelszókezelőből (pl. Bitwarden/Vaultwarden CLI)SSH-zik az OpenCode szerverreFuttatja a scriptet SQLite módban (teljes MCP adat)Letölti a generált HTML reportotE-mailben elküldi csatolmányként SMTP-n keresztülFeltö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
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).A REST API kiváló távoli monitorozáshoz — csak HTTP Basic Auth és a megfelelő fejléc (X-Requested-With: XMLHttpRequest).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.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.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.
#ai #devops #gitea #monitoring #opencode #reporting