schedule.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * Created by bin.xu on 2018/8/31.
  3. * 本JS为后台服务接口
  4. * 1.获取服务器状态信息CPU 内存 等信息
  5. * 2.定期进行考核报告生成
  6. * 3.定期发送数据问题报告
  7. * ┌─┐ ┌─┐
  8. * ┌──┘ ┴───────┘ ┴──┐
  9. * │ │
  10. * │ ─── │
  11. * │ ─┬┘ └┬─ │
  12. * │ │
  13. * │ ─┴─ │
  14. * │ │
  15. * └───┐ ┌───┘
  16. * │ │
  17. * │ │
  18. * │ │
  19. * │ └──────────────┐
  20. * │ │
  21. * │ ├─┐
  22. * │ ┌─┘
  23. * │ │
  24. * └─┐ ┐ ┌───────┬──┐ ┌──┘
  25. * │ ─┤ ─┤ │ ─┤ ─┤
  26. * └──┴──┘ └──┴──┘
  27. * May the force be with you!
  28. */
  29. var moment = require("moment");
  30. var os = require("os");//操作系统
  31. var storage = require ("storage-device-info");//磁盘信息
  32. var monitor=require("../models/t_loadMonitor");//压力监控表
  33. var corp=require("../models/t_corporation");//企业表
  34. var schedule = require('node-schedule');//定时任务
  35. //OS系统状态获取规则
  36. var rule = new schedule.RecurrenceRule();
  37. var times = [1,6,11,16,21,26,31,36,41,46,51,56];
  38. rule.minute = times;//每5分钟查询
  39. //应用服务器
  40. var appName="应用服务器";
  41. var appSysPath = "/";
  42. var appLogPath = "/opt/apps";
  43. //数据库服务器
  44. var dbName="数据库服务器";
  45. var dbSysPath = "/";
  46. var dbLogPath = "/opt/mongoDB";
  47. //定期获取操作系统信息
  48. var osInfo = schedule.scheduleJob(rule, function(fireDate){
  49. // // CPU 的字节序
  50. // console.log('endianness : ' + os.endianness());
  51. // // 操作系统名
  52. // console.log('type : ' + os.type());
  53. // CPU使用率
  54. // const cpus = os.cpus();
  55. // console.log('*****cpu信息*******');
  56. // cpus.forEach((cpu,idx,arr)=>{
  57. // var times = cpu.times;
  58. // console.log(`cpu${idx}:`);
  59. // console.log(`型号:${cpu.model}`);
  60. // console.log(`频率:${cpu.speed}MHz`);
  61. // console.log(`使用率:${((1-times.idle/(times.idle+times.user+times.nice+times.sys+times.irq))*100).toFixed(2)}%`);
  62. // });
  63. //
  64. console.log('服务器名称:'+ appName);
  65. //每五分钟的负载
  66. var loadavg=os.loadavg();
  67. console.log('每五分钟的负载:'+loadavg[0]);
  68. var ipAddr= "";
  69. var network = os.networkInterfaces()
  70. for(var i = 0; i < network.eth0.length; i++) {
  71. var json = network.eth0[i];
  72. if(json.family == 'IPv4') {
  73. console.log('IP地址: ' +json.address);
  74. ipAddr = json.address;
  75. }
  76. }
  77. var memPercent = (os.totalmem() - os.freemem())/os.totalmem();
  78. console.log('操作系统内存使用百分比: ' + os.freemem()/os.totalmem() + " %");
  79. storage.getPartitionSpace(appSysPath, function(error, space) {
  80. if (error) {
  81. console.log(error);
  82. }
  83. else {
  84. var sysDiskPercent = (space.totalMegaBytes -space.freeMegaBytes)/space.totalMegaBytes;
  85. console.log(sysDiskPercent);
  86. storage.getPartitionSpace(appLogPath, function(error, space)
  87. {
  88. if (error) {
  89. console.log(error);
  90. }
  91. else {
  92. var logDiskPercent = (space.totalMegaBytes -space.freeMegaBytes)/space.totalMegaBytes;
  93. // console.log(logDiskPercent)
  94. //todo 存入数据库
  95. var monitorAdd = new monitor({
  96. serverName:appName,
  97. serverAddr:ipAddr,//服务器地址
  98. CPULoad:loadavg[0]/loadavg.length,//CPU使用百分比
  99. memory:memPercent,//内存使用百分比
  100. diskSpace:sysDiskPercent,//系统磁盘空间使用百分比
  101. LogSpace:logDiskPercent,//日志空间使用百分比
  102. time:moment()
  103. });
  104. monitorAdd.save(function (err) {
  105. if (err) {
  106. console.log(err);
  107. } else {
  108. console.log("monitor 存入成功");
  109. }
  110. });
  111. }
  112. })
  113. }
  114. });
  115. });
  116. //每年
  117. schedule.scheduleJob('1 0 0 1 1 *', function(){
  118. corp.updateMany({},{$set:{year:0}},function (err) {
  119. if(err)
  120. {
  121. console.log(err);
  122. }
  123. else
  124. {
  125. console.log("每年的企业追溯总数信息重置");
  126. }
  127. })
  128. });
  129. //每个月
  130. schedule.scheduleJob('1 0 0 1 * *', function(){
  131. corp.updateMany({},{$set:{month:0}},function (err) {
  132. if(err)
  133. {
  134. console.log(err);
  135. }
  136. else
  137. {
  138. console.log("每月的企业追溯总数信息重置");
  139. }
  140. })
  141. });
  142. //每天执行
  143. schedule.scheduleJob('1 0 0 * * *', function(){
  144. corp.updateMany({},{$set:{day:0}},function (err) {
  145. if(err)
  146. {
  147. console.log(err);
  148. }
  149. else
  150. {
  151. console.log("每天的企业追溯总数信息重置");
  152. }
  153. })
  154. });