mirror of
https://github.com/immich-app/immich.git
synced 2025-02-18 01:24:26 -05:00
fix(server): add paused property to JobCountsDto (#2112)
This commit is contained in:
parent
76a07a3ebc
commit
eda9e580c9
11 changed files with 45 additions and 65 deletions
1
mobile/openapi/doc/JobCountsDto.md
generated
1
mobile/openapi/doc/JobCountsDto.md
generated
|
@ -13,6 +13,7 @@ Name | Type | Description | Notes
|
|||
**failed** | **int** | |
|
||||
**delayed** | **int** | |
|
||||
**waiting** | **int** | |
|
||||
**paused** | **int** | |
|
||||
|
||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||
|
||||
|
|
14
mobile/openapi/lib/model/job_counts_dto.dart
generated
14
mobile/openapi/lib/model/job_counts_dto.dart
generated
|
@ -18,6 +18,7 @@ class JobCountsDto {
|
|||
required this.failed,
|
||||
required this.delayed,
|
||||
required this.waiting,
|
||||
required this.paused,
|
||||
});
|
||||
|
||||
int active;
|
||||
|
@ -30,13 +31,16 @@ class JobCountsDto {
|
|||
|
||||
int waiting;
|
||||
|
||||
int paused;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) => identical(this, other) || other is JobCountsDto &&
|
||||
other.active == active &&
|
||||
other.completed == completed &&
|
||||
other.failed == failed &&
|
||||
other.delayed == delayed &&
|
||||
other.waiting == waiting;
|
||||
other.waiting == waiting &&
|
||||
other.paused == paused;
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
|
@ -45,10 +49,11 @@ class JobCountsDto {
|
|||
(completed.hashCode) +
|
||||
(failed.hashCode) +
|
||||
(delayed.hashCode) +
|
||||
(waiting.hashCode);
|
||||
(waiting.hashCode) +
|
||||
(paused.hashCode);
|
||||
|
||||
@override
|
||||
String toString() => 'JobCountsDto[active=$active, completed=$completed, failed=$failed, delayed=$delayed, waiting=$waiting]';
|
||||
String toString() => 'JobCountsDto[active=$active, completed=$completed, failed=$failed, delayed=$delayed, waiting=$waiting, paused=$paused]';
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final json = <String, dynamic>{};
|
||||
|
@ -57,6 +62,7 @@ class JobCountsDto {
|
|||
json[r'failed'] = this.failed;
|
||||
json[r'delayed'] = this.delayed;
|
||||
json[r'waiting'] = this.waiting;
|
||||
json[r'paused'] = this.paused;
|
||||
return json;
|
||||
}
|
||||
|
||||
|
@ -84,6 +90,7 @@ class JobCountsDto {
|
|||
failed: mapValueOfType<int>(json, r'failed')!,
|
||||
delayed: mapValueOfType<int>(json, r'delayed')!,
|
||||
waiting: mapValueOfType<int>(json, r'waiting')!,
|
||||
paused: mapValueOfType<int>(json, r'paused')!,
|
||||
);
|
||||
}
|
||||
return null;
|
||||
|
@ -138,6 +145,7 @@ class JobCountsDto {
|
|||
'failed',
|
||||
'delayed',
|
||||
'waiting',
|
||||
'paused',
|
||||
};
|
||||
}
|
||||
|
||||
|
|
5
mobile/openapi/test/job_counts_dto_test.dart
generated
5
mobile/openapi/test/job_counts_dto_test.dart
generated
|
@ -41,6 +41,11 @@ void main() {
|
|||
// TODO
|
||||
});
|
||||
|
||||
// int paused
|
||||
test('to test the property `paused`', () async {
|
||||
// TODO
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
|
|
@ -4074,6 +4074,9 @@
|
|||
},
|
||||
"waiting": {
|
||||
"type": "integer"
|
||||
},
|
||||
"paused": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
@ -4081,7 +4084,8 @@
|
|||
"completed",
|
||||
"failed",
|
||||
"delayed",
|
||||
"waiting"
|
||||
"waiting",
|
||||
"paused"
|
||||
]
|
||||
},
|
||||
"AllJobStatusResponseDto": {
|
||||
|
|
|
@ -15,6 +15,7 @@ export interface JobCounts {
|
|||
failed: number;
|
||||
delayed: number;
|
||||
waiting: number;
|
||||
paused: number;
|
||||
}
|
||||
|
||||
export type JobItem =
|
||||
|
|
|
@ -23,6 +23,7 @@ describe(JobService.name, () => {
|
|||
failed: 1,
|
||||
delayed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
});
|
||||
|
||||
await expect(sut.getAllJobsStatus()).resolves.toEqual({
|
||||
|
@ -32,6 +33,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'clip-encoding-queue': {
|
||||
active: 1,
|
||||
|
@ -39,6 +41,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'metadata-extraction-queue': {
|
||||
active: 1,
|
||||
|
@ -46,6 +49,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'object-tagging-queue': {
|
||||
active: 1,
|
||||
|
@ -53,6 +57,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'search-queue': {
|
||||
active: 1,
|
||||
|
@ -60,6 +65,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'storage-template-migration-queue': {
|
||||
active: 1,
|
||||
|
@ -67,6 +73,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'thumbnail-generation-queue': {
|
||||
active: 1,
|
||||
|
@ -74,6 +81,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
'video-conversion-queue': {
|
||||
active: 1,
|
||||
|
@ -81,6 +89,7 @@ describe(JobService.name, () => {
|
|||
delayed: 1,
|
||||
failed: 1,
|
||||
waiting: 1,
|
||||
paused: 1,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
|
@ -12,6 +12,8 @@ export class JobCountsDto {
|
|||
delayed!: number;
|
||||
@ApiProperty({ type: 'integer' })
|
||||
waiting!: number;
|
||||
@ApiProperty({ type: 'integer' })
|
||||
paused!: number;
|
||||
}
|
||||
|
||||
export class AllJobStatusResponseDto implements Record<QueueName, JobCountsDto> {
|
||||
|
|
|
@ -10,7 +10,7 @@ import {
|
|||
} from '@app/domain';
|
||||
import { InjectQueue } from '@nestjs/bull';
|
||||
import { Logger } from '@nestjs/common';
|
||||
import { Queue } from 'bull';
|
||||
import { Queue, type JobCounts as BullJobCounts } from 'bull';
|
||||
|
||||
export class JobRepository implements IJobRepository {
|
||||
private logger = new Logger(JobRepository.name);
|
||||
|
@ -54,7 +54,9 @@ export class JobRepository implements IJobRepository {
|
|||
}
|
||||
|
||||
getJobCounts(name: QueueName): Promise<JobCounts> {
|
||||
return this.queueMap[name].getJobCounts();
|
||||
// Typecast needed because the `paused` key is missing from Bull's
|
||||
// type definition. Can be removed once fixed upstream.
|
||||
return this.queueMap[name].getJobCounts() as Promise<BullJobCounts & { paused: number }>;
|
||||
}
|
||||
|
||||
async queue(item: JobItem): Promise<void> {
|
||||
|
|
59
server/package-lock.json
generated
59
server/package-lock.json
generated
|
@ -6,7 +6,7 @@
|
|||
"packages": {
|
||||
"": {
|
||||
"name": "immich",
|
||||
"version": "1.51.0",
|
||||
"version": "1.52.0",
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.20.13",
|
||||
|
@ -60,7 +60,6 @@
|
|||
"@openapitools/openapi-generator-cli": "2.5.1",
|
||||
"@types/archiver": "^5.3.1",
|
||||
"@types/bcrypt": "^5.0.0",
|
||||
"@types/bull": "^3.15.9",
|
||||
"@types/cookie-parser": "^1.4.3",
|
||||
"@types/cron": "^2.0.0",
|
||||
"@types/express": "^4.17.13",
|
||||
|
@ -2511,16 +2510,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/bull": {
|
||||
"version": "3.15.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/bull/-/bull-3.15.9.tgz",
|
||||
"integrity": "sha512-MPUcyPPQauAmynoO3ezHAmCOhbB0pWmYyijr/5ctaCqhbKWsjW0YCod38ZcLzUBprosfZ9dPqfYIcfdKjk7RNQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/ioredis": "*",
|
||||
"@types/redis": "^2.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/component-emitter": {
|
||||
"version": "1.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
|
||||
|
@ -2671,15 +2660,6 @@
|
|||
"@types/through": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/ioredis": {
|
||||
"version": "4.28.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.8.tgz",
|
||||
"integrity": "sha512-mULOyO2smtvkE1zmzRRA4P0+1UjEqusi014kXOL1q3CY0RgqkR5/wKvv+vAJbPw2Q66wPyylKeevUy+m/FaRMg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/istanbul-lib-coverage": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
|
||||
|
@ -2801,15 +2781,6 @@
|
|||
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/redis": {
|
||||
"version": "2.8.32",
|
||||
"resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.32.tgz",
|
||||
"integrity": "sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/semver": {
|
||||
"version": "7.3.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
|
||||
|
@ -13471,16 +13442,6 @@
|
|||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/bull": {
|
||||
"version": "3.15.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/bull/-/bull-3.15.9.tgz",
|
||||
"integrity": "sha512-MPUcyPPQauAmynoO3ezHAmCOhbB0pWmYyijr/5ctaCqhbKWsjW0YCod38ZcLzUBprosfZ9dPqfYIcfdKjk7RNQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/ioredis": "*",
|
||||
"@types/redis": "^2.8.0"
|
||||
}
|
||||
},
|
||||
"@types/component-emitter": {
|
||||
"version": "1.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
|
||||
|
@ -13631,15 +13592,6 @@
|
|||
"@types/through": "*"
|
||||
}
|
||||
},
|
||||
"@types/ioredis": {
|
||||
"version": "4.28.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.8.tgz",
|
||||
"integrity": "sha512-mULOyO2smtvkE1zmzRRA4P0+1UjEqusi014kXOL1q3CY0RgqkR5/wKvv+vAJbPw2Q66wPyylKeevUy+m/FaRMg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/istanbul-lib-coverage": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
|
||||
|
@ -13761,15 +13713,6 @@
|
|||
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/redis": {
|
||||
"version": "2.8.32",
|
||||
"resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.32.tgz",
|
||||
"integrity": "sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/semver": {
|
||||
"version": "7.3.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
|
||||
|
|
|
@ -88,7 +88,6 @@
|
|||
"@openapitools/openapi-generator-cli": "2.5.1",
|
||||
"@types/archiver": "^5.3.1",
|
||||
"@types/bcrypt": "^5.0.0",
|
||||
"@types/bull": "^3.15.9",
|
||||
"@types/cookie-parser": "^1.4.3",
|
||||
"@types/cron": "^2.0.0",
|
||||
"@types/express": "^4.17.13",
|
||||
|
|
6
web/src/api/open-api/api.ts
generated
6
web/src/api/open-api/api.ts
generated
|
@ -1284,6 +1284,12 @@ export interface JobCountsDto {
|
|||
* @memberof JobCountsDto
|
||||
*/
|
||||
'waiting': number;
|
||||
/**
|
||||
*
|
||||
* @type {number}
|
||||
* @memberof JobCountsDto
|
||||
*/
|
||||
'paused': number;
|
||||
}
|
||||
/**
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue