| Component | Details |
|---|---|
| Server | VPS, Linux, user bprevaes |
| Pad | /opt/agentic-demo/ |
| Python venv | /opt/agentic-demo/venv/ |
| Database | /opt/agentic-demo/data/itsm.db (SQLite) |
| SSL | Let's Encrypt via Certbot, domein sdm.prevaes.nl |
| Nginx | /etc/nginx/sites-enabled/sdm.prevaes.nl → proxy naar localhost:8000 |
| Systemd | itsm-simulator.service — enabled, auto-restart |
| Env | .env bevat ANTHROPIC_API_KEY |
5085 regels verdeeld over 28 bestanden.
api/)| Bestand | Regels | Functie |
|---|---|---|
main.py | 481 | FastAPI app: alle endpoints, agent runner thread, ticket library runner |
models.py | 275 | SQLAlchemy modellen (Customer, CMDB, Incident, Run, RunResult) + Pydantic schemas |
database.py | 18 | SQLAlchemy engine + session factory |
config_internal.py | 1 | ITSM_BASE_URL = "http://localhost:8000" |
agent/)| Bestand | Regels | Functie |
|---|---|---|
runner.py | 171 | Agentic loop: ticket → Claude API → tool calls → update. Tracked tokens, tool calls, timing |
tools.py | 166 | 7 tool definities voor Claude function calling |
tool_executor.py | 40 | Voert tool calls uit tegen de ITSM API via httpx |
prompts.py | 74 | System prompt (Nederlands) + user message builder |
config.py | 14 | Model: claude-sonnet-4-20250514, temp=0, max 10 rondes |
run_all_new.py | 69 | CLI: verwerk alle nieuwe tickets, --name param |
run_single.py | 68 | CLI: verwerk één ticket op ID, --name param |
run_selection.py | 202 | CLI: selecteer uit ticket library met filters |
dashboard/)| Bestand | Regels | Functie |
|---|---|---|
index.html | 162 | Hoofdpagina: topbar, ticketlijst + audit trail, overlays |
app.js | 747 | Alle JS: polling, rendering, stats, formulier, sortering |
style.css | 813 | Dark theme, alle componenten |
admin.html | 447 | Beheerpagina: acties, library selectie, run historie |
guide.html | 385 | Handleiding: 9 secties |
docs.html | — | Deze pagina |
seed/)| Bestand | Regels | Functie |
|---|---|---|
data.json | 565 | 4 klanten, 31 CI's, 10 incidents |
ticket_library.json | 334 | 30 scenario-tickets met tags, complexity, expected_outcome, demo_worthy |
load_seed.py | 54 | Laadt data.json in DB. Behoudt runs bij reset. |
SQLite met 5 tabellen in /opt/agentic-demo/data/itsm.db
| Klant | Tier | P1 SLA | Bijzonderheden |
|---|---|---|---|
| Velder Logistics | platinum | 15 min | SAP-omgeving, 24/7 monitoring |
| Rijnmond Zorg | gold | 30 min | NIS2, patiëntdata, weekend freeze (vr 17:00 – ma 08:00) |
| KantoorPlus BV | silver | 60 min | Klein bedrijf, 40 werkplekken |
| Brouwers & Partners | gold | 30 min | Advocatenkantoor, GDPR, kantooruren freeze (ma-vr 08-18) |
SAP-FIN-01, SAP-HR-01, SAP-GATEWAY-01, SAP-BW-01, DC-FIREWALL-01 freeze, BACKUP-NAS-01, AD-DC-01, DNS-SRV-01, VPN-GW-01, SQL-DB-01, MONITOR-SRV-01, CITRIX-FARM-01, MONITORING-01
EXCH-MAIL-03 3 incidenten, EPD-APP-01, LAB-INTF-01, VDI-CLUSTER-01, CITRIX-GW-01, AD-DC-02, WEB-PROXY-01, WIFI-CTRL-01
PRINT-SRV-02, FILE-SRV-01, NAS-FILE-01, ROUTER-WAN-01, LAPTOP-IMG-01
DMS-LEGAL-01, EXCH-MAIL-05, SEC-SCAN-01, AD-DC-03, VPN-GW-02
Kolommen: id, run_name, started_at, completed_at, total_tickets, model_used, temperature, system_prompt_hash
Kolommen: id, run_id (FK), incident_id, incident_title, status_before, status_after, priority_assigned, resolver_group, category_assigned, agent_reasoning, enrichment (JSON), questions_asked (JSON), tool_calls (JSON), tool_call_count, rounds, processing_time_ms, token_usage (JSON), created_at
{
"total_input": 12500,
"total_output": 3200,
"per_round": [
{"round": 1, "input": 8000, "output": 1500},
{"round": 2, "input": 4500, "output": 1700}
]
}
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /health | Health check |
| POST | /reset | Reset seed data (behoudt runs) |
| POST | /run | Start agent. Params: demo=true, ids=4,5, name=x |
| GET | /agent/status | Voortgang: running, processed, total, run_id |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /incidents | Alle incidents. Filter: ?status=new |
| GET | /incidents/{id} | Incident detail |
| POST | /incidents | Aanmaken (title, description, customer_id, ci_id) |
| PATCH | /incidents/{id} | Bijwerken |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /cmdb | Alle CI's, optioneel ?search=SAP |
| GET | /cmdb/{id} | CI detail |
| GET | /cmdb/{id}/history | CI incidenthistorie |
| GET | /customers | Alle klanten |
| GET | /customers/{id} | Klant detail met SLA's |
| GET | /customers/{id}/freezes | Actieve freezes |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /runs | Alle runs (nieuwste eerst) |
| GET | /runs/{id} | Run detail met alle results |
| GET | /runs/{id}/compare/{other} | Vergelijk twee runs per ticket |
| GET | /runs/{id}/results/{incident_id} | Eén result |
| POST | /runs | Maak run record |
| PATCH | /runs/{id} | Update completed_at / total_tickets |
| POST | /runs/{id}/results | Voeg result toe |
| POST | /runs/clear | Wis alle runs |
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /library | Alle 30 tickets uit ticket_library.json |
| POST | /run/library | Selecteer + maak aan + verwerk. Params: demo_worthy, tags, complexity, ticket_ids, name |
Model: claude-sonnet-4-20250514
Temperature: 0 (deterministisch)
Max rondes: 10 per ticket
Max tokens: 4096 per response
| Tool | Wat het doet |
|---|---|
get_incident | Haal incident details op |
get_customer | Klantinfo incl. SLA's en contract |
get_customer_freezes | Actieve change freezes |
get_ci | CI details uit CMDB |
search_cmdb | Zoek CI op naam (partial match) |
get_ci_history | Incidenthistorie van een CI |
update_incident | Werk ticket bij met alle verrijking |
| Situatie | Resultaat |
|---|---|
| Ticket onvolledig (< 2 zinnen, geen CI, essentiële info mist) | triaged + terugvragen |
| Change freeze op CI + ticket betreft wijziging | escalated |
| 3+ recente incidenten op CI (patroon) | escalated |
| P1 (productie volledig down) | escalated |
| Volledig ticket met voldoende info | dispatched |
Per ticket wordt opgeslagen: verwerkingstijd (ms), aantal tool calls met input/output per call, token usage per ronde (input + output), totaal rondes. Beschikbaar in run_results en in incident.enrichment._agent_meta.
9 secties voor eindgebruikers: Wat is dit, Architectuur, Dashboard, Agent, Tickets, Runs, CLI, API, Demo tips.
Alle commando's vanuit /opt/agentic-demo:
# Seed data resetten
venv/bin/python -m seed.load_seed
# Alle nieuwe tickets verwerken
venv/bin/python -m agent.run_all_new --name "naam"
# Eén ticket verwerken
venv/bin/python -m agent.run_single 4 --name "naam"
# Selectie uit bibliotheek
venv/bin/python -m agent.run_selection --demo-worthy --name "naam"
venv/bin/python -m agent.run_selection --tags gdpr,escalatie --name "naam"
venv/bin/python -m agent.run_selection --complexity hoog --name "naam"
venv/bin/python -m agent.run_selection --ids TL-004,TL-011 --name "naam"
venv/bin/python -m agent.run_selection --demo-worthy --dry-run
# Service beheer
sudo systemctl restart itsm-simulator
sudo systemctl status itsm-simulator
sudo journalctl -u itsm-simulator -f
| Variabele | Hex | Gebruik |
|---|---|---|
--bg | #0a1628 | Achtergrond |
--panel | #111d32 | Panelen, topbar |
--card | #1a2a45 | Kaarten, inputs |
--cyan | #00C7F9 | Accent, links, logo |
--success | #10b981 | Dispatched, groen |
--danger | #ef4444 | Escalated, P1 |
--warning | #f59e0b | Triaged, P2 |
P1 P2 P3 P4
new triaged dispatched escalated resolved
UI: Segoe UI / system. Mono: Cascadia Code / Fira Code / Consolas.