perf: 优化插件开发,dnsProvider无需写http logger 变量

pull/265/head
xiaojunnuo 2024-11-20 11:36:39 +08:00
parent 7c5166c8bb
commit fcbb5e46a1
17 changed files with 29 additions and 69 deletions

View File

@ -102,6 +102,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
_result: TaskResult = { clearLastStatus: false, files: [], pipelineVars: {}, pipelinePrivateVars: {} }; _result: TaskResult = { clearLastStatus: false, files: [], pipelineVars: {}, pipelinePrivateVars: {} };
ctx!: TaskInstanceContext; ctx!: TaskInstanceContext;
logger!: ILogger; logger!: ILogger;
http!: HttpClient;
accessService!: IAccessService; accessService!: IAccessService;
clearLastStatus() { clearLastStatus() {
@ -122,6 +123,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
this.ctx = ctx; this.ctx = ctx;
this.logger = ctx.logger; this.logger = ctx.logger;
this.accessService = ctx.accessService; this.accessService = ctx.accessService;
this.http = ctx.http;
} }
async getAccess<T = any>(accessId: string) { async getAccess<T = any>(accessId: string) {

View File

@ -2,12 +2,17 @@ import { CreateRecordOptions, DnsProviderContext, DnsProviderDefine, IDnsProvide
import psl from "psl"; import psl from "psl";
import { dnsProviderRegistry } from "./registry.js"; import { dnsProviderRegistry } from "./registry.js";
import { Decorator } from "@certd/pipeline"; import { Decorator } from "@certd/pipeline";
import { HttpClient, ILogger } from "@certd/basic";
export abstract class AbstractDnsProvider<T = any> implements IDnsProvider<T> { export abstract class AbstractDnsProvider<T = any> implements IDnsProvider<T> {
ctx!: DnsProviderContext; ctx!: DnsProviderContext;
http!: HttpClient;
logger!: ILogger;
setCtx(ctx: DnsProviderContext) { setCtx(ctx: DnsProviderContext) {
this.ctx = ctx; this.ctx = ctx;
this.logger = ctx.logger;
this.http = ctx.http;
} }
abstract createRecord(options: CreateRecordOptions): Promise<T>; abstract createRecord(options: CreateRecordOptions): Promise<T>;

View File

@ -92,7 +92,6 @@ export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
csrInfo!: string; csrInfo!: string;
userContext!: IContext; userContext!: IContext;
http!: HttpClient;
lastStatus!: Step; lastStatus!: Step;
@TaskOutput({ @TaskOutput({
@ -102,7 +101,6 @@ export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
async onInstance() { async onInstance() {
this.userContext = this.ctx.userContext; this.userContext = this.ctx.userContext;
this.http = this.ctx.http;
this.lastStatus = this.ctx.lastStatus as Step; this.lastStatus = this.ctx.lastStatus as Step;
await this.onInit(); await this.onInit();
} }

View File

@ -96,7 +96,6 @@ export class CertApplyLegoPlugin extends CertApplyBasePlugin {
this.accessService = this.ctx.accessService; this.accessService = this.ctx.accessService;
this.logger = this.ctx.logger; this.logger = this.ctx.logger;
this.userContext = this.ctx.userContext; this.userContext = this.ctx.userContext;
this.http = this.ctx.http;
this.lastStatus = this.ctx.lastStatus as Step; this.lastStatus = this.ctx.lastStatus as Step;
if (this.legoEabAccessId) { if (this.legoEabAccessId) {
this.eab = await this.accessService.getById(this.legoEabAccessId); this.eab = await this.accessService.getById(this.legoEabAccessId);

View File

@ -1,6 +1,5 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline'; import { Autowire } from '@certd/pipeline';
import { ILogger } from '@certd/basic';
import { AliyunAccess, AliyunClient } from '@certd/plugin-plus'; import { AliyunAccess, AliyunClient } from '@certd/plugin-plus';
@ -14,8 +13,6 @@ export class AliyunDnsProvider extends AbstractDnsProvider {
client: any; client: any;
@Autowire() @Autowire()
access!: AliyunAccess; access!: AliyunAccess;
@Autowire()
logger!: ILogger;
async onInstance() { async onInstance() {
const access: any = this.access; const access: any = this.access;

View File

@ -1,4 +1,4 @@
import { AbstractTaskPlugin, HttpClient, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { CertInfo } from '@certd/plugin-cert'; import { CertInfo } from '@certd/plugin-cert';
import { CacheflyAccess } from '../access.js'; import { CacheflyAccess } from '../access.js';
@ -35,12 +35,9 @@ export class CacheFlyPlugin extends AbstractTaskPlugin {
required: true, required: true,
}) })
accessId!: string; accessId!: string;
http!: HttpClient;
private readonly baseApi = 'https://api.cachefly.com'; private readonly baseApi = 'https://api.cachefly.com';
async onInstance() { async onInstance() {}
this.http = this.ctx.http;
}
private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) { private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) {
const headers = { const headers = {

View File

@ -1,6 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline';
import { HttpClient, ILogger } from '@certd/basic';
import { CloudflareAccess } from './access.js'; import { CloudflareAccess } from './access.js';
@ -27,15 +25,11 @@ export type CloudflareRecord = {
}) })
export class CloudflareDnsProvider extends AbstractDnsProvider<CloudflareRecord> { export class CloudflareDnsProvider extends AbstractDnsProvider<CloudflareRecord> {
// 通过Autowire传递context // 通过Autowire传递context
@Autowire()
logger!: ILogger;
access!: CloudflareAccess; access!: CloudflareAccess;
http!: HttpClient;
async onInstance() { async onInstance() {
//一些初始化的操作 //一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样 // 也可以通过ctx成员变量传递context 与Autowire效果一样
this.access = this.ctx.access as CloudflareAccess; this.access = this.ctx.access as CloudflareAccess;
this.http = this.ctx.http;
} }
async getZoneId(domain: string) { async getZoneId(domain: string) {

View File

@ -1,6 +1,5 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline'; import { Autowire } from '@certd/pipeline';
import { HttpClient, ILogger } from '@certd/basic';
import { DemoAccess } from './access.js'; import { DemoAccess } from './access.js';
import { isDev } from '../../utils/env.js'; import { isDev } from '../../utils/env.js';
@ -22,13 +21,9 @@ export class DemoDnsProvider extends AbstractDnsProvider<DemoRecord> {
// 通过Autowire注入工具对象 // 通过Autowire注入工具对象
@Autowire() @Autowire()
access!: DemoAccess; access!: DemoAccess;
@Autowire()
logger!: ILogger;
http!: HttpClient;
async onInstance() { async onInstance() {
// 也可以通过ctx成员变量传递context 与Autowire效果一样 // 也可以通过ctx成员变量传递context 与Autowire效果一样
this.http = this.ctx.http;
this.logger.debug('access', this.access); this.logger.debug('access', this.access);
//初始化的操作 //初始化的操作
//... //...

View File

@ -120,6 +120,16 @@ export class DemoTestPlugin extends AbstractTaskPlugin {
this.logger.info('select:', select); this.logger.info('select:', select);
this.logger.info('switch:', this.switch); this.logger.info('switch:', this.switch);
this.logger.info('授权id:', accessId); this.logger.info('授权id:', accessId);
const res = await this.http.request({
url: 'https://api.demo.com',
method: 'GET',
});
if (res.code !== 0) {
//检查res是否报错,你需要抛异常,来结束插件执行,否则会判定为执行成功,下次执行时会跳过本任务
throw new Error(res.message);
}
this.logger.info('部署成功:', res);
} }
//此方法演示,如何让前端在添加插件时可以从后端获取选项,这里是后端返回选项的方法 //此方法演示,如何让前端在添加插件时可以从后端获取选项,这里是后端返回选项的方法

View File

@ -1,4 +1,4 @@
import { AbstractTaskPlugin, HttpClient, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { CertInfo } from '@certd/plugin-cert'; import { CertInfo } from '@certd/plugin-cert';
import { GcoreAccess } from '../access.js'; import { GcoreAccess } from '../access.js';
@ -45,17 +45,14 @@ export class GcoreflushPlugin extends AbstractTaskPlugin {
required: true, required: true,
}) })
accessId!: string; accessId!: string;
http!: HttpClient;
private readonly baseApi = 'https://api.gcore.com'; private readonly baseApi = 'https://api.gcore.com';
async onInstance() { async onInstance() {}
this.http = this.ctx.http;
}
private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) { private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) {
const headers = { const headers = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
...(token ? { 'authorization': `Bearer ${token}` } : {}), ...(token ? { authorization: `Bearer ${token}` } : {}),
}; };
const res = await this.http.request<any, any>({ const res = await this.http.request<any, any>({
url, url,
@ -68,7 +65,7 @@ export class GcoreflushPlugin extends AbstractTaskPlugin {
} }
async execute(): Promise<void> { async execute(): Promise<void> {
const { cert,accessId } = this; const { cert, accessId } = this;
const access = (await this.accessService.getById(accessId)) as GcoreAccess; const access = (await this.accessService.getById(accessId)) as GcoreAccess;
let otp = null; let otp = null;
if (access.otpkey) { if (access.otpkey) {

View File

@ -1,4 +1,4 @@
import { AbstractTaskPlugin, HttpClient, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { CertInfo } from '@certd/plugin-cert'; import { CertInfo } from '@certd/plugin-cert';
import { GcoreAccess } from '../access.js'; import { GcoreAccess } from '../access.js';
@ -41,17 +41,14 @@ export class GcoreuploadPlugin extends AbstractTaskPlugin {
required: true, required: true,
}) })
accessId!: string; accessId!: string;
http!: HttpClient;
private readonly baseApi = 'https://api.gcore.com'; private readonly baseApi = 'https://api.gcore.com';
async onInstance() { async onInstance() {}
this.http = this.ctx.http;
}
private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) { private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) {
const headers = { const headers = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
...(token ? { 'authorization': `Bearer ${token}` } : {}), ...(token ? { authorization: `Bearer ${token}` } : {}),
}; };
const res = await this.http.request<any, any>({ const res = await this.http.request<any, any>({
url, url,
@ -64,7 +61,7 @@ export class GcoreuploadPlugin extends AbstractTaskPlugin {
} }
async execute(): Promise<void> { async execute(): Promise<void> {
const { cert,accessId } = this; const { cert, accessId } = this;
const access = (await this.accessService.getById(accessId)) as GcoreAccess; const access = (await this.accessService.getById(accessId)) as GcoreAccess;
let otp = null; let otp = null;
if (access.otpkey) { if (access.otpkey) {

View File

@ -1,7 +1,6 @@
import * as _ from 'lodash-es'; import * as _ from 'lodash-es';
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline'; import { Autowire } from '@certd/pipeline';
import { ILogger } from '@certd/basic';
import { HuaweiAccess } from '../access/index.js'; import { HuaweiAccess } from '../access/index.js';
import { ApiRequestOptions, HuaweiYunClient } from '@certd/lib-huawei'; import { ApiRequestOptions, HuaweiYunClient } from '@certd/lib-huawei';
@ -20,8 +19,6 @@ export class HuaweiDnsProvider extends AbstractDnsProvider {
client!: HuaweiYunClient; client!: HuaweiYunClient;
@Autowire() @Autowire()
access!: HuaweiAccess; access!: HuaweiAccess;
@Autowire()
logger!: ILogger;
domainEndpoint = 'https://domains-external.myhuaweicloud.com'; domainEndpoint = 'https://domains-external.myhuaweicloud.com';
dnsEndpoint = 'https://dns.cn-south-1.myhuaweicloud.com'; dnsEndpoint = 'https://dns.cn-south-1.myhuaweicloud.com';
async onInstance() { async onInstance() {

View File

@ -1,6 +1,4 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline';
import { HttpClient, ILogger } from '@certd/basic';
import qs from 'qs'; import qs from 'qs';
import { NamesiloAccess } from './access.js'; import { NamesiloAccess } from './access.js';
import { merge } from 'lodash-es'; import { merge } from 'lodash-es';
@ -19,15 +17,11 @@ export type NamesiloRecord = {
}) })
export class NamesiloDnsProvider extends AbstractDnsProvider<NamesiloRecord> { export class NamesiloDnsProvider extends AbstractDnsProvider<NamesiloRecord> {
// 通过Autowire传递context // 通过Autowire传递context
@Autowire()
logger!: ILogger;
access!: NamesiloAccess; access!: NamesiloAccess;
http!: HttpClient;
async onInstance() { async onInstance() {
//一些初始化的操作 //一些初始化的操作
// 也可以通过ctx成员变量传递context 与Autowire效果一样 // 也可以通过ctx成员变量传递context 与Autowire效果一样
this.access = this.ctx.access as NamesiloAccess; this.access = this.ctx.access as NamesiloAccess;
this.http = this.ctx.http;
} }
private async doRequest(url: string, params: any = null) { private async doRequest(url: string, params: any = null) {

View File

@ -1,5 +1,4 @@
import { Autowire } from '@certd/pipeline'; import { Autowire } from '@certd/pipeline';
import { HttpClient, ILogger } from '@certd/basic';
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import * as _ from 'lodash-es'; import * as _ from 'lodash-es';
@ -13,13 +12,8 @@ import { DnspodAccess } from '../access/index.js';
deprecated: 'dnspod已废弃请换成腾讯云', deprecated: 'dnspod已废弃请换成腾讯云',
}) })
export class DnspodDnsProvider extends AbstractDnsProvider { export class DnspodDnsProvider extends AbstractDnsProvider {
@Autowire()
http!: HttpClient;
@Autowire() @Autowire()
access!: DnspodAccess; access!: DnspodAccess;
@Autowire()
logger!: ILogger;
loginToken: any; loginToken: any;

View File

@ -1,5 +1,4 @@
import { Autowire } from '@certd/pipeline'; import { Autowire } from '@certd/pipeline';
import { HttpClient, ILogger } from '@certd/basic';
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { TencentAccess } from '@certd/plugin-plus'; import { TencentAccess } from '@certd/plugin-plus';
@ -11,13 +10,8 @@ import { TencentAccess } from '@certd/plugin-plus';
accessType: 'tencent', accessType: 'tencent',
}) })
export class TencentDnsProvider extends AbstractDnsProvider { export class TencentDnsProvider extends AbstractDnsProvider {
@Autowire()
http!: HttpClient;
@Autowire() @Autowire()
access!: TencentAccess; access!: TencentAccess;
@Autowire()
logger!: ILogger;
client!: any; client!: any;

View File

@ -1,7 +1,5 @@
import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert'; import { AbstractDnsProvider, CreateRecordOptions, IsDnsProvider, RemoveRecordOptions } from '@certd/plugin-cert';
import { Autowire } from '@certd/pipeline'; import { Autowire } from '@certd/pipeline';
import { HttpClient, ILogger } from '@certd/basic';
import { WestAccess } from './access.js'; import { WestAccess } from './access.js';
@ -26,13 +24,9 @@ export class WestDnsProvider extends AbstractDnsProvider<westRecord> {
// 通过Autowire注入工具对象 // 通过Autowire注入工具对象
@Autowire() @Autowire()
access!: WestAccess; access!: WestAccess;
@Autowire()
logger!: ILogger;
http!: HttpClient;
async onInstance() { async onInstance() {
// 也可以通过ctx成员变量传递context 与Autowire效果一样 // 也可以通过ctx成员变量传递context 与Autowire效果一样
this.http = this.ctx.http;
this.logger.debug('access:', this.access); this.logger.debug('access:', this.access);
//初始化的操作 //初始化的操作
//... //...
@ -45,7 +39,7 @@ export class WestDnsProvider extends AbstractDnsProvider<westRecord> {
} else { } else {
data.apidomainkey = this.access.apidomainkey; data.apidomainkey = this.access.apidomainkey;
} }
const res = await this.http.request<any, any>({ const res = await this.ctx.http.request<any, any>({
url, url,
method, method,
data, data,

View File

@ -1,7 +1,6 @@
import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline'; import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
import { CertInfo } from '@certd/plugin-cert'; import { CertInfo } from '@certd/plugin-cert';
import { WoaiAccess } from '../access.js'; import { WoaiAccess } from '../access.js';
import { HttpClient } from '@certd/basic';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'WoaiCDN', name: 'WoaiCDN',
@ -43,12 +42,9 @@ export class WoaiCdnPlugin extends AbstractTaskPlugin {
required: true, required: true,
}) })
accessId!: string; accessId!: string;
http!: HttpClient;
private readonly baseApi = 'https://console.edeg.51vs.club'; private readonly baseApi = 'https://console.edeg.51vs.club';
async onInstance() { async onInstance() {}
this.http = this.ctx.http;
}
private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) { private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) {
const headers = { const headers = {