mirror of
https://github.com/immich-app/immich.git
synced 2025-12-23 01:11:36 +03:00
Transfer repository from Gitlab
This commit is contained in:
9
server/src/api-v1/server-info/dto/server-info.dto.ts
Normal file
9
server/src/api-v1/server-info/dto/server-info.dto.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export class ServerInfoDto {
|
||||
diskSize: String;
|
||||
diskUse: String;
|
||||
diskAvailable: String;
|
||||
diskSizeRaw: number;
|
||||
diskUseRaw: number;
|
||||
diskAvailableRaw: number;
|
||||
diskUsagePercentage: number;
|
||||
}
|
||||
19
server/src/api-v1/server-info/server-info.controller.ts
Normal file
19
server/src/api-v1/server-info/server-info.controller.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
|
||||
import { ServerInfoService } from './server-info.service';
|
||||
|
||||
@Controller('server-info')
|
||||
export class ServerInfoController {
|
||||
constructor(private readonly serverInfoService: ServerInfoService) {}
|
||||
|
||||
@Get()
|
||||
async getServerInfo() {
|
||||
return await this.serverInfoService.getServerInfo();
|
||||
}
|
||||
|
||||
@Get('/ping')
|
||||
async getServerPulse() {
|
||||
return {
|
||||
res: 'pong',
|
||||
};
|
||||
}
|
||||
}
|
||||
9
server/src/api-v1/server-info/server-info.module.ts
Normal file
9
server/src/api-v1/server-info/server-info.module.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ServerInfoService } from './server-info.service';
|
||||
import { ServerInfoController } from './server-info.controller';
|
||||
|
||||
@Module({
|
||||
controllers: [ServerInfoController],
|
||||
providers: [ServerInfoService]
|
||||
})
|
||||
export class ServerInfoModule {}
|
||||
54
server/src/api-v1/server-info/server-info.service.ts
Normal file
54
server/src/api-v1/server-info/server-info.service.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import systemInformation from 'systeminformation';
|
||||
import { ServerInfoDto } from './dto/server-info.dto';
|
||||
|
||||
@Injectable()
|
||||
export class ServerInfoService {
|
||||
constructor() {}
|
||||
async getServerInfo() {
|
||||
const res = await systemInformation.fsSize();
|
||||
|
||||
const size = res[0].size;
|
||||
const used = res[0].used;
|
||||
const available = res[0].available;
|
||||
const percentageUsage = res[0].use;
|
||||
|
||||
const serverInfo = new ServerInfoDto();
|
||||
serverInfo.diskAvailable = this.getHumanReadableString(available);
|
||||
serverInfo.diskSize = this.getHumanReadableString(size);
|
||||
serverInfo.diskUse = this.getHumanReadableString(used);
|
||||
serverInfo.diskAvailableRaw = available;
|
||||
serverInfo.diskSizeRaw = size;
|
||||
serverInfo.diskUseRaw = used;
|
||||
serverInfo.diskUsagePercentage = percentageUsage;
|
||||
|
||||
return serverInfo;
|
||||
}
|
||||
|
||||
private getHumanReadableString(sizeInByte: number) {
|
||||
const pepibyte = 1.126 * Math.pow(10, 15);
|
||||
const tebibyte = 1.1 * Math.pow(10, 12);
|
||||
const gibibyte = 1.074 * Math.pow(10, 9);
|
||||
const mebibyte = 1.049 * Math.pow(10, 6);
|
||||
const kibibyte = 1024;
|
||||
// Pebibyte
|
||||
if (sizeInByte >= pepibyte) {
|
||||
// Pe
|
||||
return `${(sizeInByte / pepibyte).toFixed(1)}PB`;
|
||||
} else if (tebibyte <= sizeInByte && sizeInByte < pepibyte) {
|
||||
// Te
|
||||
return `${(sizeInByte / tebibyte).toFixed(1)}TB`;
|
||||
} else if (gibibyte <= sizeInByte && sizeInByte < tebibyte) {
|
||||
// Gi
|
||||
return `${(sizeInByte / gibibyte).toFixed(1)}GB`;
|
||||
} else if (mebibyte <= sizeInByte && sizeInByte < gibibyte) {
|
||||
// Mega
|
||||
return `${(sizeInByte / mebibyte).toFixed(1)}MB`;
|
||||
} else if (kibibyte <= sizeInByte && sizeInByte < mebibyte) {
|
||||
// Kibi
|
||||
return `${(sizeInByte / kibibyte).toFixed(1)}KB`;
|
||||
} else {
|
||||
return `${sizeInByte}B`;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user