Skip to content

Commit

Permalink
refactor: make logger a class member in JobRepository
Browse files Browse the repository at this point in the history
Signed-off-by: Ute Weiss <[email protected]>
  • Loading branch information
weissu42 committed Sep 6, 2021
1 parent 69f68a2 commit fd29c3c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
20 changes: 13 additions & 7 deletions src/repository/JobRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ import { findLatest } from '../job/findLatest';
export const JOBS_COLLECTION_NAME = 'jobs';

export class JobRepository extends Repository<JobEntity> {
private logger: Logger | undefined;

constructor(mongoClient: MongoClient) {
super(mongoClient, JOBS_COLLECTION_NAME);
}

setLogger(logger: Logger): void {
this.logger = logger;
}

async check(name: string): Promise<ExecutionInfo | undefined> {
const job = await this.findOne({ name });
return job?.executionInfo;
Expand All @@ -23,33 +29,33 @@ export class JobRepository extends Repository<JobEntity> {
await this.delete();
}

async define(job: Job, logger?: Logger): Promise<void> {
async define(job: Job): Promise<void> {
const { name, interval, concurrency, maxRunning } = job;
const jobDefinition = toJobDefinition(job);

logger?.debug('define job', { name, concurrency, interval, maxRunning });
this.logger?.debug('define job', { name, concurrency, interval, maxRunning });

const old = await this.keepLatest(name, logger);
const old = await this.keepLatest(name);

if (old) {
logger?.debug('update job in database', { name });
this.logger?.debug('update job in database', { name });
await this.updateJob(name, jobDefinition);
return;
}

logger?.debug('save job to database', { name });
this.logger?.debug('save job to database', { name });
await this.save(jobDefinition);
}

private async keepLatest(name: string, logger?: Logger): Promise<JobEntity | undefined> {
private async keepLatest(name: string): Promise<JobEntity | undefined> {
const jobs = await this.find({ name });

if (jobs.length === 1) return jobs[0];

const latest = findLatest(jobs);
if (!latest) return undefined;

logger?.debug('duplicate job, keep latest only', { name, count: jobs.length });
this.logger?.debug('duplicate job, keep latest only', { name, count: jobs.length });

jobs.splice(jobs.indexOf(latest), 1);
await this.delete({ _id: { $in: jobs.map(({ _id }) => _id) } });
Expand Down
3 changes: 3 additions & 0 deletions src/schedule/MongoSchedule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ export class MongoSchedule extends Schedule {
const jobRepository = connection.getJobRepository();

super(scheduleId, executionsRepository, jobRepository);

jobRepository.setLogger(this.logger);

this.disconnectFct = connection.disconnect.bind(connection);
this.schedulePing = new SchedulePing(scheduleId, executionsRepository, this.logger);
}
Expand Down
2 changes: 1 addition & 1 deletion src/schedule/Schedule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export class Schedule extends LogEmitter {
}
await this.stopJob(job.name);

await this.jobRepository.define(job, this.logger);
await this.jobRepository.define(job);

this.jobSchedulers[job.name] = JobScheduler.forJob(
this.scheduleId,
Expand Down

0 comments on commit fd29c3c

Please sign in to comment.