mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: storage: 热重载
This commit is contained in:
1 parent
99ac6e545d
commit
8c8dcb89eb
5 files changed
+24
-12
No files matched your search
@@ -1,6 +1,7 @@
|
|||||||
/* eslint-disable no-await-in-loop */
|
/* eslint-disable no-await-in-loop */
|
||||||
/* eslint-disable no-eval */
|
/* eslint-disable no-eval */
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
import os from 'os';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import yaml from 'js-yaml';
|
import yaml from 'js-yaml';
|
||||||
import { Logger } from '../logger';
|
import { Logger } from '../logger';
|
||||||
@@ -99,9 +100,15 @@ export async function setting(pending: string[], fail: string[], modelSetting: t
|
|||||||
try {
|
try {
|
||||||
const cfg: any = yaml.load(fs.readFileSync(p).toString());
|
const cfg: any = yaml.load(fs.readFileSync(p).toString());
|
||||||
for (const key in cfg) {
|
for (const key in cfg) {
|
||||||
|
let val;
|
||||||
|
if (typeof cfg[key].default === 'string') {
|
||||||
|
val = cfg[key].default
|
||||||
|
.replace(/\$TEMP/g, os.tmpdir())
|
||||||
|
.replace(/\$HOME/g, os.homedir());
|
||||||
|
}
|
||||||
map[cfg[key].category || 'system'](
|
map[cfg[key].category || 'system'](
|
||||||
modelSetting.Setting(
|
modelSetting.Setting(
|
||||||
name, `${name}.${key}`, cfg[key].range, cfg[key].default,
|
name, `${name}.${key}`, cfg[key].range, val,
|
||||||
cfg[key].type || 'text', cfg[key].name || key, cfg[key].desc || '',
|
cfg[key].type || 'text', cfg[key].name || key, cfg[key].desc || '',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import { Logger } from '../logger';
|
|||||||
import options from '../options';
|
import options from '../options';
|
||||||
import * as bus from '../service/bus';
|
import * as bus from '../service/bus';
|
||||||
import db from '../service/db';
|
import db from '../service/db';
|
||||||
import storage from '../service/storage';
|
|
||||||
|
|
||||||
const logger = new Logger('entry/master');
|
const logger = new Logger('entry/master');
|
||||||
const tmpdir = path.resolve(os.tmpdir(), 'hydro');
|
const tmpdir = path.resolve(os.tmpdir(), 'hydro');
|
||||||
@@ -64,7 +63,8 @@ export async function load(call: Entry) {
|
|||||||
const sopts = {
|
const sopts = {
|
||||||
endPoint, accessKey, secretKey, bucket, region, endPointForUser, endPointForJudge,
|
endPoint, accessKey, secretKey, bucket, region, endPointForUser, endPointForJudge,
|
||||||
};
|
};
|
||||||
await storage.start(sopts);
|
const storage = require('../service/storage');
|
||||||
|
storage.start(sopts);
|
||||||
require('../service/monitor');
|
require('../service/monitor');
|
||||||
for (const i of builtinModel) require(`../model/${i}`);
|
for (const i of builtinModel) require(`../model/${i}`);
|
||||||
const scripts = require('../upgrade');
|
const scripts = require('../upgrade');
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import {
|
|||||||
import options from '../options';
|
import options from '../options';
|
||||||
import * as bus from '../service/bus';
|
import * as bus from '../service/bus';
|
||||||
import db from '../service/db';
|
import db from '../service/db';
|
||||||
import storage from '../service/storage';
|
|
||||||
import { Logger } from '../logger';
|
import { Logger } from '../logger';
|
||||||
|
|
||||||
const logger = new Logger('loader/worker');
|
const logger = new Logger('loader/worker');
|
||||||
@@ -42,7 +41,8 @@ export async function load() {
|
|||||||
const sopts = {
|
const sopts = {
|
||||||
endPoint, accessKey, secretKey, bucket, region, endPointForUser, endPointForJudge,
|
endPoint, accessKey, secretKey, bucket, region, endPointForUser, endPointForJudge,
|
||||||
};
|
};
|
||||||
await storage.start(sopts);
|
const storage = require('../service/storage');
|
||||||
|
storage.start(sopts);
|
||||||
if (argv.loaderDetail) logger.info('finish: storage.connect');
|
if (argv.loaderDetail) logger.info('finish: storage.connect');
|
||||||
for (const i of builtinLib) require(`../lib/${i}`);
|
for (const i of builtinLib) require(`../lib/${i}`);
|
||||||
if (argv.loaderDetail) logger.info('finish: lib.builtin');
|
if (argv.loaderDetail) logger.info('finish: lib.builtin');
|
||||||
@@ -67,9 +67,7 @@ export async function load() {
|
|||||||
if (argv.loaderDetail) logger.info('finish: setting');
|
if (argv.loaderDetail) logger.info('finish: setting');
|
||||||
await handler(pending, fail);
|
await handler(pending, fail);
|
||||||
if (argv.loaderDetail) logger.info('finish: handler.extra');
|
if (argv.loaderDetail) logger.info('finish: handler.extra');
|
||||||
for (const i in global.Hydro.handler) {
|
for (const i in global.Hydro.handler) await global.Hydro.handler[i]();
|
||||||
await global.Hydro.handler[i]();
|
|
||||||
}
|
|
||||||
if (argv.loaderDetail) logger.info('finish: handler.apply');
|
if (argv.loaderDetail) logger.info('finish: handler.apply');
|
||||||
const notfound = require('../handler/notfound');
|
const notfound = require('../handler/notfound');
|
||||||
await notfound.apply();
|
await notfound.apply();
|
||||||
|
|||||||
@@ -36,9 +36,10 @@ export function getMany(keys: string[]): any[] {
|
|||||||
return keys.map((key) => cache[key]);
|
return keys.map((key) => cache[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function set<K extends keyof SystemKeys>(_id: K, value: SystemKeys[K]): Promise<SystemKeys[K]>
|
export async function set<K extends keyof SystemKeys>(_id: K, value: SystemKeys[K], boardcast?: boolean): Promise<SystemKeys[K]>
|
||||||
export async function set<K>(_id: string, value: K): Promise<K>
|
export async function set<K>(_id: string, value: K, boardcast?: boolean): Promise<K>
|
||||||
export async function set(_id: string, value: any) {
|
export async function set(_id: string, value: any, boardcast = true) {
|
||||||
|
if (boardcast) bus.boardcast('system/setting', { [_id]: value });
|
||||||
const res = await coll.findOneAndUpdate(
|
const res = await coll.findOneAndUpdate(
|
||||||
{ _id },
|
{ _id },
|
||||||
{ $set: { value } },
|
{ $set: { value } },
|
||||||
@@ -69,6 +70,10 @@ export async function runConfig() {
|
|||||||
bus.emit('database/config');
|
bus.emit('database/config');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bus.on('system/setting', (args) => {
|
||||||
|
for (const key in args) set(key, args[key], false);
|
||||||
|
});
|
||||||
|
|
||||||
global.Hydro.model.system = {
|
global.Hydro.model.system = {
|
||||||
runConfig,
|
runConfig,
|
||||||
get,
|
get,
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ export function off<K extends keyof EventMap>(name: K, listener: EventMap[K]) {
|
|||||||
|
|
||||||
export async function parallel<K extends keyof EventMap>(name: K, ...args: Parameters<EventMap[K]>): Promise<void> {
|
export async function parallel<K extends keyof EventMap>(name: K, ...args: Parameters<EventMap[K]>): Promise<void> {
|
||||||
const tasks: Promise<any>[] = [];
|
const tasks: Promise<any>[] = [];
|
||||||
|
if (argv.showBus) logger.debug('parallel: %s %o', name, args);
|
||||||
for (const callback of _hooks[name] || []) {
|
for (const callback of _hooks[name] || []) {
|
||||||
tasks.push(callback.apply(this, args));
|
tasks.push(callback.apply(this, args));
|
||||||
}
|
}
|
||||||
@@ -166,7 +167,8 @@ async function messageHandler(worker: cluster.Worker, msg: any) {
|
|||||||
for (const i in cluster.workers) {
|
for (const i in cluster.workers) {
|
||||||
cluster.workers[i].send(msg);
|
cluster.workers[i].send(msg);
|
||||||
}
|
}
|
||||||
} else global.Hydro.service.bus.emit(msg.eventName, ...msg.payload);
|
}
|
||||||
|
emit(msg.eventName, ...msg.payload);
|
||||||
} else if (msg.event === 'stat') {
|
} else if (msg.event === 'stat') {
|
||||||
global.Hydro.stat.reqCount += msg.count;
|
global.Hydro.stat.reqCount += msg.count;
|
||||||
} else await emit(msg.event, ...msg.payload);
|
} else await emit(msg.event, ...msg.payload);
|
||||||
|
|||||||
Reference in new issue
Block a user