nestlens 0.3.4 → 0.4.0
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/__tests__/watchers/job.watcher.spec.js +330 -0
- package/dist/__tests__/watchers/job.watcher.spec.js.map +1 -1
- package/dist/dashboard/public/assets/{BatchesPage-CBuvtLok.js → BatchesPage-DmqbLFCs.js} +1 -1
- package/dist/dashboard/public/assets/{CachePage-CVI2MWOP.js → CachePage-CfA-UrdM.js} +1 -1
- package/dist/dashboard/public/assets/{ClickableBadge-BFhMLE2u.js → ClickableBadge-CW4jdcpl.js} +1 -1
- package/dist/dashboard/public/assets/{CommandsPage-CpXlDpH2.js → CommandsPage-DJ1ZxHj8.js} +1 -1
- package/dist/dashboard/public/assets/{DashboardPage-DBq9olrb.js → DashboardPage-BnnZ3TMF.js} +1 -1
- package/dist/dashboard/public/assets/{DumpsPage-CvCmvONu.js → DumpsPage-fshG-ETf.js} +1 -1
- package/dist/dashboard/public/assets/EntryDetailPage-Cf7K34er.js +130 -0
- package/dist/dashboard/public/assets/{EventsPage-B__c8fMG.js → EventsPage-DiPB0Sfy.js} +1 -1
- package/dist/dashboard/public/assets/{ExceptionsPage-gYd6g1uV.js → ExceptionsPage-BoauuDFu.js} +1 -1
- package/dist/dashboard/public/assets/{GatesPage-CY-lCHBF.js → GatesPage-CB0kqyp_.js} +1 -1
- package/dist/dashboard/public/assets/{GraphQLPage-45EotnyF.js → GraphQLPage-_inMfKh4.js} +1 -1
- package/dist/dashboard/public/assets/{HttpClientPage-B504GqrK.js → HttpClientPage-5vVzz7TU.js} +1 -1
- package/dist/dashboard/public/assets/{JobsPage-BCaWNqRu.js → JobsPage-CHYjmhlh.js} +1 -1
- package/dist/dashboard/public/assets/{LogsPage-4QbIACro.js → LogsPage-z4yYJ1qQ.js} +1 -1
- package/dist/dashboard/public/assets/{MailPage-rwNbPrlt.js → MailPage-DQ2PuRS9.js} +1 -1
- package/dist/dashboard/public/assets/ModelsPage-PBBI9K5M.js +1 -0
- package/dist/dashboard/public/assets/{NotificationsPage-CHkJmY88.js → NotificationsPage-CjleWNhr.js} +1 -1
- package/dist/dashboard/public/assets/{PageHeader-FW-7_zU_.js → PageHeader-QBzFo308.js} +1 -1
- package/dist/dashboard/public/assets/{QueriesPage-Cq_dTmNR.js → QueriesPage-Cpi1b2Mz.js} +1 -1
- package/dist/dashboard/public/assets/{RedisPage-WyIqRY51.js → RedisPage-C7vFV3r4.js} +1 -1
- package/dist/dashboard/public/assets/{RequestsPage-Ddf6EpBe.js → RequestsPage-B9-Qq2vH.js} +1 -1
- package/dist/dashboard/public/assets/{SchedulePage-Bnj6BP7j.js → SchedulePage-BXPldddV.js} +1 -1
- package/dist/dashboard/public/assets/{ViewsPage-DgdMD9iC.js → ViewsPage-COo7BNBc.js} +1 -1
- package/dist/dashboard/public/assets/{calendar-C6HprwOI.js → calendar-WMtbNas7.js} +1 -1
- package/dist/dashboard/public/assets/{circle-check-big-cy9U-hu6.js → circle-check-big-U-4nHjTQ.js} +1 -1
- package/dist/dashboard/public/assets/{eye-D01Pihl7.js → eye-Bc29awES.js} +1 -1
- package/dist/dashboard/public/assets/{index-yKzNgrAF.js → index-C8he4ZUV.js} +2 -2
- package/dist/dashboard/public/assets/{types-CvWsUZ4q.js → types-BYamMo0R.js} +1 -1
- package/dist/dashboard/public/assets/{zap-DOqgN4r4.js → zap-BxD9CCmf.js} +1 -1
- package/dist/dashboard/public/index.html +1 -1
- package/dist/watchers/graphql/adapters/base.adapter.d.ts.map +1 -1
- package/dist/watchers/graphql/adapters/base.adapter.js +5 -1
- package/dist/watchers/graphql/adapters/base.adapter.js.map +1 -1
- package/dist/watchers/job.watcher.d.ts +24 -0
- package/dist/watchers/job.watcher.d.ts.map +1 -1
- package/dist/watchers/job.watcher.js +123 -0
- package/dist/watchers/job.watcher.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard/public/assets/EntryDetailPage-DYSZpdsH.js +0 -125
- package/dist/dashboard/public/assets/ModelsPage-Jc7WSrV2.js +0 -1
|
@@ -2,6 +2,7 @@ import { OnModuleInit } from '@nestjs/common';
|
|
|
2
2
|
import { CollectorService } from '../core/collector.service';
|
|
3
3
|
import { NestLensConfig } from '../nestlens.config';
|
|
4
4
|
type BullQueue = any;
|
|
5
|
+
type BullMQQueueEvents = any;
|
|
5
6
|
export declare const NESTLENS_BULL_QUEUES: unique symbol;
|
|
6
7
|
export declare class JobWatcher implements OnModuleInit {
|
|
7
8
|
private readonly collector;
|
|
@@ -9,6 +10,7 @@ export declare class JobWatcher implements OnModuleInit {
|
|
|
9
10
|
private readonly logger;
|
|
10
11
|
private readonly config;
|
|
11
12
|
private readonly jobTracking;
|
|
13
|
+
private readonly managedQueueEvents;
|
|
12
14
|
constructor(collector: CollectorService, nestlensConfig: NestLensConfig);
|
|
13
15
|
onModuleInit(): void;
|
|
14
16
|
/**
|
|
@@ -16,6 +18,28 @@ export declare class JobWatcher implements OnModuleInit {
|
|
|
16
18
|
* Call this manually for each queue you want to track.
|
|
17
19
|
*/
|
|
18
20
|
setupQueue(queue: BullQueue, queueName?: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Setup interceptors on a BullMQ queue (simplified API).
|
|
23
|
+
* Automatically creates QueueEvents using the queue's Redis connection.
|
|
24
|
+
*
|
|
25
|
+
* @param queue - The BullMQ Queue instance
|
|
26
|
+
* @param queueName - Optional queue name (defaults to queue.name)
|
|
27
|
+
*/
|
|
28
|
+
setupBullMQQueue(queue: BullQueue, queueName?: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Close all QueueEvents instances created by setupBullMQQueue.
|
|
31
|
+
* Call this in onModuleDestroy to clean up connections.
|
|
32
|
+
*/
|
|
33
|
+
closeQueueEvents(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Setup interceptors on a BullMQ queue using QueueEvents.
|
|
36
|
+
* Use this if you need to manage QueueEvents lifecycle yourself.
|
|
37
|
+
*
|
|
38
|
+
* @param queue - The BullMQ Queue instance (for fetching job data)
|
|
39
|
+
* @param queueEvents - The BullMQ QueueEvents instance (for listening to events)
|
|
40
|
+
* @param queueName - Optional queue name (defaults to queue.name)
|
|
41
|
+
*/
|
|
42
|
+
setupQueueWithEvents(queue: BullQueue, queueEvents: BullMQQueueEvents, queueName?: string): void;
|
|
19
43
|
private handleJobWaiting;
|
|
20
44
|
private handleJobActive;
|
|
21
45
|
private handleJobCompleted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.watcher.d.ts","sourceRoot":"","sources":["../../src/watchers/job.watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAoB,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAIvF,KAAK,SAAS,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"job.watcher.d.ts","sourceRoot":"","sources":["../../src/watchers/job.watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAoB,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAIvF,KAAK,SAAS,GAAG,GAAG,CAAC;AAErB,KAAK,iBAAiB,GAAG,GAAG,CAAC;AAG7B,eAAO,MAAM,oBAAoB,eAAiC,CAAC;AAEnE,qBACa,UAAW,YAAW,YAAY;IAO3C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IARjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;gBAG3C,SAAS,EAAE,gBAAgB,EAE3B,cAAc,EAAE,cAAc;IAOjD,YAAY;IAUZ;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAoCtD;;;;;;OAMG;IACG,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3E;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvC;;;;;;;OAOG;IACH,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;YA2ElF,gBAAgB;IAuB9B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,eAAe;YAuBT,gBAAgB;IAuB9B,OAAO,CAAC,WAAW;CAepB"}
|
|
@@ -25,6 +25,7 @@ let JobWatcher = JobWatcher_1 = class JobWatcher {
|
|
|
25
25
|
this.nestlensConfig = nestlensConfig;
|
|
26
26
|
this.logger = new common_1.Logger(JobWatcher_1.name);
|
|
27
27
|
this.jobTracking = new Map(); // jobId -> startTime
|
|
28
|
+
this.managedQueueEvents = []; // QueueEvents created by setupBullMQQueue
|
|
28
29
|
const watcherConfig = nestlensConfig.watchers?.job;
|
|
29
30
|
this.config =
|
|
30
31
|
typeof watcherConfig === 'object' ? watcherConfig : { enabled: watcherConfig !== false };
|
|
@@ -67,6 +68,128 @@ let JobWatcher = JobWatcher_1 = class JobWatcher {
|
|
|
67
68
|
});
|
|
68
69
|
this.logger.log(`Job interceptors installed for queue: ${name}`);
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Setup interceptors on a BullMQ queue (simplified API).
|
|
73
|
+
* Automatically creates QueueEvents using the queue's Redis connection.
|
|
74
|
+
*
|
|
75
|
+
* @param queue - The BullMQ Queue instance
|
|
76
|
+
* @param queueName - Optional queue name (defaults to queue.name)
|
|
77
|
+
*/
|
|
78
|
+
async setupBullMQQueue(queue, queueName) {
|
|
79
|
+
if (!queue || typeof queue.getJob !== 'function') {
|
|
80
|
+
this.logger.warn('Invalid BullMQ queue instance provided');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const name = queueName || queue.name || 'unknown';
|
|
85
|
+
// Get Redis connection from the queue
|
|
86
|
+
const client = await queue.client;
|
|
87
|
+
const connection = client.options;
|
|
88
|
+
// Dynamically require bullmq to create QueueEvents
|
|
89
|
+
const { QueueEvents } = require('bullmq');
|
|
90
|
+
// Create QueueEvents with the same connection
|
|
91
|
+
const queueEvents = new QueueEvents(name, { connection });
|
|
92
|
+
this.managedQueueEvents.push(queueEvents);
|
|
93
|
+
// Use the existing setup method
|
|
94
|
+
this.setupQueueWithEvents(queue, queueEvents, name);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.logger.error(`Failed to setup BullMQ queue: ${error}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Close all QueueEvents instances created by setupBullMQQueue.
|
|
102
|
+
* Call this in onModuleDestroy to clean up connections.
|
|
103
|
+
*/
|
|
104
|
+
async closeQueueEvents() {
|
|
105
|
+
for (const queueEvents of this.managedQueueEvents) {
|
|
106
|
+
try {
|
|
107
|
+
await queueEvents.close();
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.logger.debug(`Failed to close QueueEvents: ${error}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
this.managedQueueEvents.length = 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Setup interceptors on a BullMQ queue using QueueEvents.
|
|
117
|
+
* Use this if you need to manage QueueEvents lifecycle yourself.
|
|
118
|
+
*
|
|
119
|
+
* @param queue - The BullMQ Queue instance (for fetching job data)
|
|
120
|
+
* @param queueEvents - The BullMQ QueueEvents instance (for listening to events)
|
|
121
|
+
* @param queueName - Optional queue name (defaults to queue.name)
|
|
122
|
+
*/
|
|
123
|
+
setupQueueWithEvents(queue, queueEvents, queueName) {
|
|
124
|
+
if (!queue || typeof queue.getJob !== 'function') {
|
|
125
|
+
this.logger.warn('Invalid BullMQ queue instance provided');
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!queueEvents || typeof queueEvents.on !== 'function') {
|
|
129
|
+
this.logger.warn('Invalid BullMQ QueueEvents instance provided');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const name = queueName || queue.name || 'unknown';
|
|
133
|
+
// Track when jobs are added (BullMQ signature: { jobId: string })
|
|
134
|
+
// Reuse existing handler - same signature
|
|
135
|
+
queueEvents.on('waiting', (args) => {
|
|
136
|
+
this.handleJobWaiting(name, args.jobId, queue);
|
|
137
|
+
});
|
|
138
|
+
// Track when jobs start processing (BullMQ signature: { jobId: string })
|
|
139
|
+
// Need to fetch job first, then call existing handler
|
|
140
|
+
queueEvents.on('active', async (args) => {
|
|
141
|
+
try {
|
|
142
|
+
const job = await queue.getJob(args.jobId);
|
|
143
|
+
if (job)
|
|
144
|
+
this.handleJobActive(name, job);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
this.logger.debug(`Failed to track BullMQ active job: ${error}`);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
// Track when jobs complete (BullMQ signature: { jobId: string, returnvalue: string })
|
|
151
|
+
// Need to fetch job and parse returnvalue
|
|
152
|
+
queueEvents.on('completed', async (args) => {
|
|
153
|
+
try {
|
|
154
|
+
const job = await queue.getJob(args.jobId);
|
|
155
|
+
if (!job)
|
|
156
|
+
return;
|
|
157
|
+
// Parse returnvalue (BullMQ sends it as JSON string)
|
|
158
|
+
let result;
|
|
159
|
+
try {
|
|
160
|
+
result = args.returnvalue ? JSON.parse(args.returnvalue) : undefined;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
result = args.returnvalue;
|
|
164
|
+
}
|
|
165
|
+
this.handleJobCompleted(name, job, result);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
this.logger.debug(`Failed to track BullMQ completed job: ${error}`);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
// Track when jobs fail (BullMQ signature: { jobId: string, failedReason: string })
|
|
172
|
+
// Need to fetch job and convert failedReason to Error
|
|
173
|
+
queueEvents.on('failed', async (args) => {
|
|
174
|
+
try {
|
|
175
|
+
const job = await queue.getJob(args.jobId);
|
|
176
|
+
if (!job)
|
|
177
|
+
return;
|
|
178
|
+
// Convert failedReason string to Error object for existing handler
|
|
179
|
+
const error = new Error(args.failedReason || 'Unknown error');
|
|
180
|
+
this.handleJobFailed(name, job, error);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
this.logger.debug(`Failed to track BullMQ failed job: ${error}`);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// Track delayed jobs (BullMQ signature: { jobId: string, delay: number })
|
|
187
|
+
// Reuse existing handler - same signature
|
|
188
|
+
queueEvents.on('delayed', (args) => {
|
|
189
|
+
this.handleJobDelayed(name, args.jobId, queue);
|
|
190
|
+
});
|
|
191
|
+
this.logger.log(`BullMQ job interceptors installed for queue: ${name}`);
|
|
192
|
+
}
|
|
70
193
|
async handleJobWaiting(queueName, jobId, queue) {
|
|
71
194
|
try {
|
|
72
195
|
const job = await queue.getJob(jobId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.watcher.js","sourceRoot":"","sources":["../../src/watchers/job.watcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA0E;AAC1E,iEAA6D;AAC7D,wDAAuF;
|
|
1
|
+
{"version":3,"file":"job.watcher.js","sourceRoot":"","sources":["../../src/watchers/job.watcher.ts"],"names":[],"mappings":"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"}
|