package com.mortals.xhx.module.error.model;

import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.base.framework.CustomJsonDateDeserializer;
import com.mortals.xhx.module.error.model.vo.ErrorLogVo;
/**
 * 异常日志实体对象
 *
 * @author zxfei
 * @date 2022-08-24
 */

public class ErrorLogEntity extends ErrorLogVo {
    private static final long serialVersionUID = 1L;

    /**
     * 追踪Id
     */
    private String traceID;
    /**
     * 应用名称，宿主客户端运行唯一标识。
     */
    private String appName;
    /**
     * 主机名
     */
    private String hostName;
    /**
     * 消息标识，如用户登录异常。
     */
    private String message;
    /**
     * 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
     */
    private String platform;
    /**
     * 主要导致异常函数或方法调用名称及入参
     */
    private String culprit;
    /**
     * 异常事件标记，多个逗号分隔。用以归集异常事件种类。
     */
    private String tags;
    /**
     * 等级(FATAL，ERROR,WARNING,INFO,DEBUG)
     */
    private String level;
    /**
     * 客户端运行环境变量信息
     */
    private String environment;
    /**
     * 客户端运行版本信息
     */
    private String releaseVersion;
    /**
     * 指纹标识，对于相同异常事件归集数量使用。
     */
    private String fingerprint;
    /**
     * 线程号
     */
    private String threadNo;
    /**
     * 针对同一个异常事件，数量加1
     */
    private Integer checkNum;
    /**
     * 异常堆栈信息
     */
    private String errorStack;
    /**
     * 上下文信息，如js中发送异常事件，定位源码中信息。
     */
    private String context;
    /**
     * 扩展信息
     */
    private String extra;
    /**
     * 日志时间
     */
    @JsonDeserialize(using = CustomJsonDateDeserializer.class)
    private Date logTime;



