From 806cfc0a6455923dd34992a34d370ead63b5f7ad Mon Sep 17 00:00:00 2001
From: PM-pinou <2504420230@qq.com>
Date: Fri, 24 Jul 2026 14:13:04 +0800
Subject: [PATCH] preview: add run_detail preview + cluster_detail variance
text descriptions
---
preview_cluster_detail.html | 14 +-
preview_run_detail.html | 184 +++++++++++++++++++++++++
server_stderr.txt | 258 ++++++++++++++++--------------------
server_stdout.txt | 2 +-
4 files changed, 308 insertions(+), 150 deletions(-)
create mode 100644 preview_run_detail.html
diff --git a/preview_cluster_detail.html b/preview_cluster_detail.html
index 667a414..ed95bd5 100644
--- a/preview_cluster_detail.html
+++ b/preview_cluster_detail.html
@@ -39,14 +39,14 @@ h2{font-size:1.2rem}.badge{display:inline-block;padding:.15rem .5rem;border-radi
📊 特征分析 12 个特征
- | # | 特征名 | 区分度 | 均值 | 标准差 | 中位数 | P25 | P75 |
+ | # | 特征名 | 区分度 | 均值 | 标准差 | 中位数 | P25 | P75 | 离散度 |
- | 1 | 延迟 (4dur) | +3.213 | 23.0ms | 5.1 | 21ms | 18ms | 26ms |
- | 2 | 数据包 (8ppk) | +2.346 | 1520.0B | 128 | 1480B | 1400B | 1650B |
- | 3 | TLS版本 (0ver) | -1.845 | 1.2 | 0.3 | 1.2 | 1.2 | 1.3 |
- | 4 | 目标端口 (:prd) | +1.821 | 443 | 12 | 443 | 443 | 443 |
- | 5 | 会话时长 (8ses) | -1.523 | 15s | 4s | 14s | 12s | 18s |
- | 6 | 密钥大小 (4ksz) | +1.234 | 256 | 0 | 256 | 256 | 256 |
+ | 1 | 延迟 (4dur) | +3.213 | 23.0ms | 5.1 | 21ms | 18ms | 26ms | 离散中 |
+ | 2 | 数据包 (8ppk) | +2.346 | 1520.0B | 128 | 1480B | 1400B | 1650B | 离散中 |
+ | 3 | TLS版本 (0ver) | -1.845 | 1.2 | 0.3 | 1.2 | 1.2 | 1.3 | 高度集中 |
+ | 4 | 目标端口 (:prd) | +1.821 | 443 | 12 | 443 | 443 | 443 | 极集中 |
+ | 5 | 会话时长 (8ses) | -1.523 | 15s | 4s | 14s | 12s | 18s | 离散中 |
+ | 6 | 密钥大小 (4ksz) | +1.234 | 256 | 0 | 256 | 256 | 256 | 零离散 |
diff --git a/preview_run_detail.html b/preview_run_detail.html
new file mode 100644
index 0000000..8625bf5
--- /dev/null
+++ b/preview_run_detail.html
@@ -0,0 +1,184 @@
+
+
+运行详情 — 预览
+
+
+
+
+
+
+
运行 #9
+
2024-01-15 08:23 — 状态: 完成
+
+
聚类概览 →
+
+
+
+
+
+
+
+
+
🔬 全域 SVD 特征分析 基于 1,284,592 行数据
+
+
奇异值分解 (TruncatedSVD) 降维后的各主成分解释方差比例与贡献特征。
+
+
+
PC1
+
解释方差: 42.3%累积: 42.3%
+
+
+ 8pak: 0.321
+ 8ack: 0.284
+ 4dur: 0.198
+ 8ses: 0.156
+ 2tmo: 0.112
+
+
+
+
PC2
+
解释方差: 28.7%累积: 71.0%
+
+
+ :prd: 0.412
+ :prs: 0.334
+ 1ipp: 0.187
+ 0ver: 0.098
+ 4dbn: 0.045
+
+
+
+
PC3
+
解释方差: 15.2%累积: 86.2%
+
+
+ 0ver: 0.502
+ 4ksz: 0.321
+ 0cph: 0.145
+ 0crv: 0.088
+ cnam: 0.032
+
+
+
+
PC4
+
解释方差: 8.9%累积: 95.1%
+
+
+ snam: 0.432
+ cnam: 0.356
+ ecdhe: 0.178
+ :ips: 0.089
+ :ipd: 0.034
+
+
+
+
PC5
+
解释方差: 4.9%累积: 100%
+
+
+ timestamp: 0.523
+ 8dbd: 0.312
+ 8seq: 0.145
+ 8did: 0.067
+ row: 0.021
+
+
+
+
前 3 个主成分解释了 86.2% 的方差。SVD 去噪保留 95% 方差,去除 ~5% 作为底噪。
+
+
+
+
+
🧠 LLM 自动分析流程
+
+
+
步骤 0
+
💭 思考:先对数据集进行概要分析,了解列类型和分布后再决定下一步。
+
+
+
+
步骤 1
+
💭 思考:数据包含 28 个数值列,选择聚类相关的特征列进行分析。
+
+
+
+
步骤 2
+
💭 思考:数据准备完成,对原始行进行聚类分析(KMeans,3 个簇)。
+
+
+
+
步骤 3
+
💭 思考:✅ 分析完成。聚类产生 3 个簇,轮廓系数 0.68。簇 #0(66%,低延迟大数据包)、簇 #1(24%,高TLS1.3短会话)、簇 #2(9%,高频非标准端口)。
+
+ ✅ 回答
+ 聚类分析完成,数据划分为 3 个行为簇:
+ • 簇 #0(847,293 条,66%):低延迟、大数据包、目标端口集中于443 —— 典型的 正常HTTPS流量
+ • 簇 #1(311,482 条,24%):高TLS1.3比例、短会话、ECDHE X25519 —— 现代浏览器访问
+ • 簇 #2(112,970 条,9%):高连接频率、非标准端口、多域名 —— API/微服务调用
+
+
+
+
+
+
+
+
📊 聚类结果
+
+ | 簇 | 大小 | 比例 | 轮廓系数 | |
+
+ | #0 | 847,293 | 0.66 | 0.7100 | 详情 |
+ | #1 | 311,482 | 0.24 | 0.6500 | 详情 |
+ | #2 | 112,970 | 0.09 | 0.5200 | 详情 |
+
+
+
+
+
+
+
diff --git a/server_stderr.txt b/server_stderr.txt
index 052cb54..cb3dc31 100644
--- a/server_stderr.txt
+++ b/server_stderr.txt
@@ -1,143 +1,117 @@
Restored 1 datasets from disk
-[2026-07-24 12:30:18,755] INFO analysis.data_loader: [LOAD] files=1 total_rows_est=200
-[2026-07-24 12:30:18,742] INFO django: Restored 1 datasets from disk
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=0cph dtype=String
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=0crv dtype=String
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=0rnd dtype=String
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=0rnt dtype=String
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=0ver dtype=String
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=1ipp dtype=Int64
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=2tmo dtype=Float64
-[2026-07-24 12:30:18,811] INFO analysis.data_loader: [LOAD_SCHEMA] col=4dbn dtype=Int64
-[2026-07-24 12:30:18,817] INFO analysis.data_loader: [LOAD_SCHEMA] col=4dur dtype=Float64
-[2026-07-24 12:30:18,817] INFO analysis.data_loader: [LOAD_SCHEMA] col=4ksz dtype=Int64
-[2026-07-24 12:30:18,817] INFO analysis.data_loader: [LOAD_SCHEMA] col=4srs dtype=Int64
-[2026-07-24 12:30:18,817] INFO analysis.data_loader: [LOAD_SCHEMA] col=8ack dtype=Int64
-[2026-07-24 12:30:18,817] INFO analysis.data_loader: [LOAD_SCHEMA] col=8byt dtype=Int64
-[2026-07-24 12:30:18,817] INFO analysis.data_loader: [LOAD_SCHEMA] col=8dbd dtype=Int64
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=8did dtype=Int64
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=8pak dtype=Int64
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=8ppk dtype=Int64
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=8seq dtype=Float64
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=8ses dtype=Float64
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd dtype=String
-[2026-07-24 12:30:18,818] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.anon dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.city dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.doma dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.ispn dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.latd dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.lond dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ipd.orgn dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.anon dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.city dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.doma dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.ispn dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.latd dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.lond dtype=String
-[2026-07-24 12:30:18,822] INFO analysis.data_loader: [LOAD_SCHEMA] col=:ips.orgn dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=:prd dtype=Int64
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=:prs dtype=Int64
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=cipher-suite dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=client-ip dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=cnam dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=crcc dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=dcnt dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=ecdhe-named-curve dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=name dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=orga dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=orgu dtype=Int64
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=scnt dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=server-ip dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=snam dtype=String
-[2026-07-24 12:30:18,827] INFO analysis.data_loader: [LOAD_SCHEMA] col=source-node dtype=String
-[2026-07-24 12:30:18,832] INFO analysis.data_loader: [LOAD_SCHEMA] col=tabl dtype=String
-[2026-07-24 12:30:18,832] INFO analysis.data_loader: [LOAD_SCHEMA] col=time dtype=String
-[2026-07-24 12:30:18,832] INFO analysis.data_loader: [LOAD_SCHEMA] col=timestamp dtype=Float64
-[2026-07-24 12:30:18,840] INFO analysis.data_loader: [CLEAN] Generic numeric coercion applied: [':ipd.lond', ':ipd.doma', ':ipd.ispn', 'cnam', ':ips.ispn', ':ips.doma', 'orga', 'snam', 'time', ':ips.orgn', ':ipd.orgn', 'crcc', ':ips.latd', ':ipd.latd', ':ips.city', ':ipd.city', ':ips.lond']
-[2026-07-24 12:30:18,840] INFO analysis.data_loader: [CLEAN] HEX columns added hex_pairs_count: ['0cph', '0crv', '0ver', '0rnt', '0rnd']
-[24/Jul/2026 12:30:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:31:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:31:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:32:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:32:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:33:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:33:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:34:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:34:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:35:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:35:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:36:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:36:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:37:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:37:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:38:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:38:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:39:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:39:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:40:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:40:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:41:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:41:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:42:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:42:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:43:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:43:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:44:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:44:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:45:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:45:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:46:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:46:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:47:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:47:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:48:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:48:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:49:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:49:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:50:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:50:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:51:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:51:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:52:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:52:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:53:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:53:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:54:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:54:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:55:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:55:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:56:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:56:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:57:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:57:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:58:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:58:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:59:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 12:59:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:00:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:00:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:01:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:01:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:02:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:02:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:03:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:03:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:04:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:04:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:05:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:05:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:06:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:06:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:07:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:07:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:08:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:08:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:09:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:09:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:10:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:10:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:11:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:11:37] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:12:07] "HEAD / HTTP/1.1" 200 0
-[24/Jul/2026 13:12:37] "HEAD / HTTP/1.1" 200 0
+[2026-07-24 14:04:56,246] INFO django: Restored 1 datasets from disk
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD] files=1 total_rows_est=200
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0cph dtype=String
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0crv dtype=String
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0rnd dtype=String
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0rnt dtype=String
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0ver dtype=String
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=1ipp dtype=Int64
+[2026-07-24 14:04:56,258] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=2tmo dtype=Float64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4dbn dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4dur dtype=Float64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4ksz dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4srs dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8ack dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8byt dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8dbd dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8did dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8pak dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8ppk dtype=Int64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8seq dtype=Float64
+[2026-07-24 14:04:56,265] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8ses dtype=Float64
+[2026-07-24 14:04:56,270] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd dtype=String
+[2026-07-24 14:04:56,270] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.anon dtype=String
+[2026-07-24 14:04:56,270] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.city dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.doma dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.ispn dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.latd dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.lond dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.orgn dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.anon dtype=String
+[2026-07-24 14:04:56,271] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.city dtype=String
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.doma dtype=String
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.ispn dtype=String
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.latd dtype=String
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.lond dtype=String
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.orgn dtype=String
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:prd dtype=Int64
+[2026-07-24 14:04:56,274] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:prs dtype=Int64
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=cipher-suite dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=client-ip dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=cnam dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=crcc dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=dcnt dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=ecdhe-named-curve dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=name dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=orga dtype=String
+[2026-07-24 14:04:56,276] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=orgu dtype=Int64
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=scnt dtype=String
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=server-ip dtype=String
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=snam dtype=String
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=source-node dtype=String
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=tabl dtype=String
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=time dtype=String
+[2026-07-24 14:04:56,280] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=timestamp dtype=Float64
+[2026-07-24 14:04:56,290] INFO analysis.data_loader._csv: [CLEAN] Generic numeric coercion applied: [':ipd.lond', '0cph', ':ips.anon', '0crv', ':ipd.doma', ':ipd.ispn', '0ver', 'scnt', 'cnam', ':ips.ispn', 'tabl', 'cipher-suite', ':ips.doma', 'orga', 'snam', 'time', ':ips.orgn', ':ipd.orgn', '0rnt', 'crcc', 'ecdhe-named-curve', 'dcnt', ':ips.latd', ':ipd.latd', ':ips.city', ':ipd.city', ':ipd.anon', ':ips.lond', '0rnd']
+[24/Jul/2026 14:05:07] "HEAD / HTTP/1.1" 200 0
+[2026-07-24 14:05:22,226] INFO analysis.data_loader._csv: [LOAD] files=1 total_rows_est=200
+[2026-07-24 14:05:22,292] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0cph dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0crv dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0rnd dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0rnt dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=0ver dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=1ipp dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=2tmo dtype=Float64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4dbn dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4dur dtype=Float64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4ksz dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=4srs dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8ack dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8byt dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8dbd dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8did dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8pak dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8ppk dtype=Int64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8seq dtype=Float64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=8ses dtype=Float64
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.anon dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.city dtype=String
+[2026-07-24 14:05:22,293] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.doma dtype=String
+[2026-07-24 14:05:22,300] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.ispn dtype=String
+[2026-07-24 14:05:22,300] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.latd dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.lond dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ipd.orgn dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.anon dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.city dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.doma dtype=String
+[2026-07-24 14:05:22,301] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.ispn dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.latd dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.lond dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:ips.orgn dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:prd dtype=Int64
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=:prs dtype=Int64
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=cipher-suite dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=client-ip dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=cnam dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=crcc dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=dcnt dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=ecdhe-named-curve dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=name dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=orga dtype=String
+[2026-07-24 14:05:22,304] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=orgu dtype=Int64
+[2026-07-24 14:05:22,309] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=scnt dtype=String
+[2026-07-24 14:05:22,310] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=server-ip dtype=String
+[2026-07-24 14:05:22,310] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=snam dtype=String
+[2026-07-24 14:05:22,310] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=source-node dtype=String
+[2026-07-24 14:05:22,310] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=tabl dtype=String
+[2026-07-24 14:05:22,310] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=time dtype=String
+[2026-07-24 14:05:22,310] INFO analysis.data_loader._csv: [LOAD_SCHEMA] col=timestamp dtype=Float64
+[2026-07-24 14:05:22,315] INFO analysis.data_loader._csv: [CLEAN] Generic numeric coercion applied: [':ipd.lond', '0cph', ':ips.anon', '0crv', ':ipd.doma', ':ipd.ispn', '0ver', 'scnt', 'cnam', ':ips.ispn', 'tabl', 'cipher-suite', ':ips.doma', 'orga', 'snam', 'time', ':ips.orgn', ':ipd.orgn', '0rnt', 'crcc', 'ecdhe-named-curve', 'dcnt', ':ips.latd', ':ipd.latd', ':ips.city', ':ipd.city', ':ipd.anon', ':ips.lond', '0rnd']
+[2026-07-24 14:05:22,337] INFO analysis.geoip: [GEOIP] loaded 0 ranges (0 skipped)
+[2026-07-24 14:05:22,337] INFO analysis.geoip: [GEOIP] loaded 211 cached entries
+[24/Jul/2026 14:05:22] "GET /clusters/9/ HTTP/1.1" 200 28390
+[24/Jul/2026 14:05:22] "GET /globe/?embed=1&data=upload_9 HTTP/1.1" 200 5545
diff --git a/server_stdout.txt b/server_stdout.txt
index 76bedb5..e65e70c 100644
--- a/server_stdout.txt
+++ b/server_stdout.txt
@@ -1,7 +1,7 @@
Performing system checks...
System check identified no issues (0 silenced).
-July 24, 2026 - 12:30:18
+July 24, 2026 - 14:04:56
Django version 4.2.30, using settings 'tianxuan.settings'
Starting development server at http://127.0.0.1:8765/
Quit the server with CTRL-BREAK.