| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.ClientConnectionModel = void 0;
- const database_1 = require("../config/database");
- class ClientConnectionModel {
- static async getAll(limit, offset) {
- let query = 'SELECT * FROM vw_client_connections ORDER BY timestamp DESC';
- const params = [];
- if (limit !== undefined) {
- query += ' LIMIT ?';
- params.push(limit);
- if (offset !== undefined) {
- query += ' OFFSET ?';
- params.push(offset);
- }
- }
- return await (0, database_1.executeQuery)(query, params);
- }
- static async getAllWithFilters(limit, offset, filters) {
- let query = 'SELECT * FROM vw_client_connections WHERE 1=1';
- const params = [];
- if (filters?.clientid) {
- query += ' AND clientid LIKE ?';
- params.push(`%${filters.clientid}%`);
- }
- if (filters?.event) {
- query += ' AND event = ?';
- params.push(filters.event);
- }
- if (filters?.startDate) {
- query += ' AND timestamp >= ?';
- params.push(new Date(filters.startDate));
- }
- if (filters?.endDate) {
- query += ' AND timestamp <= ?';
- params.push(new Date(filters.endDate));
- }
- query += ' ORDER BY timestamp DESC';
- if (limit !== undefined) {
- query += ' LIMIT ?';
- params.push(limit);
- if (offset !== undefined) {
- query += ' OFFSET ?';
- params.push(offset);
- }
- }
- return await (0, database_1.executeQuery)(query, params);
- }
- static async getCountWithFilters(filters) {
- let query = 'SELECT COUNT(*) as count FROM vw_client_connections WHERE 1=1';
- const params = [];
- if (filters?.clientid) {
- query += ' AND clientid LIKE ?';
- params.push(`%${filters.clientid}%`);
- }
- if (filters?.event) {
- query += ' AND event = ?';
- params.push(filters.event);
- }
- if (filters?.startDate) {
- query += ' AND timestamp >= ?';
- params.push(new Date(filters.startDate));
- }
- if (filters?.endDate) {
- query += ' AND timestamp <= ?';
- params.push(new Date(filters.endDate));
- }
- const result = await (0, database_1.executeQuery)(query, params);
- return result[0].count;
- }
- static async getCount() {
- const query = 'SELECT COUNT(*) as count FROM vw_client_connections';
- const result = await (0, database_1.executeQuery)(query);
- return result[0].count;
- }
- static async getByClientId(clientid, limit) {
- let query = 'SELECT * FROM vw_client_connections WHERE clientid = ? ORDER BY timestamp DESC';
- const params = [clientid];
- if (limit !== undefined) {
- query += ' LIMIT ?';
- params.push(limit);
- }
- return await (0, database_1.executeQuery)(query, params);
- }
- static async getByEvent(event, limit) {
- let query = 'SELECT * FROM vw_client_connections WHERE event = ? ORDER BY timestamp DESC';
- const params = [event];
- if (limit !== undefined) {
- query += ' LIMIT ?';
- params.push(limit);
- }
- return await (0, database_1.executeQuery)(query, params);
- }
- static async getByTimeRange(startTime, endTime) {
- const query = 'SELECT * FROM vw_client_connections WHERE timestamp BETWEEN ? AND ? ORDER BY timestamp DESC';
- return await (0, database_1.executeQuery)(query, [startTime, endTime]);
- }
- static async getEventStats() {
- const query = 'SELECT event, COUNT(*) as count FROM vw_client_connections GROUP BY event';
- return await (0, database_1.executeQuery)(query);
- }
- static async getConnectionStats() {
- const query = `
- SELECT
- CASE
- WHEN event = 'client.connected' THEN 'connected'
- WHEN event = 'client.disconnected' THEN 'disconnected'
- ELSE 'other'
- END as connection_type,
- COUNT(*) as count
- FROM vw_client_connections
- WHERE event IN ('client.connected', 'client.disconnected')
- GROUP BY connection_type
- `;
- return await (0, database_1.executeQuery)(query);
- }
- static async create(connectionData) {
- const query = `
- INSERT INTO client_connections (username, clientid, event, timestamp, connected_at, node, peername, sockname, proto_name, proto_ver, keepalive, clean_start, reason, connection_duration)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
- `;
- const values = [
- connectionData.username || null,
- connectionData.clientid,
- connectionData.event,
- connectionData.timestamp || new Date(),
- connectionData.connected_at || null,
- connectionData.node,
- connectionData.peername || '',
- connectionData.sockname || '',
- connectionData.proto_name || 'MQTT',
- connectionData.proto_ver || 4,
- connectionData.keepalive || 60,
- connectionData.clean_start ?? 1,
- connectionData.reason || null,
- connectionData.connection_duration || null
- ];
- const result = await (0, database_1.executeQuery)(query, values);
- return { ...connectionData, id: result.insertId, created_at: new Date() };
- }
- static async getById(id) {
- const query = 'SELECT * FROM vw_client_connections WHERE id = ?';
- const results = await (0, database_1.executeQuery)(query, [id]);
- return results.length > 0 ? results[0] : null;
- }
- static async getDailyStats(days = 7) {
- const query = `
- SELECT
- DATE(timestamp) as date,
- COUNT(*) as total_connections,
- SUM(CASE WHEN event = 'connect' THEN 1 ELSE 0 END) as connections,
- SUM(CASE WHEN event = 'disconnect' THEN 1 ELSE 0 END) as disconnections
- FROM vw_client_connections
- WHERE timestamp >= DATE_SUB(NOW(), INTERVAL ${days} DAY)
- GROUP BY DATE(timestamp)
- ORDER BY date DESC
- `;
- return await (0, database_1.executeQuery)(query);
- }
- }
- exports.ClientConnectionModel = ClientConnectionModel;
- //# sourceMappingURL=clientConnection.js.map
|