From 672c553f4cf8fb62873b8c0c2b1157eb4ed84f28 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 22 Sep 2022 16:30:53 +0800 Subject: [PATCH] core: ctx.setInterval support --- packages/hydrooj/src/service/module.ts | 7 +++++-- packages/prom-client/handler.ts | 17 ++++++++--------- .../components/preview/preview.page.ts | 1 + 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/hydrooj/src/service/module.ts b/packages/hydrooj/src/service/module.ts index 714989c0..b0be91c7 100644 --- a/packages/hydrooj/src/service/module.ts +++ b/packages/hydrooj/src/service/module.ts @@ -31,9 +31,9 @@ export class Runtime { if (this.loaded) throw new Error(`Module ${this.filename} was already loaded`); this.sideEffect = false; if (typeof module.dispose === 'function') this.disposables.push(module.dispose); - const T = (origFunc) => (origFunc ? (...args) => { + const T = (origFunc, disposeFunc?) => (origFunc ? (...args) => { const res = origFunc(...args); - this.disposables.push(res); + this.disposables.push(disposeFunc ? () => disposeFunc(res) : res); return res; } : null); module.apply({ @@ -43,6 +43,9 @@ export class Runtime { once: T(bus.once), off: bus.off, addScript: T(addScript), + setInterval: T(setInterval, clearInterval), + setTimeout: T(setTimeout, clearTimeout), + setImmediate: T(setImmediate, clearImmediate), } as Context); if (module.sideEffect) this.sideEffect = true; this.loaded = true; diff --git a/packages/prom-client/handler.ts b/packages/prom-client/handler.ts index 467b86df..bc5f0ab5 100644 --- a/packages/prom-client/handler.ts +++ b/packages/prom-client/handler.ts @@ -1,7 +1,7 @@ import { AggregatorRegistry, metric } from 'prom-client'; import * as system from 'hydrooj/src/model/system'; import * as bus from 'hydrooj/src/service/bus'; -import { Handler, Route } from 'hydrooj/src/service/server'; +import { Handler } from 'hydrooj/src/service/server'; import { registry } from './metrics'; declare module 'hydrooj/src/service/bus' { @@ -42,11 +42,10 @@ class MetricsHandler extends Handler { } } -bus.on('metrics', (id, metrics) => { instances[id] = metrics; }); -setInterval(async () => { - bus.broadcast('metrics', process.env.NODE_APP_INSTANCE!, await registry.getMetricsAsJSON()); -}, 5000 * (+system.get('prom-client.collect_rate') || 1)); - -global.Hydro.handler.prom = () => { - Route('metrics', '/metrics', MetricsHandler); -}; +export function apply(ctx) { + ctx.on('metrics', (id, metrics) => { instances[id] = metrics; }); + ctx.setInterval(async () => { + bus.broadcast('metrics', process.env.NODE_APP_INSTANCE!, await registry.getMetricsAsJSON()); + }, 5000 * (+system.get('prom-client.collect_rate') || 1)); + ctx.Route('metrics', '/metrics', MetricsHandler); +} diff --git a/packages/ui-default/components/preview/preview.page.ts b/packages/ui-default/components/preview/preview.page.ts index e8ff1828..aae2f63f 100644 --- a/packages/ui-default/components/preview/preview.page.ts +++ b/packages/ui-default/components/preview/preview.page.ts @@ -162,4 +162,5 @@ const dataPreviewPage = new AutoloadPage('dataPreview', () => { $(document).on('click', '[data-preview]', previewFile); }); +window.Hydro.components.preview = { startEdit, previewFile }; export default dataPreviewPage;