package com.airhacks.ping.control; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import java.lang.management.OperatingSystemMXBean; import java.time.ZonedDateTime; import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.json.Json; import javax.json.JsonObject; /** * * @author airhacks.com */ @Startup @Singleton public class ServerWatch { private ZonedDateTime startTime; private MemoryUsage heapUsageAtStartTime; private MemoryMXBean memoryMxBean; @PostConstruct public void initialize() { this.initializeStartTime(); this.memoryMxBean = ManagementFactory.getMemoryMXBean(); this.heapUsageAtStartTime = this.memoryMxBean.getHeapMemoryUsage(); } void initializeStartTime() { this.startTime = ZonedDateTime.now(); } public ZonedDateTime getDateTime() { return this.startTime; } public double availableMemoryInMB() { MemoryUsage current = this.memoryMxBean.getHeapMemoryUsage(); long available = (current.getCommitted() - current.getUsed()); return asMb(available); } public double usedMemoryInMb() { MemoryUsage current = this.memoryMxBean.getHeapMemoryUsage(); return asMb(current.getUsed()); } public String usedMemoryInMbAtStartTime() { return this.heapUsageAtStartTime.toString(); } public JsonObject osInfo() { OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); return Json.createObjectBuilder(). add("System Load Average", osBean.getSystemLoadAverage()). add("Available CPUs", osBean.getAvailableProcessors()). add("Architecture", osBean.getArch()). add("OS Name", osBean.getName()). add("Version", osBean.getVersion()).build(); } double asMb(long bytes) { return bytes / 1024 / 1024; } }