1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-01-06 03:46:47 +01:00

feat(server): resume queues (#2104)

* feat(server): resume queues

* chore: regenerate open-api
This commit is contained in:
Jason Rasmussen 2023-03-28 14:25:22 -04:00 committed by GitHub
parent 8563bd463c
commit 9adbbd42be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 18 additions and 0 deletions

Binary file not shown.

View file

@ -4141,6 +4141,7 @@
"enum": [ "enum": [
"start", "start",
"pause", "pause",
"resume",
"empty" "empty"
] ]
}, },

View file

@ -12,6 +12,7 @@ export enum QueueName {
export enum JobCommand { export enum JobCommand {
START = 'start', START = 'start',
PAUSE = 'pause', PAUSE = 'pause',
RESUME = 'resume',
EMPTY = 'empty', EMPTY = 'empty',
} }

View file

@ -69,6 +69,7 @@ export const IJobRepository = 'IJobRepository';
export interface IJobRepository { export interface IJobRepository {
queue(item: JobItem): Promise<void>; queue(item: JobItem): Promise<void>;
pause(name: QueueName): Promise<void>; pause(name: QueueName): Promise<void>;
resume(name: QueueName): Promise<void>;
empty(name: QueueName): Promise<void>; empty(name: QueueName): Promise<void>;
isActive(name: QueueName): Promise<boolean>; isActive(name: QueueName): Promise<boolean>;
getJobCounts(name: QueueName): Promise<JobCounts>; getJobCounts(name: QueueName): Promise<JobCounts>;

View file

@ -93,6 +93,12 @@ describe(JobService.name, () => {
expect(jobMock.pause).toHaveBeenCalledWith(QueueName.METADATA_EXTRACTION); expect(jobMock.pause).toHaveBeenCalledWith(QueueName.METADATA_EXTRACTION);
}); });
it('should handle a resume command', async () => {
await sut.handleCommand(QueueName.METADATA_EXTRACTION, { command: JobCommand.RESUME, force: false });
expect(jobMock.resume).toHaveBeenCalledWith(QueueName.METADATA_EXTRACTION);
});
it('should handle an empty command', async () => { it('should handle an empty command', async () => {
await sut.handleCommand(QueueName.METADATA_EXTRACTION, { command: JobCommand.EMPTY, force: false }); await sut.handleCommand(QueueName.METADATA_EXTRACTION, { command: JobCommand.EMPTY, force: false });

View file

@ -21,6 +21,9 @@ export class JobService {
case JobCommand.PAUSE: case JobCommand.PAUSE:
return this.jobRepository.pause(queueName); return this.jobRepository.pause(queueName);
case JobCommand.RESUME:
return this.jobRepository.resume(queueName);
case JobCommand.EMPTY: case JobCommand.EMPTY:
return this.jobRepository.empty(queueName); return this.jobRepository.empty(queueName);
} }

View file

@ -4,6 +4,7 @@ export const newJobRepositoryMock = (): jest.Mocked<IJobRepository> => {
return { return {
empty: jest.fn(), empty: jest.fn(),
pause: jest.fn(), pause: jest.fn(),
resume: jest.fn(),
queue: jest.fn().mockImplementation(() => Promise.resolve()), queue: jest.fn().mockImplementation(() => Promise.resolve()),
isActive: jest.fn(), isActive: jest.fn(),
getJobCounts: jest.fn(), getJobCounts: jest.fn(),

View file

@ -45,6 +45,10 @@ export class JobRepository implements IJobRepository {
return this.queueMap[name].pause(); return this.queueMap[name].pause();
} }
resume(name: QueueName) {
return this.queueMap[name].resume();
}
empty(name: QueueName) { empty(name: QueueName) {
return this.queueMap[name].empty(); return this.queueMap[name].empty();
} }

View file

@ -1222,6 +1222,7 @@ export interface GetAssetCountByTimeBucketDto {
export const JobCommand = { export const JobCommand = {
Start: 'start', Start: 'start',
Pause: 'pause', Pause: 'pause',
Resume: 'resume',
Empty: 'empty' Empty: 'empty'
} as const; } as const;