mock平台

controller.js 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /**
  2. * Created by gxl.gao on 2017/10/24.
  3. */
  4. const baseController = require('controllers/base.js');
  5. const statisMockModel = require('./statisMockModel.js');
  6. const groupModel = require('models/group.js');
  7. const projectModel = require('models/project.js');
  8. const interfaceModel = require('models/interface.js');
  9. const interfaceCaseModel = require('models/interfaceCase.js');
  10. const yapi = require('yapi.js');
  11. const config = require('./index.js');
  12. const commons = require('./util.js');
  13. const os = require('os');
  14. let cpu = require('cpu-load');
  15. class statisMockController extends baseController {
  16. constructor(ctx) {
  17. super(ctx);
  18. this.Model = yapi.getInst(statisMockModel);
  19. this.groupModel = yapi.getInst(groupModel);
  20. this.projectModel = yapi.getInst(projectModel);
  21. this.interfaceModel = yapi.getInst(interfaceModel);
  22. this.interfaceCaseModel = yapi.getInst(interfaceCaseModel);
  23. }
  24. /**
  25. * 获取所有统计总数
  26. * @interface statismock/count
  27. * @method get
  28. * @category statistics
  29. * @foldnumber 10
  30. * @returns {Object}
  31. */
  32. async getStatisCount(ctx) {
  33. try {
  34. let groupCount = await this.groupModel.getGroupListCount();
  35. let projectCount = await this.projectModel.getProjectListCount();
  36. let interfaceCount = await this.interfaceModel.getInterfaceListCount();
  37. let interfaceCaseCount = await this.interfaceCaseModel.getInterfaceCaseListCount();
  38. return (ctx.body = yapi.commons.resReturn({
  39. groupCount,
  40. projectCount,
  41. interfaceCount,
  42. interfaceCaseCount
  43. }));
  44. } catch (err) {
  45. ctx.body = yapi.commons.resReturn(null, 400, err.message);
  46. }
  47. }
  48. /**
  49. * 获取所有mock接口数据信息
  50. * @interface statismock/get
  51. * @method get
  52. * @category statistics
  53. * @foldnumber 10
  54. * @returns {Object}
  55. */
  56. async getMockDateList(ctx) {
  57. try {
  58. let mockCount = await this.Model.getTotalCount();
  59. let mockDateList = [];
  60. if (!this.getRole() === 'admin') {
  61. return (ctx.body = yapi.commons.resReturn(null, 405, '没有权限'));
  62. }
  63. // 默认时间是30 天为一周期
  64. let dateInterval = commons.getDateRange();
  65. mockDateList = await this.Model.getDayCount(dateInterval);
  66. return (ctx.body = yapi.commons.resReturn({ mockCount, mockDateList }));
  67. } catch (err) {
  68. ctx.body = yapi.commons.resReturn(null, 400, err.message);
  69. }
  70. }
  71. /**
  72. * 获取邮箱状态信息
  73. * @interface statismock/getSystemStatus
  74. * @method get
  75. * @category statistics
  76. * @foldnumber 10
  77. * @returns {Object}
  78. */
  79. async getSystemStatus(ctx) {
  80. try {
  81. let mail = '';
  82. if (yapi.WEBCONFIG.mail && yapi.WEBCONFIG.mail.enable) {
  83. mail = await this.checkEmail();
  84. // return ctx.body = yapi.commons.resReturn(result);
  85. } else {
  86. mail = '未配置';
  87. }
  88. let load = (await this.cupLoad()) * 100;
  89. let systemName = os.platform();
  90. let totalmem = commons.transformBytesToGB(os.totalmem());
  91. let freemem = commons.transformBytesToGB(os.freemem());
  92. let uptime = commons.transformSecondsToDay(os.uptime());
  93. let data = {
  94. mail,
  95. systemName,
  96. totalmem,
  97. freemem,
  98. uptime,
  99. load: load.toFixed(2)
  100. };
  101. return (ctx.body = yapi.commons.resReturn(data));
  102. } catch (err) {
  103. ctx.body = yapi.commons.resReturn(null, 400, err.message);
  104. }
  105. }
  106. checkEmail() {
  107. return new Promise((resolve, reject) => {
  108. let result = {};
  109. yapi.mail.verify(error => {
  110. if (error) {
  111. result = '不可用';
  112. resolve(result);
  113. } else {
  114. result = '可用';
  115. resolve(result);
  116. }
  117. });
  118. });
  119. }
  120. async groupDataStatis(ctx) {
  121. try {
  122. let groupData = await this.groupModel.list();
  123. let result = [];
  124. for (let i = 0; i < groupData.length; i++) {
  125. let group = groupData[i];
  126. let groupId = group._id;
  127. const data = {
  128. name: group.group_name,
  129. interface: 0,
  130. mock: 0,
  131. project: 0
  132. };
  133. result.push(data);
  134. let projectCount = await this.projectModel.listCount(groupId);
  135. let projectData = await this.projectModel.list(groupId);
  136. let interfaceCount = 0;
  137. for (let j = 0; j < projectData.length; j++) {
  138. let project = projectData[j];
  139. interfaceCount += await this.interfaceModel.listCount({
  140. project_id: project._id
  141. });
  142. }
  143. let mockCount = await this.Model.countByGroupId(groupId);
  144. data.interface = interfaceCount;
  145. data.project = projectCount;
  146. data.mock = mockCount;
  147. }
  148. return (ctx.body = yapi.commons.resReturn(result));
  149. } catch (err) {
  150. ctx.body = yapi.commons.resReturn(null, 400, err.message);
  151. }
  152. }
  153. cupLoad() {
  154. return new Promise((resolve, reject) => {
  155. cpu(1000, function(load) {
  156. resolve(load);
  157. });
  158. });
  159. }
  160. }
  161. module.exports = statisMockController;