@ajejoseph22/proxx
Version:
A lightweight HTTPS/HTTP proxy server with bandwidth tracking, basic auth and real-time analytics.
50 lines (49 loc) • 2.09 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetricsService = void 0;
class MetricsService {
constructor(databaseService) {
this.defaultMetricRecord = {
visits: 0,
bytesTransferred: 0,
};
this.databaseService = databaseService;
}
updateMetrics(url, bytes) {
return __awaiter(this, void 0, void 0, function* () {
const metrics = this.databaseService.getData().metrics;
const record = metrics[url] || this.defaultMetricRecord;
record.visits += 1;
record.bytesTransferred += bytes;
metrics[url] = record;
yield this.databaseService.save({ metrics });
});
}
getAllMetrics() {
const dbMetrics = this.databaseService.getData().metrics;
let totalBytes = 0;
const sites = {};
for (const [url, record] of Object.entries(dbMetrics)) {
totalBytes += record.bytesTransferred;
sites[url] = record.visits;
}
const topSites = Object.entries(sites)
.sort((a, b) => b[1] - a[1])
.slice(0, 10)
.map(([url, visits]) => ({ url, visits }));
return {
bandwidth_usage: `${(totalBytes / (1024 * 1024)).toFixed(2)}MB`,
top_sites: topSites,
};
}
}
exports.MetricsService = MetricsService;