feat: complete deployment codebase for BackOne DPI dashboard with dynamic telemetry, rebranding, database size tracking, and modular design
This commit is contained in:
1 parent
6cf3c6c7e5
commit
c316f3171b
226 files changed
+21152
-8397
No files matched your search
@@ -0,0 +1,67 @@
|
||||
const { CustomDeviceLabel, Flow } = require('../../models/Schemas');
|
||||
|
||||
function getTimeFilter(req) {
|
||||
const range = req.query.timeRange || '1d';
|
||||
if (range === 'all') return null;
|
||||
const now = new Date();
|
||||
const ms = {
|
||||
'5m': 5 * 60000,
|
||||
'30m': 30 * 60000,
|
||||
'1h': 60 * 60000,
|
||||
'1d': 24 * 3600000,
|
||||
'7d': 7 * 24 * 3600000,
|
||||
};
|
||||
const delta = ms[range] ?? ms['1d'];
|
||||
return { $gte: new Date(now.getTime() - delta) };
|
||||
}
|
||||
|
||||
function getBaseFilter(req, timeFilter = null) {
|
||||
const filter = {};
|
||||
if (timeFilter) filter.timestamp = timeFilter;
|
||||
if (req.user?.site_uuid) filter.site_uuid = req.user.site_uuid;
|
||||
if (req.user?.role === 'AGENT_VIEWER' && req.user?.agent_uuid) {
|
||||
filter.agent_uuid = req.user.agent_uuid;
|
||||
} else if (req.query?.agent_uuid) {
|
||||
filter.agent_uuid = req.query.agent_uuid;
|
||||
}
|
||||
return filter;
|
||||
}
|
||||
|
||||
async function getCustomLabelsMap() {
|
||||
try {
|
||||
const list = await CustomDeviceLabel.find().lean();
|
||||
const map = {};
|
||||
list.forEach(c => {
|
||||
map[c.mac_address] = c.device_label;
|
||||
});
|
||||
return map;
|
||||
} catch (err) {
|
||||
console.error('[getCustomLabelsMap] failed:', err.message);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
async function topFlowField(fieldName, req, limit = 20) {
|
||||
const timeFilter = getTimeFilter(req);
|
||||
const matchBase = getBaseFilter(req, timeFilter);
|
||||
|
||||
return Flow.aggregate([
|
||||
{ $match: { ...matchBase, [fieldName]: { $ne: null, $ne: '' } } },
|
||||
{ $group: {
|
||||
_id: `$${fieldName}`,
|
||||
download: { $sum: '$download' },
|
||||
upload: { $sum: '$upload' },
|
||||
count: { $sum: 1 },
|
||||
}},
|
||||
{ $project: { label: '$_id', download: 1, upload: 1, count: 1, _id: 0 } },
|
||||
{ $sort: { download: -1 } },
|
||||
{ $limit: limit },
|
||||
]);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getTimeFilter,
|
||||
getBaseFilter,
|
||||
getCustomLabelsMap,
|
||||
topFlowField
|
||||
};
|
||||
Reference in new issue
Block a user