fix(metrics): fix metrics

This commit is contained in:
Juergen Kunz
2025-06-22 23:40:02 +00:00
parent 92fde9d0d7
commit d24e51117d
6 changed files with 545 additions and 127 deletions

View File

@ -234,49 +234,52 @@ export class SecurityHandler {
const connectionInfo = await this.opsServerRef.dcRouterRef.metricsManager.getConnectionInfo();
const networkStats = await this.opsServerRef.dcRouterRef.metricsManager.getNetworkStats();
// Map connection info to detailed format with real IP data
connectionInfo.forEach((info, index) => {
connections.push({
id: `conn-${index}`,
type: 'http', // Connections through proxy are HTTP/HTTPS
source: {
ip: '0.0.0.0', // TODO: SmartProxy doesn't expose individual connection IPs yet
port: 0,
},
destination: {
ip: '0.0.0.0',
port: 443,
service: info.source,
},
startTime: info.lastActivity.getTime(),
bytesTransferred: 0, // TODO: Track bytes per connection
status: 'active',
});
});
// If we have IP-based connection data, add synthetic entries for visualization
// This provides a more realistic view until SmartProxy exposes per-connection IPs
// Use IP-based connection data from the new metrics API
if (networkStats.connectionsByIP && networkStats.connectionsByIP.size > 0) {
let connIndex = connections.length;
let connIndex = 0;
const publicIp = this.opsServerRef.dcRouterRef.options.publicIp || 'server';
for (const [ip, count] of networkStats.connectionsByIP) {
// Add a representative connection for each IP
// Create a connection entry for each active IP connection
for (let i = 0; i < Math.min(count, 5); i++) { // Limit to 5 connections per IP for UI performance
connections.push({
id: `conn-${connIndex++}`,
type: 'http',
source: {
ip: ip,
port: Math.floor(Math.random() * 50000) + 10000, // High port range
},
destination: {
ip: publicIp,
port: 443,
service: 'proxy',
},
startTime: Date.now() - Math.floor(Math.random() * 3600000), // Within last hour
bytesTransferred: Math.floor(networkStats.totalDataTransferred.bytesIn / networkStats.connectionsByIP.size),
status: 'active',
});
}
}
} else if (connectionInfo.length > 0) {
// Fallback to route-based connection info if no IP data available
connectionInfo.forEach((info, index) => {
connections.push({
id: `conn-${connIndex++}`,
id: `conn-${index}`,
type: 'http',
source: {
ip: ip,
port: Math.floor(Math.random() * 50000) + 10000, // Random high port
ip: 'unknown',
port: 0,
},
destination: {
ip: this.opsServerRef.dcRouterRef.options.publicIp || '0.0.0.0',
ip: this.opsServerRef.dcRouterRef.options.publicIp || 'server',
port: 443,
service: 'proxy',
service: info.source,
},
startTime: Date.now() - Math.floor(Math.random() * 3600000), // Random time within last hour
bytesTransferred: Math.floor(networkStats.totalDataTransferred.bytesIn / count), // Average bytes per IP
startTime: info.lastActivity.getTime(),
bytesTransferred: 0,
status: 'active',
});
}
});
}
}