1 16 package org.outerj.daisy.repository.serverimpl; 17 18 import java.util.Date ; 19 20 import javax.management.MBeanServer ; 21 import javax.management.ObjectName ; 22 23 import org.apache.avalon.framework.activity.Initializable; 24 import org.apache.avalon.framework.service.ServiceException; 25 import org.apache.avalon.framework.service.ServiceManager; 26 import org.apache.avalon.framework.service.Serviceable; 27 import org.outerj.daisy.repository.RepositoryManager; 28 29 32 33 public class SystemInfoImpl implements SystemInfoImplMBean, Serviceable, Initializable { 34 private final long systemStartTime; 35 36 private String serverVersion; 37 38 private ServiceManager serviceManager; 39 40 public SystemInfoImpl() { 41 systemStartTime = System.currentTimeMillis(); 42 } 43 44 48 public void service(ServiceManager serviceManager) throws ServiceException { 49 this.serviceManager = serviceManager; 50 } 51 52 public void initialize() throws Exception { 53 RepositoryManager repositoryManager = (RepositoryManager) serviceManager.lookup("repository-manager"); 54 try { 55 serverVersion = repositoryManager.getRepositoryServerVersion(); 56 } finally { 57 serviceManager.release(repositoryManager); 58 } 59 60 MBeanServer mbeanServer = (MBeanServer ) serviceManager.lookup("mbeanserver"); 61 try { 62 mbeanServer.registerMBean(this, new ObjectName ("Daisy:name=SystemInfo")); 63 } finally { 64 serviceManager.release(mbeanServer); 65 } 66 } 67 68 public long getFreeVmMemory() { 69 return Runtime.getRuntime().freeMemory(); 70 } 71 72 public String getUpTime() { 73 long timeDifference = System.currentTimeMillis() - systemStartTime; 75 76 long days = timeDifference / (1000 * 3600 * 24); 77 timeDifference %= 1000 * 3600 * 24; 78 long hours = timeDifference / (1000 * 3600); 79 timeDifference %= 1000 * 3600; 80 long minutes = timeDifference / (1000 * 60); 81 timeDifference %= 1000 * 60; 82 long seconds = timeDifference / 1000; 83 84 return "The system is up for " + days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds."; 85 } 86 87 public void triggerGarbageCollector() { 88 System.gc(); 89 } 90 91 public Date getStartTime() { 92 return new Date (systemStartTime); 93 } 94 95 public long getMaxVmMemory() { 96 return Runtime.getRuntime().maxMemory(); 97 } 98 99 public long getTotalVmMemory() { 100 return Runtime.getRuntime().totalMemory(); 101 } 102 103 public int getAvailableProcessors() { 104 return Runtime.getRuntime().availableProcessors(); 105 } 106 107 public String getVmMemoryFormatted() { 108 return formatSizeInMb(getFreeVmMemory()) + " of " + formatSizeInMb(getTotalVmMemory()) + " (max " + formatSizeInMb(getMaxVmMemory()) + ")"; 109 } 110 111 private String formatSizeInMb(long sizeInKb) { 112 long sizeInMb = sizeInKb / (1024 * 1024); 113 return sizeInMb + "M"; 114 } 115 116 public String getFileEncoding() { 117 return System.getProperty("file.encoding"); 118 } 119 120 public String getServerVersion() { 121 return serverVersion; 122 } 123 } 124 | Popular Tags |