93 lines
3.2 KiB
JavaScript
93 lines
3.2 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { getDb } = require('../db');
|
|
|
|
router.get('/', (req, res) => {
|
|
const db = getDb();
|
|
const tab = req.query.tab || 'overview';
|
|
|
|
const totalRacks = db.prepare('SELECT COUNT(*) as cnt FROM racks').get().cnt;
|
|
const totalRackDevices = db.prepare('SELECT COUNT(*) as cnt FROM rack_devices').get().cnt;
|
|
const totalNetworkDevices = db.prepare('SELECT COUNT(*) as cnt FROM network_devices').get().cnt;
|
|
const totalConnections = db.prepare('SELECT COUNT(*) as cnt FROM network_connections').get().cnt;
|
|
const totalDiagrams = db.prepare('SELECT COUNT(*) as cnt FROM data_diagrams').get().cnt;
|
|
|
|
const racksByClient = db.prepare(`
|
|
SELECT c.name as client_name, COUNT(*) as cnt
|
|
FROM racks r JOIN clients c ON c.id = r.client_id
|
|
GROUP BY c.id ORDER BY cnt DESC LIMIT 10
|
|
`).all();
|
|
|
|
const deviceTypes = db.prepare(`
|
|
SELECT device_type, COUNT(*) as cnt
|
|
FROM rack_devices GROUP BY device_type ORDER BY cnt DESC
|
|
`).all();
|
|
|
|
const netDeviceTypes = db.prepare(`
|
|
SELECT device_type, COUNT(*) as cnt
|
|
FROM network_devices GROUP BY device_type ORDER BY cnt DESC
|
|
`).all();
|
|
|
|
const diagramTypes = db.prepare(`
|
|
SELECT diagram_type, COUNT(*) as cnt
|
|
FROM data_diagrams GROUP BY diagram_type ORDER BY cnt DESC
|
|
`).all();
|
|
|
|
const recentRacks = db.prepare(`
|
|
SELECT r.*, c.name as client_name,
|
|
(SELECT COUNT(*) FROM rack_devices d WHERE d.rack_id = r.id) as device_count
|
|
FROM racks r JOIN clients c ON c.id = r.client_id
|
|
ORDER BY r.updated_at DESC LIMIT 6
|
|
`).all();
|
|
|
|
const recentDiagrams = db.prepare(`
|
|
SELECT d.*, c.name as client_name
|
|
FROM data_diagrams d JOIN clients c ON c.id = d.client_id
|
|
ORDER BY d.updated_at DESC LIMIT 6
|
|
`).all();
|
|
|
|
const recentNetDevices = db.prepare(`
|
|
SELECT nd.*, c.name as client_name
|
|
FROM network_devices nd JOIN clients c ON c.id = nd.client_id
|
|
ORDER BY nd.updated_at DESC LIMIT 6
|
|
`).all();
|
|
|
|
const racks = db.prepare(`
|
|
SELECT r.*, c.name as client_name,
|
|
(SELECT COUNT(*) FROM rack_devices d WHERE d.rack_id = r.id) as device_count
|
|
FROM racks r JOIN clients c ON c.id = r.client_id ORDER BY r.updated_at DESC
|
|
`).all();
|
|
|
|
const netDevices = db.prepare(`
|
|
SELECT nd.*, c.name as client_name
|
|
FROM network_devices nd JOIN clients c ON c.id = nd.client_id
|
|
ORDER BY nd.updated_at DESC
|
|
`).all();
|
|
|
|
const connections = db.prepare(`
|
|
SELECT nc.*, c.name as client_name
|
|
FROM network_connections nc JOIN clients c ON c.id = nc.client_id
|
|
ORDER BY nc.created_at DESC
|
|
`).all();
|
|
|
|
const diagrams = db.prepare(`
|
|
SELECT d.*, c.name as client_name,
|
|
json_array_length(d.nodes) as node_count
|
|
FROM data_diagrams d JOIN clients c ON c.id = d.client_id
|
|
ORDER BY d.updated_at DESC
|
|
`).all();
|
|
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
|
const hardwareLibrary = require('../data/hardware-library');
|
|
|
|
res.render('infrastructure', {
|
|
tab, racks, clients, hardwareLibrary,
|
|
netDevices, connections, diagrams,
|
|
totalRacks, totalRackDevices, totalNetworkDevices, totalConnections, totalDiagrams,
|
|
racksByClient, deviceTypes, netDeviceTypes, diagramTypes,
|
|
recentRacks, recentDiagrams, recentNetDevices
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|