mqttMessageController.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.MqttMessageController = void 0;
  4. const mqttMessage_1 = require("../models/mqttMessage");
  5. const helpers_1 = require("../utils/helpers");
  6. class MqttMessageController {
  7. static async getAllMessages(req, res) {
  8. try {
  9. const page = Number(req.query.page) || 1;
  10. const limit = Number(req.query.limit) || 20;
  11. const offset = (page - 1) * limit;
  12. const messages = await mqttMessage_1.MqttMessageModel.getAll(limit, offset);
  13. const total = await mqttMessage_1.MqttMessageModel.getCount();
  14. res.status(200).json({
  15. success: true,
  16. data: messages,
  17. pagination: {
  18. page,
  19. limit,
  20. total,
  21. pages: Math.ceil(total / limit)
  22. }
  23. });
  24. }
  25. catch (error) {
  26. console.error('获取消息列表失败:', error);
  27. res.status(500).json({
  28. success: false,
  29. message: '获取消息列表失败',
  30. error: error instanceof Error ? error.message : '未知错误'
  31. });
  32. }
  33. }
  34. static async getMessagesByClientId(req, res) {
  35. try {
  36. const clientid = (0, helpers_1.toString)(req.params.clientid);
  37. const limit = Number(req.query.limit) || 50;
  38. if (!clientid) {
  39. res.status(400).json({
  40. success: false,
  41. message: '客户端ID不能为空'
  42. });
  43. return;
  44. }
  45. const messages = await mqttMessage_1.MqttMessageModel.getByClientId(clientid, limit);
  46. res.status(200).json({
  47. success: true,
  48. data: messages
  49. });
  50. }
  51. catch (error) {
  52. console.error('根据客户端ID获取消息失败:', error);
  53. res.status(500).json({
  54. success: false,
  55. message: '根据客户端ID获取消息失败',
  56. error: error instanceof Error ? error.message : '未知错误'
  57. });
  58. }
  59. }
  60. static async getMessagesByTopic(req, res) {
  61. try {
  62. const topic = (0, helpers_1.toString)(req.params.topic);
  63. const limit = Number(req.query.limit) || 50;
  64. if (!topic) {
  65. res.status(400).json({
  66. success: false,
  67. message: '主题不能为空'
  68. });
  69. return;
  70. }
  71. const messages = await mqttMessage_1.MqttMessageModel.getByTopic(topic, limit);
  72. res.status(200).json({
  73. success: true,
  74. data: messages
  75. });
  76. }
  77. catch (error) {
  78. console.error('根据主题获取消息失败:', error);
  79. res.status(500).json({
  80. success: false,
  81. message: '根据主题获取消息失败',
  82. error: error instanceof Error ? error.message : '未知错误'
  83. });
  84. }
  85. }
  86. static async getMessagesByType(req, res) {
  87. try {
  88. const type = (0, helpers_1.toString)(req.params.type);
  89. const limit = Number(req.query.limit) || 50;
  90. if (!type || !['publish', 'subscribe', 'unsubscribe'].includes(type)) {
  91. res.status(400).json({
  92. success: false,
  93. message: '无效的消息类型'
  94. });
  95. return;
  96. }
  97. const messages = await mqttMessage_1.MqttMessageModel.getByType(type, limit);
  98. res.status(200).json({
  99. success: true,
  100. data: messages
  101. });
  102. }
  103. catch (error) {
  104. console.error('根据消息类型获取消息失败:', error);
  105. res.status(500).json({
  106. success: false,
  107. message: '根据消息类型获取消息失败',
  108. error: error instanceof Error ? error.message : '未知错误'
  109. });
  110. }
  111. }
  112. static async getMessagesByTimeRange(req, res) {
  113. try {
  114. const { startTime, endTime } = req.query;
  115. if (!startTime || !endTime) {
  116. res.status(400).json({
  117. success: false,
  118. message: '开始时间和结束时间不能为空'
  119. });
  120. return;
  121. }
  122. const start = new Date(startTime);
  123. const end = new Date(endTime);
  124. if (isNaN(start.getTime()) || isNaN(end.getTime())) {
  125. res.status(400).json({
  126. success: false,
  127. message: '无效的时间格式'
  128. });
  129. return;
  130. }
  131. const messages = await mqttMessage_1.MqttMessageModel.getByTimeRange(start, end);
  132. res.status(200).json({
  133. success: true,
  134. data: messages
  135. });
  136. }
  137. catch (error) {
  138. console.error('根据时间范围获取消息失败:', error);
  139. res.status(500).json({
  140. success: false,
  141. message: '根据时间范围获取消息失败',
  142. error: error instanceof Error ? error.message : '未知错误'
  143. });
  144. }
  145. }
  146. static async getMessageTypeStats(req, res) {
  147. try {
  148. const stats = await mqttMessage_1.MqttMessageModel.getTypeStats();
  149. res.status(200).json({
  150. success: true,
  151. data: stats,
  152. message: '获取消息类型统计成功'
  153. });
  154. }
  155. catch (error) {
  156. res.status(500).json({
  157. success: false,
  158. message: '获取消息类型统计失败',
  159. error: error instanceof Error ? error.message : String(error)
  160. });
  161. }
  162. }
  163. static async getMessageQosStats(req, res) {
  164. try {
  165. const stats = await mqttMessage_1.MqttMessageModel.getQosStats();
  166. res.status(200).json({
  167. success: true,
  168. data: stats
  169. });
  170. }
  171. catch (error) {
  172. console.error('获取QoS等级统计失败:', error);
  173. res.status(500).json({
  174. success: false,
  175. message: '获取QoS等级统计失败',
  176. error: error instanceof Error ? error.message : '未知错误'
  177. });
  178. }
  179. }
  180. static async getMessageSizeStats(req, res) {
  181. try {
  182. const stats = await mqttMessage_1.MqttMessageModel.getSizeStats();
  183. res.status(200).json({
  184. success: true,
  185. data: stats,
  186. message: '获取消息大小统计成功'
  187. });
  188. }
  189. catch (error) {
  190. res.status(500).json({
  191. success: false,
  192. message: '获取消息大小统计失败',
  193. error: error instanceof Error ? error.message : String(error)
  194. });
  195. }
  196. }
  197. static async getHourlyStats(req, res) {
  198. try {
  199. const hours = req.query.hours ? parseInt(req.query.hours) : 24;
  200. const stats = await mqttMessage_1.MqttMessageModel.getHourlyStats(hours);
  201. res.status(200).json({
  202. success: true,
  203. data: stats,
  204. message: '获取每小时消息统计成功'
  205. });
  206. }
  207. catch (error) {
  208. res.status(500).json({
  209. success: false,
  210. message: '获取每小时消息统计失败',
  211. error: error instanceof Error ? error.message : String(error)
  212. });
  213. }
  214. }
  215. static async getQosStats(req, res) {
  216. try {
  217. const stats = await mqttMessage_1.MqttMessageModel.getQosStats();
  218. res.status(200).json({
  219. success: true,
  220. data: stats
  221. });
  222. }
  223. catch (error) {
  224. console.error('获取QoS等级统计失败:', error);
  225. res.status(500).json({
  226. success: false,
  227. message: '获取QoS等级统计失败',
  228. error: error instanceof Error ? error.message : '未知错误'
  229. });
  230. }
  231. }
  232. static async getHourlyMessageStats(req, res) {
  233. try {
  234. const hours = Number(req.query.hours) || 24;
  235. if (hours < 1 || hours > 168) {
  236. res.status(400).json({
  237. success: false,
  238. message: '小时数必须在1到168之间'
  239. });
  240. return;
  241. }
  242. const stats = await mqttMessage_1.MqttMessageModel.getHourlyStats(hours);
  243. res.status(200).json({
  244. success: true,
  245. data: stats
  246. });
  247. }
  248. catch (error) {
  249. console.error('获取每小时消息统计失败:', error);
  250. res.status(500).json({
  251. success: false,
  252. message: '获取每小时消息统计失败',
  253. error: error instanceof Error ? error.message : '未知错误'
  254. });
  255. }
  256. }
  257. static async getPopularTopics(req, res) {
  258. try {
  259. const limit = Number(req.query.limit) || 10;
  260. if (limit < 1 || limit > 50) {
  261. res.status(400).json({
  262. success: false,
  263. message: '限制数量必须在1到50之间'
  264. });
  265. return;
  266. }
  267. const topics = await mqttMessage_1.MqttMessageModel.getPopularTopics(limit);
  268. res.status(200).json({
  269. success: true,
  270. data: topics
  271. });
  272. }
  273. catch (error) {
  274. console.error('获取热门主题失败:', error);
  275. res.status(500).json({
  276. success: false,
  277. message: '获取热门主题失败',
  278. error: error instanceof Error ? error.message : '未知错误'
  279. });
  280. }
  281. }
  282. static async getActiveClients(req, res) {
  283. try {
  284. const limit = Number(req.query.limit) || 10;
  285. if (limit < 1 || limit > 50) {
  286. res.status(400).json({
  287. success: false,
  288. message: '限制数量必须在1到50之间'
  289. });
  290. return;
  291. }
  292. const clients = await mqttMessage_1.MqttMessageModel.getActiveClients(limit);
  293. res.status(200).json({
  294. success: true,
  295. data: clients
  296. });
  297. }
  298. catch (error) {
  299. console.error('获取活跃客户端失败:', error);
  300. res.status(500).json({
  301. success: false,
  302. message: '获取活跃客户端失败',
  303. error: error instanceof Error ? error.message : '未知错误'
  304. });
  305. }
  306. }
  307. static async getMessageHeatmapData(req, res) {
  308. try {
  309. const days = Number(req.query.days) || 7;
  310. if (days < 1 || days > 30) {
  311. res.status(400).json({
  312. success: false,
  313. message: '天数必须在1到30之间'
  314. });
  315. return;
  316. }
  317. const heatmapData = await mqttMessage_1.MqttMessageModel.getHeatmapData(days);
  318. res.status(200).json({
  319. success: true,
  320. data: heatmapData
  321. });
  322. }
  323. catch (error) {
  324. console.error('获取消息热力图数据失败:', error);
  325. res.status(500).json({
  326. success: false,
  327. message: '获取消息热力图数据失败',
  328. error: error instanceof Error ? error.message : '未知错误'
  329. });
  330. }
  331. }
  332. }
  333. exports.MqttMessageController = MqttMessageController;
  334. //# sourceMappingURL=mqttMessageController.js.map