bring back re support for Args and Env

This commit is contained in:
Doug MacEachern 2006-06-13 21:49:45 +00:00
parent 541fe6b395
commit bdbcbf6e51
3 changed files with 58 additions and 6 deletions

View File

@ -28,7 +28,7 @@ alias tcfind ptql State.Name.eq=java,Args.*.eq=org.apache.catalina.startup.Boots
#($1 is the return value of the first query in the string) #($1 is the return value of the first query in the string)
#'Pne' => 'P' flags means parent of matched process #'Pne' => 'P' flags means parent of matched process
#to filter out httpd child processes #to filter out httpd child processes
alias apfind ptql State.Name.re=^(https?d.*|[Aa]pache2?)$,State.Name.Pne=$1 alias apfind ptql State.Name.re=https?d.*|[Aa]pache2?$,State.Name.Pne=$1
#find ant processes (ant hangs on me sometimes) #find ant processes (ant hangs on me sometimes)
#(* matches any value in the array) #(* matches any value in the array)

View File

@ -16,7 +16,7 @@ public class ProcessQueryHelper {
stringMatchers.put("ne", new StringNeMatcher()); stringMatchers.put("ne", new StringNeMatcher());
stringMatchers.put("sw", new StringSwMatcher()); stringMatchers.put("sw", new StringSwMatcher());
stringMatchers.put("ew", new StringEwMatcher()); stringMatchers.put("ew", new StringEwMatcher());
//stringMatchers.put("re", new StringReMatcher()); stringMatchers.put("re", new StringReMatcher());
stringMatchers.put("ct", new StringCtMatcher()); stringMatchers.put("ct", new StringCtMatcher());
} }
@ -104,14 +104,12 @@ public class ProcessQueryHelper {
} }
} }
//XXX requires jdk 1.4+ to compile
/*
static class StringReMatcher implements StringMatcher { static class StringReMatcher implements StringMatcher {
public boolean match(String left, String right) { public boolean match(String left, String right) {
return left.matches(right); return StringPattern.matches(left, right);
} }
} }
*/
public static boolean argsMatch(SigarProxy proxy, long pid, public static boolean argsMatch(SigarProxy proxy, long pid,
String value, String op) String value, String op)
throws SigarException, SigarNotImplementedException { throws SigarException, SigarNotImplementedException {

View File

@ -0,0 +1,54 @@
package net.hyperic.sigar.ptql;
import java.lang.reflect.Method;
import java.util.Map;
import net.hyperic.sigar.util.ReferenceMap;
public class StringPattern {
static Class patternClass;
static Method compile, matcher, find;
private static Map patterns = null;
//XXX avoiding 1.4 requirement
private static void init() throws Exception {
patterns = ReferenceMap.synchronizedMap();
patternClass = Class.forName("java.util.regex.Pattern");
Class matcherClass = Class.forName("java.util.regex.Matcher");
Class[] arg = { String.class };
compile = patternClass.getDeclaredMethod("compile", arg);
arg = new Class[] { Class.forName("java.lang.CharSequence") };
matcher = patternClass.getDeclaredMethod("matcher", arg);
find = matcherClass.getDeclaredMethod("find", new Class[0]);
}
/**
* Wrapper around Pattern.compile(regex).matcher(source).find()
*/
public static boolean matches(String source, String regex) {
try {
if (patterns == null) {
init();
}
Object pattern = patterns.get(regex);
if (pattern == null) {
//pattern = Pattern.compile(regex)
pattern = compile.invoke(patternClass, new Object[] { regex });
patterns.put(regex, pattern);
}
//m = pattern.matcher(source)
Object m = matcher.invoke(pattern, new Object[] { source });
//result = m.find()
Boolean result = (Boolean)find.invoke(m, new Object[0]);
return result.booleanValue();
} catch (Exception e) {
System.err.println("Error matching '" +
regex + "' against '" +
source + "'");
e.printStackTrace();
return false;
}
}
}