class AbstractExternalRequest extends MonitoredRequest {

	@Override
	public Span createSpan() {
		final Tracer.SpanBuilder spanBuilder;
		final Span activeSpan = tracer.scopeManager().activeSpan();
		if (activeSpan != null) {
			spanBuilder = tracer.buildSpan(operationName)
					.withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT);
		} else {
			// client spans should not be root spans
			spanBuilder = tracer.buildSpan(operationName)
					.withTag(Tags.SAMPLING_PRIORITY.getKey(), 0)
					.withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT);
		}
		if (trackMetricsPerOperationName()) {
			spanBuilder.withTag(MetricsSpanEventListener.ENABLE_TRACKING_METRICS_TAG, true);
		}
		spanBuilder.withTag(SpanUtils.OPERATION_TYPE, getType());
		return spanBuilder.start();
	}

	protected  AbstractExternalRequest(Tracer tracer);
	public  AbstractExternalRequest(Tracer tracer, String operationName);

}