@orion-js/dogs 3.1.0-alpha.9 → 3.1.6

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 Orionjs Team
3
+ Copyright (c) 2022 Orionjs Team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("reflect-metadata");
4
4
  const helpers_1 = require("@orion-js/helpers");
5
5
  const _1 = require(".");
6
+ const logger_1 = require("@orion-js/logger");
7
+ (0, logger_1.setLogLevel)('error');
6
8
  describe('Event tests', () => {
7
9
  it('Should run an event job', async () => {
8
10
  let count = 0;
@@ -16,8 +18,7 @@ describe('Event tests', () => {
16
18
  jobs: { job3 },
17
19
  workersCount: 1,
18
20
  pollInterval: 10,
19
- cooldownPeriod: 10,
20
- logLevel: 'none'
21
+ cooldownPeriod: 10
21
22
  });
22
23
  expect(count).toBe(0);
23
24
  await (0, _1.scheduleJob)({
@@ -55,8 +56,7 @@ describe('Event tests', () => {
55
56
  jobs: { job4 },
56
57
  workersCount: 1,
57
58
  pollInterval: 10,
58
- cooldownPeriod: 10,
59
- logLevel: 'none'
59
+ cooldownPeriod: 10
60
60
  });
61
61
  expect(passes).toBe(false);
62
62
  await (0, _1.scheduleJob)({
@@ -90,8 +90,7 @@ describe('Event tests', () => {
90
90
  workersCount: 2,
91
91
  pollInterval: 10,
92
92
  cooldownPeriod: 10,
93
- lockTime: 10,
94
- logLevel: 'none'
93
+ lockTime: 10
95
94
  });
96
95
  await (0, _1.scheduleJob)({
97
96
  name: jobId,
@@ -115,8 +114,7 @@ describe('Event tests', () => {
115
114
  jobs: { [jobId]: job },
116
115
  workersCount: 1,
117
116
  pollInterval: 10,
118
- cooldownPeriod: 10,
119
- logLevel: 'none'
117
+ cooldownPeriod: 10
120
118
  });
121
119
  await (0, _1.scheduleJob)({
122
120
  name: jobId,
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const helpers_1 = require("@orion-js/helpers");
4
4
  const _1 = require(".");
5
+ const logger_1 = require("@orion-js/logger");
6
+ (0, logger_1.setLogLevel)('error');
5
7
  describe('Test Jobs History', () => {
6
8
  it('Should save success history types', async () => {
7
9
  const jobId = (0, helpers_1.generateId)();
@@ -58,8 +60,7 @@ describe('Test Jobs History', () => {
58
60
  const instance = (0, _1.startWorkers)({
59
61
  jobs: { [jobId]: job },
60
62
  workersCount: 1,
61
- pollInterval: 10,
62
- logLevel: 'none'
63
+ pollInterval: 10
63
64
  });
64
65
  await (0, _1.scheduleJob)({
65
66
  name: jobId,
@@ -101,8 +102,7 @@ describe('Test Jobs History', () => {
101
102
  jobs: { [jobId]: job },
102
103
  workersCount: 1,
103
104
  pollInterval: 10,
104
- lockTime: 10,
105
- logLevel: 'none'
105
+ lockTime: 10
106
106
  });
107
107
  await (0, _1.scheduleJob)({
108
108
  name: jobId,
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  require("reflect-metadata");
4
4
  const helpers_1 = require("@orion-js/helpers");
5
5
  const _1 = require(".");
6
+ const logger_1 = require("@orion-js/logger");
7
+ (0, logger_1.setLogLevel)('error');
6
8
  describe('Recurrent tests', () => {
7
9
  it('Should run a recurrent job', async () => {
8
10
  let ran = false;
@@ -17,8 +19,7 @@ describe('Recurrent tests', () => {
17
19
  jobs: { job1 },
18
20
  workersCount: 1,
19
21
  pollInterval: 100,
20
- cooldownPeriod: 100,
21
- logLevel: 'none'
22
+ cooldownPeriod: 100
22
23
  });
23
24
  await (0, helpers_1.sleep)(500);
24
25
  await instance.stop();
@@ -37,8 +38,7 @@ describe('Recurrent tests', () => {
37
38
  jobs: { job2 },
38
39
  workersCount: 1,
39
40
  pollInterval: 10,
40
- cooldownPeriod: 10,
41
- logLevel: 'none'
41
+ cooldownPeriod: 10
42
42
  });
43
43
  await (0, helpers_1.sleep)(200);
44
44
  await instance.stop();
@@ -7,9 +7,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.JobsRepo = void 0;
10
+ const logger_1 = require("@orion-js/logger");
10
11
  const mongodb_1 = require("@orion-js/mongodb");
11
12
  const services_1 = require("@orion-js/services");
12
- const log_1 = require("../log");
13
13
  const JobRecord_1 = require("../types/JobRecord");
14
14
  let JobsRepo = class JobsRepo {
15
15
  constructor() {
@@ -67,7 +67,7 @@ let JobsRepo = class JobsRepo {
67
67
  return;
68
68
  let tries = job.tries || 1;
69
69
  if (job.lockedUntil) {
70
- (0, log_1.log)('info', `Running job "${job.jobName}" that was staled`);
70
+ logger_1.logger.info(`Running job "${job.jobName}" that was staled`);
71
71
  this.jobs.updateOne(job._id, { $inc: { tries: 1 } });
72
72
  tries++;
73
73
  }
@@ -104,6 +104,7 @@ let JobsRepo = class JobsRepo {
104
104
  });
105
105
  }
106
106
  async ensureJobRecord(job) {
107
+ await this.jobs.connectionPromise;
107
108
  const result = await this.jobs.upsert({
108
109
  jobName: job.name
109
110
  }, {
@@ -116,10 +117,10 @@ let JobsRepo = class JobsRepo {
116
117
  }
117
118
  });
118
119
  if (result.upsertedId) {
119
- (0, log_1.log)('info', `Created job record for "${job.name}"`);
120
+ logger_1.logger.info(`Created job record for "${job.name}"`);
120
121
  }
121
122
  else {
122
- (0, log_1.log)('info', `Record for job "${job.name}" already exists`);
123
+ logger_1.logger.info(`Record for job "${job.name}" already exists`);
123
124
  }
124
125
  }
125
126
  async scheduleJob(options) {
@@ -135,7 +136,7 @@ let JobsRepo = class JobsRepo {
135
136
  }
136
137
  catch (error) {
137
138
  if (error.code === 11000 && options.uniqueIdentifier) {
138
- (0, log_1.log)('info', `Job "${options.name}" with identifier "${options.uniqueIdentifier}" already exists`);
139
+ logger_1.logger.info(`Job "${options.name}" with identifier "${options.uniqueIdentifier}" already exists`);
139
140
  }
140
141
  else {
141
142
  throw error;
@@ -10,13 +10,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EventsService = void 0;
13
+ const logger_1 = require("@orion-js/logger");
13
14
  const services_1 = require("@orion-js/services");
14
- const log_1 = require("../log");
15
15
  const JobsRepo_1 = require("../repos/JobsRepo");
16
16
  const getNextRunDate_1 = require("./getNextRunDate");
17
17
  let EventsService = class EventsService {
18
18
  async scheduleJob(options) {
19
- (0, log_1.log)('info', 'Scheduling job...', options);
19
+ logger_1.logger.info('Scheduling job...', options);
20
20
  await this.jobsRepo.scheduleJob({
21
21
  name: options.name,
22
22
  priority: options.priority || 1,
@@ -15,6 +15,6 @@ export declare class Executor {
15
15
  job: JobDefinition;
16
16
  jobToRun: JobToRun;
17
17
  }): Promise<void>;
18
- afterExecutionSuccess(job: JobDefinition, jobToRun: JobToRun): Promise<void>;
18
+ afterExecutionSuccess(job: JobDefinition, jobToRun: JobToRun, context: ExecutionContext): Promise<void>;
19
19
  executeJob(jobs: JobsDefinition, jobToRun: JobToRun): Promise<void>;
20
20
  }
@@ -10,8 +10,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.Executor = void 0;
13
+ const logger_1 = require("@orion-js/logger");
13
14
  const services_1 = require("@orion-js/services");
14
- const log_1 = require("../log");
15
15
  const JobsHistoryRepo_1 = require("../repos/JobsHistoryRepo");
16
16
  const JobsRepo_1 = require("../repos/JobsRepo");
17
17
  const getNextRunDate_1 = require("./getNextRunDate");
@@ -27,13 +27,17 @@ let Executor = class Executor {
27
27
  clearTimeout(staleTimeout);
28
28
  staleTimeout = setTimeout(() => onStale(), extraTime);
29
29
  await this.jobsRepo.extendLockTime(jobToRun.jobId, extraTime);
30
- }
30
+ },
31
+ logger: logger_1.logger.addMetadata({
32
+ jobName: jobToRun.name,
33
+ jobId: jobToRun.jobId
34
+ })
31
35
  };
32
36
  }
33
37
  getJobDefinition(jobToRun, jobs) {
34
38
  const job = jobs[jobToRun.name];
35
39
  if (jobToRun.type !== job.type) {
36
- (0, log_1.log)('warn', `Job record "${jobToRun.name}" is "${jobToRun.type}" but definition is "${job.type}"`);
40
+ logger_1.logger.warn(`Job record "${jobToRun.name}" is "${jobToRun.type}" but definition is "${job.type}"`);
37
41
  return;
38
42
  }
39
43
  return job;
@@ -49,12 +53,12 @@ let Executor = class Executor {
49
53
  }
50
54
  };
51
55
  if (!job.onError) {
52
- (0, log_1.log)('error', `Error executing job "${jobToRun.name}"`, error);
56
+ context.logger.error(`Error executing job "${jobToRun.name}"`, error);
53
57
  await scheduleRecurrent();
54
58
  return;
55
59
  }
56
60
  else {
57
- (0, log_1.log)('info', `Error executing job "${jobToRun.name}"`, error);
61
+ context.logger.info(`Error executing job "${jobToRun.name}"`, error);
58
62
  }
59
63
  const result = await job.onError(error, jobToRun.params, context);
60
64
  if (result.action === 'dismiss') {
@@ -73,7 +77,8 @@ let Executor = class Executor {
73
77
  const { startedAt, status, errorMessage, result, job, jobToRun } = options;
74
78
  const endedAt = new Date();
75
79
  if (job.saveExecutionsFor !== 0) {
76
- const saveExecutionsFor = job.saveExecutionsFor || 24 * 60 * 60 * 1000;
80
+ const oneWeek = 1000 * 60 * 60 * 24 * 7;
81
+ const saveExecutionsFor = job.saveExecutionsFor || oneWeek;
77
82
  await this.jobsHistoryRepo.saveExecution({
78
83
  executionId: jobToRun.jobId,
79
84
  jobName: jobToRun.name,
@@ -92,9 +97,9 @@ let Executor = class Executor {
92
97
  });
93
98
  }
94
99
  }
95
- async afterExecutionSuccess(job, jobToRun) {
100
+ async afterExecutionSuccess(job, jobToRun, context) {
96
101
  if (job.type === 'recurrent') {
97
- (0, log_1.log)('info', `Scheduling next run for recurrent job "${jobToRun.name}"`);
102
+ context.logger.info(`Scheduling next run for recurrent job "${jobToRun.name}"`);
98
103
  await this.jobsRepo.scheduleNextRun({
99
104
  jobId: jobToRun.jobId,
100
105
  nextRunAt: (0, getNextRunDate_1.getNextRunDate)(job),
@@ -102,7 +107,7 @@ let Executor = class Executor {
102
107
  });
103
108
  }
104
109
  if (job.type === 'event') {
105
- (0, log_1.log)('info', `Removing event job after success "${jobToRun.name}"`);
110
+ context.logger.info(`Removing event job after success "${jobToRun.name}"`);
106
111
  await this.jobsRepo.deleteEventJob(jobToRun.jobId);
107
112
  }
108
113
  }
@@ -113,11 +118,11 @@ let Executor = class Executor {
113
118
  const startedAt = new Date();
114
119
  const onStale = () => {
115
120
  if (job.onStale) {
116
- (0, log_1.log)('info', `Job "${jobToRun.name}" is stale`);
121
+ context.logger.info(`Job "${jobToRun.name}" is stale`);
117
122
  job.onStale(jobToRun.params, context);
118
123
  }
119
124
  else {
120
- (0, log_1.log)('error', `Job "${jobToRun.name}" is stale`);
125
+ context.logger.error(`Job "${jobToRun.name}" is stale`);
121
126
  }
122
127
  this.saveExecution({
123
128
  startedAt,
@@ -140,7 +145,7 @@ let Executor = class Executor {
140
145
  job,
141
146
  jobToRun
142
147
  });
143
- await this.afterExecutionSuccess(job, jobToRun);
148
+ await this.afterExecutionSuccess(job, jobToRun, context);
144
149
  }
145
150
  catch (error) {
146
151
  context.clearStaleTimeout();
@@ -15,7 +15,7 @@ const lodash_1 = require("lodash");
15
15
  const JobsRepo_1 = require("../repos/JobsRepo");
16
16
  const helpers_1 = require("@orion-js/helpers");
17
17
  const Executor_1 = require("./Executor");
18
- const log_1 = require("../log");
18
+ const logger_1 = require("@orion-js/logger");
19
19
  let WorkerService = class WorkerService {
20
20
  getJobNames(jobs) {
21
21
  return Object.keys(jobs);
@@ -30,20 +30,20 @@ let WorkerService = class WorkerService {
30
30
  }
31
31
  async runWorkerLoop(config) {
32
32
  const names = this.getJobNames(config.jobs);
33
- (0, log_1.log)('debug', `Running worker loop for jobs "${names.join(', ')}"...`);
33
+ logger_1.logger.debug(`Running worker loop for jobs "${names.join(', ')}"...`);
34
34
  const jobToRun = await this.jobsRepo.getJobAndLock(names, config.lockTime);
35
35
  if (!jobToRun) {
36
- (0, log_1.log)('debug', 'No job to run');
36
+ logger_1.logger.debug('No job to run');
37
37
  return false;
38
38
  }
39
- (0, log_1.log)('info', `Got job to run: ${JSON.stringify(jobToRun)}`);
39
+ logger_1.logger.info(`Got job to run:`, jobToRun);
40
40
  await this.executor.executeJob(config.jobs, jobToRun);
41
41
  return true;
42
42
  }
43
43
  async startWorker(config, workersInstance) {
44
44
  while (true) {
45
45
  if (!workersInstance.running) {
46
- (0, log_1.log)('info', 'Got signal to stop. Stopping worker...');
46
+ logger_1.logger.info('Got signal to stop. Stopping worker...');
47
47
  return;
48
48
  }
49
49
  try {
@@ -54,7 +54,7 @@ let WorkerService = class WorkerService {
54
54
  await (0, helpers_1.sleep)(config.cooldownPeriod);
55
55
  }
56
56
  catch (error) {
57
- (0, log_1.log)('error', `Error in job runner. Waiting and running again`, error);
57
+ logger_1.logger.error(`Error in job runner. Waiting and running again`, error);
58
58
  await (0, helpers_1.sleep)(config.pollInterval);
59
59
  }
60
60
  }
@@ -65,7 +65,7 @@ let WorkerService = class WorkerService {
65
65
  workersCount: config.workersCount,
66
66
  workers: [],
67
67
  stop: async () => {
68
- (0, log_1.log)('debug', 'Stopping workers...', workersInstance.workers);
68
+ logger_1.logger.debug('Stopping workers...', workersInstance.workers);
69
69
  workersInstance.running = false;
70
70
  await Promise.all(workersInstance.workers);
71
71
  }
@@ -77,15 +77,15 @@ let WorkerService = class WorkerService {
77
77
  await Promise.all(jobs
78
78
  .filter(job => job.type === 'recurrent')
79
79
  .map(async (job) => {
80
- (0, log_1.log)('info', `Ensuring records for job "${job.name}"...`);
80
+ logger_1.logger.info(`Ensuring records for job "${job.name}"...`);
81
81
  await this.jobsRepo.ensureJobRecord(job);
82
82
  }));
83
83
  }
84
84
  async runWorkers(config, workersInstance) {
85
- (0, log_1.log)('info', 'Will ensure records for recurrent jobs');
85
+ logger_1.logger.info('Will ensure records for recurrent jobs');
86
86
  await this.ensureRecords(config);
87
87
  for (const workerIndex of (0, lodash_1.range)(config.workersCount)) {
88
- (0, log_1.log)('info', `Starting worker ${workerIndex}`);
88
+ logger_1.logger.info(`Starting worker ${workerIndex}`);
89
89
  const workerPromise = this.startWorker(config, workersInstance);
90
90
  workersInstance.workers.push(workerPromise);
91
91
  }
@@ -96,16 +96,14 @@ let WorkerService = class WorkerService {
96
96
  cooldownPeriod: 100,
97
97
  pollInterval: 3000,
98
98
  workersCount: 4,
99
- lockTime: 30 * 1000,
100
- logLevel: 'info'
99
+ lockTime: 30 * 1000
101
100
  };
102
101
  const config = {
103
102
  ...defaultConfig,
104
103
  ...userConfig
105
104
  };
106
- (0, log_1.setLogLevel)(config.logLevel);
107
105
  const workersInstance = this.createWorkersInstanceDefinition(config);
108
- (0, log_1.log)('info', 'Starting workers', config);
106
+ logger_1.logger.info('Starting workers', config);
109
107
  this.runWorkers(config, workersInstance);
110
108
  return workersInstance;
111
109
  }
@@ -24,7 +24,7 @@ export interface BaseJobDefinition {
24
24
  */
25
25
  onStale?: (params: PlainObject, context: ExecutionContext) => Promise<void>;
26
26
  /**
27
- * Save the executions of the job time in milliseconds. Default is 1 day. Set to 0 to disable.
27
+ * Save the executions of the job time in milliseconds. Default is 1 week. Set to 0 to disable.
28
28
  */
29
29
  saveExecutionsFor?: number;
30
30
  }
@@ -25,8 +25,4 @@ export interface StartWorkersConfig {
25
25
  * You can extend this time inside a job by calling extendLockTime from context.
26
26
  */
27
27
  lockTime: number;
28
- /**
29
- * logLevel is the level of logging to use. Default is 'info'.
30
- */
31
- logLevel: LogLevels;
32
28
  }
@@ -1,3 +1,4 @@
1
+ import { OrionLogger } from '@orion-js/logger';
1
2
  import { PlainObject } from './HistoryRecord';
2
3
  import { JobDefinition } from './JobsDefinition';
3
4
  export interface JobToRun {
@@ -14,6 +15,7 @@ export interface ExecutionContext {
14
15
  record: JobToRun;
15
16
  definition: JobDefinition;
16
17
  tries: number;
18
+ logger: OrionLogger;
17
19
  extendLockTime: (extraTime: number) => Promise<void>;
18
20
  clearStaleTimeout: () => void;
19
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/dogs",
3
- "version": "3.1.0-alpha.9",
3
+ "version": "3.1.6",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "files": [
@@ -17,12 +17,16 @@
17
17
  "upgrade-interactive": "yarn upgrade-interactive"
18
18
  },
19
19
  "dependencies": {
20
- "@orion-js/helpers": "^3.0.36",
21
- "@orion-js/mongodb": "^3.1.0-alpha.0",
22
- "@orion-js/services": "^3.1.0-alpha.0",
23
- "@orion-js/typed-model": "^3.0.38"
20
+ "@orion-js/helpers": "^3.1.6",
21
+ "@orion-js/mongodb": "^3.1.6",
22
+ "@orion-js/services": "^3.1.6",
23
+ "@orion-js/typed-model": "^3.1.6"
24
+ },
25
+ "peerDependencies": {
26
+ "@orion-js/logger": "3.1.0-alpha.12"
24
27
  },
25
28
  "devDependencies": {
29
+ "@orion-js/logger": "^3.1.6",
26
30
  "@shelf/jest-mongodb": "^2.1.0",
27
31
  "@types/jest": "^27.0.2",
28
32
  "@types/lodash": "4.14.176",
@@ -35,5 +39,5 @@
35
39
  "publishConfig": {
36
40
  "access": "public"
37
41
  },
38
- "gitHead": "65ebf7047a46aa5e93e9066d82ca70f81d69f10c"
42
+ "gitHead": "cb180a6a89ee2042f9d3dc80725f3aa05705a963"
39
43
  }
@@ -1,5 +0,0 @@
1
- import { LogLevels } from '../types/StartConfig';
2
- export declare let appLogLevel: LogLevels;
3
- export declare const levelToInt: (level: LogLevels) => 0 | 1 | 2 | 3;
4
- export declare const log: (level: LogLevels, ...args: any[]) => void;
5
- export declare const setLogLevel: (level: LogLevels) => void;
package/lib/log/index.js DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setLogLevel = exports.log = exports.levelToInt = exports.appLogLevel = void 0;
4
- exports.appLogLevel = 'info';
5
- const levelToInt = (level) => {
6
- switch (level) {
7
- case 'debug':
8
- return 0;
9
- case 'info':
10
- return 1;
11
- case 'warn':
12
- return 2;
13
- case 'error':
14
- return 3;
15
- }
16
- };
17
- exports.levelToInt = levelToInt;
18
- const log = (level, ...args) => {
19
- if (exports.appLogLevel === 'none')
20
- return;
21
- const levelInt = (0, exports.levelToInt)(level);
22
- const appLogLevelInt = (0, exports.levelToInt)(exports.appLogLevel);
23
- if (levelInt < appLogLevelInt)
24
- return;
25
- console[level](...args);
26
- };
27
- exports.log = log;
28
- const setLogLevel = (level) => {
29
- exports.appLogLevel = level;
30
- };
31
- exports.setLogLevel = setLogLevel;