forked from Cutlery/immich
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { ServerInfoDto } from './dto/server-info.dto';
|
|
import diskusage from 'diskusage';
|
|
import { APP_UPLOAD_LOCATION } from '../../constants/upload_location.constant';
|
|
|
|
@Injectable()
|
|
export class ServerInfoService {
|
|
async getServerInfo() {
|
|
const diskInfo = await diskusage.check(APP_UPLOAD_LOCATION);
|
|
|
|
const usagePercentage = (((diskInfo.total - diskInfo.free) / diskInfo.total) * 100).toFixed(2);
|
|
|
|
const serverInfo = new ServerInfoDto();
|
|
serverInfo.diskAvailable = ServerInfoService.getHumanReadableString(diskInfo.available);
|
|
serverInfo.diskSize = ServerInfoService.getHumanReadableString(diskInfo.total);
|
|
serverInfo.diskUse = ServerInfoService.getHumanReadableString(diskInfo.total - diskInfo.free);
|
|
serverInfo.diskAvailableRaw = diskInfo.available;
|
|
serverInfo.diskSizeRaw = diskInfo.total;
|
|
serverInfo.diskUseRaw = diskInfo.total - diskInfo.free;
|
|
serverInfo.diskUsagePercentage = parseFloat(usagePercentage);
|
|
|
|
return serverInfo;
|
|
}
|
|
|
|
private static 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`;
|
|
}
|
|
}
|
|
}
|