@solidxai/core 0.0.2 → 0.1.1
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/dtos/create-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/create-saved-filters.dto.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +2 -0
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/helpers/schematic.service.d.ts.map +1 -1
- package/dist/helpers/schematic.service.js +5 -1
- package/dist/helpers/schematic.service.js.map +1 -1
- package/dist/jobs/api-email-queue-options.d.ts.map +1 -1
- package/dist/jobs/api-email-queue-options.js +2 -2
- package/dist/jobs/api-email-queue-options.js.map +1 -1
- package/dist/jobs/chatter-queue-options.js +2 -2
- package/dist/jobs/chatter-queue-options.js.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.js +2 -2
- package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -1
- package/dist/jobs/database/api-email-queue-options-database.js +2 -2
- package/dist/jobs/database/api-email-queue-options-database.js.map +1 -1
- package/dist/jobs/database/computed-field-evaluation-queue-options-database.js +2 -2
- package/dist/jobs/database/computed-field-evaluation-queue-options-database.js.map +1 -1
- package/dist/jobs/database/generate-code-queue-options-database.js +2 -2
- package/dist/jobs/database/generate-code-queue-options-database.js.map +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.js +2 -2
- package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -1
- package/dist/jobs/database/msg91-whatsapp-queue-options-database.js +2 -2
- package/dist/jobs/database/msg91-whatsapp-queue-options-database.js.map +1 -1
- package/dist/jobs/database/otp-queue-options-database.d.ts.map +1 -1
- package/dist/jobs/database/otp-queue-options-database.js +2 -2
- package/dist/jobs/database/otp-queue-options-database.js.map +1 -1
- package/dist/jobs/database/smtp-email-queue-options-database.js +1 -1
- package/dist/jobs/database/smtp-email-queue-options-database.js.map +1 -1
- package/dist/jobs/database/test-queue-options-database.js +2 -2
- package/dist/jobs/database/test-queue-options-database.js.map +1 -1
- package/dist/jobs/database/three60-whatsapp-queue-options-database.js +2 -2
- package/dist/jobs/database/three60-whatsapp-queue-options-database.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-queue-options.js +2 -2
- package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +1 -1
- package/dist/jobs/database/twilio-sms-queue-database-options.js +2 -2
- package/dist/jobs/database/twilio-sms-queue-database-options.js.map +1 -1
- package/dist/jobs/generate-code-queue-options.js +2 -2
- package/dist/jobs/generate-code-queue-options.js.map +1 -1
- package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -1
- package/dist/jobs/msg91-otp-queue-options.js +2 -2
- package/dist/jobs/msg91-otp-queue-options.js.map +1 -1
- package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -1
- package/dist/jobs/msg91-sms-queue-options.js +2 -2
- package/dist/jobs/msg91-sms-queue-options.js.map +1 -1
- package/dist/jobs/msg91-whatsapp-queue-options.d.ts.map +1 -1
- package/dist/jobs/msg91-whatsapp-queue-options.js +2 -2
- package/dist/jobs/msg91-whatsapp-queue-options.js.map +1 -1
- package/dist/jobs/smtp-email-queue-options.d.ts.map +1 -1
- package/dist/jobs/smtp-email-queue-options.js +1 -1
- package/dist/jobs/smtp-email-queue-options.js.map +1 -1
- package/dist/jobs/test-queue-options.d.ts.map +1 -1
- package/dist/jobs/test-queue-options.js +2 -2
- package/dist/jobs/test-queue-options.js.map +1 -1
- package/dist/jobs/three60-whatsapp-queue-options.d.ts.map +1 -1
- package/dist/jobs/three60-whatsapp-queue-options.js +2 -2
- package/dist/jobs/three60-whatsapp-queue-options.js.map +1 -1
- package/dist/jobs/three60-whatsapp-subscriber.service.js +2 -2
- package/dist/jobs/three60-whatsapp-subscriber.service.js.map +1 -1
- package/dist/jobs/trigger-mcp-client-queue-options.js +2 -2
- package/dist/jobs/trigger-mcp-client-queue-options.js.map +1 -1
- package/dist/jobs/twilio-sms-queue-options.js +2 -2
- package/dist/jobs/twilio-sms-queue-options.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +8 -1
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/queues/database-publisher.service.js +0 -1
- package/dist/services/queues/database-publisher.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +14 -1
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +18 -3
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +1 -0
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +26 -10
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/dtos/create-saved-filters.dto.ts +10 -1
- package/src/entities/chatter-message.entity.ts +11 -1
- package/src/helpers/schematic.service.ts +5 -1
- package/src/jobs/api-email-queue-options.ts +2 -6
- package/src/jobs/chatter-queue-options.ts +2 -2
- package/src/jobs/computed-field-evaluation-queue-options.ts +2 -2
- package/src/jobs/database/api-email-queue-options-database.ts +2 -2
- package/src/jobs/database/computed-field-evaluation-queue-options-database.ts +2 -2
- package/src/jobs/database/generate-code-queue-options-database.ts +2 -2
- package/src/jobs/database/msg91-sms-queue-database-options.ts +3 -2
- package/src/jobs/database/msg91-whatsapp-queue-options-database.ts +2 -2
- package/src/jobs/database/otp-queue-options-database.ts +3 -2
- package/src/jobs/database/smtp-email-queue-options-database.ts +1 -1
- package/src/jobs/database/test-queue-options-database.ts +2 -2
- package/src/jobs/database/three60-whatsapp-queue-options-database.ts +2 -2
- package/src/jobs/database/trigger-mcp-client-queue-options.ts +2 -2
- package/src/jobs/database/twilio-sms-queue-database-options.ts +2 -2
- package/src/jobs/generate-code-queue-options.ts +2 -2
- package/src/jobs/msg91-otp-queue-options.ts +3 -8
- package/src/jobs/msg91-sms-queue-options.ts +3 -6
- package/src/jobs/msg91-whatsapp-queue-options.ts +4 -7
- package/src/jobs/smtp-email-queue-options.ts +1 -6
- package/src/jobs/test-queue-options.ts +2 -6
- package/src/jobs/three60-whatsapp-queue-options.ts +4 -7
- package/src/jobs/three60-whatsapp-subscriber.service.ts +1 -1
- package/src/jobs/trigger-mcp-client-queue-options.ts +2 -2
- package/src/jobs/twilio-sms-queue-options.ts +3 -3
- package/src/services/chatter-message.service.ts +32 -26
- package/src/services/crud-helper.service.ts +1 -1
- package/src/services/queues/database-publisher.service.ts +1 -1
- package/src/services/queues/database-subscriber.service.ts +17 -28
- package/src/services/queues/rabbitmq-subscriber.service.ts +21 -5
- package/src/services/scheduled-jobs/scheduler.service.ts +31 -14
|
@@ -52,10 +52,29 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
async onModuleInit(): Promise<void> {
|
|
55
|
+
// Not using SettingService here as that will necessitate all implementors of RabbitMqSubscriber to also inject SettingService which is not ideal.
|
|
56
|
+
// Instead we directly read the environment variables here.
|
|
57
|
+
const defaultBroker = process.env.QUEUES_DEFAULT_BROKER || 'rabbitmq';
|
|
55
58
|
const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
|
|
59
|
+
const queueNameRegex = (process.env.QUEUES_QUEUE_NAME_REGEX_TO_ENABLE || '').trim();
|
|
56
60
|
|
|
57
61
|
// we will start subscriber only if the current service role is subscriber.
|
|
58
|
-
if (this.url && ['both', 'subscriber'].includes(this.serviceRole) && solidCliRunning === "false") {
|
|
62
|
+
if (this.url && ['both', 'subscriber'].includes(this.serviceRole) && solidCliRunning === "false" && defaultBroker === 'rabbitmq') {
|
|
63
|
+
const options = this.options();
|
|
64
|
+
const queueName = options.queueName;
|
|
65
|
+
|
|
66
|
+
if (queueNameRegex && queueNameRegex !== "all") {
|
|
67
|
+
try {
|
|
68
|
+
const regex = new RegExp(queueNameRegex);
|
|
69
|
+
if (!regex.test(queueName)) {
|
|
70
|
+
this.logger.log(`RabbitMqSubscriber for queue ${queueName} is disabled because it does not match QUEUES_QUEUE_NAME_REGEX_TO_ENABLE=${queueNameRegex}`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
} catch (error) {
|
|
74
|
+
this.logger.error(`Invalid QUEUES_QUEUE_NAME_REGEX_TO_ENABLE regex "${queueNameRegex}". Subscriber for queue ${queueName} will not start.`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
59
78
|
|
|
60
79
|
// this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
61
80
|
// const connection = await amqp.connect(this.url);
|
|
@@ -73,9 +92,6 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
73
92
|
const channel = await connection.createChannel();
|
|
74
93
|
// this.logger.debug(`RabbitMqSubscriber channel created: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
75
94
|
|
|
76
|
-
const options = this.options();
|
|
77
|
-
|
|
78
|
-
const queueName = options.queueName;
|
|
79
95
|
const exchangeName = `${queueName}.exchange`;
|
|
80
96
|
const routingKey = `${queueName}.routing-key`;
|
|
81
97
|
|
|
@@ -220,4 +236,4 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
220
236
|
|
|
221
237
|
}
|
|
222
238
|
|
|
223
|
-
}
|
|
239
|
+
}
|
|
@@ -11,6 +11,7 @@ import { CronExpressionParser } from 'cron-parser';
|
|
|
11
11
|
@Injectable()
|
|
12
12
|
export class SchedulerServiceImpl implements ISchedulerService {
|
|
13
13
|
private readonly logger = new Logger(SchedulerServiceImpl.name);
|
|
14
|
+
private readonly runningJobs = new Set<string>();
|
|
14
15
|
|
|
15
16
|
constructor(
|
|
16
17
|
// @InjectRepository(ScheduledJob)
|
|
@@ -21,6 +22,11 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
21
22
|
|
|
22
23
|
@Cron(CronExpression.EVERY_MINUTE)
|
|
23
24
|
async runScheduledJobs(): Promise<void> {
|
|
25
|
+
const solidSchedulerEnabled = process.env.SOLID_SCHEDULER_ENABLED || "true";
|
|
26
|
+
if (solidSchedulerEnabled.toLowerCase() !== "true") {
|
|
27
|
+
// this.logger.debug('Solid scheduler is disabled via environment variable');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
24
30
|
const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
|
|
25
31
|
if (solidCliRunning === "true") {
|
|
26
32
|
return;
|
|
@@ -46,32 +52,43 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
46
52
|
// this.logger.log(`[${now.getTime()}]: scheduler service identified ${dueJobs.length} jobs to run...`);
|
|
47
53
|
|
|
48
54
|
for (const job of dueJobs) {
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
if (!this.shouldRunNow(job, now)) {
|
|
52
|
-
this.logger.log(`[${now.getTime()}]: scheduler service skipping job ${job.job}`);
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
+
const jobKey = String(job.id ?? job.scheduleName ?? job.job);
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
57
|
+
if (this.runningJobs.has(jobKey)) {
|
|
58
|
+
this.logger.log(`[${now.getTime()}]: scheduler service skipping job ${job.job} because a run is already in progress`);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
61
|
|
|
62
|
+
if (!this.shouldRunNow(job, now)) {
|
|
63
|
+
this.logger.log(`[${now.getTime()}]: scheduler service skipping job ${job.job}`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const handler = this.solidRegistry.getScheduledJobProviderInstance(job.job);
|
|
68
|
+
if (!handler) {
|
|
69
|
+
this.logger.warn(`[${now.getTime()}]: scheduler service skipping because job handler not found: ${job.job}`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
this.runningJobs.add(jobKey);
|
|
74
|
+
this.logger.log(`[${now.getTime()}]: scheduler service attempting to run job ${job.job}`);
|
|
75
|
+
try {
|
|
62
76
|
// this.logger.log(`[${now.getTime()}]: scheduler service about to run job ${job.job}`);
|
|
63
77
|
await handler.execute(job);
|
|
64
78
|
// this.logger.log(`[${now.getTime()}]: scheduler service finished running job ${job.job}`);
|
|
65
79
|
|
|
66
80
|
job.isActive = true;
|
|
67
|
-
|
|
68
|
-
job.
|
|
81
|
+
const finishedAt = new Date();
|
|
82
|
+
job.lastRunAt = finishedAt;
|
|
83
|
+
job.nextRunAt = this.computeNextRunAt(job, finishedAt);
|
|
69
84
|
this.logger.log(`[${now.getTime()}]: scheduler service coomputed next run for ${job.job} as ${job.nextRunAt}`);
|
|
70
85
|
|
|
71
86
|
await this.scheduledJobRepo.save(job);
|
|
72
87
|
this.logger.log(`[${now.getTime()}]: scheduler service finished running job: ${job.job}`);
|
|
73
88
|
} catch (err) {
|
|
74
89
|
this.logger.error(`[${now.getTime()}]: scheduler service failed to run job ${job.job}`, err.stack);
|
|
90
|
+
} finally {
|
|
91
|
+
this.runningJobs.delete(jobKey);
|
|
75
92
|
}
|
|
76
93
|
}
|
|
77
94
|
}
|
|
@@ -172,4 +189,4 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
172
189
|
return new Date(base.getTime() + 24 * 60 * 60 * 1000);
|
|
173
190
|
}
|
|
174
191
|
}
|
|
175
|
-
}
|
|
192
|
+
}
|