433 lines
20 KiB
HTML
433 lines
20 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>PPF Dashboard</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
<link rel="stylesheet" href="/static/lib/uPlot.min.css">
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<div class="hdr">
|
|
<h1>PPF Dashboard <a href="/map" style="font-size:12px;font-weight:normal;color:var(--dim);margin-left:12px">Map</a> <a href="/mitm" style="font-size:12px;font-weight:normal;color:var(--dim);margin-left:8px">MITM Search</a></h1>
|
|
<div class="status">
|
|
<span class="mode-badge mode-ssl" id="sslBadge" style="display:none">SSL</span>
|
|
<span id="checktypeBadges"></span>
|
|
<span class="mode-badge mode-profile" id="profileBadge" style="display:none">PROFILING</span>
|
|
<div class="status-item"><div class="dot" id="dot"></div><span id="statusTxt">Connecting</span></div>
|
|
<div class="status-item">Updated: <span id="lastUpdate">-</span></div>
|
|
<button class="theme-toggle" id="themeToggle" title="Toggle light/dark theme">
|
|
<span class="theme-toggle-icon">☾</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- System Monitor Bar -->
|
|
<div class="sysbar">
|
|
<div class="sysbar-item"><span class="sysbar-lbl">Load:</span><span class="sysbar-val" id="sysLoad">-</span></div>
|
|
<div class="sysbar-item"><span class="sysbar-lbl">Memory:</span><span class="sysbar-val" id="sysMemVal">-</span>
|
|
<div class="sysbar-bar"><div class="sysbar-fill" id="sysMemFill" style="width:0"></div></div>
|
|
<span class="sysbar-val" id="sysMemPct">-</span></div>
|
|
<div class="sysbar-item"><span class="sysbar-lbl">Disk:</span><span class="sysbar-val" id="sysDiskVal">-</span>
|
|
<div class="sysbar-bar"><div class="sysbar-fill" id="sysDiskFill" style="width:0"></div></div>
|
|
<span class="sysbar-val" id="sysDiskPct">-</span></div>
|
|
<div class="sysbar-item"><span class="sysbar-lbl">Process:</span><span class="sysbar-val" id="sysProcMem">-</span></div>
|
|
<div class="sysbar-item sysbar-net"><span class="sysbar-lbl">Scrape:</span><span class="sysbar-val net-tx" id="netScrapeTx">-</span><span class="sysbar-val net-rx" id="netScrapeRx">-</span></div>
|
|
<div class="sysbar-item sysbar-net"><span class="sysbar-lbl">Proxy:</span><span class="sysbar-val net-tx" id="netProxyTx">-</span><span class="sysbar-val net-rx" id="netProxyRx">-</span></div>
|
|
</div>
|
|
|
|
<!-- Primary Stats Row -->
|
|
<div class="g g5">
|
|
<div class="c">
|
|
<div class="lbl">Working Proxies</div>
|
|
<div class="val grn" id="working">-</div>
|
|
<div class="sub">of <span id="total">-</span> in database</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Tests (Cumulative)</div>
|
|
<div class="val" id="tested">-</div>
|
|
<div class="sub"><span class="grn" id="passed">-</span> passed / <span class="red" id="failed">-</span> failed</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Success Rate</div>
|
|
<div class="val-md grn" id="successRate">-</div>
|
|
<div class="bar-wrap"><div class="bar grn" id="srBar" style="width:0"></div></div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Test Rate</div>
|
|
<div class="val-md blu" id="rate">-</div>
|
|
<div class="sub">tests/sec (60s)</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Uptime</div>
|
|
<div class="val-md" id="uptime">-</div>
|
|
<div class="sub">session duration</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Worker Pool (always visible) -->
|
|
<div class="g g2" style="margin-bottom:16px">
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Worker Pool</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Active Threads</span><span class="stat-val" id="threads">-</span></div>
|
|
<div class="bar-wrap"><div class="bar blu" id="threadBar" style="width:0"></div></div>
|
|
<div class="stat-row" style="margin-top:8px"><span class="stat-lbl">Job Queue</span><span class="stat-val yel" id="queue">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Queue ETA</span><span class="stat-val cyn" id="queueEta">-</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Tor Pool</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Total Requests</span><span class="stat-val" id="torTotal">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Success Rate</span><span class="stat-val grn" id="torSuccess">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Healthy Nodes</span><span class="stat-val" id="torHealthy">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Avg Latency</span><span class="stat-val cyn" id="torLatency">-</span></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tab Navigation -->
|
|
<div class="tabs">
|
|
<div class="tab-nav">
|
|
<button class="tab-btn active" data-tab="perf">Performance</button>
|
|
<button class="tab-btn" data-tab="proto">Protocols</button>
|
|
<button class="tab-btn" data-tab="geo">Geography</button>
|
|
<button class="tab-btn" data-tab="infra">Infrastructure</button>
|
|
<button class="tab-btn" data-tab="mitm">MITM</button>
|
|
<button class="tab-btn" data-tab="db">Database</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Performance Tab -->
|
|
<div id="tab-perf" class="tab-content active">
|
|
<!-- Rate & Success Charts -->
|
|
<div class="g g2">
|
|
<div class="c c-lg">
|
|
<div class="lbl">Test Rate History (10 min)</div>
|
|
<div class="mini">
|
|
<div class="mini-item"><span class="mini-val blu" id="recentRate">-</span><span class="mini-lbl">current</span></div>
|
|
<div class="mini-item"><span class="mini-val yel" id="peakRate">-</span><span class="mini-lbl">peak</span></div>
|
|
<div class="mini-item"><span class="mini-val grn" id="passRate">-</span><span class="mini-lbl">pass/s</span></div>
|
|
</div>
|
|
<div class="chart-wrap">
|
|
<div class="chart chart-lg" id="rateChart"></div>
|
|
</div>
|
|
</div>
|
|
<div class="c c-lg">
|
|
<div class="lbl">Success Rate History</div>
|
|
<div class="mini">
|
|
<div class="mini-item"><span class="mini-val" id="recentSuccessRate">-</span><span class="mini-lbl">recent</span></div>
|
|
</div>
|
|
<div class="chart-wrap">
|
|
<div class="chart chart-lg" id="srChart"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Latency Section -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">Latency Analysis</div>
|
|
<div class="g g2">
|
|
<div class="c">
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Average</span><span class="stat-val cyn" id="avgLatency">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Min</span><span class="stat-val grn" id="minLatency">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Max</span><span class="stat-val red" id="maxLatency">-</span></div>
|
|
</div>
|
|
<div class="pct-badges">
|
|
<div class="pct-badge"><div class="pct-label">P50</div><div class="pct-value cyn" id="p50">-</div></div>
|
|
<div class="pct-badge"><div class="pct-label">P90</div><div class="pct-value yel" id="p90">-</div></div>
|
|
<div class="pct-badge"><div class="pct-label">P99</div><div class="pct-value org" id="p99">-</div></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Response Time Distribution</div>
|
|
<div class="histo-wrap">
|
|
<div class="histo" id="latencyHisto"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Protocols Tab -->
|
|
<div id="tab-proto" class="tab-content">
|
|
<!-- Protocol Breakdown -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">Protocol Performance</div>
|
|
<div class="g g3">
|
|
<div class="c proto-card">
|
|
<div class="proto-icon">🌐</div>
|
|
<div class="proto-name">HTTP</div>
|
|
<div class="proto-val grn" id="httpPassed">-</div>
|
|
<div class="sub">of <span id="httpTested">-</span> tested</div>
|
|
<div class="proto-rate tag-ok" id="httpRate">-</div>
|
|
</div>
|
|
<div class="c proto-card">
|
|
<div class="proto-icon">🔌</div>
|
|
<div class="proto-name">SOCKS4</div>
|
|
<div class="proto-val blu" id="socks4Passed">-</div>
|
|
<div class="sub">of <span id="socks4Tested">-</span> tested</div>
|
|
<div class="proto-rate tag-ok" id="socks4Rate">-</div>
|
|
</div>
|
|
<div class="c proto-card">
|
|
<div class="proto-icon">🔒</div>
|
|
<div class="proto-name">SOCKS5</div>
|
|
<div class="proto-val pur" id="socks5Passed">-</div>
|
|
<div class="sub">of <span id="socks5Tested">-</span> tested</div>
|
|
<div class="proto-rate tag-ok" id="socks5Rate">-</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Results & Failures -->
|
|
<div class="g g2">
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Test Results</div>
|
|
<div class="pie-wrap">
|
|
<div class="pie" id="resultsPie"></div>
|
|
<div class="legend">
|
|
<div class="legend-item"><div class="legend-dot" style="background:#3fb950"></div><span class="legend-name">Passed</span><span class="legend-val grn" id="passedLeg">-</span><span class="sub" id="passedPct">-</span></div>
|
|
<div class="legend-item"><div class="legend-dot" style="background:#f85149"></div><span class="legend-name">Failed</span><span class="legend-val red" id="failedLeg">-</span><span class="sub" id="failedPct">-</span></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Failure Breakdown</div>
|
|
<div class="pie-wrap">
|
|
<div class="pie" id="failPie"></div>
|
|
<div class="legend" id="failLegend"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Geography Tab -->
|
|
<div id="tab-geo" class="tab-content">
|
|
<!-- Geographic Distribution -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">Geographic Distribution <a href="/map" style="font-size:10px;font-weight:normal;margin-left:8px">View Map →</a></div>
|
|
<div class="g g2">
|
|
<div class="c">
|
|
<div class="lbl">Proxies by Country (Database)</div>
|
|
<div class="pie-wrap">
|
|
<div class="pie" id="countryPie"></div>
|
|
<div class="legend" id="countryLegend"></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Top ASNs (Session)</div>
|
|
<div class="lb-wrap">
|
|
<div class="lb" id="topAsns"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Infrastructure Tab -->
|
|
<div id="tab-infra" class="tab-content">
|
|
<!-- Judge Services & Anonymity -->
|
|
<div class="g g2">
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Judge Services</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Available</span><span class="stat-val grn" id="judgesAvail">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">In Cooldown</span><span class="stat-val yel" id="judgesCooldown">-</span></div>
|
|
</div>
|
|
<div class="lbl" style="margin-top:10px">Top Performers</div>
|
|
<div class="lb-wrap">
|
|
<div id="topJudges"></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Anonymity Levels</div>
|
|
<div class="stats-wrap">
|
|
<div id="anonBreakdown"></div>
|
|
</div>
|
|
<div class="sub" style="margin-top:8px;font-size:10px">Elite = no headers, Anonymous = adds headers, Transparent = reveals IP</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tor Exit Nodes -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">Tor Exit Nodes</div>
|
|
<div class="g g3" id="torPool"></div>
|
|
</div>
|
|
|
|
<!-- Network Usage -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">Network Usage</div>
|
|
<div class="g g3">
|
|
<div class="c c-sm">
|
|
<div class="lbl">Total RX</div>
|
|
<div class="val-sm grn" id="netRx">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Total TX</div>
|
|
<div class="val-sm blu" id="netTx">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Total</div>
|
|
<div class="val-sm cyn" id="netTotal">-</div>
|
|
</div>
|
|
</div>
|
|
<div class="g g2" style="margin-top:12px">
|
|
<div class="c">
|
|
<div class="lbl" style="text-align:center;margin-bottom:8px">By Category</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Proxy Testing</span><span class="stat-val cyn" id="netProxy">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Scraping</span><span class="stat-val yel" id="netScraper">-</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl" style="text-align:center;margin-bottom:8px">Rates (avg)</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">RX Rate</span><span class="stat-val grn" id="netRxRate">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">TX Rate</span><span class="stat-val blu" id="netTxRate">-</span></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="lbl" style="margin-top:12px">Per Tor Node</div>
|
|
<div class="g g3" id="netTorNodes"></div>
|
|
</div>
|
|
|
|
<!-- Scraper & SSL Stats -->
|
|
<div class="g g2">
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Search Engines</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Available</span><span class="stat-val grn" id="engAvail">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">In Backoff</span><span class="stat-val yel" id="engBackoff">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Total</span><span class="stat-val" id="engTotal">-</span></div>
|
|
</div>
|
|
<div class="lbl" style="margin-top:10px">Top Engines</div>
|
|
<div class="lb-wrap">
|
|
<div class="lb" id="topEngines"></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">SSL/TLS Security</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">SSL Tests</span><span class="stat-val" id="sslTested">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Passed</span><span class="stat-val grn" id="sslPassed">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Failed</span><span class="stat-val red" id="sslFailed">-</span></div>
|
|
<div class="bar-wrap" style="margin:8px 0"><div class="bar grn" id="sslBar" style="width:0"></div></div>
|
|
<div class="stat-row"><span class="stat-lbl">MITM Detected</span><span class="stat-val red" id="mitmDetected">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Cert Errors</span><span class="stat-val yel" id="certErrors">-</span></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- MITM Tab -->
|
|
<div id="tab-mitm" class="tab-content">
|
|
<!-- MITM Certificate Statistics -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">MITM Detection Summary</div>
|
|
<div class="g g4">
|
|
<div class="c c-sm">
|
|
<div class="lbl">Total Detections</div>
|
|
<div class="val-sm red" id="mitmTotal">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Unique Certs</div>
|
|
<div class="val-sm yel" id="mitmUniqueCerts">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Unique Proxies</div>
|
|
<div class="val-sm org" id="mitmUniqueProxies">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">SSL Tests</div>
|
|
<div class="val-sm cyn" id="mitmSslTests">-</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="g g2">
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Top Organizations</div>
|
|
<div class="lb-wrap">
|
|
<div class="lb" id="mitmOrgs"></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="sec-hdr" style="margin-top:0">Top Issuers</div>
|
|
<div class="lb-wrap">
|
|
<div class="lb" id="mitmIssuers"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sec">
|
|
<div class="sec-hdr">Certificate Details</div>
|
|
<div class="stats-wrap" id="mitmCerts" style="max-height:300px;overflow-y:auto"></div>
|
|
</div>
|
|
<div class="sec">
|
|
<div class="sec-hdr">Recent Detections</div>
|
|
<div class="stats-wrap" id="mitmRecent" style="max-height:200px;overflow-y:auto"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Database Tab -->
|
|
<div id="tab-db" class="tab-content">
|
|
<!-- Database Stats -->
|
|
<div class="sec">
|
|
<div class="sec-hdr">Database Overview</div>
|
|
<div class="g g4">
|
|
<div class="c c-sm">
|
|
<div class="lbl">Database Size</div>
|
|
<div class="val-sm cyn" id="dbSize">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Tested (1h)</div>
|
|
<div class="val-sm blu" id="dbTestedHour">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Added (24h)</div>
|
|
<div class="val-sm grn" id="dbAddedDay">-</div>
|
|
</div>
|
|
<div class="c c-sm">
|
|
<div class="lbl">Dead Proxies</div>
|
|
<div class="val-sm red" id="dbDead">-</div>
|
|
</div>
|
|
</div>
|
|
<div class="g g3">
|
|
<div class="c">
|
|
<div class="lbl">Working by Protocol</div>
|
|
<div class="stats-wrap">
|
|
<div id="dbByProto"></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Latency Stats</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Average</span><span class="stat-val cyn" id="dbAvgLat">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Min</span><span class="stat-val grn" id="dbMinLat">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Max</span><span class="stat-val red" id="dbMaxLat">-</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="c">
|
|
<div class="lbl">Activity</div>
|
|
<div class="stats-wrap">
|
|
<div class="stat-row"><span class="stat-lbl">Failing</span><span class="stat-val yel" id="dbFailing">-</span></div>
|
|
<div class="stat-row"><span class="stat-lbl">Freelist</span><span class="stat-val" id="dbFreelist">-</span></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ftr">PPF Python Proxy Finder</div>
|
|
</div>
|
|
<script src="/static/lib/uPlot.min.js"></script>
|
|
<script src="/static/lib/chart.min.js"></script>
|
|
<script src="/static/dashboard.js"></script>
|
|
</body>
|
|
</html>
|