57 lines
2.1 KiB
HTML
57 lines
2.1 KiB
HTML
{% extends 'base.html' %}
|
|
{% block title %}Run #{{ run.id }} - TLS Analyzer{% endblock %}
|
|
{% block content %}
|
|
<div class="card">
|
|
<h2>Run #{{ run.id }} — {{ run.created_at|date:"Y-m-d H:i" }}</h2>
|
|
<p>Status: <span class="badge {% if run.status == 'completed' %}badge-success{% elif run.status == 'failed' %}badge-danger{% else %}badge-info{% endif %}">{{ run.get_status_display }}</span></p>
|
|
<p>CSV: <code>{{ run.csv_glob }}</code></p>
|
|
<p>Entity Column: {{ run.entity_column|default:"(not detected)" }}</p>
|
|
</div>
|
|
|
|
<div class="grid-3">
|
|
<div class="card" style="text-align:center;">
|
|
<div class="stat">{{ run.total_flows|default:"0" }}</div>
|
|
<div class="stat-label">Total Flows</div>
|
|
</div>
|
|
<div class="card" style="text-align:center;">
|
|
<div class="stat">{{ run.entity_count|default:"0" }}</div>
|
|
<div class="stat-label">Entities</div>
|
|
</div>
|
|
<div class="card" style="text-align:center;">
|
|
<div class="stat">{{ run.cluster_count|default:"0" }}</div>
|
|
<div class="stat-label">Clusters</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Clusters</h2>
|
|
<a href="{% url 'analysis:cluster_overview' run.id %}" class="btn btn-primary" style="margin-bottom:1rem;">View Cluster Overview</a>
|
|
{% if clusters %}
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Cluster</th>
|
|
<th>Size</th>
|
|
<th>Proportion</th>
|
|
<th>Silhouette</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for c in clusters %}
|
|
<tr>
|
|
<td><span class="badge badge-info">#{{ c.cluster_label }}</span></td>
|
|
<td>{{ c.size }}</td>
|
|
<td>{{ c.proportion|floatformat:2 }}</td>
|
|
<td>{{ c.silhouette_score|floatformat:4|default:"-" }}</td>
|
|
<td><a href="{% url 'analysis:cluster_detail' run.id c.cluster_label %}" class="btn btn-primary">Detail</a></td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% else %}
|
|
<div class="empty-state"><p>No clusters yet.</p></div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|