deviceLogController.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.DeviceLogController = void 0;
  4. const deviceLog_1 = require("../models/deviceLog");
  5. const authLog_1 = require("../models/authLog");
  6. const systemLog_1 = require("../models/systemLog");
  7. const helpers_1 = require("../utils/helpers");
  8. class DeviceLogController {
  9. static async getDeviceLogs(req, res) {
  10. try {
  11. const clientid = (0, helpers_1.toString)(req.params.clientid);
  12. const page = Number((0, helpers_1.toString)(req.query.page)) || 1;
  13. const limit = Number((0, helpers_1.toString)(req.query.limit)) || 50;
  14. const offset = (page - 1) * limit;
  15. const event_type = (0, helpers_1.toString)(req.query.event_type);
  16. const start_time = (0, helpers_1.toString)(req.query.start_time);
  17. const end_time = (0, helpers_1.toString)(req.query.end_time);
  18. const filters = {};
  19. if (event_type) {
  20. filters.event_type = event_type;
  21. }
  22. if (start_time) {
  23. filters.start_time = new Date(start_time);
  24. }
  25. if (end_time) {
  26. filters.end_time = new Date(end_time);
  27. }
  28. const { logs, total } = await deviceLog_1.DeviceLogModel.getByClientId(clientid, filters, limit, offset);
  29. res.status(200).json({
  30. success: true,
  31. data: logs,
  32. pagination: {
  33. page,
  34. limit,
  35. total,
  36. pages: Math.ceil(total / limit)
  37. }
  38. });
  39. }
  40. catch (error) {
  41. console.error('获取设备日志失败:', error);
  42. res.status(500).json({
  43. success: false,
  44. message: '获取设备日志失败',
  45. error: error instanceof Error ? error.message : '未知错误'
  46. });
  47. }
  48. }
  49. static async getDeviceConnectLogs(req, res) {
  50. try {
  51. const { clientid } = req.params;
  52. const limit = Number((0, helpers_1.toString)(req.query.limit)) || 100;
  53. const clientidStr = (0, helpers_1.toString)(clientid);
  54. const logs = await deviceLog_1.DeviceLogModel.getConnectDisconnectLogs(clientidStr, limit);
  55. res.status(200).json({
  56. success: true,
  57. data: logs
  58. });
  59. }
  60. catch (error) {
  61. console.error('获取设备连接日志失败:', error);
  62. res.status(500).json({
  63. success: false,
  64. message: '获取设备连接日志失败',
  65. error: error instanceof Error ? error.message : '未知错误'
  66. });
  67. }
  68. }
  69. static async getDevicePublishLogs(req, res) {
  70. try {
  71. const { clientid } = req.params;
  72. const limit = Number((0, helpers_1.toString)(req.query.limit)) || 100;
  73. const clientidStr = (0, helpers_1.toString)(clientid);
  74. const logs = await deviceLog_1.DeviceLogModel.getPublishLogs(clientidStr, limit);
  75. res.status(200).json({
  76. success: true,
  77. data: logs
  78. });
  79. }
  80. catch (error) {
  81. console.error('获取设备发布日志失败:', error);
  82. res.status(500).json({
  83. success: false,
  84. message: '获取设备发布日志失败',
  85. error: error instanceof Error ? error.message : '未知错误'
  86. });
  87. }
  88. }
  89. static async getDeviceSubscribeLogs(req, res) {
  90. try {
  91. const { clientid } = req.params;
  92. const limit = Number((0, helpers_1.toString)(req.query.limit)) || 100;
  93. const clientidStr = (0, helpers_1.toString)(clientid);
  94. const logs = await deviceLog_1.DeviceLogModel.getSubscribeLogs(clientidStr, limit);
  95. res.status(200).json({
  96. success: true,
  97. data: logs
  98. });
  99. }
  100. catch (error) {
  101. console.error('获取设备订阅日志失败:', error);
  102. res.status(500).json({
  103. success: false,
  104. message: '获取设备订阅日志失败',
  105. error: error instanceof Error ? error.message : '未知错误'
  106. });
  107. }
  108. }
  109. static async getDeviceLogStats(req, res) {
  110. try {
  111. const { clientid } = req.params;
  112. const clientidStr = (0, helpers_1.toString)(clientid);
  113. const eventStats = await deviceLog_1.DeviceLogModel.getEventTypesStats(clientidStr);
  114. res.status(200).json({
  115. success: true,
  116. data: eventStats
  117. });
  118. }
  119. catch (error) {
  120. console.error('获取设备日志统计失败:', error);
  121. res.status(500).json({
  122. success: false,
  123. message: '获取设备日志统计失败',
  124. error: error instanceof Error ? error.message : '未知错误'
  125. });
  126. }
  127. }
  128. static async getDeviceDailyStats(req, res) {
  129. try {
  130. const { clientid } = req.params;
  131. const days = Number((0, helpers_1.toString)(req.query.days)) || 7;
  132. const clientidStr = (0, helpers_1.toString)(clientid);
  133. const stats = await deviceLog_1.DeviceLogModel.getDailyStats(clientidStr, days);
  134. res.status(200).json({
  135. success: true,
  136. data: stats
  137. });
  138. }
  139. catch (error) {
  140. console.error('获取设备每日统计失败:', error);
  141. res.status(500).json({
  142. success: false,
  143. message: '获取设备每日统计失败',
  144. error: error instanceof Error ? error.message : '未知错误'
  145. });
  146. }
  147. }
  148. static async getDeviceAuthLogs(req, res) {
  149. try {
  150. const clientid = (0, helpers_1.toString)(req.params.clientid);
  151. const page = Number((0, helpers_1.toString)(req.query.page)) || 1;
  152. const limit = Number((0, helpers_1.toString)(req.query.limit)) || 50;
  153. const offset = (page - 1) * limit;
  154. const operation_type = (0, helpers_1.toString)(req.query.operation_type);
  155. const result = (0, helpers_1.toString)(req.query.result);
  156. const filters = { clientid };
  157. if (operation_type) {
  158. filters.operation_type = operation_type;
  159. }
  160. if (result) {
  161. filters.result = result;
  162. }
  163. const logs = await authLog_1.AuthLogModel.getByMultipleConditions(filters, undefined, undefined, limit, offset);
  164. const total = await authLog_1.AuthLogModel.getCountByClientid(clientid);
  165. res.status(200).json({
  166. success: true,
  167. data: logs,
  168. pagination: {
  169. page,
  170. limit,
  171. total,
  172. pages: Math.ceil(total / limit)
  173. }
  174. });
  175. }
  176. catch (error) {
  177. console.error('获取设备认证日志失败:', error);
  178. res.status(500).json({
  179. success: false,
  180. message: '获取设备认证日志失败',
  181. error: error instanceof Error ? error.message : '未知错误'
  182. });
  183. }
  184. }
  185. static async getDeviceSystemLogs(req, res) {
  186. try {
  187. const { clientid } = req.params;
  188. const page = Number((0, helpers_1.toString)(req.query.page)) || 1;
  189. const limit = Number((0, helpers_1.toString)(req.query.limit)) || 50;
  190. const offset = (page - 1) * limit;
  191. const level = (0, helpers_1.toString)(req.query.level);
  192. const source = (0, helpers_1.toString)(req.query.source);
  193. const filters = {};
  194. if (level) {
  195. filters.level = level;
  196. }
  197. if (source) {
  198. filters.source = source;
  199. }
  200. const logs = await systemLog_1.SystemLogModel.getByMultipleConditions(filters, undefined, undefined, limit, offset, ['message', 'source', 'module', 'details']);
  201. const total = await systemLog_1.SystemLogModel.getCount();
  202. res.status(200).json({
  203. success: true,
  204. data: logs,
  205. pagination: {
  206. page,
  207. limit,
  208. total,
  209. pages: Math.ceil(total / limit)
  210. }
  211. });
  212. }
  213. catch (error) {
  214. console.error('获取系统日志失败:', error);
  215. res.status(500).json({
  216. success: false,
  217. message: '获取系统日志失败',
  218. error: error instanceof Error ? error.message : '未知错误'
  219. });
  220. }
  221. }
  222. static async getDeviceOverview(req, res) {
  223. try {
  224. const { clientid } = req.params;
  225. const clientidStr = (0, helpers_1.toString)(clientid);
  226. const [eventStats, authLogs, recentLogs] = await Promise.all([
  227. deviceLog_1.DeviceLogModel.getEventTypesStats(clientidStr),
  228. authLog_1.AuthLogModel.getByClientid(clientidStr, 10),
  229. deviceLog_1.DeviceLogModel.getByClientId(clientidStr, undefined, 10, 0)
  230. ]);
  231. const authSuccess = authLogs.filter((log) => log.result === 'success').length;
  232. const authFailure = authLogs.filter((log) => log.result === 'failure').length;
  233. res.status(200).json({
  234. success: true,
  235. data: {
  236. event_stats: eventStats,
  237. auth_stats: {
  238. success: authSuccess,
  239. failure: authFailure,
  240. total: authLogs.length
  241. },
  242. recent_logs: recentLogs.logs,
  243. total_logs: recentLogs.total
  244. }
  245. });
  246. }
  247. catch (error) {
  248. console.error('获取设备概览失败:', error);
  249. res.status(500).json({
  250. success: false,
  251. message: '获取设备概览失败',
  252. error: error instanceof Error ? error.message : '未知错误'
  253. });
  254. }
  255. }
  256. static async getDeviceAuthStats(req, res) {
  257. try {
  258. const { clientid } = req.params;
  259. const clientidStr = (0, helpers_1.toString)(clientid);
  260. const authLogs = await authLog_1.AuthLogModel.getByClientid(clientidStr);
  261. const success = authLogs.filter((log) => log.result === 'success').length;
  262. const failure = authLogs.filter((log) => log.result === 'failure').length;
  263. const operationStats = await authLog_1.AuthLogModel.getOperationTypeStats();
  264. res.status(200).json({
  265. success: true,
  266. data: {
  267. success,
  268. failure,
  269. total: authLogs.length,
  270. operation_stats: operationStats
  271. }
  272. });
  273. }
  274. catch (error) {
  275. console.error('获取设备认证统计失败:', error);
  276. res.status(500).json({
  277. success: false,
  278. message: '获取设备认证统计失败',
  279. error: error instanceof Error ? error.message : '未知错误'
  280. });
  281. }
  282. }
  283. }
  284. exports.DeviceLogController = DeviceLogController;
  285. //# sourceMappingURL=deviceLogController.js.map