    public ErrorLogEntity(){}
    /**
     * 获取 追踪Id
     * @return String
     */
    public String getTraceID(){
        return traceID;
    }
    /**
     * 设置 追踪Id
     * @param traceID
     */
    public void setTraceID(String traceID){
        this.traceID = traceID;
    }
    /**
     * 获取 应用名称，宿主客户端运行唯一标识。
     * @return String
     */
    public String getAppName(){
        return appName;
    }
    /**
     * 设置 应用名称，宿主客户端运行唯一标识。
     * @param appName
     */
    public void setAppName(String appName){
        this.appName = appName;
    }
    /**
     * 获取 主机名
     * @return String
     */
    public String getHostName(){
        return hostName;
    }
    /**
     * 设置 主机名
     * @param hostName
     */
    public void setHostName(String hostName){
        this.hostName = hostName;
    }
    /**
     * 获取 消息标识，如用户登录异常。
     * @return String
     */
    public String getMessage(){
        return message;
    }
    /**
     * 设置 消息标识，如用户登录异常。
     * @param message
     */
    public void setMessage(String message){
        this.message = message;
    }
    /**
     * 获取 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
     * @return String
     */
    public String getPlatform(){
        return platform;
    }
    /**
     * 设置 当前客户端使用平台(java,php,c#,android,vue,webos,ios,python)
     * @param platform
     */
    public void setPlatform(String platform){
        this.platform = platform;
    }
    /**
     * 获取 主要导致异常函数或方法调用名称及入参
     * @return String
     */
    public String getCulprit(){
        return culprit;
    }
    /**
     * 设置 主要导致异常函数或方法调用名称及入参
     * @param culprit
     */
    public void setCulprit(String culprit){
        this.culprit = culprit;
    }
    /**
     * 获取 异常事件标记，多个逗号分隔。用以归集异常事件种类。
     * @return String
     */
    public String getTags(){
        return tags;
    }
    /**
     * 设置 异常事件标记，多个逗号分隔。用以归集异常事件种类。
     * @param tags
     */
    public void setTags(String tags){
        this.tags = tags;
    }
    /**
     * 获取 等级(FATAL，ERROR,WARNING,INFO,DEBUG)
     * @return String
     */
    public String getLevel(){
        return level;
    }
    /**
     * 设置 等级(FATAL，ERROR,WARNING,INFO,DEBUG)
     * @param level
     */
    public void setLevel(String level){
        this.level = level;
    }
    /**
     * 获取 客户端运行环境变量信息
     * @return String
     */
    public String getEnvironment(){
        return environment;
    }
    /**
     * 设置 客户端运行环境变量信息
     * @param environment
     */
    public void setEnvironment(String environment){
        this.environment = environment;
    }
    /**
     * 获取 客户端运行版本信息
     * @return String
     */
    public String getReleaseVersion(){
        return releaseVersion;
    }
    /**
     * 设置 客户端运行版本信息
     * @param releaseVersion
     */
    public void setReleaseVersion(String releaseVersion){
        this.releaseVersion = releaseVersion;
    }
    /**
     * 获取 指纹标识，对于相同异常事件归集数量使用。
     * @return String
     */
    public String getFingerprint(){
        return fingerprint;
    }
    /**
     * 设置 指纹标识，对于相同异常事件归集数量使用。
     * @param fingerprint
     */
    public void setFingerprint(String fingerprint){
        this.fingerprint = fingerprint;
    }
    /**
     * 获取 线程号
     * @return String
     */
    public String getThreadNo(){
        return threadNo;
    }
    /**
     * 设置 线程号
     * @param threadNo
     */
    public void setThreadNo(String threadNo){
        this.threadNo = threadNo;
    }
    /**
     * 获取 针对同一个异常事件，数量加1
     * @return Integer
     */
    public Integer getCheckNum(){
        return checkNum;
    }
    /**
     * 设置 针对同一个异常事件，数量加1
     * @param checkNum
     */
    public void setCheckNum(Integer checkNum){
        this.checkNum = checkNum;
    }
    /**
     * 获取 异常堆栈信息
     * @return String
     */
    public String getErrorStack(){
        return errorStack;
    }
    /**
     * 设置 异常堆栈信息
     * @param errorStack
     */
    public void setErrorStack(String errorStack){
        this.errorStack = errorStack;
    }
    /**
     * 获取 上下文信息，如js中发送异常事件，定位源码中信息。
     * @return String
     */
    public String getContext(){
        return context;
    }
    /**
     * 设置 上下文信息，如js中发送异常事件，定位源码中信息。
     * @param context
     */
    public void setContext(String context){
        this.context = context;
    }
    /**
     * 获取 扩展信息
     * @return String
     */
    public String getExtra(){
        return extra;
    }
    /**
     * 设置 扩展信息
     * @param extra
     */
    public void setExtra(String extra){
        this.extra = extra;
    }
    /**
     * 获取 日志时间
     * @return Date
     */
    public Date getLogTime(){
        return logTime;
    }
    /**
     * 设置 日志时间
     * @param logTime
     */
    public void setLogTime(Date logTime){
        this.logTime = logTime;
    }




    @Override
    public int hashCode() {
        return this.getId().hashCode();
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (obj instanceof ErrorLogEntity) {
            ErrorLogEntity tmp = (ErrorLogEntity) obj;
            if (this.getId() == tmp.getId()) {
                return true;
            }
        }
        return false;
    }

    public String toString(){
        StringBuilder sb = new StringBuilder("");
        sb.append(",traceID:").append(getTraceID());
        sb.append(",appName:").append(getAppName());
        sb.append(",hostName:").append(getHostName());
        sb.append(",message:").append(getMessage());
        sb.append(",platform:").append(getPlatform());
        sb.append(",culprit:").append(getCulprit());
        sb.append(",tags:").append(getTags());
        sb.append(",level:").append(getLevel());
        sb.append(",environment:").append(getEnvironment());
        sb.append(",releaseVersion:").append(getReleaseVersion());
        sb.append(",fingerprint:").append(getFingerprint());
        sb.append(",threadNo:").append(getThreadNo());
        sb.append(",checkNum:").append(getCheckNum());
        sb.append(",errorStack:").append(getErrorStack());
        sb.append(",context:").append(getContext());
        sb.append(",extra:").append(getExtra());
        sb.append(",logTime:").append(getLogTime());
        return sb.toString();
    }

    public void initAttrValue(){

        this.traceID = "";

        this.appName = "";

        this.hostName = "";

        this.message = "";

        this.platform = "java";

        this.culprit = "";

        this.tags = "";

        this.level = "";

        this.environment = "";

        this.releaseVersion = "";

        this.fingerprint = "";

        this.threadNo = "";

        this.checkNum = 1;

        this.errorStack = "";

        this.context = "";

        this.extra = "";

        this.logTime = new Date();
    }
}