package com.netease.LDNetDiagnoUtils; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LDPingParse { public static String getFormattingStr(String host, String log) { StringBuilder logRes = new StringBuilder(); if (log.contains("timeout")) { logRes.append("ping: cannot resolve " + host + ": Timeout"); } else if (log.contains("unknown")) { logRes.append("ping: cannot resolve " + host + ": Unknown host"); } else { makePingResponse(log, logRes); } return logRes.toString(); } public static void makePingResponse(String log, StringBuilder logRes) { String hostIp = getIP(log); List<String> bytesList = getSumBytes(log); List<String> ttlList = getTTL(log); List<String> timeList = getTime(log); List<String> icmpList = getIcmp_seq(log); int len = timeList.size(); for (int i = 0; i < len - 1; i++) { logRes.append(bytesList.get(i) + "bytes from " + hostIp + ": icmp_seq=#" + icmpList.get(i) + " ttl=" + ttlList.get(i) + " time=" + timeList.get(i) + "ms" + "\n"); } logRes.append(bytesList.get(len - 1) + "bytes from " + hostIp + ": icmp_seq=#" + icmpList.get(len - 1) + " ttl=" + ttlList.get(len - 1) + " time=" + timeList.get(len - 1) + "ms"); } private static List<String> getTime(String log) { List<String> timeList = new ArrayList<String>(); String regex = "(?<==)([\\.0-9\\s]+)(?=ms)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(log); while (m.find()) { timeList.add(m.group().toString().trim()); } return timeList; } private static List<String> getSumBytes(String log) { List<String> bytesList = new ArrayList<String>(); String regex = "(?<=\\D)([\\s0-9]+)(?=bytes)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(log); while (m.find()) { String string = m.group().toString().trim(); if (m.group().toString().trim().matches("\\d+")) { bytesList.add(string); } } return bytesList; } private static List<String> getTTL(String log) { List<String> ttlList = new ArrayList<String>(); String regex = "(?<=ttl=)([0-9]+)(?=\\s)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(log); while (m.find()) { String tmp = m.group().toString().trim(); ttlList.add(tmp); } return ttlList; } private static String getIP(String log) { String hostIp = null; String regex = "(?<=\\()([\\d]+\\.)+[\\d]+(?=\\))"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(log); while (m.find()) { hostIp = m.group().toString().trim(); } return hostIp; } private static List<String> getIcmp_seq(String log) { List<String> icmpList = new ArrayList<String>(); String regex = "(?<=icmp_seq=)([0-9]+)(?=\\s)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(log); while (m.find()) { String tmp = m.group().toString().trim(); icmpList.add(tmp); } return icmpList; } }