youzanyun-devtool-worker
Version:
256 lines (255 loc) • 9.82 kB
JavaScript
;
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;