/*
 *    Copyright (c) 2018-2025, lengleng All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * Neither the name of the yifu4cloud.com developer nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * Author: lengleng (wangiegie@gmail.com)
 */
package com.yifu.cloud.plus.v1.nginx.vo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;

/**
 * @author fxj
 * @date 2024-02-27 16:17:54
 */
@Data
public class NginxLogVo extends RowIndex implements Serializable {

	/**
	 * id
	 */
	@TableId(type = IdType.ASSIGN_ID)
	@NotBlank(message = "id 不能为空")
	@Length(max = 255, message = "id 不能超过255 个字符")
	@ExcelAttribute(name = "id", isNotEmpty = true, errorInfo = "id 不能为空", maxLength = 255)
	@Schema(description = "id")
	@ExcelProperty("id")
	private String id;
	/**
	 * 访问时间和时区
	 */
	@Length(max = 255, message = "访问时间和时区 不能超过255 个字符")
	@ExcelAttribute(name = "访问时间和时区", maxLength = 255)
	@Schema(description = "访问时间和时区")
	@ExcelProperty("访问时间和时区")
	private String timestamp;
	/**
	 * 客户端的IP地址
	 */
	@Length(max = 255, message = "客户端的IP地址 不能超过255 个字符")
	@ExcelAttribute(name = "客户端的IP地址", maxLength = 255)
	@Schema(description = "客户端的IP地址")
	@ExcelProperty("客户端的IP地址")
	private String remoteAdr;
	/**
	 * 记录请求的URL及请求方法
	 */
	@Length(max = 255, message = "记录请求的URL及请求方法 不能超过255 个字符")
	@ExcelAttribute(name = "记录请求的URL及请求方法", maxLength = 255)
	@Schema(description = "记录请求的URL及请求方法")
	@ExcelProperty("记录请求的URL及请求方法")
	private String request;
	/**
	 * HTTP请求状态
	 */
	@Length(max = 255, message = "HTTP请求状态 不能超过255 个字符")
	@ExcelAttribute(name = "HTTP请求状态", maxLength = 255)
	@Schema(description = "HTTP请求状态")
	@ExcelProperty("HTTP请求状态")
	private String status;
	/**
	 * 给客户端发送的文件主题内容字节数，响应头不计算在内
	 */
	@Length(max = 255, message = "给客户端发送的文件主题内容字节数，响应头不计算在内 不能超过255 个字符")
	@ExcelAttribute(name = "给客户端发送的文件主题内容字节数，响应头不计算在内", maxLength = 255)
	@Schema(description = "给客户端发送的文件主题内容字节数，响应头不计算在内")
	@ExcelProperty("给客户端发送的文件主题内容字节数，响应头不计算在内")
	private String bytes;
	/**
	 * 用户所使用的代理
	 */
	@Length(max = 255, message = "用户所使用的代理 不能超过255 个字符")
	@ExcelAttribute(name = "用户所使用的代理", maxLength = 255)
	@Schema(description = "用户所使用的代理")
	@ExcelProperty("用户所使用的代理")
	private String agent;
	/**
	 * 重定向URL
	 */
	@Length(max = 255, message = "重定向URL 不能超过255 个字符")
	@ExcelAttribute(name = "重定向URL", maxLength = 255)
	@Schema(description = "重定向URL")
	@ExcelProperty("重定向URL")
	private String forwarded;
	/**
	 * 后台提供服务的地址（即转发处理的目标地址）
	 */
	@Length(max = 255, message = "后台提供服务的地址（即转发处理的目标地址） 不能超过255 个字符")
	@ExcelAttribute(name = "后台提供服务的地址（即转发处理的目标地址）", maxLength = 255)
	@Schema(description = "后台提供服务的地址（即转发处理的目标地址）")
	@ExcelProperty("后台提供服务的地址（即转发处理的目标地址）")
	private String upAddr;
	/**
	 * 后台提供服务的地址（即转发处理的目标地址）
	 */
	@Length(max = 255, message = "后台提供服务的地址（即转发处理的目标地址） 不能超过255 个字符")
	@ExcelAttribute(name = "后台提供服务的地址（即转发处理的目标地址）", maxLength = 255)
	@Schema(description = "后台提供服务的地址（即转发处理的目标地址）")
	@ExcelProperty("后台提供服务的地址（即转发处理的目标地址）")
	private String upHost;
	/**
	 * 从nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间
	 */
	@ExcelAttribute(name = "从nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间")
	@Schema(description = "从nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间")
	@ExcelProperty("从nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间")
	private Long upRespTime;
	/**
	 * 整个请求的总时间，从接收用户请求的第一个字节到发送完响应数据的时间，即包括接收请求数据时间，程序响应时间，输出响应数据时间
	 */
	@ExcelAttribute(name = "整个请求的总时间，从接收用户请求的第一个字节到发送完响应数据的时间，即包括接收请求数据时间，程序响应时间，输出响应数据时间")
	@Schema(description = "整个请求的总时间，从接收用户请求的第一个字节到发送完响应数据的时间，即包括接收请求数据时间，程序响应时间，输出响应数据时间")
	@ExcelProperty("整个请求的总时间，从接收用户请求的第一个字节到发送完响应数据的时间，即包括接收请求数据时间，程序响应时间，输出响应数据时间")
	private Long requestTime;
	/**
	 * 请求中的参数
	 */
	@Length(max = 255, message = "请求中的参数 不能超过255 个字符")
	@ExcelAttribute(name = "请求中的参数", maxLength = 255)
	@Schema(description = "请求中的参数")
	@ExcelProperty("请求中的参数")
	private String args;

}
