@quave/agenda-mongodb 1.0.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/LICENSE.md +25 -0
- package/README.md +273 -0
- package/dist/MongoBackend.d.ts +58 -0
- package/dist/MongoBackend.js +82 -0
- package/dist/MongoBackend.js.map +1 -0
- package/dist/MongoChangeStreamNotificationChannel.d.ts +96 -0
- package/dist/MongoChangeStreamNotificationChannel.js +248 -0
- package/dist/MongoChangeStreamNotificationChannel.js.map +1 -0
- package/dist/MongoJobLogger.d.ts +46 -0
- package/dist/MongoJobLogger.js +142 -0
- package/dist/MongoJobLogger.js.map +1 -0
- package/dist/MongoJobRepository.d.ts +84 -0
- package/dist/MongoJobRepository.js +713 -0
- package/dist/MongoJobRepository.js.map +1 -0
- package/dist/cjs/MongoBackend.d.ts +58 -0
- package/dist/cjs/MongoBackend.js +86 -0
- package/dist/cjs/MongoBackend.js.map +1 -0
- package/dist/cjs/MongoChangeStreamNotificationChannel.d.ts +96 -0
- package/dist/cjs/MongoChangeStreamNotificationChannel.js +255 -0
- package/dist/cjs/MongoChangeStreamNotificationChannel.js.map +1 -0
- package/dist/cjs/MongoJobLogger.d.ts +46 -0
- package/dist/cjs/MongoJobLogger.js +149 -0
- package/dist/cjs/MongoJobLogger.js.map +1 -0
- package/dist/cjs/MongoJobRepository.d.ts +84 -0
- package/dist/cjs/MongoJobRepository.js +720 -0
- package/dist/cjs/MongoJobRepository.js.map +1 -0
- package/dist/cjs/hasMongoProtocol.d.ts +1 -0
- package/dist/cjs/hasMongoProtocol.js +6 -0
- package/dist/cjs/hasMongoProtocol.js.map +1 -0
- package/dist/cjs/index.d.ts +39 -0
- package/dist/cjs/index.js +46 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/testing.d.ts +25 -0
- package/dist/cjs/testing.js +55 -0
- package/dist/cjs/testing.js.map +1 -0
- package/dist/cjs/types.d.ts +52 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/hasMongoProtocol.d.ts +1 -0
- package/dist/hasMongoProtocol.js +2 -0
- package/dist/hasMongoProtocol.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/testing.d.ts +25 -0
- package/dist/testing.js +49 -0
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +52 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MongoJobLogger = void 0;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const log = (0, debug_1.default)('agenda:mongo:logger');
|
|
9
|
+
/**
|
|
10
|
+
* MongoDB implementation of JobLogger.
|
|
11
|
+
* Stores job lifecycle events in a dedicated MongoDB collection.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Via backend (automatic connection sharing):
|
|
16
|
+
* import { MongoBackend } from '@quave/agenda-mongodb';
|
|
17
|
+
*
|
|
18
|
+
* const backend = new MongoBackend({
|
|
19
|
+
* mongo: db,
|
|
20
|
+
* logging: true // enables MongoJobLogger with 'agenda_logs' collection
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Standalone (e.g., log to Mongo while using Postgres for storage):
|
|
24
|
+
* import { MongoJobLogger } from '@quave/agenda-mongodb';
|
|
25
|
+
*
|
|
26
|
+
* const logger = new MongoJobLogger({ db: existingDb });
|
|
27
|
+
* const agenda = new Agenda({
|
|
28
|
+
* backend: new PostgresBackend({ connectionString: '...' }),
|
|
29
|
+
* logging: logger
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
class MongoJobLogger {
|
|
34
|
+
constructor(options) {
|
|
35
|
+
this.initialized = false;
|
|
36
|
+
if (typeof options === 'string') {
|
|
37
|
+
// Legacy: constructor(collectionName)
|
|
38
|
+
this.collectionName = options;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.collectionName = options?.collectionName ?? 'agenda_logs';
|
|
42
|
+
if (options?.db) {
|
|
43
|
+
this.collection = options.db.collection(this.collectionName);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Set the database instance and initialize the collection.
|
|
49
|
+
* Called by MongoBackend after the repository connects,
|
|
50
|
+
* or automatically when a db is provided in the constructor.
|
|
51
|
+
*/
|
|
52
|
+
async setDb(db) {
|
|
53
|
+
this.collection = db.collection(this.collectionName);
|
|
54
|
+
await this.ensureIndexes();
|
|
55
|
+
}
|
|
56
|
+
async ensureIndexes() {
|
|
57
|
+
if (this.initialized || !this.collection)
|
|
58
|
+
return;
|
|
59
|
+
this.initialized = true;
|
|
60
|
+
log('creating indexes for %s collection', this.collectionName);
|
|
61
|
+
await this.collection.createIndex({ timestamp: -1 }, { name: 'agenda_logs_timestamp_idx' });
|
|
62
|
+
await this.collection.createIndex({ jobId: 1, timestamp: -1 }, { name: 'agenda_logs_job_id_idx' });
|
|
63
|
+
await this.collection.createIndex({ jobName: 1, timestamp: -1 }, { name: 'agenda_logs_job_name_idx' });
|
|
64
|
+
log('indexes created for %s collection', this.collectionName);
|
|
65
|
+
}
|
|
66
|
+
async log(entry) {
|
|
67
|
+
if (!this.collection) {
|
|
68
|
+
log('collection not initialized, skipping log entry');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
await this.ensureIndexes();
|
|
72
|
+
await this.collection.insertOne({ ...entry });
|
|
73
|
+
}
|
|
74
|
+
async getLogs(query) {
|
|
75
|
+
if (!this.collection) {
|
|
76
|
+
return { entries: [], total: 0 };
|
|
77
|
+
}
|
|
78
|
+
const filter = this.buildFilter(query);
|
|
79
|
+
const sort = { timestamp: query?.sort === 'asc' ? 1 : -1 };
|
|
80
|
+
const limit = query?.limit ?? 50;
|
|
81
|
+
const offset = query?.offset ?? 0;
|
|
82
|
+
const [entries, total] = await Promise.all([
|
|
83
|
+
this.collection
|
|
84
|
+
.find(filter)
|
|
85
|
+
.sort(sort)
|
|
86
|
+
.skip(offset)
|
|
87
|
+
.limit(limit)
|
|
88
|
+
.toArray()
|
|
89
|
+
.then(docs => docs.map(doc => ({
|
|
90
|
+
_id: doc._id.toHexString(),
|
|
91
|
+
timestamp: doc.timestamp,
|
|
92
|
+
level: doc.level,
|
|
93
|
+
event: doc.event,
|
|
94
|
+
jobId: doc.jobId,
|
|
95
|
+
jobName: doc.jobName,
|
|
96
|
+
message: doc.message,
|
|
97
|
+
duration: doc.duration,
|
|
98
|
+
error: doc.error,
|
|
99
|
+
failCount: doc.failCount,
|
|
100
|
+
retryDelay: doc.retryDelay,
|
|
101
|
+
retryAttempt: doc.retryAttempt,
|
|
102
|
+
agendaName: doc.agendaName,
|
|
103
|
+
meta: doc.meta
|
|
104
|
+
}))),
|
|
105
|
+
this.collection.countDocuments(filter)
|
|
106
|
+
]);
|
|
107
|
+
return { entries, total };
|
|
108
|
+
}
|
|
109
|
+
async clearLogs(query) {
|
|
110
|
+
if (!this.collection) {
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
const filter = this.buildFilter(query);
|
|
114
|
+
const result = await this.collection.deleteMany(filter);
|
|
115
|
+
return result.deletedCount;
|
|
116
|
+
}
|
|
117
|
+
buildFilter(query) {
|
|
118
|
+
if (!query)
|
|
119
|
+
return {};
|
|
120
|
+
const filter = {};
|
|
121
|
+
if (query.jobId) {
|
|
122
|
+
filter.jobId = query.jobId;
|
|
123
|
+
}
|
|
124
|
+
if (query.jobName) {
|
|
125
|
+
filter.jobName = query.jobName;
|
|
126
|
+
}
|
|
127
|
+
if (query.level) {
|
|
128
|
+
filter.level = Array.isArray(query.level)
|
|
129
|
+
? { $in: query.level }
|
|
130
|
+
: query.level;
|
|
131
|
+
}
|
|
132
|
+
if (query.event) {
|
|
133
|
+
filter.event = Array.isArray(query.event)
|
|
134
|
+
? { $in: query.event }
|
|
135
|
+
: query.event;
|
|
136
|
+
}
|
|
137
|
+
if (query.from || query.to) {
|
|
138
|
+
const timestampFilter = {};
|
|
139
|
+
if (query.from)
|
|
140
|
+
timestampFilter.$gte = query.from;
|
|
141
|
+
if (query.to)
|
|
142
|
+
timestampFilter.$lte = query.to;
|
|
143
|
+
filter.timestamp = timestampFilter;
|
|
144
|
+
}
|
|
145
|
+
return filter;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.MongoJobLogger = MongoJobLogger;
|
|
149
|
+
//# sourceMappingURL=MongoJobLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoJobLogger.js","sourceRoot":"","sources":["../../src/MongoJobLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Collection, Db, ObjectId } from 'mongodb';
|
|
2
|
+
import type { JobParameters, JobId, JobsQueryOptions, JobsResult, JobsOverview, JobRepository, JobRepositoryOptions, RemoveJobsOptions } from '@quave/agenda';
|
|
3
|
+
import type { MongoJobRepositoryConfig } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Internal MongoDB document type with ObjectId for _id
|
|
6
|
+
* This is what's actually stored in MongoDB, separate from the public JobParameters interface
|
|
7
|
+
*/
|
|
8
|
+
type MongoJobDocument = Omit<JobParameters, '_id'> & {
|
|
9
|
+
_id?: ObjectId;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* @class
|
|
13
|
+
* MongoDB implementation of JobRepository
|
|
14
|
+
*/
|
|
15
|
+
export declare class MongoJobRepository implements JobRepository {
|
|
16
|
+
private connectOptions;
|
|
17
|
+
collection: Collection<MongoJobDocument>;
|
|
18
|
+
private mongoClient?;
|
|
19
|
+
private _db?;
|
|
20
|
+
private ownsConnection;
|
|
21
|
+
constructor(connectOptions: MongoJobRepositoryConfig);
|
|
22
|
+
private createConnection;
|
|
23
|
+
getJobById(id: string): Promise<JobParameters | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Convert a SortDirection value to MongoDB's numeric sort direction
|
|
26
|
+
*/
|
|
27
|
+
private toMongoSortDirection;
|
|
28
|
+
/**
|
|
29
|
+
* findOneAndUpdate that tolerates both driver result shapes: driver 6+
|
|
30
|
+
* returns the document (or null) directly, while drivers 4/5 — e.g. the
|
|
31
|
+
* mongodb driver bundled with Meteor 2.x — return a ModifyResult wrapper
|
|
32
|
+
* with the document under `value`.
|
|
33
|
+
*/
|
|
34
|
+
private findOneAndUpdateDoc;
|
|
35
|
+
/**
|
|
36
|
+
* Convert generic sort options to MongoDB sort
|
|
37
|
+
*/
|
|
38
|
+
private toMongoSort;
|
|
39
|
+
/**
|
|
40
|
+
* Query jobs with database-agnostic options.
|
|
41
|
+
* Handles state computation and filtering internally.
|
|
42
|
+
*/
|
|
43
|
+
queryJobs(options?: JobsQueryOptions): Promise<JobsResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Get overview statistics for jobs grouped by name.
|
|
46
|
+
* Returns counts of jobs in each state for each job name.
|
|
47
|
+
*/
|
|
48
|
+
getJobsOverview(): Promise<JobsOverview[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Get all distinct job names
|
|
51
|
+
*/
|
|
52
|
+
getDistinctJobNames(): Promise<string[]>;
|
|
53
|
+
getQueueSize(): Promise<number>;
|
|
54
|
+
removeJobs(options: RemoveJobsOptions): Promise<number>;
|
|
55
|
+
/**
|
|
56
|
+
* Build a MongoDB filter from RemoveJobsOptions
|
|
57
|
+
*/
|
|
58
|
+
private buildFilterFromOptions;
|
|
59
|
+
disableJobs(options: RemoveJobsOptions): Promise<number>;
|
|
60
|
+
enableJobs(options: RemoveJobsOptions): Promise<number>;
|
|
61
|
+
purgeAllJobs(): Promise<number>;
|
|
62
|
+
unlockJob(job: JobParameters): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Internal method to unlock jobs so that they can be re-run
|
|
65
|
+
*/
|
|
66
|
+
unlockJobs(jobIds: (JobId | string)[]): Promise<void>;
|
|
67
|
+
lockJob(job: JobParameters, options: JobRepositoryOptions | undefined): Promise<JobParameters | undefined>;
|
|
68
|
+
getNextJobToRun(jobName: string, nextScanAt: Date, lockDeadline: Date, now: Date | undefined, options: JobRepositoryOptions | undefined): Promise<JobParameters | undefined>;
|
|
69
|
+
/**
|
|
70
|
+
* Get the underlying MongoDB Db instance (for use by job logger).
|
|
71
|
+
*/
|
|
72
|
+
getDb(): Db;
|
|
73
|
+
connect(): Promise<void>;
|
|
74
|
+
private database;
|
|
75
|
+
disconnect(): Promise<void>;
|
|
76
|
+
saveJobState(job: JobParameters, options: JobRepositoryOptions | undefined): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Save a job to the database (insert or update)
|
|
79
|
+
* @param job Job parameters to save
|
|
80
|
+
* @returns The saved job parameters with ID
|
|
81
|
+
*/
|
|
82
|
+
saveJob<DATA = unknown>(job: JobParameters<DATA>, options: JobRepositoryOptions | undefined): Promise<JobParameters<DATA>>;
|
|
83
|
+
}
|
|
84
|
+
export {};
|