-
-
Notifications
You must be signed in to change notification settings - Fork 142
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Task Scheduling In App #1210
Comments
Hi 👋 This would indeed be a nice feature to have. I cannot spend much time on this at the moment but if someone is willing to implement this, I could help 🙂 I guess there are a few questions that should be answered first:
|
Maybe this can be useful: I use Schedule inside my FoalTS Apps. I just make the jobs like is explained here: https://foalts.org/docs/2.x/cookbook/scheduling-jobs And then I call the "main" function in the // (...)
import { main as schedule } from '../scripts/schedule-jobs';
import { DataSource } from 'typeorm';
import { createDataSource } from '../db';
export class AppController implements IAppController {
subControllers = [
// ...
];
async init() {
const ds = createDataSource();
const connection: DataSource = await ds.initialize();
await schedule({ connection, runAtStart: true });
}
} Schedule jobs.ts // https://foalts.org/docs/cookbook/scheduling-jobs
import { scheduleJob } from 'node-schedule';
import { main as closeElderSessions } from './close-elder-sessions';
import { main as deleteOrphans } from './delete-empty-finished-sessions';
import { main as deleteOlderFinishedSessions } from './delete-older-finished-sessions';
import { DataSource } from 'typeorm';
export async function main(args?: { runAtStart?: boolean; useExistingConnection?: boolean; unit?: string; value?: number; connection?: DataSource }) {
console.log('Scheduling the job...');
if (args?.runAtStart) {
await closeElderSessions(Object.assign({ unit: 'day', value: 3 }, args || {}));
await deleteOlderFinishedSessions(args || {});
await deleteOrphans(args || {});
}
// At 3.00 am
scheduleJob('0 3 * * *',
async () => {
try {
await closeElderSessions(Object.assign({ unit: 'day', value: 3 }, args || {}));
await deleteOlderFinishedSessions(args || {});
await deleteOrphans(args || {});
}
catch (err) {
console.error('Error running schedule');
console.error(err);
}
}
);
console.log('Job scheduled!');
} |
Hi,
I wanted to know if it was planned to provide a recurring task management system directly in the app instance instead of being executed via the CLI?
In order to be able to trigger different elements in the code directly (Typically, sending a message to websockets clients?).
This would also allow to set up a "multi servers" system for the crons so that the load is distributed.
Thanks and thank for your work on FoalTS, my opinion is that it is probably the best framework ts (not chauvin at all..)
The text was updated successfully, but these errors were encountered: