Search in sources :

Example 21 with ProcessControlException

use of com.shulie.instrument.simulator.api.ProcessControlException 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 22 with ProcessControlException

use of com.shulie.instrument.simulator.api.ProcessControlException 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)

Example 23 with ProcessControlException

use of com.shulie.instrument.simulator.api.ProcessControlException in project LinkAgent by shulieTech.

the class ScopedTraceInterceptor method doBefore.

@Override
public void doBefore(Advice advice) throws Throwable {
    final InterceptorScopeInvocation transaction = getScope(advice).getCurrentInvocation();
    final boolean success = transaction.tryEnter(policy);
    boolean processControlException = false;
    if (success) {
        try {
            interceptor.doBefore(advice);
        } catch (ProcessControlException p) {
            processControlException = true;
            throw p;
        } finally {
            if (processControlException) {
                transaction.leave(policy);
            }
        }
    } else {
        if (logger.isDebugEnabled()) {
            logger.debug("tryBefore() returns false: interceptorScopeTransaction: {}, executionPoint: {}. Skip interceptor {}", transaction, policy, interceptor.getClass());
        }
    }
}
Also used : InterceptorScopeInvocation(com.shulie.instrument.simulator.api.scope.InterceptorScopeInvocation) ProcessControlException(com.shulie.instrument.simulator.api.ProcessControlException)

Aggregations

ProcessControlException (com.shulie.instrument.simulator.api.ProcessControlException)23 MatchConfig (com.pamirs.pradar.internal.config.MatchConfig)21 JSONObject (com.alibaba.fastjson.JSONObject)15 ExecutionCall (com.pamirs.pradar.internal.config.ExecutionCall)12 SocketTimeoutException (java.net.SocketTimeoutException)10 JsonMockStrategy (com.pamirs.pradar.pressurement.mock.JsonMockStrategy)9 IOException (java.io.IOException)8 PressureMeasureError (com.pamirs.pradar.exception.PressureMeasureError)7 ExecutionForwardCall (com.pamirs.pradar.internal.adapter.ExecutionForwardCall)6 Map (java.util.Map)6 ByteArrayEntity (org.apache.http.entity.ByteArrayEntity)5 StringEntity (org.apache.http.entity.StringEntity)5 BasicHttpResponse (org.apache.http.message.BasicHttpResponse)5 BasicStatusLine (org.apache.http.message.BasicStatusLine)5 URISyntaxException (java.net.URISyntaxException)4 Buffer (okio.Buffer)4 Header (org.apache.hc.core5.http.Header)4 ScriptEvaluator (com.pamirs.pradar.script.ScriptEvaluator)3 ReflectException (com.shulie.instrument.simulator.api.reflect.ReflectException)3 URI (java.net.URI)3