@eggjs/schedule 6.0.0-beta.19 → 6.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +8 -12
- package/dist/agent.js +32 -30
- package/dist/app/extend/agent.d.ts +17 -21
- package/dist/app/extend/agent.js +27 -29
- package/dist/app/extend/application.d.ts +7 -11
- package/dist/app/extend/application.js +15 -17
- package/dist/app/extend/application.unittest.d.ts +3 -7
- package/dist/app/extend/application.unittest.js +50 -45
- package/dist/app.d.ts +6 -10
- package/dist/app.js +77 -69
- package/dist/config/config.default.d.ts +15 -18
- package/dist/config/config.default.js +12 -12
- package/dist/index.d.ts +8 -7
- package/dist/index.js +9 -7
- package/dist/lib/load_schedule.d.ts +3 -7
- package/dist/lib/load_schedule.js +63 -58
- package/dist/lib/schedule.d.ts +30 -34
- package/dist/lib/schedule.js +84 -76
- package/dist/lib/schedule_worker.d.ts +9 -13
- package/dist/lib/schedule_worker.js +17 -21
- package/dist/lib/strategy/all.d.ts +3 -7
- package/dist/lib/strategy/all.js +6 -10
- package/dist/lib/strategy/base.d.ts +31 -35
- package/dist/lib/strategy/base.js +75 -73
- package/dist/lib/strategy/timer.d.ts +19 -23
- package/dist/lib/strategy/timer.js +93 -70
- package/dist/lib/strategy/worker.d.ts +3 -7
- package/dist/lib/strategy/worker.js +6 -10
- package/dist/lib/types.d.ts +15 -19
- package/dist/lib/types.js +2 -1
- package/dist/types.d.ts +14 -15
- package/dist/types.js +2 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import Agent from "./app/extend/agent.js";
|
|
2
|
+
import Application from "./app/extend/application.js";
|
|
3
|
+
import ApplicationUnittest from "./app/extend/application.unittest.js";
|
|
4
|
+
export { Agent, Application, ApplicationUnittest };
|
|
5
|
+
export { ScheduleWorker } from "./lib/schedule_worker.js";
|
|
6
|
+
export { Schedule } from "./lib/schedule.js";
|
|
7
|
+
import "./types.js";
|
|
8
|
+
export * from "./lib/types.js";
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sdUJBQXVCLENBQUM7QUFDMUMsT0FBTyxXQUFXLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxtQkFBbUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0MsT0FBTyxZQUFZLENBQUM7QUFFcEIsY0FBYyxnQkFBZ0IsQ0FBQyJ9
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
//#region src/lib/load_schedule.d.ts
|
|
5
|
-
declare function loadSchedule(app: EggApplicationCore): Promise<Record<string, EggScheduleItem>>;
|
|
6
|
-
//#endregion
|
|
7
|
-
export { loadSchedule };
|
|
1
|
+
import type { EggApplicationCore } from 'egg';
|
|
2
|
+
import type { EggScheduleItem } from './types.ts';
|
|
3
|
+
export declare function loadSchedule(app: EggApplicationCore): Promise<Record<string, EggScheduleItem>>;
|
|
@@ -1,61 +1,66 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { stringify } from
|
|
4
|
-
import { isClass, isFunction, isGeneratorFunction } from
|
|
5
|
-
import { importResolve } from
|
|
6
|
-
|
|
7
|
-
//#region src/lib/load_schedule.ts
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { stringify } from 'node:querystring';
|
|
4
|
+
import { isClass, isFunction, isGeneratorFunction } from 'is-type-of';
|
|
5
|
+
import { importResolve } from '@eggjs/utils';
|
|
8
6
|
function getScheduleLoader(app) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
7
|
+
return class ScheduleLoader extends app.loader.FileLoader {
|
|
8
|
+
async load() {
|
|
9
|
+
const target = this.options.target;
|
|
10
|
+
const items = await this.parse();
|
|
11
|
+
for (const item of items) {
|
|
12
|
+
const schedule = item.exports;
|
|
13
|
+
const fullpath = item.fullpath;
|
|
14
|
+
const scheduleConfig = schedule.schedule;
|
|
15
|
+
assert(scheduleConfig, `schedule(${fullpath}): must have "schedule" and "task" properties`);
|
|
16
|
+
assert(isClass(schedule) || isFunction(schedule.task), `schedule(${fullpath}: \`schedule.task\` should be function or \`schedule\` should be class`);
|
|
17
|
+
let task;
|
|
18
|
+
if (isClass(schedule)) {
|
|
19
|
+
assert(!isGeneratorFunction(schedule.prototype.subscribe), `schedule(${fullpath}): "schedule" generator function is not support, should use async function instead`);
|
|
20
|
+
task = async (ctx, ...args) => {
|
|
21
|
+
const instance = new schedule(ctx);
|
|
22
|
+
// s.subscribe = app.toAsyncFunction(s.subscribe);
|
|
23
|
+
return instance.subscribe(...args);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
assert(!isGeneratorFunction(schedule.task), `schedule(${fullpath}): "task" generator function is not support, should use async function instead`);
|
|
28
|
+
task = schedule.task;
|
|
29
|
+
// task = app.toAsyncFunction(schedule.task);
|
|
30
|
+
}
|
|
31
|
+
const env = app.config.env;
|
|
32
|
+
const envList = schedule.schedule.env;
|
|
33
|
+
if (Array.isArray(envList) && !envList.includes(env)) {
|
|
34
|
+
app.coreLogger.info(`[@eggjs/schedule]: ignore schedule ${fullpath} due to \`schedule.env\` not match`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// handle symlink case
|
|
38
|
+
const realFullpath = importResolve(fullpath);
|
|
39
|
+
target[realFullpath] = {
|
|
40
|
+
schedule: scheduleConfig,
|
|
41
|
+
// @ts-expect-error scheduleConfig may can't be stringified
|
|
42
|
+
scheduleQueryString: stringify(scheduleConfig),
|
|
43
|
+
task,
|
|
44
|
+
key: realFullpath,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return target;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
46
50
|
}
|
|
47
|
-
async function loadSchedule(app) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
export async function loadSchedule(app) {
|
|
52
|
+
const dirs = [
|
|
53
|
+
...app.loader.getLoadUnits().map(unit => path.join(unit.path, 'app/schedule')),
|
|
54
|
+
...app.config.schedule.directory,
|
|
55
|
+
];
|
|
56
|
+
const Loader = getScheduleLoader(app);
|
|
57
|
+
const schedules = {};
|
|
58
|
+
await new Loader({
|
|
59
|
+
directory: dirs,
|
|
60
|
+
target: schedules,
|
|
61
|
+
inject: app,
|
|
62
|
+
}).load();
|
|
63
|
+
Reflect.set(app, 'schedules', schedules);
|
|
64
|
+
return schedules;
|
|
58
65
|
}
|
|
59
|
-
|
|
60
|
-
//#endregion
|
|
61
|
-
export { loadSchedule };
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZF9zY2hlZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbG9hZF9zY2hlZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBTTdDLFNBQVMsaUJBQWlCLENBQUMsR0FBdUI7SUFDaEQsT0FBTyxNQUFNLGNBQWUsU0FBUSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDdkQsS0FBSyxDQUFDLElBQUk7WUFDUixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQXlDLENBQUM7WUFDdEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQWlFLENBQUM7Z0JBQ3hGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQy9CLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsWUFBWSxRQUFRLCtDQUErQyxDQUFDLENBQUM7Z0JBQzVGLE1BQU0sQ0FDSixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDOUMsWUFBWSxRQUFRLHdFQUF3RSxDQUM3RixDQUFDO2dCQUVGLElBQUksSUFBcUIsQ0FBQztnQkFDMUIsSUFBSSxPQUFP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
|
package/dist/lib/schedule.d.ts
CHANGED
|
@@ -1,35 +1,31 @@
|
|
|
1
|
-
import { EggScheduleItem, EggScheduleJobInfo } from
|
|
2
|
-
import { BaseStrategy } from
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
start(): Promise<void>;
|
|
32
|
-
close(): Promise<void>;
|
|
1
|
+
import type { EggScheduleItem, EggScheduleJobInfo } from './types.ts';
|
|
2
|
+
import type { BaseStrategy } from './strategy/base.ts';
|
|
3
|
+
import type Agent from '../app/extend/agent.ts';
|
|
4
|
+
export declare class Schedule {
|
|
5
|
+
#private;
|
|
6
|
+
closed: boolean;
|
|
7
|
+
constructor(agent: Agent);
|
|
8
|
+
/**
|
|
9
|
+
* register a custom Schedule Strategy
|
|
10
|
+
* @param {String} type - strategy type
|
|
11
|
+
* @param {Strategy} clz - Strategy class
|
|
12
|
+
*/
|
|
13
|
+
use(type: string, clz: typeof BaseStrategy): void;
|
|
14
|
+
/**
|
|
15
|
+
* load all schedule jobs, then initialize and register special strategy
|
|
16
|
+
*/
|
|
17
|
+
init(): Promise<void>;
|
|
18
|
+
registerSchedule(scheduleItem: EggScheduleItem): void;
|
|
19
|
+
unregisterSchedule(key: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* job finish event handler
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} info - { id, key, success, message, workerId }
|
|
24
|
+
*/
|
|
25
|
+
onJobFinish(info: EggScheduleJobInfo): void;
|
|
26
|
+
/**
|
|
27
|
+
* start schedule
|
|
28
|
+
*/
|
|
29
|
+
start(): Promise<void>;
|
|
30
|
+
close(): Promise<void>;
|
|
33
31
|
}
|
|
34
|
-
//#endregion
|
|
35
|
-
export { Schedule };
|
package/dist/lib/schedule.js
CHANGED
|
@@ -1,77 +1,85 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
1
2
|
import { loadSchedule } from "./load_schedule.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
3
|
+
const debug = debuglog('egg/schedule/lib/schedule');
|
|
4
|
+
export class Schedule {
|
|
5
|
+
closed = false;
|
|
6
|
+
#agent;
|
|
7
|
+
#logger;
|
|
8
|
+
#strategyClassMap = new Map();
|
|
9
|
+
#strategyInstanceMap = new Map();
|
|
10
|
+
constructor(agent) {
|
|
11
|
+
this.#agent = agent;
|
|
12
|
+
this.#logger = agent.getLogger('scheduleLogger');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* register a custom Schedule Strategy
|
|
16
|
+
* @param {String} type - strategy type
|
|
17
|
+
* @param {Strategy} clz - Strategy class
|
|
18
|
+
*/
|
|
19
|
+
use(type, clz) {
|
|
20
|
+
this.#strategyClassMap.set(type, clz);
|
|
21
|
+
debug('use type: %o', type);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* load all schedule jobs, then initialize and register special strategy
|
|
25
|
+
*/
|
|
26
|
+
async init() {
|
|
27
|
+
const scheduleItems = await loadSchedule(this.#agent);
|
|
28
|
+
for (const scheduleItem of Object.values(scheduleItems)) {
|
|
29
|
+
this.registerSchedule(scheduleItem);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
registerSchedule(scheduleItem) {
|
|
33
|
+
const { key, schedule } = scheduleItem;
|
|
34
|
+
const type = schedule.type;
|
|
35
|
+
if (schedule.disable) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// find Strategy by type
|
|
39
|
+
const Strategy = this.#strategyClassMap.get(type);
|
|
40
|
+
if (!Strategy) {
|
|
41
|
+
const err = new Error(`schedule type [${type}] is not defined`);
|
|
42
|
+
err.name = 'EggScheduleError';
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
// Initialize strategy and register
|
|
46
|
+
const instance = new Strategy(schedule, this.#agent, key);
|
|
47
|
+
this.#strategyInstanceMap.set(key, instance);
|
|
48
|
+
debug('registerSchedule type: %o, config: %o, key: %o', type, schedule, key);
|
|
49
|
+
}
|
|
50
|
+
unregisterSchedule(key) {
|
|
51
|
+
debug('unregisterSchedule key: %o', key);
|
|
52
|
+
return this.#strategyInstanceMap.delete(key);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* job finish event handler
|
|
56
|
+
*
|
|
57
|
+
* @param {Object} info - { id, key, success, message, workerId }
|
|
58
|
+
*/
|
|
59
|
+
onJobFinish(info) {
|
|
60
|
+
this.#logger.debug(`[Job#${info.id}] ${info.key} finish event received by agent from worker#${info.workerId}`);
|
|
61
|
+
const instance = this.#strategyInstanceMap.get(info.key);
|
|
62
|
+
/* istanbul ignore else */
|
|
63
|
+
if (instance) {
|
|
64
|
+
instance.onJobFinish(info);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* start schedule
|
|
69
|
+
*/
|
|
70
|
+
async start() {
|
|
71
|
+
debug('start');
|
|
72
|
+
this.closed = false;
|
|
73
|
+
for (const instance of this.#strategyInstanceMap.values()) {
|
|
74
|
+
instance.start();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async close() {
|
|
78
|
+
this.closed = true;
|
|
79
|
+
for (const instance of this.#strategyInstanceMap.values()) {
|
|
80
|
+
await instance.close();
|
|
81
|
+
}
|
|
82
|
+
debug('close');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3NjaGVkdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBS2xELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBRXBELE1BQU0sT0FBTyxRQUFRO0lBQ25CLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFZixNQUFNLENBQVE7SUFDZCxPQUFPLENBQVk7SUFDbkIsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7SUFDM0Qsb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFFdkQsWUFBWSxLQUFZO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLElBQVksRUFBRSxHQUF3QjtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gs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
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { EggScheduleItem } from
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
registerSchedule(scheduleItem: EggScheduleItem): void;
|
|
11
|
-
unregisterSchedule(key: string): void;
|
|
1
|
+
import type { EggScheduleItem } from './types.ts';
|
|
2
|
+
import type Application from '../app/extend/application.ts';
|
|
3
|
+
export declare class ScheduleWorker {
|
|
4
|
+
#private;
|
|
5
|
+
scheduleItems: Record<string, EggScheduleItem>;
|
|
6
|
+
constructor(app: Application);
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
registerSchedule(scheduleItem: EggScheduleItem): void;
|
|
9
|
+
unregisterSchedule(key: string): void;
|
|
12
10
|
}
|
|
13
|
-
//#endregion
|
|
14
|
-
export { ScheduleWorker };
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import { loadSchedule } from "./load_schedule.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
//#endregion
|
|
22
|
-
export { ScheduleWorker };
|
|
2
|
+
export class ScheduleWorker {
|
|
3
|
+
#app;
|
|
4
|
+
scheduleItems = {};
|
|
5
|
+
constructor(app) {
|
|
6
|
+
this.#app = app;
|
|
7
|
+
}
|
|
8
|
+
async init() {
|
|
9
|
+
this.scheduleItems = await loadSchedule(this.#app);
|
|
10
|
+
}
|
|
11
|
+
registerSchedule(scheduleItem) {
|
|
12
|
+
this.scheduleItems[scheduleItem.key] = scheduleItem;
|
|
13
|
+
}
|
|
14
|
+
unregisterSchedule(key) {
|
|
15
|
+
delete this.scheduleItems[key];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVfd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zY2hlZHVsZV93b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSWxELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLElBQUksQ0FBYztJQUNsQixhQUFhLEdBQW9DLEVBQUUsQ0FBQztJQUVwRCxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxZQUE2QjtRQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7SUFDdEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVc7UUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRiJ9
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import { TimerStrategy } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
declare class AllStrategy extends TimerStrategy {
|
|
5
|
-
handler(): void;
|
|
1
|
+
import { TimerStrategy } from './timer.ts';
|
|
2
|
+
export declare class AllStrategy extends TimerStrategy {
|
|
3
|
+
handler(): void;
|
|
6
4
|
}
|
|
7
|
-
//#endregion
|
|
8
|
-
export { AllStrategy };
|
package/dist/lib/strategy/all.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { TimerStrategy } from "./timer.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
//#endregion
|
|
11
|
-
export { AllStrategy };
|
|
2
|
+
export class AllStrategy extends TimerStrategy {
|
|
3
|
+
handler() {
|
|
4
|
+
this.sendAll();
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zdHJhdGVneS9hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxNQUFNLE9BQU8sV0FBWSxTQUFRLGFBQWE7SUFDNUMsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0YifQ==
|
|
@@ -1,36 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EggScheduleJobInfo } from
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
sendAll(...args: any[]): void;
|
|
33
|
-
getSeqId(): string;
|
|
1
|
+
import type { EggLogger } from 'egg';
|
|
2
|
+
import type { EggScheduleJobInfo } from '../types.ts';
|
|
3
|
+
import type { EggScheduleConfig } from '../../config/config.default.ts';
|
|
4
|
+
import type Agent from '../../app/extend/agent.ts';
|
|
5
|
+
export declare class BaseStrategy {
|
|
6
|
+
protected agent: Agent;
|
|
7
|
+
protected scheduleConfig: EggScheduleConfig;
|
|
8
|
+
protected key: string;
|
|
9
|
+
protected logger: EggLogger;
|
|
10
|
+
protected closed: boolean;
|
|
11
|
+
count: number;
|
|
12
|
+
constructor(scheduleConfig: EggScheduleConfig, agent: Agent, key: string);
|
|
13
|
+
/** keep compatibility */
|
|
14
|
+
get schedule(): EggScheduleConfig;
|
|
15
|
+
start(): Promise<void>;
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
onJobStart(_info: EggScheduleJobInfo): void;
|
|
18
|
+
onJobFinish(_info: EggScheduleJobInfo): void;
|
|
19
|
+
/**
|
|
20
|
+
* trigger one worker
|
|
21
|
+
*
|
|
22
|
+
* @param {...any} args - pass to job task
|
|
23
|
+
*/
|
|
24
|
+
sendOne(...args: any[]): void;
|
|
25
|
+
/**
|
|
26
|
+
* trigger all worker
|
|
27
|
+
*
|
|
28
|
+
* @param {...any} args - pass to job task
|
|
29
|
+
*/
|
|
30
|
+
sendAll(...args: any[]): void;
|
|
31
|
+
getSeqId(): string;
|
|
34
32
|
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { BaseStrategy };
|