From 620d1d4092be0580da93f506f892d57ff78e899e Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 28 Jun 2023 15:16:19 +0800 Subject: [PATCH] chore: clear file --- docker/run/docker-compose.yaml | 3 ++- packages/core/pipeline/src/core/file-store.ts | 9 +++++++- packages/core/pipeline/src/core/index.ts | 1 + packages/core/pipeline/src/plugin/api.ts | 6 +++++ .../certd-server/src/config/config.default.ts | 3 +++ .../pipeline/service/history-service.ts | 22 ++++++++++++++++++- .../pipeline/service/pipeline-service.ts | 6 ++++- 7 files changed, 46 insertions(+), 4 deletions(-) diff --git a/docker/run/docker-compose.yaml b/docker/run/docker-compose.yaml index 34de0806..12349e52 100644 --- a/docker/run/docker-compose.yaml +++ b/docker/run/docker-compose.yaml @@ -8,7 +8,8 @@ services: # 要拉起的服务们 image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:${TAG} container_name: certd # 容器名 restart: unless-stopped # 重启 - volumes: # 挂载目录 + volumes: + # ↓↓↓↓↓ 修改数据库以及证书存储路径 - /data/certd:/app/data ports: # 端口映射 - "7001:7001" diff --git a/packages/core/pipeline/src/core/file-store.ts b/packages/core/pipeline/src/core/file-store.ts index fd5a3662..ea7eb5fa 100644 --- a/packages/core/pipeline/src/core/file-store.ts +++ b/packages/core/pipeline/src/core/file-store.ts @@ -34,10 +34,17 @@ export class FileStore { } private buildFilePath(filename: string) { - const parentDir = path.join(this.rootDir, this.scope + "", dayjs().format("YYYY-MM-DD"), this.parent + ""); + const parentDir = path.join(this.rootDir, this.scope + "", this.parent + "", dayjs().format("YYYY-MM-DD")); if (!fs.existsSync(parentDir)) { fs.mkdirSync(parentDir, { recursive: true }); } return path.join(parentDir, filename); } + + deleteByParent(scope: string, parent: string) { + const dir = path.join(this.rootDir, scope, parent); + if (fs.existsSync(dir)) { + fs.unlinkSync(dir); + } + } } diff --git a/packages/core/pipeline/src/core/index.ts b/packages/core/pipeline/src/core/index.ts index 537c1c67..91ca6755 100644 --- a/packages/core/pipeline/src/core/index.ts +++ b/packages/core/pipeline/src/core/index.ts @@ -2,3 +2,4 @@ export * from "./executor"; export * from "./run-history"; export * from "./context"; export * from "./storage"; +export * from "./file-store"; diff --git a/packages/core/pipeline/src/plugin/api.ts b/packages/core/pipeline/src/plugin/api.ts index 9503a12d..717d28e9 100644 --- a/packages/core/pipeline/src/plugin/api.ts +++ b/packages/core/pipeline/src/plugin/api.ts @@ -78,6 +78,12 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin { this.ctx = ctx; } + linkFile(file: FileItem) { + this._result.files!.push({ + ...file, + id: uuidv4(), + }); + } saveFile(filename: string, file: Buffer) { const filePath = this.ctx.fileStore.writeFile(filename, file); this._result.files!.push({ diff --git a/packages/ui/certd-server/src/config/config.default.ts b/packages/ui/certd-server/src/config/config.default.ts index 11839c36..cc366743 100644 --- a/packages/ui/certd-server/src/config/config.default.ts +++ b/packages/ui/certd-server/src/config/config.default.ts @@ -71,6 +71,9 @@ const development = { expire: 7 * 24 * 60, //单位秒 }, }, + certd: { + fileRootDir: '/app/data/files', + }, } as MidwayConfig; mergeConfig(development, 'development'); export default development; diff --git a/packages/ui/certd-server/src/modules/pipeline/service/history-service.ts b/packages/ui/certd-server/src/modules/pipeline/service/history-service.ts index 58b1cd38..6a675e12 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/history-service.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/history-service.ts @@ -1,4 +1,4 @@ -import { Inject, Provide, Scope, ScopeEnum } from '@midwayjs/decorator'; +import { Config, Inject, Provide, Scope, ScopeEnum } from '@midwayjs/decorator'; import { InjectEntityModel } from '@midwayjs/typeorm'; import { Repository } from 'typeorm'; import { BaseService } from '../../../basic/base-service'; @@ -7,6 +7,8 @@ import { PipelineEntity } from '../entity/pipeline'; import { HistoryDetail } from '../entity/vo/history-detail'; import { HistoryLogService } from './history-log-service'; import { FileItem, Pipeline, RunnableCollection } from '@certd/pipeline'; +import { FileStore } from '@certd/pipeline'; +import { logger } from '../../../utils/logger'; /** * 证书申请 @@ -18,6 +20,10 @@ export class HistoryService extends BaseService { repository: Repository; @Inject() logService: HistoryLogService; + + @Config('certd') + private certdConfig: any; + getRepository() { return this.repository; } @@ -60,6 +66,11 @@ export class HistoryService extends BaseService { } let shouldDeleteCount = count - keepCount; const deleteCountBatch = 100; + const fileStore = new FileStore({ + rootDir: this.certdConfig.fileRootDir, + scope: pipelineId + '', + parent: '0', + }); while (shouldDeleteCount > 0) { const list = await this.repository.find({ select: { @@ -76,6 +87,15 @@ export class HistoryService extends BaseService { }); await this.repository.remove(list); + for (const historyEntity of list) { + const id = historyEntity.id; + try { + fileStore.deleteByParent(pipelineId + '', id + ''); + } catch (e) { + logger.error('删除文件失败', e); + } + } + shouldDeleteCount -= deleteCountBatch; } } diff --git a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts index 1815a6ce..581dd9bc 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts @@ -1,4 +1,4 @@ -import { Inject, Provide, Scope, ScopeEnum } from '@midwayjs/decorator'; +import { Config, Inject, Provide, Scope, ScopeEnum } from '@midwayjs/decorator'; import { InjectEntityModel } from '@midwayjs/typeorm'; import { In, Repository } from 'typeorm'; import { BaseService } from '../../../basic/base-service'; @@ -38,6 +38,9 @@ export class PipelineService extends BaseService { @Inject() cron: Cron; + @Config('certd') + private certdConfig: any; + getRepository() { return this.repository; } @@ -213,6 +216,7 @@ export class PipelineService extends BaseService { accessService: this.accessService, storage: new DbStorage(userId, this.storageService), emailService: this.emailService, + fileRootDir: this.certdConfig.fileRootDir, }); try { await executor.init();