{% extends "base.html" %} {% from "macros.html" import pill, empty_state %} {% block title %}Metrics — Agent Wasp{% endblock %} {% block page_css %} {% endblock %} {% block content %}

Performance & Economics

Auto-refresh every 30s · loading…

JSON API
Tasks {{ summary.tasks.total }}
Success {{ summary.tasks.success_rate_pct }}%
Model calls {{ summary.model.calls }}
Total cost ${{ "%.4f"|format(summary.model.cost_usd_total) }}
Avg latency {{ summary.model.avg_latency_ms }}ms
Uptime {{ (summary.uptime_seconds / 3600) | round(1) }}h
Activity Trend events errors
Events
Errors
ms
Avg Latency

Loading…

Concurrency

{{ concurrency.active }}/{{ concurrency.max_concurrent }}
{{ concurrency.active }} active
{{ concurrency.available_slots }} slots free

Degradation Monitor

{% if degradation.degraded %} {{ pill("DEGRADED", "danger", "sm") }}
{{ degradation.reason }}
{% else %} {{ pill("Healthy", "success", "sm", dot=true) }} {% endif %} {% if degradation.samples %}
Samples{{ degradation.samples }}
p95 latency{{ degradation.p95_latency_ms }}ms
Error rate{{ degradation.error_rate_pct }}%
{% endif %}

System

Auto-repairs {{ summary.autorepairs }}
Scheduler runs {{ summary.scheduler.runs }}
Scheduler errors {{ summary.scheduler.errors }}
Tokens (session) {{ summary.model.tokens_total | int }}

Economics

{% if economics.performance_per_cost %}{{ economics.performance_per_cost }} calls/${% else %}∞ calls/${% endif %}
${{ "%.6f"|format(economics.today.cost_usd) }}
Today's cost
{{ economics.today.calls }} calls · {{ economics.today.tokens | int }} tkns
${{ "%.6f"|format(economics.lifetime.cost_usd) }}
Lifetime cost
{{ economics.lifetime.calls }} calls
Projection (based on today's burn rate)
${{ "%.4f"|format(projections.daily) }}
Daily
${{ "%.2f"|format(projections.weekly) }}
Weekly
${{ "%.2f"|format(projections.monthly) }}
Monthly
{% if economics.by_model %}
By Model
{% for m in economics.by_model[:6] %} {% endfor %}
Model Calls In Out $/1K out Cost
{{ m.model[:16] }}{% if m.model|length > 16 %}…{% endif %} {% if m.provider %}{{ m.provider }}{% endif %} {{ m.calls }} {% set it = m.input_tokens %} {% if it > 999999 %}{{ (it/1000000)|round(1) }}M{% elif it > 999 %}{{ (it/1000)|round(1) }}K{% else %}{{ it }}{% endif %} {% set ot = m.output_tokens %} {% if ot > 999999 %}{{ (ot/1000000)|round(1) }}M{% elif ot > 999 %}{{ (ot/1000)|round(1) }}K{% else %}{{ ot }}{% endif %} {% if m.cost_usd > 0 and m.output_tokens > 0 %} ${{ "%.4f"|format(m.cost_usd / (m.output_tokens / 1000)) }} {% else %}—{% endif %} {% if m.cost_usd == 0 %}Free{% else %}${{ "%.5f"|format(m.cost_usd) }}{% endif %}
{% endif %} {% if economics.recent_days %}
Daily Cost (7d)
{% set max_day_cost = economics.recent_days | map(attribute='cost_usd') | max %} {% for day in economics.recent_days %}
{{ day.date }}
${{ "%.6f"|format(day.cost_usd) }}
{% endfor %}
{% endif %}

Top Skills

{{ pill(summary.skills.calls ~ " calls", "primary", "xs") }} {% if summary.skills.errors > 0 %}{{ pill(summary.skills.errors ~ " err", "danger", "xs") }}{% endif %}
{% if summary.skills.top %} {% set max_calls = summary.skills.top[0].calls %}
{% for sk in summary.skills.top %} {% set err_pct = (sk.errors / [sk.calls, 1] | max * 100) | int %} {% set ok_pct = 100 - err_pct %}
{{ sk.name }}
{% if sk.errors > 0 %} {{ sk.errors }} err {% endif %} {{ sk.calls }}
{% if sk.errors > 0 %}
{% endif %}
{% endfor %}
{{ summary.skills.calls }}
Total calls
{{ summary.skills.errors }}
Errors
{% if summary.skills.calls > 0 %} {{ ((summary.skills.calls - summary.skills.errors) / summary.skills.calls * 100) | round(0) | int }}% {% else %}—{% endif %}
Success
{{ summary.skills.top | length }}
Unique
{% else %} {{ empty_state("No skill data yet", "Skills appear after the agent uses them.", "M13 10V3L4 14h7v7l9-11h-7z") }} {% endif %}
{% if recent_tasks %}

Recent Tasks

{{ pill(recent_tasks|length, "info", "xs") }}
newest first
{% for t in recent_tasks %} {% endfor %}
Type Skill / Model Duration In / Out Cost Status
{{ pill(t.task_type, "neutral", "xs") }} {{ (t.skill_name or t.model_used or '—')[:22] }} {{ t.duration_ms }}ms {% if t.prompt_tokens or t.completion_tokens %} {{ t.prompt_tokens or 0 }}/{{ t.completion_tokens or 0 }} {% else %}—{% endif %} {% if t.cost_usd %} ${{ "%.6f"|format(t.cost_usd) }}{% else %}—{% endif %} {% if t.success %}{{ pill("OK", "success", "xs") }} {% else %}{{ pill("FAIL", "danger", "xs") }}{% endif %}
{% endif %} {% endblock %} {% block extra_scripts %} {% endblock %}