bring back re support for Args and Env
This commit is contained in:
parent
541fe6b395
commit
bdbcbf6e51
|
@ -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)
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue