mirror of
https://github.com/whyour/qinglong.git
synced 2026-07-01 04:40:38 +08:00
定时服务区分系统、订阅、脚本任务
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { Dependence } from '../data/dependence';
|
||||
import { ICron } from '../protos/cron';
|
||||
|
||||
export type Override<
|
||||
T,
|
||||
K extends Partial<{ [P in keyof T]: any }> | string,
|
||||
> = K extends string
|
||||
? Omit<T, K> & { [P in keyof T]: T[P] | unknown }
|
||||
: Omit<T, keyof K> & K;
|
||||
|
||||
export type TCron = Override<Partial<ICron>, { id: string }>;
|
||||
|
||||
export interface IDependencyFn<T> {
|
||||
(): Promise<T>;
|
||||
dependency?: Dependence;
|
||||
}
|
||||
|
||||
export interface ICronFn<T> {
|
||||
(): Promise<T>;
|
||||
cron?: TCron;
|
||||
}
|
||||
|
||||
export interface ISchedule {
|
||||
schedule?: string;
|
||||
name?: string;
|
||||
command?: string;
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface IScheduleFn<T> {
|
||||
(): Promise<T>;
|
||||
schedule?: ISchedule;
|
||||
}
|
||||
+43
-15
@@ -6,22 +6,14 @@ import { Dependence } from '../data/dependence';
|
||||
import { ICron } from '../protos/cron';
|
||||
import NotificationService from '../services/notify';
|
||||
import { Inject } from 'typedi';
|
||||
import {
|
||||
ICronFn,
|
||||
IDependencyFn,
|
||||
ISchedule,
|
||||
IScheduleFn,
|
||||
TCron,
|
||||
} from './interface';
|
||||
|
||||
export type Override<
|
||||
T,
|
||||
K extends Partial<{ [P in keyof T]: any }> | string,
|
||||
> = K extends string
|
||||
? Omit<T, K> & { [P in keyof T]: T[P] | unknown }
|
||||
: Omit<T, keyof K> & K;
|
||||
type TCron = Override<Partial<ICron>, { id: string }>;
|
||||
interface IDependencyFn<T> {
|
||||
(): Promise<T>;
|
||||
dependency?: Dependence;
|
||||
}
|
||||
interface ICronFn<T> {
|
||||
(): Promise<T>;
|
||||
cron?: TCron;
|
||||
}
|
||||
class TaskLimit {
|
||||
private dependenyLimit = new PQueue({ concurrency: 1 });
|
||||
private queuedDependencyIds = new Set<number>([]);
|
||||
@@ -33,6 +25,15 @@ class TaskLimit {
|
||||
private manualCronoLimit = new PQueue({
|
||||
concurrency: Math.max(os.cpus().length, 4),
|
||||
});
|
||||
private subscriptionLimit = new PQueue({
|
||||
concurrency: Math.max(os.cpus().length, 4),
|
||||
});
|
||||
private scriptLimit = new PQueue({
|
||||
concurrency: Math.max(os.cpus().length, 4),
|
||||
});
|
||||
private systemLimit = new PQueue({
|
||||
concurrency: Math.max(os.cpus().length, 4),
|
||||
});
|
||||
@Inject((type) => NotificationService)
|
||||
private notificationService!: NotificationService;
|
||||
|
||||
@@ -143,6 +144,33 @@ class TaskLimit {
|
||||
return this.manualCronoLimit.add(fn, options);
|
||||
}
|
||||
|
||||
public async runWithSubscriptionLimit<T>(
|
||||
schedule: TCron,
|
||||
fn: IScheduleFn<T>,
|
||||
options?: Partial<QueueAddOptions>,
|
||||
): Promise<T | void> {
|
||||
fn.schedule = schedule;
|
||||
return this.subscriptionLimit.add(fn, options);
|
||||
}
|
||||
|
||||
public async runWithSystemLimit<T>(
|
||||
schedule: TCron,
|
||||
fn: IScheduleFn<T>,
|
||||
options?: Partial<QueueAddOptions>,
|
||||
): Promise<T | void> {
|
||||
fn.schedule = schedule;
|
||||
return this.systemLimit.add(fn, options);
|
||||
}
|
||||
|
||||
public async runWithScriptLimit<T>(
|
||||
schedule: ISchedule,
|
||||
fn: IScheduleFn<T>,
|
||||
options?: Partial<QueueAddOptions>,
|
||||
): Promise<T | void> {
|
||||
fn.schedule = schedule;
|
||||
return this.scriptLimit.add(fn, options);
|
||||
}
|
||||
|
||||
public runDependeny<T>(
|
||||
dependency: Dependence,
|
||||
fn: IDependencyFn<T>,
|
||||
|
||||
Reference in New Issue
Block a user