mirror of
https://github.com/immich-app/immich.git
synced 2025-12-21 09:15:44 +03:00
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
|
|
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`;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|