mirror of
https://github.com/Art051/immich.git
synced 2025-08-11 19:29:00 +00:00
chore(server): Move library watcher to microservices (#7533)
* move watcher init to micro * document watcher recovery * chore: fix lint * add try lock * use global library watch lock * fix: ensure lock stays on * fix: mocks * unit test for library watch lock * move statement to correct test * fix: correct return type of try lock * fix: tests * add library teardown * add chokidar error handler * make event strings an enum * wait for event refactor * refactor event type mocks * expect correct error * don't release lock in teardown * chore: lint * use enum * fix mock * fix lint * fix watcher await * remove await * simplify typing * remove async * Revert "remove async" This reverts commit 84ab5abac487532c79a7d770869b08fbba1294bf. * can now change watch settings at runtime * fix lint * only watch libraries if enabled --------- Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
committed by
GitHub
parent
3278dcbcbe
commit
4cb0f37918
@@ -1,4 +1,4 @@
|
||||
import { LibraryResponseDto, LibraryService, LoginResponseDto } from '@app/domain';
|
||||
import { LibraryResponseDto, LibraryService, LoginResponseDto, StorageEventType } from '@app/domain';
|
||||
import { AssetType, LibraryType } from '@app/infra/entities';
|
||||
import fs from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
@@ -33,7 +33,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await libraryService.unwatchAll();
|
||||
await libraryService.teardown();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
@@ -57,7 +57,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/file.jpg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, StorageEventType.ADD);
|
||||
|
||||
const afterAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(afterAssets.length).toEqual(1);
|
||||
@@ -84,10 +84,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/file5.jPg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, StorageEventType.ADD, 4);
|
||||
|
||||
const afterAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(afterAssets.length).toEqual(4);
|
||||
@@ -99,7 +96,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/file.jpg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, StorageEventType.ADD);
|
||||
|
||||
const originalAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(originalAssets.length).toEqual(1);
|
||||
@@ -109,7 +106,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/file.jpg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'change');
|
||||
await waitForEvent(libraryService, StorageEventType.CHANGE);
|
||||
|
||||
const afterAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(afterAssets).toEqual([
|
||||
@@ -161,9 +158,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/dir3/file4.jpg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, StorageEventType.ADD, 3);
|
||||
|
||||
const assets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(assets.length).toEqual(3);
|
||||
@@ -175,14 +170,14 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/dir1/file.jpg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, StorageEventType.ADD);
|
||||
|
||||
const addedAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(addedAssets.length).toEqual(1);
|
||||
|
||||
await fs.unlink(`${IMMICH_TEST_ASSET_TEMP_PATH}/dir1/file.jpg`);
|
||||
|
||||
await waitForEvent(libraryService, 'unlink');
|
||||
await waitForEvent(libraryService, StorageEventType.UNLINK);
|
||||
|
||||
const afterAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(afterAssets[0].isOffline).toEqual(true);
|
||||
@@ -220,7 +215,7 @@ describe(`Library watcher (e2e)`, () => {
|
||||
`${IMMICH_TEST_ASSET_TEMP_PATH}/dir4/file.jpg`,
|
||||
);
|
||||
|
||||
await waitForEvent(libraryService, 'add');
|
||||
await waitForEvent(libraryService, StorageEventType.ADD);
|
||||
|
||||
const afterAssets = await api.assetApi.getAllAssets(server, admin.accessToken);
|
||||
expect(afterAssets.length).toEqual(1);
|
||||
|
||||
@@ -368,7 +368,7 @@ describe(`${LibraryController.name} (e2e)`, () => {
|
||||
expect(body).toEqual(errorStub.unauthorized);
|
||||
});
|
||||
|
||||
it('should remvove offline files', async () => {
|
||||
it('should remove offline files', async () => {
|
||||
await fs.promises.cp(`${IMMICH_TEST_ASSET_PATH}/albums/nature`, `${IMMICH_TEST_ASSET_TEMP_PATH}/albums/nature`, {
|
||||
recursive: true,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user