Skip to main content

aiway_protocol/gateway/
request_log.rs

1use serde::{Deserialize, Serialize};
2
3/// 网关请求日志
4#[derive(Debug, Default, Clone, Serialize, Deserialize)]
5pub struct RequestLog {
6    /// 请求ID,由网关统一生成,唯一的请求标识,标准的36位UUID
7    pub request_id: String,
8    /// 客户端IP地址,通过该地址定位到客户端所在区域
9    pub client_ip: String,
10    /// 客户端所在国家
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub client_country: Option<String>,
13    /// 客户端所在省份
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub client_province: Option<String>,
16    /// 客户端所在城市
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub client_city: Option<String>,
19    /// Host,从Header取
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub host: Option<String>,
22    /// 请求方式,如GET、POST、PUT、DELETE等
23    pub method: String,
24    /// 请求路径,不含query参数
25    pub path: String,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub origin: Option<String>,
28    /// 取Header里的User-Agent
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub user_agent: Option<String>,
31    /// 取Header里的Referer
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub referer: Option<String>,
34    /// 原始请求的Parts部分(未经过网关处理)
35    pub request_parts: Option<String>,
36    /// 请求时间戳,即网关收到请求的时刻,单位:毫秒
37    pub request_time: i64,
38    /// 响应时间戳,即网关将响应发送到客户端前的时刻,单位:毫秒
39    pub response_time: i64,
40    /// 耗时。统计从接收到请求开始到响应客户端之前的时间,单位:毫秒。
41    pub elapsed: i64,
42    /// HTTP状态码
43    pub status_code: Option<u16>,
44    /// 响应内容类型,从Header取
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub content_type: Option<String>,
47    /// 响应大小,流式响应为None
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub response_size: Option<usize>,
50    /// 最终响应给客户端的的Parts部分
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub response_parts: Option<String>,
53    /// 网关节点地址,格式:ip:port,该字段用于记录请求被哪个网关节点处理
54    pub node_address: String,
55}