1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-25 10:43:13 +02:00

feat: disk stats for library folder (#2560)

This commit is contained in:
Jason Rasmussen 2023-05-24 22:05:31 -04:00 committed by GitHub
parent 7c1dae918d
commit 83df14d379
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 11 deletions

View File

@ -34,7 +34,7 @@ describe(ServerInfoService.name, () => {
diskUseRaw: 300, diskUseRaw: 300,
}); });
expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('./upload'); expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('upload/library');
}); });
it('should return the disk space as KiB', async () => { it('should return the disk space as KiB', async () => {
@ -50,7 +50,7 @@ describe(ServerInfoService.name, () => {
diskUseRaw: 300000, diskUseRaw: 300000,
}); });
expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('./upload'); expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('upload/library');
}); });
it('should return the disk space as MiB', async () => { it('should return the disk space as MiB', async () => {
@ -66,7 +66,7 @@ describe(ServerInfoService.name, () => {
diskUseRaw: 300000000, diskUseRaw: 300000000,
}); });
expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('./upload'); expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('upload/library');
}); });
it('should return the disk space as GiB', async () => { it('should return the disk space as GiB', async () => {
@ -86,7 +86,7 @@ describe(ServerInfoService.name, () => {
diskUseRaw: 300000000000, diskUseRaw: 300000000000,
}); });
expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('./upload'); expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('upload/library');
}); });
it('should return the disk space as TiB', async () => { it('should return the disk space as TiB', async () => {
@ -106,7 +106,7 @@ describe(ServerInfoService.name, () => {
diskUseRaw: 300000000000000, diskUseRaw: 300000000000000,
}); });
expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('./upload'); expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('upload/library');
}); });
it('should return the disk space as PiB', async () => { it('should return the disk space as PiB', async () => {
@ -126,7 +126,7 @@ describe(ServerInfoService.name, () => {
diskUseRaw: 300000000000000000, diskUseRaw: 300000000000000000,
}); });
expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('./upload'); expect(storageMock.checkDiskUsage).toHaveBeenCalledWith('upload/library');
}); });
}); });

View File

@ -1,19 +1,22 @@
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import { APP_MEDIA_LOCATION, serverVersion } from '../domain.constant'; import { serverVersion } from '../domain.constant';
import { asHumanReadable } from '../domain.util'; import { asHumanReadable } from '../domain.util';
import { IStorageRepository } from '../storage'; import { IStorageRepository, StorageCore, StorageFolder } from '../storage';
import { IUserRepository, UserStatsQueryResponse } from '../user'; import { IUserRepository, UserStatsQueryResponse } from '../user';
import { ServerInfoResponseDto, ServerPingResponse, ServerStatsResponseDto, UsageByUserDto } from './response-dto'; import { ServerInfoResponseDto, ServerPingResponse, ServerStatsResponseDto, UsageByUserDto } from './response-dto';
@Injectable() @Injectable()
export class ServerInfoService { export class ServerInfoService {
private storageCore = new StorageCore();
constructor( constructor(
@Inject(IUserRepository) private userRepository: IUserRepository, @Inject(IUserRepository) private userRepository: IUserRepository,
@Inject(IStorageRepository) private storageRepository: IStorageRepository, @Inject(IStorageRepository) private storageRepository: IStorageRepository,
) {} ) {}
async getInfo(): Promise<ServerInfoResponseDto> { async getInfo(): Promise<ServerInfoResponseDto> {
const diskInfo = await this.storageRepository.checkDiskUsage(APP_MEDIA_LOCATION); const libraryBase = this.storageCore.getBaseFolder(StorageFolder.LIBRARY);
const diskInfo = await this.storageRepository.checkDiskUsage(libraryBase);
const usagePercentage = (((diskInfo.total - diskInfo.free) / diskInfo.total) * 100).toFixed(2); const usagePercentage = (((diskInfo.total - diskInfo.free) / diskInfo.total) * 100).toFixed(2);

View File

@ -14,10 +14,14 @@ export class StorageCore {
folder: StorageFolder.ENCODED_VIDEO | StorageFolder.UPLOAD | StorageFolder.PROFILE | StorageFolder.THUMBNAILS, folder: StorageFolder.ENCODED_VIDEO | StorageFolder.UPLOAD | StorageFolder.PROFILE | StorageFolder.THUMBNAILS,
userId: string, userId: string,
) { ) {
return join(APP_MEDIA_LOCATION, folder, userId); return join(this.getBaseFolder(folder), userId);
} }
getLibraryFolder(user: { storageLabel: string | null; id: string }) { getLibraryFolder(user: { storageLabel: string | null; id: string }) {
return join(APP_MEDIA_LOCATION, StorageFolder.LIBRARY, user.storageLabel || user.id); return join(this.getBaseFolder(StorageFolder.LIBRARY), user.storageLabel || user.id);
}
getBaseFolder(folder: StorageFolder) {
return join(APP_MEDIA_LOCATION, folder);
} }
} }