修改数据库加载

This commit is contained in:
whyour 2021-11-08 22:47:46 +08:00
parent bd6d711212
commit 31fdf7f12c
9 changed files with 71 additions and 60 deletions

View File

@ -11,6 +11,8 @@ async function startServer() {
await require('./loaders/sentry').default({ expressApp: app }); await require('./loaders/sentry').default({ expressApp: app });
await require('./loaders/db').default();
await require('./loaders/app').default({ expressApp: app }); await require('./loaders/app').default({ expressApp: app });
const server = app const server = app

48
back/loaders/db.ts Normal file
View File

@ -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;

View File

@ -5,19 +5,14 @@ import { Crontab, CrontabStatus } from '../data/cron';
import CronService from '../services/cron'; import CronService from '../services/cron';
import EnvService from '../services/env'; import EnvService from '../services/env';
import _ from 'lodash'; import _ from 'lodash';
import { dbs } from '../loaders/db';
export default async () => { export default async () => {
const cronService = Container.get(CronService); const cronService = Container.get(CronService);
const envService = Container.get(EnvService); const envService = Container.get(EnvService);
const dependenceService = Container.get(DependenceService); const dependenceService = Container.get(DependenceService);
const cronDb = cronService.getDb(); const cronDb = dbs.cronDb;
const envDb = envService.getDb(); const dependenceDb = dbs.dependenceDb;
const dependenceDb = dependenceService.getDb();
// compaction data file
cronDb.persistence.compactDatafile();
envDb.persistence.compactDatafile();
dependenceDb.persistence.compactDatafile();
// 初始化更新所有任务状态为空闲 // 初始化更新所有任务状态为空闲
cronDb.update( cronDb.update(

View File

@ -2,16 +2,14 @@ import schedule from 'node-schedule';
import express from 'express'; import express from 'express';
import { exec } from 'child_process'; import { exec } from 'child_process';
import Logger from './loaders/logger'; import Logger from './loaders/logger';
import { Container } from 'typedi';
import CronService from './services/cron';
import { CrontabStatus } from './data/cron'; import { CrontabStatus } from './data/cron';
import config from './config'; import config from './config';
import { dbs } from './loaders/db';
const app = express(); const app = express();
const run = async () => { const run = async () => {
const cronService = Container.get(CronService); const cronDb = dbs.cronDb;
const cronDb = cronService.getDb();
cronDb cronDb
.find({}) .find({})

View File

@ -10,24 +10,17 @@ import { getFileContentByName } from '../config/util';
import PQueue from 'p-queue'; import PQueue from 'p-queue';
import { promises, existsSync } from 'fs'; import { promises, existsSync } from 'fs';
import { promisify } from 'util'; import { promisify } from 'util';
import { dbs } from '../loaders/db';
@Service() @Service()
export default class CronService { export default class CronService {
private cronDb = new DataStore({ filename: config.cronDbFile }); private cronDb = dbs.cronDb;
private queue = new PQueue({ private queue = new PQueue({
concurrency: parseInt(process.env.MaxConcurrentNum as string) || 5, concurrency: parseInt(process.env.MaxConcurrentNum as string) || 5,
}); });
constructor(@Inject('logger') private logger: winston.Logger) { constructor(@Inject('logger') private logger: winston.Logger) {}
this.cronDb.loadDatabase((err) => {
if (err) throw err;
});
}
public getDb(): DataStore {
return this.cronDb;
}
private isSixCron(cron: Crontab) { private isSixCron(cron: Crontab) {
const { schedule } = cron; const { schedule } = cron;
@ -427,10 +420,6 @@ export default class CronService {
this.cronDb.update({}, { $set: { saved: true } }, { multi: true }); this.cronDb.update({}, { $set: { saved: true } }, { multi: true });
} }
private reload_db() {
this.cronDb.loadDatabase();
}
public import_crontab() { public import_crontab() {
exec('crontab -l', (error, stdout, stderr) => { exec('crontab -l', (error, stdout, stderr) => {
var lines = stdout.split('\n'); var lines = stdout.split('\n');

View File

@ -12,22 +12,16 @@ import {
import _ from 'lodash'; import _ from 'lodash';
import { spawn } from 'child_process'; import { spawn } from 'child_process';
import SockService from './sock'; import SockService from './sock';
import { dbs } from '../loaders/db';
@Service() @Service()
export default class DependenceService { export default class DependenceService {
private dependenceDb = new DataStore({ filename: config.dependenceDbFile }); private dependenceDb = dbs.dependenceDb;
constructor( constructor(
@Inject('logger') private logger: winston.Logger, @Inject('logger') private logger: winston.Logger,
private sockService: SockService, private sockService: SockService,
) { ) {}
this.dependenceDb.loadDatabase((err) => {
if (err) throw err;
});
}
public getDb(): DataStore {
return this.dependenceDb;
}
public async create(payloads: Dependence[]): Promise<Dependence[]> { public async create(payloads: Dependence[]): Promise<Dependence[]> {
const tabs = payloads.map((x) => { const tabs = payloads.map((x) => {

View File

@ -6,19 +6,13 @@ import * as fs from 'fs';
import DataStore from 'nedb'; import DataStore from 'nedb';
import { Env, EnvStatus, initEnvPosition } from '../data/env'; import { Env, EnvStatus, initEnvPosition } from '../data/env';
import _ from 'lodash'; import _ from 'lodash';
import { dbs } from '../loaders/db';
@Service() @Service()
export default class EnvService { export default class EnvService {
private envDb = new DataStore({ filename: config.envDbFile }); private envDb = dbs.envDb;
constructor(@Inject('logger') private logger: winston.Logger) {
this.envDb.loadDatabase((err) => {
if (err) throw err;
});
}
public getDb(): DataStore { constructor(@Inject('logger') private logger: winston.Logger) {}
return this.envDb;
}
public async create(payloads: Env[]): Promise<Env[]> { public async create(payloads: Env[]): Promise<Env[]> {
const envs = await this.envs(); const envs = await this.envs();

View File

@ -5,19 +5,13 @@ import config from '../config';
import DataStore from 'nedb'; import DataStore from 'nedb';
import { App } from '../data/open'; import { App } from '../data/open';
import { v4 as uuidV4 } from 'uuid'; import { v4 as uuidV4 } from 'uuid';
import { dbs } from '../loaders/db';
@Service() @Service()
export default class OpenService { export default class OpenService {
private appDb = new DataStore({ filename: config.appDbFile }); private appDb = dbs.appDb;
constructor(@Inject('logger') private logger: winston.Logger) {
this.appDb.loadDatabase((err) => {
if (err) throw err;
});
}
public getDb(): DataStore { constructor(@Inject('logger') private logger: winston.Logger) {}
return this.appDb;
}
public async findTokenByValue(token: string): Promise<App> { public async findTokenByValue(token: string): Promise<App> {
return new Promise((resolve) => { return new Promise((resolve) => {

View File

@ -15,22 +15,19 @@ import ScheduleService from './schedule';
import { spawn } from 'child_process'; import { spawn } from 'child_process';
import SockService from './sock'; import SockService from './sock';
import got from 'got'; import got from 'got';
import { dbs } from '../loaders/db';
@Service() @Service()
export default class UserService { export default class UserService {
@Inject((type) => NotificationService) @Inject((type) => NotificationService)
private notificationService!: NotificationService; private notificationService!: NotificationService;
private authDb = new DataStore({ filename: config.authDbFile }); private authDb = dbs.authDb;
constructor( constructor(
@Inject('logger') private logger: winston.Logger, @Inject('logger') private logger: winston.Logger,
private scheduleService: ScheduleService, private scheduleService: ScheduleService,
private sockService: SockService, private sockService: SockService,
) { ) {}
this.authDb.loadDatabase((err) => {
if (err) throw err;
});
}
public async login( public async login(
payloads: { payloads: {