mqttMessage.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.MqttMessageModel = void 0;
  4. const database_1 = require("../config/database");
  5. class MqttMessageModel {
  6. static async getAll(limit, offset) {
  7. let query = 'SELECT * FROM mqtt_messages ORDER BY timestamp DESC';
  8. const params = [];
  9. if (limit !== undefined) {
  10. query += ' LIMIT ?';
  11. params.push(limit);
  12. if (offset !== undefined) {
  13. query += ' OFFSET ?';
  14. params.push(offset);
  15. }
  16. }
  17. return await (0, database_1.executeQuery)(query, params);
  18. }
  19. static async getByClientId(clientid, limit) {
  20. let query = 'SELECT * FROM mqtt_messages WHERE clientid = ? ORDER BY timestamp DESC';
  21. const params = [clientid];
  22. if (limit !== undefined) {
  23. query += ' LIMIT ?';
  24. params.push(limit);
  25. }
  26. return await (0, database_1.executeQuery)(query, params);
  27. }
  28. static async getByTopic(topic, limit) {
  29. let query = 'SELECT * FROM mqtt_messages WHERE topic LIKE ? ORDER BY timestamp DESC';
  30. const params = [`%${topic}%`];
  31. if (limit !== undefined) {
  32. query += ' LIMIT ?';
  33. params.push(limit);
  34. }
  35. return await (0, database_1.executeQuery)(query, params);
  36. }
  37. static async getByType(messageType, limit) {
  38. let query = 'SELECT * FROM mqtt_messages WHERE message_type = ? ORDER BY timestamp DESC';
  39. const params = [messageType];
  40. if (limit !== undefined) {
  41. query += ' LIMIT ?';
  42. params.push(limit);
  43. }
  44. return await (0, database_1.executeQuery)(query, params);
  45. }
  46. static async getByTimeRange(startTime, endTime) {
  47. const startTimestamp = startTime.getTime();
  48. const endTimestamp = endTime.getTime();
  49. const query = 'SELECT * FROM mqtt_messages WHERE timestamp BETWEEN ? AND ? ORDER BY timestamp DESC';
  50. return await (0, database_1.executeQuery)(query, [startTimestamp, endTimestamp]);
  51. }
  52. static async getCount() {
  53. const query = 'SELECT COUNT(*) as count FROM mqtt_messages';
  54. const result = await (0, database_1.executeQuery)(query);
  55. return result[0].count;
  56. }
  57. static async getTypeStats() {
  58. const query = 'SELECT message_type, COUNT(*) as count FROM mqtt_messages GROUP BY message_type';
  59. return await (0, database_1.executeQuery)(query);
  60. }
  61. static async getQosStats() {
  62. const query = 'SELECT qos, COUNT(*) as count FROM mqtt_messages GROUP BY qos';
  63. return await (0, database_1.executeQuery)(query);
  64. }
  65. static async getSizeStats() {
  66. const query = `
  67. SELECT
  68. AVG(LENGTH(payload)) as avg_size,
  69. MIN(LENGTH(payload)) as min_size,
  70. MAX(LENGTH(payload)) as max_size,
  71. COUNT(*) as total_messages
  72. FROM mqtt_messages
  73. `;
  74. return await (0, database_1.executeQuery)(query);
  75. }
  76. static async getHourlyStats(hours = 24) {
  77. const query = `
  78. SELECT
  79. DATE_FORMAT(FROM_UNIXTIME(timestamp / 1000), '%Y-%m-%d %H:00:00') as hour,
  80. COUNT(*) as message_count,
  81. AVG(LENGTH(payload)) as avg_payload_size
  82. FROM mqtt_messages
  83. WHERE timestamp >= (UNIX_TIMESTAMP() - ?) * 1000
  84. GROUP BY hour
  85. ORDER BY hour DESC
  86. `;
  87. return await (0, database_1.executeQuery)(query, [hours]);
  88. }
  89. static async getPopularTopics(limit = 10) {
  90. const query = `
  91. SELECT topic, COUNT(*) as message_count
  92. FROM mqtt_messages
  93. WHERE message_type = 'publish'
  94. GROUP BY topic
  95. ORDER BY message_count DESC
  96. LIMIT ?
  97. `;
  98. return await (0, database_1.executeQuery)(query, [limit]);
  99. }
  100. static async getActiveClients(limit = 10) {
  101. const query = `
  102. SELECT clientid, COUNT(*) as message_count
  103. FROM mqtt_messages
  104. WHERE message_type = 'publish'
  105. GROUP BY clientid
  106. ORDER BY message_count DESC
  107. LIMIT ?
  108. `;
  109. return await (0, database_1.executeQuery)(query, [limit]);
  110. }
  111. static async create(messageData) {
  112. const query = `
  113. INSERT INTO mqtt_messages (clientid, topic, payload, message_type, qos, timestamp)
  114. VALUES (?, ?, ?, ?, ?, ?)
  115. `;
  116. const values = [
  117. messageData.clientid,
  118. messageData.topic,
  119. messageData.payload,
  120. messageData.message_type,
  121. messageData.qos,
  122. messageData.timestamp
  123. ];
  124. const result = await (0, database_1.executeQuery)(query, values);
  125. const insertId = result.insertId;
  126. return this.getById(insertId);
  127. }
  128. static async getById(id) {
  129. const query = 'SELECT * FROM mqtt_messages WHERE id = ?';
  130. const results = await (0, database_1.executeQuery)(query, [id]);
  131. return results.length > 0 ? results[0] : null;
  132. }
  133. static async getHeatmapData(days = 7) {
  134. const query = `
  135. SELECT
  136. DAYOFWEEK(FROM_UNIXTIME(timestamp / 1000)) - 1 as day,
  137. HOUR(FROM_UNIXTIME(timestamp / 1000)) as hour,
  138. COUNT(*) as value
  139. FROM mqtt_messages
  140. WHERE timestamp >= (UNIX_TIMESTAMP() - ? * 24 * 3600) * 1000
  141. GROUP BY day, hour
  142. ORDER BY day, hour
  143. `;
  144. return await (0, database_1.executeQuery)(query, [days]);
  145. }
  146. }
  147. exports.MqttMessageModel = MqttMessageModel;
  148. //# sourceMappingURL=mqttMessage.js.map