package com.sf.monitor.zk; import com.google.common.collect.Maps; import org.apache.commons.io.IOUtils; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ZookeeperStatParser { public static Pattern LatencyRegx = Pattern.compile("Latency min/avg/max: \\d+/\\d+/\\d+"); public static Pattern ReceivedRegx = Pattern.compile("Received: \\d+"); public static Pattern SentRegx = Pattern.compile("Sent: \\d+"); public static Pattern ConnectionsRegx = Pattern.compile("Connections: \\d+"); public static Pattern OutstandingRegx = Pattern.compile("Outstanding: \\d+"); public static Pattern ZxidRegx = Pattern.compile("Zxid: \\w+"); public static Pattern ModeRegx = Pattern.compile("Mode: \\w+"); public static Pattern NodeCountRegx = Pattern.compile("Node count: \\d+"); public static Map<String, Integer> parseLatency(String statInfo) { Map<String, Integer> values = Maps.newHashMap(); values.put("min", -1); values.put("avg", -1); values.put("max", -1); String vs = parseValueStr(LatencyRegx, statInfo); if (vs == null) { return values; } String[] ss = vs.split("/"); if (ss.length != 3) { return values; } values.put("min", Integer.valueOf(ss[0])); values.put("avg", Integer.valueOf(ss[1])); values.put("max", Integer.valueOf(ss[2])); return values; } public static String parseStrWithDefault(Pattern p, String statInfo, String defaultVal) { String val = parseValueStr(p, statInfo); return val == null ? defaultVal : val; } private static String parseValueStr(Pattern p, String statInfo) { Matcher m = p.matcher(statInfo); if (!m.find()) { return null; } String s = m.group(); int i = s.indexOf(": "); if (i == -1) { return null; } return s.substring(i + 2, s.length()); } public static Integer parseIntWithDefault(Pattern p, String statInfo, Integer defaultVal) { Integer val = parseInt(p, statInfo); return val == null ? defaultVal : val; } private static Integer parseInt(Pattern p, String statInfo) { String vs = parseValueStr(p, statInfo); if (vs == null) { return null; } return Integer.parseInt(vs); } public static void main(String[] args) throws Exception { String s = IOUtils.toString(ClassLoader.getSystemResourceAsStream("zk_stat_msg")); System.out.println(parseLatency(s)); System.out.println(parseValueStr(ZxidRegx, s)); System.out.println(parseValueStr(ModeRegx, s)); System.out.println(parseInt(SentRegx, s)); System.out.println(parseInt(NodeCountRegx, s)); } }