UNPKG

youzanyun-devtool-worker

Version:

256 lines (255 loc) 9.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const path_1 = tslib_1.__importDefault(require("path")); const lodash_1 = require("lodash"); const fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); const spring4js_nodejs_1 = require("spring4js-nodejs"); let hasFetchedBepData = false; let BepService = class BepService { constructor() { } async start() { this.loggger = this.logService.getLogger('MepService'); const dataDir = this.configService.getDataDir(); this.bepListCacheFile = path_1.default.resolve(dataDir, 'bep-total.json'); const exists = await fs_extra_1.default.pathExists(this.bepListCacheFile); if (exists) { const stat = fs_extra_1.default.statSync(this.bepListCacheFile); const distance = (Date.now() - Math.floor(stat.mtimeMs)) / (24 * 60 * 60 * 1000); if (distance > 2) { fs_extra_1.default.readFileSync(this.bepListCacheFile); } } } async getTotalBep() { let bepList = []; let exists = await fs_extra_1.default.pathExists(this.bepListCacheFile); if (exists) { bepList = await fs_extra_1.default.readJson(this.bepListCacheFile); } this.fetchAllBep(); return bepList; } async getAllBepMap() { let bepNameMap = {}; let bepIdMap = {}; let totalBep = await this.getTotalBep(); for (let category of totalBep) { for (let bep of category.bepList) { let serviceName = bep.interfaceDto.fullyQualifiedClassName; let item = { id: bep.id, categoryId: bep.categoryId, name: bep.name, serviceName: serviceName, methodName: bep.interfaceDto.methodName, }; bepNameMap[serviceName] = item; bepIdMap[bep.id] = item; } } return { bepIdMap, bepNameMap }; } async getBepTestHistory(projectId, bepId) { let localTestList = await this.getBepLocalTestHistory(projectId, bepId); let { bepIdMap, bepNameMap } = await this.getAllBepMap(); let bep = bepIdMap[bepId]; let remoteTestList = await this.mockPlatformService.queryBepRemoteTestHistory(projectId, bep.serviceName); let testList = [...localTestList]; for (let remote of remoteTestList) { try { let bep = bepNameMap[remote.interfaceName] || {}; testList.push({ createdAt: remote.createdAt, retmote: true, item: bep, param: remote.inParam && JSON.parse(remote.inParam), response: { timeCost: '--', result: remote.outParam && JSON.parse(remote.outParam) }, }); } catch (err) { this.loggger.error('getMepTestHistory', err); } } testList.sort((a, b) => { return -(a.createdAt - b.createdAt); }); return testList; } async getBepLocalTestHistory(projectId, bepId) { let bepList = []; let dataDir = this.configService.getDataDir(); let bepHistoryCacheFile = path_1.default.resolve(dataDir, `bep-test-history.${projectId}.${bepId}.json`); let exists = await fs_extra_1.default.pathExists(bepHistoryCacheFile); if (exists) { bepList = await fs_extra_1.default.readJson(bepHistoryCacheFile); } return bepList; } async saveBepLocalTestHistory(projectId, bepId, callList) { let dataDir = this.configService.getDataDir(); if (callList.length > 20) { callList = callList.slice(0, 20); } let bepHistoryCacheFile = path_1.default.resolve(dataDir, `bep-test-history.${projectId}.${bepId}.json`); if (callList.length > 20) { callList = callList.slice(0, 20); } await fs_extra_1.default.writeJson(bepHistoryCacheFile, callList, { spaces: 2 }); } async testLocalBep(projectId, item, selectImpl, param) { let { serviceName, methodName, id, name } = item; let projectInfo = await this.projectService.getProjectById(projectId); let port; let beanName = ''; let tag = ''; if (projectInfo.isJava) { port = 7001; serviceName = selectImpl; } else if (projectInfo.isNodeJs) { port = 8001; const begConfigJs = await fs_extra_1.default.readFile(path_1.default.resolve(projectInfo.proPath, "config/bep.config.js"), "utf8"); let bepList = JSON.parse(begConfigJs.match(/\[[^\]]+\]/g)[0]); for (let bep of bepList) { let { name } = bep; if (name == serviceName) { beanName = bep.beanName; tag = bep.tag; break; } } } else if (projectInfo.isPhp) { } let response = { timeCost: 0, result: {} }; let startTime = Date.now(); try { let resData = await this.requestService.post(`http://127.0.0.1:${port}/business-extension-point/${serviceName}/${methodName}`, param, { headers: { "bean-name": beanName, "bean-tag": tag }, validateStatus: function (status) { return true; }, }); response.result = resData; } catch (e) { response.result = { code: -1, comment: "调用错误", message: e.message }; } response.timeCost = Date.now() - startTime; let callHistory = await this.getBepLocalTestHistory(projectId, item.id); let testInfo = { createdAt: Date.now(), item, param, response, }; callHistory.splice(0, 0, testInfo); await this.saveBepLocalTestHistory(projectId, item.id, callHistory); return response; } async fetchAllBep() { if (hasFetchedBepData) { return null; } hasFetchedBepData = true; let totalBep = []; let categoryList = await this.documentCenterApiService.getBepCategoryList(); for (let category of categoryList) { let categoryBeps = await this.documentCenterApiService.getBepDocList(category.id); totalBep.push({ info: category, bepList: categoryBeps }); } await fs_extra_1.default.ensureFile(this.bepListCacheFile); await fs_extra_1.default.writeJson(this.bepListCacheFile, totalBep, { spaces: 2 }); return totalBep; } generateBepDataExample(fieldDefinition) { let fieldExample = {}; fieldDefinition.path = fieldDefinition.name; let stack = [fieldDefinition]; while (stack.length != 0) { let currentFieldDefinition = stack.pop(); if (currentFieldDefinition.basic) { (0, lodash_1.set)(fieldExample, currentFieldDefinition.path, currentFieldDefinition.example); } else { let prefixPath; if (currentFieldDefinition.list) { (0, lodash_1.set)(fieldExample, currentFieldDefinition.path, [{}]); prefixPath = currentFieldDefinition.path + '[0]'; } else { (0, lodash_1.set)(fieldExample, currentFieldDefinition.path, {}); prefixPath = currentFieldDefinition.path; } for (let sub of currentFieldDefinition.subParams) { sub.path = prefixPath + '.' + sub.name; stack.push(sub); } } } return fieldExample; } ; getBepKeyPath(fieldDefinition) { let keyPathList = []; let pathNode = []; let stack = [fieldDefinition]; while (stack.length != 0) { let currentFieldDefinition = stack.pop(); if (currentFieldDefinition.list) { pathNode.push(currentFieldDefinition.name + '[0]'); } else { pathNode.push(currentFieldDefinition.name); } if (currentFieldDefinition.basic) { let keyPath = pathNode.slice(1).join('.'); keyPathList.push(keyPath); pathNode.pop(); } else { for (let sub of currentFieldDefinition.subParams) { stack.push(sub); } } } return keyPathList; } }; tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], BepService.prototype, "projectService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], BepService.prototype, "configService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], BepService.prototype, "requestService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], BepService.prototype, "documentCenterApiService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], BepService.prototype, "mockPlatformService", void 0); tslib_1.__decorate([ (0, spring4js_nodejs_1.Resource)() ], BepService.prototype, "logService", void 0); BepService = tslib_1.__decorate([ (0, spring4js_nodejs_1.Service)() ], BepService); exports.default = BepService;