com.taobao.arthas.grpcweb.grpc.model.WatchRequestModel Maven / Gradle / Ivy
package com.taobao.arthas.grpcweb.grpc.model;
import io.arthas.api.ArthasServices.WatchRequest;
import com.taobao.arthas.core.GlobalOptions;
import com.taobao.arthas.core.advisor.AdviceListener;
import com.taobao.arthas.core.advisor.AdviceWeaver;
import com.taobao.arthas.core.util.SearchUtils;
import com.taobao.arthas.core.util.StringUtils;
import com.taobao.arthas.core.util.matcher.Matcher;
import com.taobao.arthas.grpcweb.grpc.observer.ArthasStreamObserver;
import com.taobao.arthas.grpcweb.grpc.service.advisor.WatchRpcAdviceListener;
public class WatchRequestModel extends EnhancerRequestModel {
private String classPattern;
private String methodPattern;
private String express;
private String conditionExpress;
private boolean isBefore = false;
private boolean isFinish = false;
private boolean isException = false;
private boolean isSuccess = false;
private Integer expand = 1;
private Integer sizeLimit = 10 * 1024 * 1024;
private boolean isRegEx = false;
private int numberOfLimit = 100;
private static final int MAX_EXPAND = 4;
public String toString() {
return "WatchRequestModel{" +
"classPattern='" + classPattern + '\'' +
", methodPattern='" + methodPattern + '\'' +
", express='" + express + '\'' +
", conditionExpress='" + conditionExpress + '\'' +
", isBefore=" + isBefore +
", isFinish=" + isFinish +
", isException=" + isException +
", isSuccess=" + isSuccess +
", expand=" + expand +
", sizeLimit=" + sizeLimit +
", isRegEx=" + isRegEx +
", numberOfLimit=" + numberOfLimit +
", excludeClassPattern='" + excludeClassPattern + '\'' +
", jobId=" + jobId +
", listenerId=" + listenerId +
", verbose=" + verbose +
", maxNumOfMatchedClass=" + maxNumOfMatchedClass +
'}';
}
public WatchRequestModel(WatchRequest watchRequest) {
parseRequestParams(watchRequest);
}
public Matcher getClassNameMatcher() {
if (classNameMatcher == null) {
classNameMatcher = SearchUtils.classNameMatcher(getClassPattern(), isRegEx());
}
return classNameMatcher;
}
public Matcher getMethodNameMatcher() {
if (methodNameMatcher == null) {
methodNameMatcher = SearchUtils.classNameMatcher(getMethodPattern(), isRegEx());
}
return methodNameMatcher;
}
@Override
protected AdviceListener getAdviceListener(ArthasStreamObserver arthasStreamObserver) {
WatchRequestModel watchRequestModel = (WatchRequestModel) arthasStreamObserver.getRequestModel();
if (watchRequestModel.getListenerId()!= 0) {
AdviceListener listener = AdviceWeaver.listener(watchRequestModel.getListenerId());
if (listener != null) {
return listener;
}
}
return new WatchRpcAdviceListener(arthasStreamObserver, GlobalOptions.verbose || watchRequestModel.isVerbose());
}
public Matcher getClassNameExcludeMatcher() {
if (classNameExcludeMatcher == null && getExcludeClassPattern() != null) {
classNameExcludeMatcher = SearchUtils.classNameMatcher(getExcludeClassPattern(), isRegEx());
}
return classNameExcludeMatcher;
}
public void parseRequestParams(WatchRequest watchRequest){
this.classPattern = watchRequest.getClassPattern();
this.methodPattern = watchRequest.getMethodPattern();
if(StringUtils.isEmpty(watchRequest.getExpress())){
this.express = "{params, target, returnObj}";
}else {
this.express = watchRequest.getExpress();
}
this.conditionExpress = watchRequest.getConditionExpress();
this.isBefore = watchRequest.getIsBefore();
this.isFinish = watchRequest.getIsFinish();
this.isException = watchRequest.getIsException();
this.isSuccess = watchRequest.getIsSuccess();
if (!watchRequest.getIsBefore() && !watchRequest.getIsFinish() && !watchRequest.getIsException() && !watchRequest.getIsSuccess()) {
this.isFinish = true;
}
if (watchRequest.getExpand() <= 0) {
this.expand = 1;
} else if (watchRequest.getExpand() > MAX_EXPAND){
this.expand = MAX_EXPAND;
} else {
this.expand = watchRequest.getExpand();
}
if (watchRequest.getSizeLimit() == 0) {
this.sizeLimit = 10 * 1024 * 1024;
} else {
this.sizeLimit = watchRequest.getSizeLimit();
}
this.isRegEx = watchRequest.getIsRegEx();
if (watchRequest.getNumberOfLimit() == 0) {
this.numberOfLimit = 100;
} else {
this.numberOfLimit = watchRequest.getNumberOfLimit();
}
if(watchRequest.getExcludeClassPattern().equals("")){
this.excludeClassPattern = null;
}else {
this.excludeClassPattern = watchRequest.getExcludeClassPattern();
}
this.listenerId = watchRequest.getListenerId();
this.verbose = watchRequest.getVerbose();
if(watchRequest.getMaxNumOfMatchedClass() == 0){
this.maxNumOfMatchedClass = 50;
}else {
this.maxNumOfMatchedClass = watchRequest.getMaxNumOfMatchedClass();
}
this.jobId = watchRequest.getJobId();
}
public String getClassPattern() {
return classPattern;
}
public void setClassPattern(String classPattern) {
this.classPattern = classPattern;
}
public String getMethodPattern() {
return methodPattern;
}
public void setMethodPattern(String methodPattern) {
this.methodPattern = methodPattern;
}
public String getExpress() {
return express;
}
public void setExpress(String express) {
this.express = express;
}
public String getConditionExpress() {
return conditionExpress;
}
public void setConditionExpress(String conditionExpress) {
this.conditionExpress = conditionExpress;
}
public boolean isBefore() {
return isBefore;
}
public void setBefore(boolean before) {
isBefore = before;
}
public boolean isFinish() {
return isFinish;
}
public void setFinish(boolean finish) {
isFinish = finish;
}
public boolean isException() {
return isException;
}
public void setException(boolean exception) {
isException = exception;
}
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean success) {
isSuccess = success;
}
public Integer getExpand() {
return expand;
}
public void setExpand(Integer expand) {
this.expand = expand;
}
public Integer getSizeLimit() {
return sizeLimit;
}
public void setSizeLimit(Integer sizeLimit) {
this.sizeLimit = sizeLimit;
}
public boolean isRegEx() {
return isRegEx;
}
public void setRegEx(boolean regEx) {
isRegEx = regEx;
}
public int getNumberOfLimit() {
return numberOfLimit;
}
public void setNumberOfLimit(int numberOfLimit) {
this.numberOfLimit = numberOfLimit;
}
public String getExcludeClassPattern() {
return excludeClassPattern;
}
public void setExcludeClassPattern(String excludeClassPattern) {
this.excludeClassPattern = excludeClassPattern;
}
public void setClassNameMatcher(Matcher classNameMatcher) {
this.classNameMatcher = classNameMatcher;
}
public void setClassNameExcludeMatcher(Matcher classNameExcludeMatcher) {
this.classNameExcludeMatcher = classNameExcludeMatcher;
}
public void setMethodNameMatcher(Matcher methodNameMatcher) {
this.methodNameMatcher = methodNameMatcher;
}
public long getListenerId() {
return listenerId;
}
public void setListenerId(long listenerId) {
this.listenerId = listenerId;
}
public boolean isVerbose() {
return verbose;
}
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
public int getMaxNumOfMatchedClass() {
return maxNumOfMatchedClass;
}
public void setMaxNumOfMatchedClass(int maxNumOfMatchedClass) {
this.maxNumOfMatchedClass = maxNumOfMatchedClass;
}
public long getJobId() {
return jobId;
}
}