in oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/LogTestQuery.java [56:137]
public LogTestResponse test(LogTestRequest request) throws Exception {
if (!config.isEnableLogTestTool()) {
throw new IllegalAccessException(
"LAL debug tool is not enabled. To enable, please set SW_QUERY_GRAPHQL_ENABLE_LOG_TEST_TOOL=true," +
"for more details, refer to https://skywalking.apache.org/docs/main/next/en/setup/backend/configuration-vocabulary/");
}
requireNonNull(request, "request");
checkArgument(isNotBlank(request.getLog()), "request.log cannot be blank");
checkArgument(isNotBlank(request.getDsl()), "request.dsl cannot be blank");
final LogAnalyzerModuleProvider provider =
(LogAnalyzerModuleProvider) moduleManager.find(LogAnalyzerModule.NAME)
.provider();
final LogAnalyzerModuleConfig config = provider.getModuleConfig();
final DSL dsl = DSL.of(moduleManager, config, request.getDsl());
final Binding binding = new Binding();
final LogData.Builder log = LogData.newBuilder();
ProtoBufJsonUtils.fromJSON(request.getLog(), log);
binding.log(log);
binding.logContainer(new AtomicReference<>());
binding.metricsContainer(new ArrayList<>());
dsl.bind(binding);
dsl.evaluate();
final LogTestResponse.LogTestResponseBuilder builder = LogTestResponse.builder();
binding.logContainer().map(AtomicReference::get).ifPresent(it -> {
final Log l = new Log();
if (isNotBlank(it.getServiceId())) {
l.setServiceName(IDManager.ServiceID.analysisId(it.getServiceId()).getName());
}
l.setServiceId(it.getServiceId());
if (isNotBlank(it.getServiceInstanceId())) {
String name = IDManager.ServiceInstanceID.analysisId(it.getServiceInstanceId()).getName();
l.setServiceInstanceName(name);
}
l.setServiceInstanceId(it.getServiceInstanceId());
l.setEndpointId(it.getEndpointId());
if (isNotBlank(it.getEndpointId())) {
String name = IDManager.EndpointID.analysisId(it.getEndpointId()).getEndpointName();
l.setEndpointName(name);
}
l.setTraceId(it.getTraceId());
l.setTimestamp(it.getTimestamp());
l.setContentType(it.getContentType());
l.setContent(it.getContent());
if (it.getTagsRawData() != null) {
try {
final List<KeyValue> tags = LogTags.parseFrom(it.getTagsRawData())
.getDataList()
.stream()
.map(tag -> new KeyValue(tag.getKey(), tag.getValue()))
.collect(Collectors.toList());
l.getTags().addAll(tags);
} catch (InvalidProtocolBufferException e) {
// ignore
}
}
builder.log(l);
});
binding.metricsContainer().ifPresent(it -> {
final List<Metrics> samples =
it.stream()
.flatMap(s -> Arrays.stream(s.samples))
.map(s -> new Metrics(
s.getName(),
s.getLabels().entrySet()
.stream().map(kv -> new KeyValue(kv.getKey(), kv.getValue()))
.collect(Collectors.toList()),
(long) s.getValue(),
s.getTimestamp()
))
.collect(Collectors.toList());
builder.metrics(samples);
});
return builder.build();
}