package org.yeshi.utils.statistic.http; import java.util.List; public class LocalhostAccessLogUtil { /** * 将单行日志文件解析为对象 * * @param content * @return */ public static HttpRequestInfo parseTomcatSingleLine(String content) { try { HttpRequestInfo info = new HttpRequestInfo(); int start = content.indexOf("\""); content = content.substring(start, content.length()); start = content.indexOf("\"", 1); String url = content.substring(1, start); info.setMethod(url.split(" ")[0]); // 链接 info.setUrl(url.split(" ")[1].split("\\?")[0]); // 时间 info.setProtocal(url.split(" ")[2]); String[] sts = content.substring(start + 1, content.length()).trim().split(" "); info.setStateCode(Integer.parseInt(sts[0])); info.setTime(sts[1].trim().equalsIgnoreCase("-") ? Integer.MAX_VALUE : Integer.parseInt(sts[1])); return info; } catch (Exception e) { } return null; } /** * 求请求时间的平均值 * * @param list * @return */ public static int getTimeAvg(List list) { int count = 0; long total = 0; for (HttpRequestInfo info : list) { // 去除最大数值与最小数值 if (info.getTime() > 0 && info.getTime() < Integer.MAX_VALUE) { total += info.getTime(); count++; } } if (count <= 0) return 0; return (int) (total / count); } /** * 获取方差 * * @param list * @return */ public static int getVariance(List list) { int avg = getTimeAvg(list); long total = 0; for (HttpRequestInfo info : list) { total += Math.pow(info.getTime() - avg, 2); } return (int) (total / list.size()); } }