Я создаю приложение JavaFX и пробую Jaeger. По какой-то причине мой «основной» диапазон становится нулевым, поэтому все мои подспаны переходят в jaeger как span без корня.
Вот мой основной класс
class TradingPlatform extends Application {
static val log = LogManager.getLogger()
@Accessors static val tracer = SpanUtil.getYobiTracer("trading-platform")
@Accessors static var Span span
override start(Stage primaryStage) throws Exception {
Thread.sleep(1000)
span = tracer.buildSpan('''«System.getProperty("user.name")»@«getPCName()»''').start()
try (val scope = tracer.activateSpan(span)) {
log.info("Starting "+Thread.currentThread().hashCode())
val resolution = getResolution()
val scene = new Scene(new Workbench(), resolution.get(0), resolution.get(1))
primaryStage.setScene(scene)
primaryStage.setOnCloseRequest[
span.finish()
tracer.close()
Thread.sleep(1000)
System.exit(0)
]
Runtime.getRuntime().addShutdownHook(new Thread [
span.finish()
tracer.close()
Thread.sleep(1000)
])
primaryStage.show()
} catch (Exception e) {
span.setTag("error", "true");
span.log(ExceptionUtils.getStackTrace(e))
}
}
def static void main(String[] args) {
launch(args)
}
}
Вот некоторые фрагменты из моего класса Workbench
class Workbench extends StackPane {
new() {
componentsMap = new HashMap()
println("Constructor1 "+Thread.currentThread().getName()+" "+TradingPlatform.getTracer().activeSpan())
span(TradingPlatform.getTracer(), "parseGroovyComponents") [
val components = groovyComponents.collect(Collectors.toList())
components.toObservable().subscribeOn(Schedulers.io()).map [ path |
val supplier = [
new GroovyNode(root.relativize(path).toString().replace(".groovy", ""), Files.readAllLines(path).join("\n"))
] as Supplier<DockNode>
root.relativize(path).toString() -> supplier
].toMap([getKey()], [getValue()]).subscribe [
componentsMap.putAll(it)
]
]
println("Constructor2 "+Thread.currentThread().getName()+" "+TradingPlatform.getTracer().activeSpan())
}
Эта часть в порядке и входит в Jaeger без проблем. Но тогда у меня есть этот метод, который вызывается, когда пользователь ищет что-то
def openSearchedItem() {
println("openSearchedItem "+Thread.currentThread().getName()+" "+TradingPlatform.getTracer().activeSpan())
span(TradingPlatform.getTracer(), "openSearchedItem") [
try {
val text = search.getText()
setTag("component", text)
search.setText("")
getChildren().remove(searchContainer)
val name = text + ".groovy"
val component = componentsMap.get(name)
Objects.requireNonNull(component, '''You tried to open a component that doesn't exist: «name». These exist: «componentsMap.keySet()»''')
recentSearches.addSearch(text)
component.get().dock(dockPane, DockPos.LEFT)
} catch(Exception e) {
log(ExceptionUtils.getStackTrace(e))
throw e
}
]
}
Вот мои логи
2019-06-17 09:50:16 INFO Configuration:248 - Initialized tracer=JaegerTracer(version=Java-0.35.4, serviceName=trading-platform, reporter=CompositeReporter(reporters=[RemoteReporter(sender=UdpSender(), closeEnqueueTimeout=1000), LoggingReporter(logger=org.slf4j.impl.Log4jLoggerAdapter(io.jaegertracing.internal.reporters.LoggingReporter))]), sampler=ConstSampler(decision=true, tags={sampler.type=const, sampler.param=true}), tags={hostname=northpool2, jaeger.version=Java-0.35.4, ip=127.0.1.1}, zipkinSharedRpcSpan=false, expandExceptionLogs=false, useTraceId128Bit=false)
2019-06-17 09:50:17,742 [INFO ] TradingPlatform 54 │ Starting 1663469709
Constructor1 JavaFX Application Thread 7e9a31b36e7592ce:7e9a31b36e7592ce:0:1 - floris@northpool2
2019-06-17 09:50:18 INFO LoggingReporter:43 - Span reported: 7e9a31b36e7592ce:eb8b1d493abe96ff:7e9a31b36e7592ce:1 - parseGroovyComponents
Constructor2 JavaFX Application Thread 7e9a31b36e7592ce:7e9a31b36e7592ce:0:1 - floris@northpool2
Тогда, когда я что-то ищу
openSearchedItem JavaFX Application Thread null
2019-06-17 09:50:28 INFO LoggingReporter:43 - Span reported: f7bc7b08ac7363c0:f7bc7b08ac7363c0:0:1 - openSearchedItem
А потом, когда я закрываю приложение
2019-06-17 09:50:32 INFO LoggingReporter:43 - Span reported: 7e9a31b36e7592ce:7e9a31b36e7592ce:0:1 - floris@northpool2
Это то, что появляется в егере
Как я могу включить мои parseGroovyComponents в мой floris @ northpool2 span?