public Map doParseSimple()

in ozhera-log/log-common/src/main/java/org/apache/ozhera/log/parse/SeparatorLogParser.java [50:147]


    public Map<String, Object> doParseSimple(String logData, Long collectStamp) {
        Map<String, Object> ret = new HashMap<>();
        if (logData == null) {
            return ret;
        }
        if (logData.isEmpty()) {
            return ret;
        }
        try {

            int maxLength = (int) Arrays.stream(values).filter(s -> !"-1".equals(s)).count();

            List<String> logArray = parseLogData(logData, maxLength);
            if (0 == maxLength) {
                ret.put(ES_KEY_MAP_MESSAGE, logData);
                return ret;
            }
            if (values.length == 1 && logArray.size() == 1 && maxLength == 1) {
                String[] ktSplit = keysAndTypes[0].split(":");
                String keysAndType = ktSplit[0];
                ret.put(keysAndType, logArray.get(0));
                return ret;
            }

            int count = 0;
            int valueCount = 0;
            /**
             * Normal parsing
             */
            for (int i = 0; i < keysAndTypes.length; i++) {
                String[] kTsplit = keysAndTypes[i].split(":");
                if (kTsplit.length != 2 || i >= values.length && (null == valueMap || valueMap.isEmpty())) {
                    continue;
                }
                if (kTsplit[0].equals(esKeyMap_topic)) {
                    count++;
                    ret.put(esKeyMap_topic, parserData.getTopicName());
                    continue;
                } else if (kTsplit[0].equals(esKeyMap_tag)) {
                    count++;
                    ret.put(esKeyMap_tag, parserData.getMqTag());
                    continue;
                } else if (kTsplit[0].equals(esKeyMap_logstoreName)) {
                    count++;
                    ret.put(esKeyMap_logstoreName, parserData.getLogStoreName());
                    continue;
                } else if (kTsplit[0].equals(esKeyMap_tail)) {
                    count++;
                    ret.put(esKeyMap_tail, parserData.getTailName());
                    continue;
                } else if (kTsplit[0].equals(ES_KEY_MAP_LOG_SOURCE)) {
                    count++;
                    continue;
                }
                if (null != valueMap && !valueMap.isEmpty()) {
                    String key = kTsplit[0].trim();
                    if (valueMap.containsKey(key)) {
                        String value = logArray.get(valueMap.get(key));
                        ret.put(key, value);
                    }
                } else {
                    String value = null;
                    int num = -1;
                    try {
                        num = Integer.parseInt(values[i]);
                        if (num == -1) {
                            valueCount++;
                            continue;
                        }
                    } catch (Exception e) {
                        continue;
                    }
                    if (num < logArray.size() && num > -1) {
                        value = logArray.get(num);
                    } else {
                        value = "";
                    }
                    if (kTsplit[0].equals(esKeyMap_timestamp) || kTsplit[1].equalsIgnoreCase(esKeyMap_Date)) {
                        ret.put(esKeyMap_timestamp, value);
                    } else {
                        ret.put(kTsplit[0], StringUtils.isNotEmpty(value) ? value.trim() : value);
                    }
                }
            }

            /**
             * The field is misconfigured
             * esKeyMap_topic,esKeyMap_tag,esKeyMap_logstoreName,esKeyMap_logSource are not visible to the user, i.e. do not exist in values, logArray
             */
            if (ret.values().stream().filter(Objects::nonNull).map(String::valueOf).anyMatch(StringUtils::isEmpty)) {
                ret.put(ES_KEY_MAP_LOG_SOURCE, logData);
            }
        } catch (Exception e) {
            ret.put(ES_KEY_MAP_LOG_SOURCE, logData);
        }
        validTimestamp(ret, collectStamp);
        return ret;
    }