use of com.pamirs.pradar.internal.adapter.ExecutionForwardCall in project LinkAgent by shulieTech.
the class ForwardStrategy method processNonBlock.
@Override
public Object processNonBlock(Class returnType, ClassLoader classLoader, Object params, ExecutionCall call) throws ProcessControlException {
if (call instanceof ExecutionForwardCall) {
ExecutionForwardCall forwardCall = (ExecutionForwardCall) call;
Object block = processBlock(returnType, classLoader, params);
return forwardCall.forward(block);
}
return processBlock(returnType, classLoader, params);
}
use of com.pamirs.pradar.internal.adapter.ExecutionForwardCall in project LinkAgent by shulieTech.
the class RealCallExecuteV3Interceptor method beforeFirst.
@Override
public void beforeFirst(Advice advice) throws ProcessControlException {
if (!Pradar.isClusterTest()) {
return;
}
Object target = advice.getTarget();
final Call call = (Call) target;
final HttpUrl httpUrl = call.request().url();
String url = OKHttpConstants.getService(httpUrl.scheme(), httpUrl.host(), httpUrl.port(), httpUrl.encodedPath());
final MatchConfig config = ClusterTestUtils.httpClusterTest(url);
String check = call.request().header(PradarService.PRADAR_WHITE_LIST_CHECK);
config.addArgs(PradarService.PRADAR_WHITE_LIST_CHECK, check);
config.addArgs("url", url);
config.addArgs("isInterface", Boolean.FALSE);
if (config.getStrategy() instanceof JsonMockStrategy) {
config.addArgs("call", call);
MockReturnUtils.fixJsonStrategy.processBlock(advice.getBehavior().getReturnType(), advice.getClassLoader(), config);
}
config.getStrategy().processBlock(advice.getBehavior().getReturnType(), advice.getClassLoader(), config, new ExecutionForwardCall() {
@Override
public Object forward(Object param) throws ProcessControlException {
String configUrl = config.getForwarding();
if (httpUrl.queryParameterNames().size() > 0) {
StringBuilder builder = new StringBuilder(128).append(configUrl).append("?");
boolean first = true;
for (String queryParameterName : httpUrl.queryParameterNames()) {
if (!first) {
builder.append("&");
}
builder.append(queryParameterName).append("=").append(httpUrl.queryParameter(queryParameterName));
first = false;
}
configUrl = builder.toString();
}
HttpUrl forwardHttpUrl = HttpUrl.parse(configUrl);
Reflect.on(call.request()).set("url", forwardHttpUrl);
return null;
}
@Override
public Object call(Object param) {
Headers header = new Headers.Builder().build();
Buffer buffer = new Buffer();
try {
if (param instanceof String) {
buffer.write(String.valueOf(param).getBytes("UTF-8"));
} else {
buffer.write(JSONObject.toJSONBytes(param));
}
} catch (IOException e) {
}
return new Response.Builder().code(200).body(new RealResponseBody(header, buffer)).request(call.request()).protocol(Protocol.HTTP_1_0).message("OK").build();
}
});
}
use of com.pamirs.pradar.internal.adapter.ExecutionForwardCall in project LinkAgent by shulieTech.
the class RealCallExecuteV2Interceptor method beforeFirst.
@Override
public void beforeFirst(Advice advice) throws ProcessControlException {
Object target = advice.getTarget();
Request request = null;
try {
request = Reflect.on(target).get(OKHttpConstants.DYNAMIC_FIELD_REQUEST);
} catch (ReflectException e) {
request = Reflect.on(target).get(OKHttpConstants.DYNAMIC_FIELD_ORIGINAL_REQUEST);
}
String url = request.urlString();
final MatchConfig config = ClusterTestUtils.httpClusterTest(url);
String check = request.header(OKHttpConstants.DYNAMIC_FIELD_HEADER);
config.addArgs(PradarService.PRADAR_WHITE_LIST_CHECK, check);
config.addArgs("url", url);
config.addArgs("isInterface", Boolean.FALSE);
final Request finalRequest = request;
config.getStrategy().processBlock(advice.getBehavior().getReturnType(), advice.getClassLoader(), config, new ExecutionForwardCall() {
@Override
public Object forward(Object param) throws ProcessControlException {
HttpUrl httpUrl = HttpUrl.parse(config.getForwarding());
Reflect.on(finalRequest).set("url", httpUrl);
return null;
}
@Override
public Object call(Object param) {
Headers header = Headers.of(new String[0]);
Buffer buffer = new Buffer();
try {
byte[] bytes = null;
if (param instanceof String) {
buffer.write(String.valueOf(param).getBytes("UTF-8"));
} else {
buffer.write(JSONObject.toJSONBytes(param));
}
} catch (IOException e) {
}
return new Response.Builder().code(200).body(new RealResponseBody(header, buffer)).request(finalRequest).protocol(Protocol.HTTP_1_0).message("OK").build();
}
});
}
use of com.pamirs.pradar.internal.adapter.ExecutionForwardCall in project LinkAgent by shulieTech.
the class RealCallEnqueueV3Interceptor method beforeFirst.
@Override
public void beforeFirst(Advice advice) throws ProcessControlException {
Object target = advice.getTarget();
final Call call = (Call) target;
HttpUrl httpUrl = call.request().url();
String url = OKHttpConstants.getService(httpUrl.scheme(), httpUrl.host(), httpUrl.port(), httpUrl.encodedPath());
final MatchConfig config = ClusterTestUtils.httpClusterTest(url);
String check = call.request().header(OKHttpConstants.DYNAMIC_FIELD_HEADER);
config.addArgs(PradarService.PRADAR_WHITE_LIST_CHECK, check);
config.addArgs("url", url);
config.addArgs("isInterface", Boolean.FALSE);
if (config.getStrategy() instanceof JsonMockStrategy) {
config.addArgs("call", call);
MockReturnUtils.fixJsonStrategy.processBlock(advice.getBehavior().getReturnType(), advice.getClassLoader(), config);
}
config.getStrategy().processBlock(advice.getBehavior().getReturnType(), advice.getClassLoader(), config, new ExecutionForwardCall() {
@Override
public Object forward(Object param) throws ProcessControlException {
HttpUrl httpUrl = HttpUrl.parse(config.getForwarding());
Reflect.on(call.request()).set("url", httpUrl);
return null;
}
@Override
public Object call(Object param) {
Headers header = new Headers.Builder().build();
Buffer buffer = new Buffer();
try {
if (param instanceof String) {
buffer.write(String.valueOf(param).getBytes("UTF-8"));
} else {
buffer.write(JSONObject.toJSONBytes(param));
}
} catch (IOException e) {
}
return new Response.Builder().code(200).body(new RealResponseBody(header, buffer)).request(call.request()).protocol(Protocol.HTTP_1_0).message("OK").build();
}
});
}
Aggregations