fix #2791 Updated byte display in log messages for detailed size representation with decimal precision
This commit is contained in:
parent
94452297d6
commit
52187946f7
2 changed files with 56 additions and 4 deletions
|
@ -15,14 +15,21 @@
|
|||
*/
|
||||
package org.codelibs.fess.util;
|
||||
|
||||
import static org.apache.commons.io.FileUtils.ONE_EB_BI;
|
||||
import static org.apache.commons.io.FileUtils.ONE_GB_BI;
|
||||
import static org.apache.commons.io.FileUtils.ONE_KB_BI;
|
||||
import static org.apache.commons.io.FileUtils.ONE_MB_BI;
|
||||
import static org.apache.commons.io.FileUtils.ONE_PB_BI;
|
||||
import static org.apache.commons.io.FileUtils.ONE_TB_BI;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class MemoryUtil {
|
||||
private MemoryUtil() {
|
||||
|
@ -39,7 +46,29 @@ public final class MemoryUtil {
|
|||
}
|
||||
|
||||
public static String byteCountToDisplaySize(final long size) {
|
||||
return FileUtils.byteCountToDisplaySize(size).replace(" ", StringUtil.EMPTY);
|
||||
return byteCountToDisplaySize(BigInteger.valueOf(size));
|
||||
}
|
||||
|
||||
private static String byteCountToDisplaySize(final BigInteger size) {
|
||||
Objects.requireNonNull(size, "size");
|
||||
final String displaySize;
|
||||
|
||||
if (size.divide(ONE_EB_BI).compareTo(BigInteger.ZERO) > 0) {
|
||||
displaySize = new BigDecimal(size.divide(ONE_PB_BI)).divide(BigDecimal.valueOf(1000)) + "EB";
|
||||
} else if (size.divide(ONE_PB_BI).compareTo(BigInteger.ZERO) > 0) {
|
||||
displaySize = new BigDecimal(size.divide(ONE_TB_BI)).divide(BigDecimal.valueOf(1000)) + "PB";
|
||||
} else if (size.divide(ONE_TB_BI).compareTo(BigInteger.ZERO) > 0) {
|
||||
displaySize = new BigDecimal(size.divide(ONE_GB_BI)).divide(BigDecimal.valueOf(1000)) + "TB";
|
||||
} else if (size.divide(ONE_GB_BI).compareTo(BigInteger.ZERO) > 0) {
|
||||
displaySize = new BigDecimal(size.divide(ONE_MB_BI)).divide(BigDecimal.valueOf(1000)) + "GB";
|
||||
} else if (size.divide(ONE_MB_BI).compareTo(BigInteger.ZERO) > 0) {
|
||||
displaySize = new BigDecimal(size.divide(ONE_KB_BI)).divide(BigDecimal.valueOf(1000)) + "MB";
|
||||
} else if (size.divide(ONE_KB_BI).compareTo(BigInteger.ZERO) > 0) {
|
||||
displaySize = new BigDecimal(size).divide(BigDecimal.valueOf(1000)) + "KB";
|
||||
} else {
|
||||
displaySize = size + "bytes";
|
||||
}
|
||||
return displaySize;
|
||||
}
|
||||
|
||||
public static long getUsedMemory() {
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.time.LocalDateTime;
|
|||
import java.time.ZonedDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.codelibs.core.collection.Maps;
|
||||
import org.codelibs.fess.unit.UnitFessTestCase;
|
||||
import org.codelibs.sai.internal.ir.debug.ObjectSizeCalculator;
|
||||
|
@ -27,6 +28,28 @@ import com.google.common.collect.Lists;
|
|||
|
||||
public class MemoryUtilTest extends UnitFessTestCase {
|
||||
|
||||
public void test_byteCountToDisplaySize() {
|
||||
assertEquals("0bytes", MemoryUtil.byteCountToDisplaySize(0L));
|
||||
assertEquals("999bytes", MemoryUtil.byteCountToDisplaySize(999L));
|
||||
assertEquals("1000bytes", MemoryUtil.byteCountToDisplaySize(1000L));
|
||||
assertEquals("1.024KB", MemoryUtil.byteCountToDisplaySize(FileUtils.ONE_KB));
|
||||
assertEquals("999.999KB", MemoryUtil.byteCountToDisplaySize(999_999L));
|
||||
assertEquals("1000KB", MemoryUtil.byteCountToDisplaySize(1000_000L));
|
||||
assertEquals("1.024MB", MemoryUtil.byteCountToDisplaySize(FileUtils.ONE_MB));
|
||||
assertEquals("976.562MB", MemoryUtil.byteCountToDisplaySize(999_999_999L));
|
||||
assertEquals("976.562MB", MemoryUtil.byteCountToDisplaySize(1000_000_000L));
|
||||
assertEquals("1.024GB", MemoryUtil.byteCountToDisplaySize(FileUtils.ONE_GB));
|
||||
assertEquals("953.674GB", MemoryUtil.byteCountToDisplaySize(999_999_999_999L));
|
||||
assertEquals("953.674GB", MemoryUtil.byteCountToDisplaySize(1000_000_000_000L));
|
||||
assertEquals("1.024TB", MemoryUtil.byteCountToDisplaySize(FileUtils.ONE_TB));
|
||||
assertEquals("931.322TB", MemoryUtil.byteCountToDisplaySize(999_999_999_999_999L));
|
||||
assertEquals("931.322TB", MemoryUtil.byteCountToDisplaySize(1000_000_000_000_000L));
|
||||
assertEquals("1.024PB", MemoryUtil.byteCountToDisplaySize(FileUtils.ONE_PB));
|
||||
assertEquals("909.494PB", MemoryUtil.byteCountToDisplaySize(999_999_999_999_999_999L));
|
||||
assertEquals("909.494PB", MemoryUtil.byteCountToDisplaySize(1000_000_000_000_000_000L));
|
||||
assertEquals("1.024EB", MemoryUtil.byteCountToDisplaySize(FileUtils.ONE_EB));
|
||||
}
|
||||
|
||||
public void test_getUsedMemory() {
|
||||
assertTrue(MemoryUtil.getUsedMemory() >= 0);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue