package com.github.wangxuehui.rpc.snrpc.server; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.atomic.AtomicLong; import com.github.wangxuehui.rpc.snrpc.serializer.SnRpcRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author skyim E-mail:wxh64788665@gmail.com * 类说明 */ public class StatisticsService { private static final Logger LOGGER = LoggerFactory .getLogger(StatisticsService.class); private static final AtomicLong requestTimes = new AtomicLong(); private static final SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); static final boolean reportBeforeInvoke(SnRpcRequest request) { doReport(request); return true; } private static final void doReport(SnRpcRequest request) { requestTimes.getAndIncrement(); StringBuilder tip = new StringBuilder( "\nsnRpc request report -------- ").append( df.format(new Date())).append( " ------------------------------\n"); String className = request.getClassName(); String methodName = request.getMethodName(); String requestId = request.getRequestID(); Object[] param = request.getParameters(); tip.append("requestId : ").append(requestId); tip.append("className : ").append(className); tip.append("method : ").append(methodName); tip.append("param[0] : ").append(param[0]).append("\n"); tip.append("--------------------------------------------------------------------------------\n"); System.out.print(tip.toString()); } static final void reportPerformance() { new Thread(new Runnable() { public void run() { final long begin = System.currentTimeMillis(); while (true) { try { Thread.sleep(10000); } catch (InterruptedException e) { } long pass = System.currentTimeMillis() - begin; long totalMemory = Runtime.getRuntime().totalMemory(); long freeMemory = Runtime.getRuntime().freeMemory(); long usedMemory = totalMemory - freeMemory; java.text.NumberFormat format = new java.text.DecimalFormat( "###,###"); String memoryInfo = format.format(usedMemory) + "/" + format.format(totalMemory); LOGGER.warn("\r\nMemory:" + memoryInfo + ",Time:" + df.format(new Date()) + ",Time passed:" + pass + ",Total:" + requestTimes.get() + "(Average TPS:" + (requestTimes.get() * 1000 / pass) + ")"); } } }).start(); } }