mirror of
https://github.com/whyour/qinglong.git
synced 2026-11-03 16:19:11 +08:00
Use MikroORM's official Node SQLite dialect with bounded database isolation, preserve legacy schema and data for rollback, and require Node 22.17 or newer. Update Debian runtimes and retain ARMv6 musl compatibility without a SQLite addon. Complete short archive writes, stop orphaned SQL workers after owner death, preserve buffered startup requests, and prestart the archived backend on every platform. Cover real package installation, migration, failure recovery, and legacy database compatibility.
66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { Repository, RecordRow } from './repository';
|
|
|
|
export class Crontab {
|
|
name?: string;
|
|
command: string;
|
|
schedule?: string;
|
|
timestamp?: string;
|
|
saved?: boolean;
|
|
id?: number;
|
|
status?: CrontabStatus;
|
|
isSystem?: 1 | 0;
|
|
pid?: number;
|
|
isDisabled?: 1 | 0;
|
|
log_path?: string;
|
|
queued_token?: string | null;
|
|
isPinned?: 1 | 0;
|
|
labels?: string[];
|
|
last_running_time?: number;
|
|
last_execution_time?: number;
|
|
sub_id?: number;
|
|
extra_schedules?: Array<{ schedule: string }>;
|
|
task_before?: string;
|
|
task_after?: string;
|
|
log_name?: string;
|
|
allow_multiple_instances?: 1 | 0;
|
|
work_dir?: string;
|
|
|
|
constructor(options: Crontab) {
|
|
this.name = options.name;
|
|
this.command = options.command.trim();
|
|
this.schedule = options.schedule;
|
|
this.saved = options.saved;
|
|
this.id = options.id;
|
|
this.status =
|
|
typeof options.status === 'number' && CrontabStatus[options.status]
|
|
? options.status
|
|
: CrontabStatus.idle;
|
|
this.timestamp = new Date().toString();
|
|
this.isSystem = options.isSystem || 0;
|
|
this.pid = options.pid;
|
|
this.isDisabled = options.isDisabled || 0;
|
|
this.log_path = options.log_path || '';
|
|
this.isPinned = options.isPinned || 0;
|
|
this.labels = options.labels || [];
|
|
this.last_running_time = options.last_running_time || 0;
|
|
this.last_execution_time = options.last_execution_time || 0;
|
|
this.sub_id = options.sub_id;
|
|
this.extra_schedules = options.extra_schedules;
|
|
this.task_before = options.task_before;
|
|
this.task_after = options.task_after;
|
|
this.log_name = options.log_name;
|
|
this.allow_multiple_instances = options.allow_multiple_instances || 0;
|
|
this.work_dir = options.work_dir;
|
|
}
|
|
}
|
|
|
|
export enum CrontabStatus {
|
|
'running' = 0,
|
|
'idle' = 1,
|
|
'disabled' = 2,
|
|
'queued' = 3,
|
|
}
|
|
|
|
export type CronInstance = RecordRow<Crontab>;
|
|
export const CrontabModel = new Repository<Crontab>('Crontab');
|