package rocks.inspectit.agent.java.sensor.method.remote.client.http;
import io.opentracing.propagation.TextMap;
import rocks.inspectit.agent.java.config.impl.RegisteredSensorConfig;
import rocks.inspectit.agent.java.sensor.method.remote.client.RemoteClientSensor;
import rocks.inspectit.agent.java.tracing.core.adapter.ClientAdapterProvider;
import rocks.inspectit.agent.java.tracing.core.adapter.ClientRequestAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.ResponseAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.http.AsyncHttpClientRequestAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.http.HttpResponseAdapter;
import rocks.inspectit.agent.java.tracing.core.adapter.http.data.HttpRequest;
import rocks.inspectit.agent.java.tracing.core.adapter.http.data.HttpResponse;
import rocks.inspectit.agent.java.tracing.core.adapter.http.data.impl.AsyncHttpResponse;
import rocks.inspectit.agent.java.tracing.core.adapter.http.data.impl.JettyHttpClientV61HttpClientRequest;
/**
* Remote client sensor for intercepting HTTP calls made with Jetty HTTP client. Targeted to work
* with versions 6.x-8.x of Jetty HTTP client.
* <p>
* Targeted instrumentation method:
* <ul>
* <li>{@code org.mortbay.jetty.client.HttpClient#send(org.mortbay.jetty.client.HttpExchange)}
* <li>{@code org.eclipse.jetty.client.HttpClient#send(org.eclipse.jetty.client.HttpExchange)}
* </ul>
*
* @author Ivan Senic
*/
public class JettyHttpClientV61Sensor extends RemoteClientSensor implements ClientAdapterProvider {
/**
* {@inheritDoc}
*/
@Override
public ClientRequestAdapter<TextMap> getClientRequestAdapter(Object object, Object[] parameters, RegisteredSensorConfig rsc) {
// http exchange is first parameter
Object httpExchange = parameters[0];
HttpRequest request = new JettyHttpClientV61HttpClientRequest(httpExchange, CACHE);
return new AsyncHttpClientRequestAdapter(request);
}
/**
* {@inheritDoc}
*/
@Override
public ResponseAdapter getClientResponseAdapter(Object object, Object[] parameters, Object result, RegisteredSensorConfig rsc) {
// async client, empty response adapter
HttpResponse response = AsyncHttpResponse.INSTANCE;
return new HttpResponseAdapter(response);
}
/**
* {@inheritDoc}
*/
@Override
protected ClientAdapterProvider getClientAdapterProvider() {
return this;
}
}