From 83f6d9926ae77617e54238900d830db78b3706e0 Mon Sep 17 00:00:00 2001 From: whyour Date: Tue, 18 Jan 2022 22:56:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=81=E7=A7=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- back/loaders/db.ts | 139 ++++++++++++++++-------------------- back/services/dependence.ts | 1 - back/services/env.ts | 1 - back/services/open.ts | 1 - back/services/system.ts | 1 - 5 files changed, 63 insertions(+), 80 deletions(-) diff --git a/back/loaders/db.ts b/back/loaders/db.ts index 13edfdc2..fc6ae7bd 100644 --- a/back/loaders/db.ts +++ b/back/loaders/db.ts @@ -1,7 +1,6 @@ import DataStore from 'nedb'; import config from '../config'; import Logger from './logger'; -import fs from 'fs'; import { fileExist } from '../config/util'; import { EnvModel } from '../data/env'; import { CrontabModel } from '../data/cron'; @@ -10,54 +9,73 @@ import { AppModel } from '../data/open'; import { AuthModel } from '../data/auth'; import { sequelize } from '../data'; -interface Dbs { - cronDb: DataStore; - dependenceDb: DataStore; - envDb: DataStore; - appDb: DataStore; - authDb: DataStore; -} - -const db: Dbs = {} as any; - -async function truncateDb() { - return new Promise(async (resolve) => { - const files = [ - config.cronDbFile, - config.dependenceDbFile, - config.envDbFile, - config.appDbFile, - config.authDbFile, - ]; - - for (const file of files) { - const _fileExist = await fileExist(file); - if (_fileExist && fs.statSync(file).size >= 1024 * 1024 * 500) { - fs.truncateSync(file, 1024 * 1024 * 500); - } - } - resolve(null); - }); -} export default async () => { try { - await truncateDb(); + const crondbExist = await fileExist(config.cronDbFile); + const dependenceDbExist = await fileExist(config.dependenceDbFile); + const envDbExist = await fileExist(config.envDbFile); + const appDbExist = await fileExist(config.appDbFile); + const authDbExist = await fileExist(config.authDbFile); - db.cronDb = new DataStore({ filename: config.cronDbFile, autoload: true }); - db.dependenceDb = new DataStore({ - filename: config.dependenceDbFile, - autoload: true, - }); - db.envDb = new DataStore({ filename: config.envDbFile, autoload: true }); - db.appDb = new DataStore({ filename: config.appDbFile, autoload: true }); - db.authDb = new DataStore({ filename: config.authDbFile, autoload: true }); + const cronCount = await CrontabModel.count(); + const dependenceCount = await DependenceModel.count(); + const envCount = await EnvModel.count(); + const appCount = await AppModel.count(); + const authCount = await AuthModel.count(); + if (crondbExist && cronCount === 0) { + const cronDb = new DataStore({ + filename: config.cronDbFile, + autoload: true, + }); + cronDb.persistence.compactDatafile(); + cronDb.find({}).exec(async (err, docs) => { + await CrontabModel.bulkCreate(docs, { ignoreDuplicates: true }); + }); + } - // compaction data file - db.cronDb.persistence.compactDatafile(); - db.envDb.persistence.compactDatafile(); - db.dependenceDb.persistence.compactDatafile(); - db.appDb.persistence.compactDatafile(); - db.authDb.persistence.compactDatafile(); + if (dependenceDbExist && dependenceCount === 0) { + const dependenceDb = new DataStore({ + filename: config.dependenceDbFile, + autoload: true, + }); + dependenceDb.persistence.compactDatafile(); + dependenceDb.find({}).exec(async (err, docs) => { + await DependenceModel.bulkCreate(docs, { ignoreDuplicates: true }); + }); + } + + if (envDbExist && envCount === 0) { + const envDb = new DataStore({ + filename: config.envDbFile, + autoload: true, + }); + envDb.persistence.compactDatafile(); + envDb.find({}).exec(async (err, docs) => { + await EnvModel.bulkCreate(docs, { ignoreDuplicates: true }); + }); + } + + if (appDbExist && appCount === 0) { + const appDb = new DataStore({ + filename: config.appDbFile, + autoload: true, + }); + appDb.persistence.compactDatafile(); + appDb.find({}).exec(async (err, docs) => { + await AppModel.bulkCreate(docs, { ignoreDuplicates: true }); + }); + } + + if (authDbExist && authCount === 0) { + const authDb = new DataStore({ + filename: config.authDbFile, + autoload: true, + }); + authDb.persistence.compactDatafile(); + authDb.find({}).exec(async (err, docs) => { + await AuthModel.bulkCreate(docs, { ignoreDuplicates: true }); + }); + } try { await sequelize.sync({ alter: true }); @@ -65,40 +83,9 @@ export default async () => { console.log(error); } - // migrate db to sqlite - try { - const count = await CrontabModel.count(); - if (count !== 0) { - return; - } - db.cronDb.find({}).exec(async (err, docs) => { - await CrontabModel.bulkCreate(docs, { ignoreDuplicates: true }); - }); - - db.dependenceDb.find({}).exec(async (err, docs) => { - await DependenceModel.bulkCreate(docs, { ignoreDuplicates: true }); - }); - - db.envDb.find({}).exec(async (err, docs) => { - await EnvModel.bulkCreate(docs, { ignoreDuplicates: true }); - }); - - db.appDb.find({}).exec(async (err, docs) => { - await AppModel.bulkCreate(docs, { ignoreDuplicates: true }); - }); - - db.authDb.find({}).exec(async (err, docs) => { - await AuthModel.bulkCreate(docs, { ignoreDuplicates: true }); - }); - } catch (error) { - console.log(error); - } - Logger.info('✌️ DB loaded'); } catch (error) { Logger.info('✌️ DB load failed'); Logger.info(error); } }; - -export const dbs: Dbs = db; diff --git a/back/services/dependence.ts b/back/services/dependence.ts index 50ec538a..78086618 100644 --- a/back/services/dependence.ts +++ b/back/services/dependence.ts @@ -1,7 +1,6 @@ import { Service, Inject } from 'typedi'; import winston from 'winston'; import config from '../config'; -import DataStore from 'nedb'; import { Dependence, InstallDependenceCommandTypes, diff --git a/back/services/env.ts b/back/services/env.ts index ad6c951d..68205134 100644 --- a/back/services/env.ts +++ b/back/services/env.ts @@ -3,7 +3,6 @@ import winston from 'winston'; import { getFileContentByName } from '../config/util'; import config from '../config'; import * as fs from 'fs'; -import DataStore from 'nedb'; import { Env, EnvModel, EnvStatus, initEnvPosition } from '../data/env'; import _ from 'lodash'; import { Op } from 'sequelize'; diff --git a/back/services/open.ts b/back/services/open.ts index 2681c4ec..43d0b7db 100644 --- a/back/services/open.ts +++ b/back/services/open.ts @@ -2,7 +2,6 @@ import { Service, Inject } from 'typedi'; import winston from 'winston'; import { createRandomString } from '../config/util'; import config from '../config'; -import DataStore from 'nedb'; import { App, AppModel } from '../data/open'; import { v4 as uuidV4 } from 'uuid'; import sequelize, { Op } from 'sequelize'; diff --git a/back/services/system.ts b/back/services/system.ts index e58d9dca..feb5a12e 100644 --- a/back/services/system.ts +++ b/back/services/system.ts @@ -10,7 +10,6 @@ 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 SystemService {