perf: 优化定时器

This commit is contained in:
xiaojunnuo
2023-05-24 15:41:35 +08:00
parent 6f6606d76d
commit 3751fcd4c9
29 changed files with 381 additions and 163 deletions
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput, utils } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
// @ts-ignore
import { ROAClient } from "@alicloud/pop-core";
import { AliyunAccess } from "../../access";
@@ -17,7 +17,7 @@ import { CertInfo } from "@certd/plugin-cert";
},
},
})
export class DeployCertToAliyunAckIngressPlugin implements ITaskPlugin {
export class DeployCertToAliyunAckIngressPlugin extends AbstractTaskPlugin {
@TaskInput({
title: "集群id",
component: {
@@ -108,8 +108,6 @@ export class DeployCertToAliyunAckIngressPlugin implements ITaskPlugin {
@Autowire()
logger!: ILogger;
// eslint-disable-next-line @typescript-eslint/no-empty-function
async onInstance(): Promise<void> {}
async execute(): Promise<void> {
console.log("开始部署证书到阿里云cdn");
const { regionId, ingressClass, clusterId, isPrivateIpAddress, cert } = this;
@@ -1,10 +1,9 @@
import { Autowire, IAccessService, ILogger, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
import dayjs from "dayjs";
import Core from "@alicloud/pop-core";
import RPCClient from "@alicloud/pop-core";
import { AliyunAccess } from "../../access";
@IsTaskPlugin({
name: "DeployCertToAliyunCDN",
title: "部署证书至阿里云CDN",
@@ -15,7 +14,7 @@ import { AliyunAccess } from "../../access";
},
},
})
export class DeployCertToAliyunCDN implements ITaskPlugin {
export class DeployCertToAliyunCDN extends AbstractTaskPlugin {
@TaskInput({
title: "CDN加速域名",
helper: "你在阿里云上配置的CDN加速域名,比如certd.docmirror.cn",
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, IsTaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
import Core from "@alicloud/pop-core";
import { AliyunAccess } from "../../access";
import { appendTimeSuffix, checkRet, ZoneOptions } from "../../utils";
@@ -14,7 +14,7 @@ import { Logger } from "log4js";
},
},
})
export class UploadCertToAliyun implements ITaskPlugin {
export class UploadCertToAliyun extends AbstractTaskPlugin {
@TaskInput({
title: "证书名称",
helper: "证书上传后将以此参数作为名称前缀",
@@ -1,4 +1,4 @@
import { Autowire, HttpClient, IAccessService, IContext, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, HttpClient, IAccessService, IContext, IsTaskPlugin, RunStrategy, Step, TaskInput, TaskOutput } from "@certd/pipeline";
import dayjs from "dayjs";
import { AcmeService, CertInfo } from "./acme";
import _ from "lodash";
@@ -24,7 +24,7 @@ export type { CertInfo };
},
},
})
export class CertApplyPlugin implements ITaskPlugin {
export class CertApplyPlugin extends AbstractTaskPlugin {
@TaskInput({
title: "域名",
component: {
@@ -118,7 +118,7 @@ export class CertApplyPlugin implements ITaskPlugin {
http!: HttpClient;
@Autowire()
pipelineContext!: IContext;
lastStatus!: Step;
@TaskOutput({
title: "域名证书",
@@ -137,6 +137,8 @@ export class CertApplyPlugin implements ITaskPlugin {
const cert = await this.doCertApply();
if (cert != null) {
this.output(cert.toCertInfo());
//清空后续任务的状态,让后续任务能够重新执行
this.clearLastStatus();
} else {
throw new Error("申请证书失败");
}
@@ -156,10 +158,7 @@ export class CertApplyPlugin implements ITaskPlugin {
}
let inputChanged = false;
const inputCacheKey = "input.domains";
const oldInputStr = await this.pipelineContext.getObj(inputCacheKey);
await this.pipelineContext.setObj(inputCacheKey, this.domains);
const oldInput = JSON.stringify(oldInputStr);
const oldInput = JSON.stringify(this.lastStatus?.input?.domains);
const thisInput = JSON.stringify(this.domains);
if (oldInput !== thisInput) {
inputChanged = true;
@@ -167,7 +166,7 @@ export class CertApplyPlugin implements ITaskPlugin {
let oldCert: CertReader | undefined = undefined;
try {
oldCert = await this.readCurrentCert();
oldCert = await this.readLastCert();
} catch (e) {
this.logger.warn("读取cert失败:", e);
}
@@ -227,10 +226,8 @@ export class CertApplyPlugin implements ITaskPlugin {
isTest: false,
});
await this.writeCert(cert);
const ret = await this.readCurrentCert();
return ret;
const certInfo = this.formatCerts(cert);
return new CertReader(certInfo);
}
formatCert(pem: string) {
@@ -240,20 +237,17 @@ export class CertApplyPlugin implements ITaskPlugin {
return pem;
}
async writeCert(cert: { crt: string; key: string; csr: string }) {
formatCerts(cert: { crt: string; key: string; csr: string }) {
const newCert: CertInfo = {
crt: this.formatCert(cert.crt),
key: this.formatCert(cert.key),
csr: this.formatCert(cert.csr),
};
await this.pipelineContext.setObj("cert", newCert);
await this.pipelineContext.set("cert.crt", newCert.crt);
await this.pipelineContext.set("cert.key", newCert.key);
await this.pipelineContext.set("cert.csr", newCert.csr);
return newCert;
}
async readCurrentCert(): Promise<CertReader | undefined> {
const cert: CertInfo = await this.pipelineContext.getObj("cert");
async readLastCert(): Promise<CertReader | undefined> {
const cert = this.lastStatus?.status?.output?.cert;
if (cert == null) {
return undefined;
}
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, ILogger, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
import { SshClient } from "../../lib/ssh";
@IsTaskPlugin({
@@ -12,7 +12,7 @@ import { SshClient } from "../../lib/ssh";
},
output: {},
})
export class HostShellExecutePlugin implements ITaskPlugin {
export class HostShellExecutePlugin extends AbstractTaskPlugin {
@TaskInput({
title: "主机登录配置",
helper: "登录",
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
import { SshClient } from "../../lib/ssh";
import { CertInfo, CertReader } from "@certd/plugin-cert";
import * as fs from "fs";
@@ -12,7 +12,7 @@ import * as fs from "fs";
},
},
})
export class UploadCertToHostPlugin implements ITaskPlugin {
export class UploadCertToHostPlugin extends AbstractTaskPlugin {
@TaskInput({
title: "证书保存路径",
})
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput } from "@certd/pipeline";
import tencentcloud from "tencentcloud-sdk-nodejs/index";
import { TencentAccess } from "../../access";
import { CertInfo } from "@certd/plugin-cert";
@@ -12,7 +12,7 @@ import { CertInfo } from "@certd/plugin-cert";
},
},
})
export class DeployToCdnPlugin implements ITaskPlugin {
export class DeployToCdnPlugin extends AbstractTaskPlugin {
@TaskInput({
title: "域名证书",
helper: "请选择前置任务输出的域名证书",
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, ILogger, RunStrategy, TaskInput, utils } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
import tencentcloud from "tencentcloud-sdk-nodejs/index";
import { TencentAccess } from "../../access";
import dayjs from "dayjs";
@@ -13,7 +13,7 @@ import dayjs from "dayjs";
},
},
})
export class DeployToClbPlugin implements ITaskPlugin {
export class DeployToClbPlugin extends AbstractTaskPlugin {
@TaskInput({
title: "大区",
value: "ap-guangzhou",
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, IsTaskPlugin, RunStrategy, TaskInput, utils } from "@certd/pipeline";
import tencentcloud from "tencentcloud-sdk-nodejs/index";
import { K8sClient } from "@certd/plugin-util";
import dayjs from "dayjs";
@@ -14,7 +14,7 @@ import { Logger } from "log4js";
},
},
})
export class DeployCertToTencentTKEIngressPlugin implements ITaskPlugin {
export class DeployCertToTencentTKEIngressPlugin extends AbstractTaskPlugin {
@TaskInput({ title: "大区", value: "ap-guangzhou", required: true })
region!: string;
@@ -1,4 +1,4 @@
import { Autowire, IAccessService, IsTaskPlugin, ITaskPlugin, RunStrategy, TaskInput, TaskOutput, ILogger } from "@certd/pipeline";
import { AbstractTaskPlugin, Autowire, IAccessService, ILogger, IsTaskPlugin, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline";
import tencentcloud from "tencentcloud-sdk-nodejs/index";
import dayjs from "dayjs";
@@ -12,7 +12,7 @@ import dayjs from "dayjs";
},
},
})
export class UploadToTencentPlugin implements ITaskPlugin {
export class UploadToTencentPlugin extends AbstractTaskPlugin {
@TaskInput({ title: "证书名称" })
name!: string;