/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.livetrace.systeminfo;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.ThreadMXBean;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.enonic.cms.framework.cache.CacheFacade;
import com.enonic.cms.framework.cache.CacheManager;
import com.enonic.cms.core.time.TimeService;
@Component
public class SystemInfoFactory
{
@Autowired
private TimeService timeService;
private ThreadMXBean threadMXBean;
private MemoryMXBean memoryMXBean;
private static final PeriodFormatter UP_TIME_PERIOD_FORMATTER =
new PeriodFormatterBuilder().minimumPrintedDigits( 2 ).appendDays().appendSuffix( "d" ).appendSeparatorIfFieldsAfter(
" " ).appendHours().appendSuffix( "h" ).appendSeparatorIfFieldsAfter( " " ).appendMinutes().appendSuffix(
"m" ).appendSeparatorIfFieldsAfter( " " ).appendSeconds().appendSuffix( "s" ).toFormatter();
public SystemInfoFactory()
{
this.threadMXBean = ManagementFactory.getThreadMXBean();
this.memoryMXBean = ManagementFactory.getMemoryMXBean();
}
public SystemInfo createSystemInfo( final int numberOfPortalRequestsInProgress, final CacheManager cacheManager )
{
SystemInfo systemInfo = new SystemInfo();
systemInfo.setSystemTime( timeService.getNowAsDateTime() );
systemInfo.setSystemUpTime( UP_TIME_PERIOD_FORMATTER.print( timeService.upTime() ) );
systemInfo.setPortalRequestInProgress( numberOfPortalRequestsInProgress );
systemInfo.setPageCacheStatistic( createCacheStatistic( cacheManager.getPageCache() ) );
systemInfo.setEntityCacheStatistic( createCacheStatistic( cacheManager.getEntityCache() ) );
systemInfo.setXsltCacheStatistic( createCacheStatistic( cacheManager.getXsltCache() ) );
systemInfo.setJavaHeapMemoryStatistic( createJavaMemoryStatistic( memoryMXBean.getHeapMemoryUsage() ) );
systemInfo.setJavaNonHeapMemoryStatistic( createJavaMemoryStatistic( memoryMXBean.getNonHeapMemoryUsage() ) );
systemInfo.setJavaThreadStatistic( createJavaThreadStatistic() );
return systemInfo;
}
private JavaThreadStatistic createJavaThreadStatistic()
{
JavaThreadStatistic javaThreadStatistic = new JavaThreadStatistic();
javaThreadStatistic.setCount( threadMXBean.getThreadCount() );
javaThreadStatistic.setPeakCount( threadMXBean.getPeakThreadCount() );
return javaThreadStatistic;
}
private JavaMemoryStatistic createJavaMemoryStatistic( MemoryUsage memoryUsage )
{
JavaMemoryStatistic javaMemoryStatistic = new JavaMemoryStatistic();
javaMemoryStatistic.setInit( memoryUsage.getInit() );
javaMemoryStatistic.setUsed( memoryUsage.getUsed() );
javaMemoryStatistic.setCommitted( memoryUsage.getCommitted() );
javaMemoryStatistic.setMax( memoryUsage.getMax() );
return javaMemoryStatistic;
}
private CacheStatistic createCacheStatistic( final CacheFacade cache )
{
CacheStatistic cacheStatistic = new CacheStatistic();
cacheStatistic.setCapacity( cache.getMemoryCapacity() );
cacheStatistic.setCount( cache.getCount() );
cacheStatistic.setHitCount( cache.getHitCount() );
cacheStatistic.setMissCount( cache.getMissCount() );
cacheStatistic.setRemoveAllCount( cache.getRemoveAllCount() );
cacheStatistic.setMemoryCapacityUsage( cache.getMemoryCapacityUsage() );
cacheStatistic.setEffectiveness( cache.getEffectiveness() );
return cacheStatistic;
}
}