public MetricsParseResult metricsParse()

in trace-etl/trace-etl-server/src/main/java/org/apache/ozhera/trace/etl/consumer/MetricsParseService.java [150:316]


    public MetricsParseResult metricsParse(TSpanData tSpanData) {
        String serviceName = tSpanData.getExtra().getServiceName();
        if (StringUtils.isEmpty(serviceName) || exclude(excludeServiceName, serviceName)) {
            return new MetricsParseResult(true);
        }
        HeraTraceEtlConfig config = defaultConfig(traceConfig.getConfig(serviceName));
        String operationName = tSpanData.getName();
        if (StringUtils.isEmpty(operationName) || exclude(config == null ? excludeMethod : config.getExcludeMethod(), operationName)) {
            return new MetricsParseResult(true);
        }
        DriverDomain driverDomain = null;
        if (operationName.equals(DB_DRIVER)) {
            driverDomain = new DriverDomain();
            driverDomain.setTimeStamp(String.valueOf(System.currentTimeMillis()));
            driverDomain.setAppName(formatServiceName(serviceName));
        }
        JaegerTracerDomain jtd = new JaegerTracerDomain();
        jtd.setServiceName(serviceName);
        jtd.setTraceId(tSpanData.getTraceId());
        long startTime = tSpanData.getStartEpochNanos();
        if (startTime > 0) {
            // ns to ms
            jtd.setStartTime(startTime / (1000 * 1000));
        }
        long duration = tSpanData.getEndEpochNanos() - startTime;
        // Nanoseconds to microseconds, microseconds to milliseconds need to keep decimal
        long durationUs = duration / 1000;
        if (duration > 0) {
            jtd.setDuration(durationUs);
        }
        jtd.setEndTime(jtd.getStartTime() + durationUs / 1000);
        jtd.setMethod(operationName);
        if(excludeServerIp){
            jtd.setServerIp(DEFAULT_SERVER_IP);
        }else{
            jtd.setServerIp(tSpanData.getExtra().getIp());
        }
        TAttributes attributes = tSpanData.getAttributes();
        List<TAttributeKey> tagsKeys = attributes.getKeys();
        List<TValue> tagsValues = attributes.getValues();
        boolean isValidate = true;
        if (tagsKeys != null && tagsValues != null && tagsKeys.size() > 0 && tagsKeys.size() == tagsValues.size()) {
            for (int i = 0; i < tagsKeys.size(); i++) {
                String key = tagsKeys.get(i).getValue();
                String value = ThriftUtil.getStringValue(tagsValues.get(i), tagsKeys.get(i).getType());
                if ("thread.name".equals(key) && exclude(config == null ? excludeThread : config.getExcludeThread(), value)) {
                    isValidate = false;
                    break;
                }
                if ("http.url".equals(key) && exclude(config == null ? excludeHttpurl : config.getExcludeHttpUrl(), value)) {
                    isValidate = false;
                    break;
                }
                if ("http.user_agent".equals(key) && exclude(config == null ? excludeUA : config.getExcludeUa(), value)) {
                    isValidate = false;
                    break;
                }
                if ("db.statement".equals(key) && exclude(config == null ? excludeDB : config.getExcludeSql(), value)) {
                    isValidate = false;
                    break;
                }
                if ("http.status_code".equals(key)) {
                    jtd.setHttpCode(value);
                }
                if ("rpc.system".equals(key)) {
                    jtd.setType(value);
                }
                if ("rpc.method".equals(key)) {
                    if(excludeDubboMethod){
                        jtd.setMethod(DEFAULT_DUBBO_METHOD);
                    }else {
                        jtd.setMethod(value);
                    }
                }
                if ("rpc.service".equals(key)) {
                    jtd.setRpcServiceName(value);
                }
                if ("span.kind".equals(key)) {
                    jtd.setKind(value);
                }
                if ("db.system".equals(key)) {
                    jtd.setType(value);
                }
                if ("db.statement".equals(key)) {
                    jtd.setStatement(value);
                }
                if ("http.method".equals(key)) {
                    jtd.setType("aop");
                }
                if ("net.peer.name".equals(key) || "net.peer.ip".equals(key)) {
                    jtd.setDbHost(value);
                }
                if ("net.peer.port".equals(key)) {
                    jtd.setDbPort(value);
                }
                if ("error".equals(key) && Boolean.valueOf(value)) {
                    jtd.setSuccess(false);
                }
                if ("db.connection_string".equals(key)) {
                    jtd.setDataSource(value);
                }
                if ("db.operation".equals(key)) {
                    jtd.setSqlMethod(value);
                }
                if ("db.name".equals(key)) {
                    jtd.setDbName(value);
                }
                if ("messaging.system".equals(key)) {
                    jtd.setType(value);
                }
                if ("messaging.destination".equals(key)) {
                    jtd.setTopic(value);
                }
                if ("hera.annotations".equals(key) && Boolean.valueOf(value)) {
                    jtd.setType(SpanType.CUSTOMIZE_MTTHOD);
                }
                //deal db driver
                if (driverDomain != null && "db.driver.domainPort".equals(key)) {
                    driverDomain.setDomainPort(value);
                }
                if (driverDomain != null && "db.driver.userName".equals(key)) {
                    driverDomain.setUserName(value);
                }
                if (driverDomain != null && "db.driver.password".equals(key)) {
                    driverDomain.setPassword(value);
                }
                if (driverDomain != null && "db.driver.type".equals(key)) {
                    driverDomain.setType(value);
                }
                if (driverDomain != null && "db.driver.dbName".equals(key)) {
                    driverDomain.setDataBaseName(value);
                }
            }
        }
        // Gets the properties in process
        TResource resource = tSpanData.getResouce();
        if (resource != null) {
            TAttributes resourceAttributes = resource.getAttributes();
            List<TAttributeKey> resourceKeys = resourceAttributes.getKeys();
            List<TValue> resourceValues = resourceAttributes.getValues();
            if (resourceKeys != null && resourceValues != null && resourceKeys.size() > 0) {
                for (int i = 0; i < resourceKeys.size(); i++) {
                    String key = resourceKeys.get(i).getValue();
                    String value = ThriftUtil.getStringValue(resourceValues.get(i), resourceKeys.get(i).getType());
                    if ("service.env".equals(key)) {
                        jtd.setServiceEnv(value);
                    }
                    if ("service.function.module".equals(key)) {
                        jtd.setFunctionModule(value);
                    }
                    if ("service.function.name".equals(key)) {
                        jtd.setFunctionName(value);
                    }
                    if ("service.function.id".equals(key)) {
                        jtd.setFunctionId(value);
                    }
                    if ("service.env.id".equals(key)) {
                        jtd.setServiceEnvId(value);
                    }
                }
            }
        }
        if (StringUtils.isEmpty(jtd.getServiceEnv())) {
            jtd.setServiceEnv("default_env");
        }
        return new MetricsParseResult(jtd, driverDomain, false, isValidate, config);
    }