From 8559438611974930ae796f7264acc4541aebe057 Mon Sep 17 00:00:00 2001 From: whyour Date: Mon, 8 Nov 2021 22:47:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- back/app.ts | 2 ++ back/loaders/db.ts | 48 +++++++++++++++++++++++++++++++++++++ back/loaders/initData.ts | 11 +++------ back/schedule.ts | 6 ++--- back/services/cron.ts | 17 +++---------- back/services/dependence.ts | 14 ++++------- back/services/env.ts | 12 +++------- back/services/open.ts | 12 +++------- back/services/user.ts | 9 +++---- 9 files changed, 71 insertions(+), 60 deletions(-) create mode 100644 back/loaders/db.ts diff --git a/back/app.ts b/back/app.ts index 1202cd70..ee2f64b6 100644 --- a/back/app.ts +++ b/back/app.ts @@ -11,6 +11,8 @@ async function startServer() { await require('./loaders/sentry').default({ expressApp: app }); + await require('./loaders/db').default(); + await require('./loaders/app').default({ expressApp: app }); const server = app diff --git a/back/loaders/db.ts b/back/loaders/db.ts new file mode 100644 index 00000000..9f6f91df --- /dev/null +++ b/back/loaders/db.ts @@ -0,0 +1,48 @@ +import DataStore from 'nedb'; +import config from '../config'; +import Logger from './logger'; + +interface Dbs { + cronDb: DataStore; + dependenceDb: DataStore; + envDb: DataStore; + appDb: DataStore; + authDb: DataStore; +} + +const db: Dbs = {} as any; + +export default () => { + db.cronDb = new DataStore({ filename: config.cronDbFile }); + db.dependenceDb = new DataStore({ filename: config.dependenceDbFile }); + db.envDb = new DataStore({ filename: config.envDbFile }); + db.appDb = new DataStore({ filename: config.appDbFile }); + db.authDb = new DataStore({ filename: config.authDbFile }); + + // compaction data file + db.cronDb.persistence.compactDatafile(); + db.envDb.persistence.compactDatafile(); + db.dependenceDb.persistence.compactDatafile(); + db.appDb.persistence.compactDatafile(); + db.authDb.persistence.compactDatafile(); + + db.cronDb.loadDatabase((err) => { + if (err) throw err; + }); + db.envDb.loadDatabase((err) => { + if (err) throw err; + }); + db.dependenceDb.loadDatabase((err) => { + if (err) throw err; + }); + db.appDb.loadDatabase((err) => { + if (err) throw err; + }); + db.authDb.loadDatabase((err) => { + if (err) throw err; + }); + + Logger.info('✌️ DB loaded'); +}; + +export const dbs: Dbs = db; diff --git a/back/loaders/initData.ts b/back/loaders/initData.ts index eea2059d..a461fba9 100644 --- a/back/loaders/initData.ts +++ b/back/loaders/initData.ts @@ -5,19 +5,14 @@ import { Crontab, CrontabStatus } from '../data/cron'; import CronService from '../services/cron'; import EnvService from '../services/env'; import _ from 'lodash'; +import { dbs } from '../loaders/db'; export default async () => { const cronService = Container.get(CronService); const envService = Container.get(EnvService); const dependenceService = Container.get(DependenceService); - const cronDb = cronService.getDb(); - const envDb = envService.getDb(); - const dependenceDb = dependenceService.getDb(); - - // compaction data file - cronDb.persistence.compactDatafile(); - envDb.persistence.compactDatafile(); - dependenceDb.persistence.compactDatafile(); + const cronDb = dbs.cronDb; + const dependenceDb = dbs.dependenceDb; // 初始化更新所有任务状态为空闲 cronDb.update( diff --git a/back/schedule.ts b/back/schedule.ts index 08c71615..585fd242 100644 --- a/back/schedule.ts +++ b/back/schedule.ts @@ -2,16 +2,14 @@ import schedule from 'node-schedule'; import express from 'express'; import { exec } from 'child_process'; import Logger from './loaders/logger'; -import { Container } from 'typedi'; -import CronService from './services/cron'; import { CrontabStatus } from './data/cron'; import config from './config'; +import { dbs } from './loaders/db'; const app = express(); const run = async () => { - const cronService = Container.get(CronService); - const cronDb = cronService.getDb(); + const cronDb = dbs.cronDb; cronDb .find({}) diff --git a/back/services/cron.ts b/back/services/cron.ts index 08d943e1..152b6f82 100644 --- a/back/services/cron.ts +++ b/back/services/cron.ts @@ -10,24 +10,17 @@ import { getFileContentByName } from '../config/util'; import PQueue from 'p-queue'; import { promises, existsSync } from 'fs'; import { promisify } from 'util'; +import { dbs } from '../loaders/db'; @Service() export default class CronService { - private cronDb = new DataStore({ filename: config.cronDbFile }); + private cronDb = dbs.cronDb; private queue = new PQueue({ concurrency: parseInt(process.env.MaxConcurrentNum as string) || 5, }); - constructor(@Inject('logger') private logger: winston.Logger) { - this.cronDb.loadDatabase((err) => { - if (err) throw err; - }); - } - - public getDb(): DataStore { - return this.cronDb; - } + constructor(@Inject('logger') private logger: winston.Logger) {} private isSixCron(cron: Crontab) { const { schedule } = cron; @@ -427,10 +420,6 @@ export default class CronService { this.cronDb.update({}, { $set: { saved: true } }, { multi: true }); } - private reload_db() { - this.cronDb.loadDatabase(); - } - public import_crontab() { exec('crontab -l', (error, stdout, stderr) => { var lines = stdout.split('\n'); diff --git a/back/services/dependence.ts b/back/services/dependence.ts index 83edf0cc..f6a213b1 100644 --- a/back/services/dependence.ts +++ b/back/services/dependence.ts @@ -12,22 +12,16 @@ import { import _ from 'lodash'; import { spawn } from 'child_process'; import SockService from './sock'; +import { dbs } from '../loaders/db'; @Service() export default class DependenceService { - private dependenceDb = new DataStore({ filename: config.dependenceDbFile }); + private dependenceDb = dbs.dependenceDb; + constructor( @Inject('logger') private logger: winston.Logger, private sockService: SockService, - ) { - this.dependenceDb.loadDatabase((err) => { - if (err) throw err; - }); - } - - public getDb(): DataStore { - return this.dependenceDb; - } + ) {} public async create(payloads: Dependence[]): Promise { const tabs = payloads.map((x) => { diff --git a/back/services/env.ts b/back/services/env.ts index 9df3a070..f04b18a9 100644 --- a/back/services/env.ts +++ b/back/services/env.ts @@ -6,19 +6,13 @@ import * as fs from 'fs'; import DataStore from 'nedb'; import { Env, EnvStatus, initEnvPosition } from '../data/env'; import _ from 'lodash'; +import { dbs } from '../loaders/db'; @Service() export default class EnvService { - private envDb = new DataStore({ filename: config.envDbFile }); - constructor(@Inject('logger') private logger: winston.Logger) { - this.envDb.loadDatabase((err) => { - if (err) throw err; - }); - } + private envDb = dbs.envDb; - public getDb(): DataStore { - return this.envDb; - } + constructor(@Inject('logger') private logger: winston.Logger) {} public async create(payloads: Env[]): Promise { const envs = await this.envs(); diff --git a/back/services/open.ts b/back/services/open.ts index d83024b1..5b59c398 100644 --- a/back/services/open.ts +++ b/back/services/open.ts @@ -5,19 +5,13 @@ import config from '../config'; import DataStore from 'nedb'; import { App } from '../data/open'; import { v4 as uuidV4 } from 'uuid'; +import { dbs } from '../loaders/db'; @Service() export default class OpenService { - private appDb = new DataStore({ filename: config.appDbFile }); - constructor(@Inject('logger') private logger: winston.Logger) { - this.appDb.loadDatabase((err) => { - if (err) throw err; - }); - } + private appDb = dbs.appDb; - public getDb(): DataStore { - return this.appDb; - } + constructor(@Inject('logger') private logger: winston.Logger) {} public async findTokenByValue(token: string): Promise { return new Promise((resolve) => { diff --git a/back/services/user.ts b/back/services/user.ts index 91f0b2d7..47d0cf45 100644 --- a/back/services/user.ts +++ b/back/services/user.ts @@ -15,22 +15,19 @@ import ScheduleService from './schedule'; import { spawn } from 'child_process'; import SockService from './sock'; import got from 'got'; +import { dbs } from '../loaders/db'; @Service() export default class UserService { @Inject((type) => NotificationService) private notificationService!: NotificationService; - private authDb = new DataStore({ filename: config.authDbFile }); + private authDb = dbs.authDb; constructor( @Inject('logger') private logger: winston.Logger, private scheduleService: ScheduleService, private sockService: SockService, - ) { - this.authDb.loadDatabase((err) => { - if (err) throw err; - }); - } + ) {} public async login( payloads: {