public synchronized long addSpanReceiver(SpanReceiverInfo info) throws IOException { StringBuilder configStringBuilder = new StringBuilder(); String prefix = ""; for (ConfigurationPair pair : info.configPairs) { configStringBuilder.append(prefix).append(pair.getKey()). append(" = ").append(pair.getValue()); prefix = ", "; } SpanReceiver rcvr = null; try { rcvr = new SpanReceiver.Builder(TraceUtils.wrapHadoopConf( confPrefix, conf, info.configPairs)). className(info.getClassName().trim()). build(); } catch (RuntimeException e) { LOG.info("Failed to add SpanReceiver " + info.getClassName() + " with configuration " + configStringBuilder.toString(), e); throw e; } TracerPool.getGlobalTracerPool().addReceiver(rcvr); LOG.info("Successfully added SpanReceiver " + info.getClassName() + " with configuration " + configStringBuilder.toString()); return rcvr.getId(); }
public synchronized void removeSpanReceiver(long spanReceiverId) throws IOException { SpanReceiver[] receivers = TracerPool.getGlobalTracerPool().getReceivers(); for (SpanReceiver receiver : receivers) { if (receiver.getId() == spanReceiverId) { TracerPool.getGlobalTracerPool().removeAndCloseReceiver(receiver); LOG.info("Successfully removed SpanReceiver " + spanReceiverId + " with class " + receiver.getClass().getName()); return; } } throw new IOException("There is no span receiver with id " + spanReceiverId); } }
/** * Wrapper method to remove receiver from actual tracerpool * @return true if removed, false if doesn't exist */ public static boolean removeReceiver(SpanReceiver rcvr) { return (tracer == null) ? false : tracer.getTracerPool().removeReceiver(rcvr); }
public synchronized SpanReceiverInfo[] listSpanReceivers() throws IOException { TracerPool pool = TracerPool.getGlobalTracerPool(); SpanReceiver[] receivers = pool.getReceivers(); SpanReceiverInfo[] info = new SpanReceiverInfo[receivers.length]; for (int i = 0; i < receivers.length; i++) { SpanReceiver receiver = receivers[i]; info[i] = new SpanReceiverInfo(receiver.getId(), receiver.getClass().getName()); } return info; }
private Tracer newTracer(final Transport transport) { TracerPool pool = new TracerPool("newTracer"); pool.addReceiver(new ZipkinSpanReceiver(HTraceConfiguration.EMPTY) { @Override protected Transport createTransport(HTraceConfiguration conf) { return transport; } }); return new Tracer.Builder("ZipkinTracer"). tracerPool(pool). conf(HTraceConfiguration.fromKeyValuePairs( "sampler.classes", AlwaysSampler.class.getName() )). build(); }
public void addThenLoadReceiverType(String className) { TracerPool pool = new TracerPool(className); SpanReceiver receiver = new SpanReceiver.Builder(conf). className(className). build(); pool.addReceiver(receiver); assertTrue(receiver == pool.loadReceiverType(className, conf, loader)); } }
/** * Given a SpanReceiver class name, return the existing instance of that span * receiver, if possible; otherwise, invoke the callable to create a new * instance. * * @param className The span receiver class name. * @param conf The HTrace configuration. * @param classLoader The class loader to use. * * @return The SpanReceiver. */ public synchronized SpanReceiver loadReceiverType(String className, HTraceConfiguration conf, ClassLoader classLoader) { SpanReceiver[] receivers = curReceivers; for (SpanReceiver receiver : receivers) { if (receiver.getClass().getName().equals(className)) { LOG.trace(toString() + ": returning a reference to receiver " + receiver.toString()); return receiver; } } LOG.trace(toString() + ": creating a new SpanReceiver of type " + className); SpanReceiver receiver = new SpanReceiver.Builder(conf). className(className). classLoader(classLoader). build(); addReceiver(receiver); return receiver; }
/** * Wrapper method to add receiver to actual tracerpool * @return true if successfull, false if it was already added */ public static boolean addReceiver(SpanReceiver rcvr) { return (tracer == null) ? false : tracer.getTracerPool().addReceiver(rcvr); }
private Tracer newTracer() { return new Tracer.Builder(). name("FlumeTracer"). tracerPool(new TracerPool("newTracer")). conf(HTraceConfiguration.fromKeyValuePairs( FlumeSpanReceiver.FLUME_PORT_KEY, Integer.toString(flumeServer.getPort()), "span.receiver.classes", FlumeSpanReceiver.class.getName(), "sampler.classes", AlwaysSampler.class.getName() )).build(); }
private List<SpanReceiver> createSpanReceivers(String classes) { Tracer tracer = new Tracer.Builder(). name("MyTracer"). tracerPool(new TracerPool("createSpanReceivers")). conf(HTraceConfiguration.fromKeyValuePairs( "span.receiver.classes", classes)). build(); SpanReceiver[] receivers = tracer.getTracerPool().getReceivers(); tracer.close(); LinkedList<SpanReceiver> receiverList = new LinkedList<SpanReceiver>(); for (SpanReceiver item: receivers) { receiverList.add(item); } return receiverList; }
/** * Remove and close a span receiver. * * @param receiver The receiver to remove. * * @return True if the receiver was removed; false if it * did not exist in this pool. */ public boolean removeAndCloseReceiver(SpanReceiver receiver) { if (!removeReceiver(receiver)) { return false; } try { LOG.trace(toString() + ": closing receiver " + receiver.toString()); receiver.close(); } catch (Throwable t) { LOG.error(toString() + ": error closing " + receiver.toString(), t); } return true; }
void closeScope(TraceScope scope) { TraceScope curScope = threadLocalScope.get(); if (curScope != scope) { throwClientError("Can't close TraceScope for " + scope.getSpan().toJson() + " because it is not the current " + "TraceScope in thread " + Thread.currentThread().getName()); } if (tracerPool == null) { throwClientError(toString() + " is closed."); } SpanReceiver[] receivers = tracerPool.getReceivers(); if (receivers == null) { throwClientError(toString() + " is closed."); } ThreadContext context = threadContext.get(); context.popScope(); threadLocalScope.set(scope.getParent()); scope.setParent(null); Span span = scope.getSpan(); span.stop(); for (SpanReceiver receiver : receivers) { receiver.receiveSpan(span); } }
private void loadSpanReceivers() { String classNamesStr = conf.get(SPAN_RECEIVER_CLASSES_KEY, ""); List<String> classNames = getClassNamesFromConf(classNamesStr); StringBuilder bld = new StringBuilder(); String prefix = ""; for (String className : classNames) { try { tracerPool.loadReceiverType(className, conf, classLoader); bld.append(prefix).append(className); prefix = ", "; } catch (Throwable e) { LOG.error("Failed to create SpanReceiver of type " + className, e); } } String resultString = bld.toString(); if (resultString.isEmpty()) { resultString = "no span receivers"; } LOG.debug(SPAN_RECEIVER_CLASSES_KEY + " = " + classNamesStr + "; loaded " + resultString); }
public Tracer build() { if (name == null) { throw new RuntimeException("You must specify a name for this Tracer."); } LinkedList<SpanReceiver> spanReceivers = new LinkedList<SpanReceiver>(); LinkedList<Sampler> samplers = new LinkedList<Sampler>(); loadSamplers(samplers); String tracerId = new TracerId(conf, name).get(); Tracer tracer = new Tracer(tracerId, tracerPool, samplers.toArray(new Sampler[samplers.size()])); tracerPool.addTracer(tracer); loadSpanReceivers(); return tracer; } }
@Test public void TestTracerCreateAndClose() throws Exception { Tracer tracer = new Tracer.Builder(). name("TestSimpleScope"). tracerPool(new TracerPool("TestTracerCreateAndClose")). conf(HTraceConfiguration.fromKeyValuePairs( "sampler.classes", "AlwaysSampler")). build(); POJOSpanReceiver receiver = new POJOSpanReceiver(HTraceConfiguration.EMPTY); tracer.getTracerPool().addReceiver(receiver); tracer.close(); Assert.assertTrue(receiver.getSpans().isEmpty()); }
for (SpanReceiver receiver : receivers) { if (receiver.getClass().getName().equals(receiverClass)) { LOG.trace(toString() + ": returning a reference to receiver " + receiver.toString()); return receiver; LOG.trace(toString() + ": creating a new SpanReceiver of type " + className); SpanReceiver receiver = new SpanReceiver.Builder(conf). classLoader(classLoader). build(); addReceiver(receiver); return receiver;
/** * Wrapper method to add receiver to actual tracerpool * @return true if successfull, false if it was already added */ public static boolean addReceiver(SpanReceiver rcvr) { return (tracer == null) ? false : tracer.getTracerPool().addReceiver(rcvr); }
private Sampler[] getSamplersFromConf(HTraceConfiguration conf) { Tracer tracer = new Tracer.Builder(). name("MyTracer"). tracerPool(new TracerPool("getSamplersFromConf")). conf(conf). build(); Sampler[] samplers = tracer.getSamplers(); tracer.close(); return samplers; }
/** * Remove and close a span receiver. * * @param receiver The receiver to remove. * * @return True if the receiver was removed; false if it * did not exist in this pool. */ public boolean removeAndCloseReceiver(SpanReceiver receiver) { if (!removeReceiver(receiver)) { return false; } try { LOG.trace(toString() + ": closing receiver " + receiver.toString()); receiver.close(); } catch (Throwable t) { LOG.error(toString() + ": error closing " + receiver.toString(), t); } return true; }
public synchronized SpanReceiverInfo[] listSpanReceivers() throws IOException { TracerPool pool = TracerPool.getGlobalTracerPool(); SpanReceiver[] receivers = pool.getReceivers(); SpanReceiverInfo[] info = new SpanReceiverInfo[receivers.length]; for (int i = 0; i < receivers.length; i++) { SpanReceiver receiver = receivers[i]; info[i] = new SpanReceiverInfo(receiver.getId(), receiver.getClass().getName()); } return info; }