Skip to content

Commit 9a9e2cd

Browse files
committed
wire recurrent task to processor/consumer
1 parent 5f0e6f0 commit 9a9e2cd

File tree

7 files changed

+108
-2
lines changed

7 files changed

+108
-2
lines changed

package-lock.json

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"@nestjs/core": "^10.0.0",
3535
"@nestjs/microservices": "^10.0.1",
3636
"@nestjs/platform-express": "^10.0.0",
37+
"@nestjs/schedule": "^3.0.1",
3738
"@nestjs/swagger": "^7.0.1",
3839
"@nestjs/terminus": "^10.0.1",
3940
"bull": "^4.10.4",
@@ -49,6 +50,7 @@
4950
"@nestjs/cli": "^10.0.0",
5051
"@nestjs/schematics": "^10.0.0",
5152
"@nestjs/testing": "^10.0.0",
53+
"@types/cron": "^2.0.1",
5254
"@types/express": "^4.17.13",
5355
"@types/jest": "29.5.2",
5456
"@types/node": "18.16.18",

sonar-project.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
sonar.sources=./src
2-
sonar.tests=./test
32
sonar.javascript.lcov.reportPaths=./coverage/lcov.info
43
sonar.projectKey=bryopsida_patchwork
54
sonar.organization=bryopsida

src/analyzer/analyzer.module.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
import { Module } from '@nestjs/common'
22
import { ImageService } from './image.service'
33
import { RegistryService } from './registry.service'
4+
import { BullModule } from '@nestjs/bull'
5+
import { ImageListWorker } from './image-list.consumer'
6+
import { TaskRegisterService } from './task-register.service'
47

58
@Module({
6-
providers: [ImageService, RegistryService],
9+
imports: [
10+
BullModule.registerQueue({
11+
name: 'analyzer.fetch.imagelist',
12+
}),
13+
BullModule.registerQueue({
14+
name: 'analyzer.check.updates',
15+
}),
16+
],
17+
providers: [
18+
ImageService,
19+
RegistryService,
20+
ImageListWorker,
21+
TaskRegisterService,
22+
],
723
})
824
export class AnalyzerModule {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Processor, Process } from '@nestjs/bull'
2+
import { Logger } from '@nestjs/common'
3+
import { Job } from 'bull'
4+
5+
@Processor('analyzer.fetch.imagelist')
6+
export class ImageListWorker {
7+
private readonly logger = new Logger(ImageListWorker.name)
8+
9+
@Process()
10+
async fetchImageList(job: Job<unknown>) {
11+
this.logger.log('Fetching list of images')
12+
return {}
13+
}
14+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { InjectQueue } from '@nestjs/bull'
2+
import { Injectable, Logger } from '@nestjs/common'
3+
import { Timeout } from '@nestjs/schedule'
4+
import { Queue } from 'bull'
5+
6+
@Injectable()
7+
export class TaskRegisterService {
8+
private readonly logger = new Logger(TaskRegisterService.name)
9+
private readonly fetchImageListQueue: Queue
10+
11+
constructor(@InjectQueue('analyzer.fetch.imagelist') fetchImageList: Queue) {
12+
this.fetchImageListQueue = fetchImageList
13+
}
14+
15+
@Timeout(5000)
16+
async handleTimeout(): Promise<void> {
17+
this.logger.log('Ensuring fetch image list job is registered in queue')
18+
await this.fetchImageListQueue.add(
19+
{},
20+
{
21+
repeat: {
22+
every: 15000,
23+
},
24+
attempts: -1,
25+
backoff: {
26+
type: 'exponential',
27+
delay: 5000,
28+
},
29+
jobId: 'fetch-image-list',
30+
}
31+
)
32+
}
33+
}

src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import { AnalyzerModule } from './analyzer/analyzer.module'
88
import { PatcherModule } from './patcher/patcher.module'
99
import { BullModule } from '@nestjs/bull'
1010
import { ConnOptionsService } from './common/conn-options.service'
11+
import { ScheduleModule } from '@nestjs/schedule'
1112

1213
const connOptionsService = new ConnOptionsService()
1314

1415
@Module({
1516
imports: [
1617
ConfigModule.forRoot(),
1718
LoggerModule.forRoot(),
19+
ScheduleModule.forRoot(),
1820
BullModule.forRoot({
1921
redis: connOptionsService.getRedisOptions().options,
2022
}),

0 commit comments

Comments
 (0)