All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.logdoc.structs.LogEntry Maven / Gradle / Ivy

package org.logdoc.structs;

import org.logdoc.structs.enums.LogLevel;
import org.logdoc.LogDocConstants;
import org.logdoc.utils.Tools;

import java.time.LocalDateTime;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import static org.logdoc.utils.Tools.notNull;

/**
 * @author Denis Danilin | [email protected]
 * 12.01.2022 17:39
 * sdk ☭ sweat and blood
 */
public final class LogEntry {
    public String ip;
    public String srcTime;
    public String rcvTime;
    public String pid;
    public String source;
    public String entry;
    public String appName;
    public LogLevel level;

    private final Map fields;

    public LogEntry() {
        fields = new HashMap<>(0);
        rcvTime = LocalDateTime.now().format(LogDocConstants.logTimeFormat);
    }

    public LogEntry(final Map map) {
        this();

        if (map.containsKey(LogDocConstants.Fields.TimeSrc)) srcTime = map.remove(LogDocConstants.Fields.TimeSrc);
        if (map.containsKey(LogDocConstants.Fields.TimeRcv)) rcvTime = map.remove(LogDocConstants.Fields.TimeRcv);
        if (map.containsKey(LogDocConstants.Fields.Ip)) ip = map.remove(LogDocConstants.Fields.Ip);
        if (map.containsKey(LogDocConstants.Fields.Pid)) pid = map.remove(LogDocConstants.Fields.Pid);
        if (map.containsKey(LogDocConstants.Fields.Level)) level = LogLevel.valueOf(map.remove(LogDocConstants.Fields.Level));
        if (map.containsKey(LogDocConstants.Fields.Source)) source = map.remove(LogDocConstants.Fields.Source);
        if (map.containsKey(LogDocConstants.Fields.AppName)) appName = map.remove(LogDocConstants.Fields.AppName);

        entry = map.remove(LogDocConstants.Fields.Message);

        if (!map.isEmpty())
            fields.putAll(map);
    }

    public Map asMap() {
        final Map map = new HashMap<>(fields);

        if (!Tools.isEmpty(ip)) map.put(LogDocConstants.Fields.Ip, ip);
        if (!Tools.isEmpty(level)) map.put(LogDocConstants.Fields.Level, level.name());
        if (!Tools.isEmpty(entry)) map.put(LogDocConstants.Fields.Message, entry);
        if (!Tools.isEmpty(pid)) map.put(LogDocConstants.Fields.Pid, pid);
        if (!Tools.isEmpty(source)) map.put(LogDocConstants.Fields.Source, source);
        if (!Tools.isEmpty(rcvTime)) map.put(LogDocConstants.Fields.TimeRcv, rcvTime);
        if (!Tools.isEmpty(srcTime)) map.put(LogDocConstants.Fields.TimeSrc, srcTime);
        if (!Tools.isEmpty(appName)) map.put(LogDocConstants.Fields.AppName, appName);

        return map;
    }

    public Collection> fields() {
        return fields.entrySet();
    }

    public void field(final String name, final String value0) {
        if (Tools.isEmpty(name) || Tools.isEmpty(value0))
            return;

        final String value = Tools.notNull(value0);

        switch (name.trim()) {
            case LogDocConstants.Fields.Level:
                level = LogLevel.asNullLog(value);
                break;
            case LogDocConstants.Fields.Ip:
                ip = value;
                break;
            case LogDocConstants.Fields.Message:
                entry = value;
                break;
            case LogDocConstants.Fields.Pid:
                pid = value;
                break;
            case LogDocConstants.Fields.Source:
                source = Tools.notNull(value, "no_source");
                break;
            case LogDocConstants.Fields.TimeSrc:
                srcTime = value;
                break;
            case LogDocConstants.Fields.TimeRcv:
                rcvTime = value;
                break;
            case LogDocConstants.Fields.AppName:
                appName = value;
                break;
            default:
                fields.put(name, value);
                break;
        }
    }

    public String field(final String name) {
        if (Tools.isEmpty(name))
            return "";

        switch (name) {
            case LogDocConstants.Fields.AppName:
                return appName;
            case LogDocConstants.Fields.Ip:
                return ip;
            case LogDocConstants.Fields.Message:
                return entry;
            case LogDocConstants.Fields.Source:
                return source;
            case LogDocConstants.Fields.Level:
                return level.name();
            case LogDocConstants.Fields.Pid:
                return pid;
            case LogDocConstants.Fields.TimeRcv:
                return rcvTime;
            case LogDocConstants.Fields.TimeSrc:
                return srcTime;
        }

        return fields.get(name);
    }

    public String fieldRemove(final String name) {
        return fields.remove(name);
    }

    @Override
    public String toString() {
        return "LogEntry{" +
                "srcTime='" + srcTime + '\'' +
                ", rcvTime='" + rcvTime + '\'' +
                ", ip='" + ip + '\'' +
                ", pid='" + pid + '\'' +
                ", source='" + source + '\'' +
                ", level=" + level +
                ", entry='" + entry + '\'' +
                ", appName='" + appName + '\'' +
                ", fields=" + fields +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy