Search in sources :

Example 6 with ExecutionForwardCall

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);
}
Also used : ExecutionForwardCall(com.pamirs.pradar.internal.adapter.ExecutionForwardCall)

Example 7 with ExecutionForwardCall

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();
        }
    });
}
Also used : Buffer(okio.Buffer) ExecutionForwardCall(com.pamirs.pradar.internal.adapter.ExecutionForwardCall) ProcessControlException(com.shulie.instrument.simulator.api.ProcessControlException) MatchConfig(com.pamirs.pradar.internal.config.MatchConfig) RealResponseBody(okhttp3.internal.http.RealResponseBody) IOException(java.io.IOException) JsonMockStrategy(com.pamirs.pradar.pressurement.mock.JsonMockStrategy) ExecutionForwardCall(com.pamirs.pradar.internal.adapter.ExecutionForwardCall) JSONObject(com.alibaba.fastjson.JSONObject)

Example 8 with ExecutionForwardCall

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();
        }
    });
}
Also used : Buffer(okio.Buffer) ProcessControlException(com.shulie.instrument.simulator.api.ProcessControlException) Headers(com.squareup.okhttp.Headers) MatchConfig(com.pamirs.pradar.internal.config.MatchConfig) RealResponseBody(com.squareup.okhttp.internal.http.RealResponseBody) Request(com.squareup.okhttp.Request) IOException(java.io.IOException) ReflectException(com.shulie.instrument.simulator.api.reflect.ReflectException) HttpUrl(okhttp3.HttpUrl) ExecutionForwardCall(com.pamirs.pradar.internal.adapter.ExecutionForwardCall) Response(com.squareup.okhttp.Response) JSONObject(com.alibaba.fastjson.JSONObject)

Example 9 with ExecutionForwardCall

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();
        }
    });
}
Also used : Buffer(okio.Buffer) ExecutionForwardCall(com.pamirs.pradar.internal.adapter.ExecutionForwardCall) ProcessControlException(com.shulie.instrument.simulator.api.ProcessControlException) MatchConfig(com.pamirs.pradar.internal.config.MatchConfig) RealResponseBody(okhttp3.internal.http.RealResponseBody) IOException(java.io.IOException) JsonMockStrategy(com.pamirs.pradar.pressurement.mock.JsonMockStrategy) ExecutionForwardCall(com.pamirs.pradar.internal.adapter.ExecutionForwardCall) JSONObject(com.alibaba.fastjson.JSONObject)

Aggregations

ExecutionForwardCall (com.pamirs.pradar.internal.adapter.ExecutionForwardCall)9 MatchConfig (com.pamirs.pradar.internal.config.MatchConfig)7 ProcessControlException (com.shulie.instrument.simulator.api.ProcessControlException)6 JSONObject (com.alibaba.fastjson.JSONObject)5 IOException (java.io.IOException)4 Buffer (okio.Buffer)4 JsonMockStrategy (com.pamirs.pradar.pressurement.mock.JsonMockStrategy)3 ReflectException (com.shulie.instrument.simulator.api.reflect.ReflectException)2 Headers (com.squareup.okhttp.Headers)2 Request (com.squareup.okhttp.Request)2 Response (com.squareup.okhttp.Response)2 RealResponseBody (com.squareup.okhttp.internal.http.RealResponseBody)2 HttpUrl (okhttp3.HttpUrl)2 RealResponseBody (okhttp3.internal.http.RealResponseBody)2 GenericUrl (com.google.api.client.http.GenericUrl)1 HttpRequest (com.google.api.client.http.HttpRequest)1 PressureMeasureError (com.pamirs.pradar.exception.PressureMeasureError)1 Header (org.apache.commons.httpclient.Header)1 HttpMethod (org.apache.commons.httpclient.HttpMethod)1 URI (org.apache.commons.httpclient.URI)1