public LogTestResponse test()

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();
    }