web.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. const express = require('express');
  2. const robot = require('./robot')
  3. const {getRustConfig} = require('./config')
  4. const http = require("./utils/http");
  5. const file = require('./utils/file')
  6. const {logger, fileLogger} = require("./utils/logger");
  7. const {spawn, exec, fork, execSync} = require("child_process");
  8. const path = require("path");
  9. const {ka} = require("date-fns/locale");
  10. const {getAppMap} = require("./robot");
  11. const crypto = require('crypto');
  12. /*******
  13. * web
  14. * **** */
  15. function init() {
  16. const app = express();
  17. const port = 3000;
  18. // 中间件示例,用于处理JSON请求体
  19. // app.use(express.json());
  20. app.use((req, res, next) => {
  21. var k = "$8gBV!f&L@E"
  22. if ("timestamp" in req.headers) {
  23. var timestamp = req.headers.timestamp
  24. var md5 = req.headers.catilla
  25. //默认32位
  26. const md5Str = crypto.createHash('md5').update(k + timestamp).digest('hex');
  27. logger.info(JSON.stringify(md5Str))
  28. if (md5 === md5Str) {
  29. next();
  30. } else {
  31. res.status(403).send('拒绝访问!');
  32. }
  33. } else {
  34. res.status(403).send('没有访问权限!');
  35. }
  36. });
  37. // GET请求的路由示例
  38. app.get('/', (req, res) => {
  39. res.send('is OK!');
  40. });
  41. app.get('/app11', (req, res) => {
  42. // res.send('is OK!');
  43. var s = JSON.parse("{}");
  44. robot.appMap.forEach((value, key) => {
  45. // str.set(key,JSON.stringify(value))
  46. s[key] = value
  47. })
  48. res.send({'code': 200, 'data': JSON.stringify(s), "message": "SUCCESS"});
  49. });
  50. //简单三个接口,为了方便使用get请求
  51. app.get('/isOK', isOK);
  52. app.get('/logs', (req, res) => {
  53. // 获取发送过来的信息(请求体的数据)
  54. const param = req.query;
  55. const n = param.n
  56. const id = param.id
  57. var port = -1;
  58. robot.appMap.forEach((value, key) => {
  59. // logger.info(JSON.stringify(value))
  60. if (value.id + "" === id + "") {
  61. port = value.port
  62. }
  63. })
  64. let result = [];
  65. if (port !== -1) {
  66. var logPath = "./logs" + port
  67. logger.info(`日志相对地址:${logPath}`)
  68. file.getLastFile(logPath, 10, (fileNameList) => {
  69. // logger.info('??1:', fileNameList);
  70. result = file.readLastNLines(logPath, fileNameList, n);
  71. // logger.info('?????:', result);
  72. res.send({'code': 200, 'data': result, "message": "SUCCESS"});
  73. });
  74. } else {
  75. res.send({'code': 200, 'data': result, "message": "SUCCESS"});
  76. }
  77. });
  78. app.post('/execute', (req, res) => {
  79. // 获取发送过来的信息(请求体的数据)
  80. const param = req.body;
  81. logger.info('--web 启动',param);
  82. (async (param) => {
  83. // console.log('请求体:', param);
  84. var executeType = param.executeType
  85. if (executeType === "RUN") {
  86. await robot.run(param)
  87. } else if (executeType === "STOP") {
  88. await robot.closeApp(param)
  89. } else if (executeType === "RESTART") {
  90. await robot.restartApp(param)
  91. }
  92. })(param);
  93. // 回应信号(响应请求)
  94. res.send({'code': 200, 'data': "null", "message": "SUCCESS"});
  95. })
  96. // 使服务器监听特定端口
  97. app.listen(port, () => {
  98. // console.log(`服务器正在监听 http://localhost:${port}`);
  99. });
  100. logger.info('--web 启动');
  101. }
  102. // node-已上线-上报
  103. function robotNodeStatus() {
  104. var config = getRustConfig()
  105. http.request_post(`${config.baseUrl}/report/beOnline`, {}, {...config.headers}).then((data) => {
  106. // logger.info('??', data);
  107. logger.info('#####################汇报:node 在线-上报成功!', data);
  108. }).catch((error) => {
  109. logger.error(`node 在线!-上报失败: ${error.message}`); // 处理可能发生的错误
  110. });
  111. }
  112. function isOK(req, res) {
  113. res.send({'code': 200, 'data': "null", "message": "SUCCESS"});
  114. }
  115. // 日志读取操作
  116. module.exports = {
  117. init,
  118. robotNodeStatus
  119. };