sylvia_iot_data/models/
coremgr_opdata.rs1use std::error::Error as StdError;
4
5use async_trait::async_trait;
6use chrono::{DateTime, Utc};
7use serde_json::{Map, Value};
8
9#[derive(Debug, PartialEq)]
11pub struct CoremgrOpData {
12 pub data_id: String,
13 pub req_time: DateTime<Utc>,
14 pub res_time: DateTime<Utc>,
15 pub latency_ms: i64,
16 pub status: i32,
17 pub source_ip: String,
18 pub method: String,
19 pub path: String,
20 pub body: Option<Map<String, Value>>,
21 pub user_id: String,
22 pub client_id: String,
23 pub err_code: Option<String>,
24 pub err_message: Option<String>,
25}
26
27pub enum SortKey {
29 ReqTime,
30 ResTime,
31 Latency,
32}
33
34pub struct SortCond {
36 pub key: SortKey,
37 pub asc: bool,
38}
39
40pub struct ListOptions<'a> {
42 pub cond: &'a ListQueryCond<'a>,
44 pub offset: Option<u64>,
46 pub limit: Option<u64>,
48 pub sort: Option<&'a [SortCond]>,
50 pub cursor_max: Option<u64>,
54}
55
56#[derive(Default)]
58pub struct QueryCond<'a> {
59 pub user_id: Option<&'a str>,
60 pub client_id: Option<&'a str>,
61 pub req_gte: Option<DateTime<Utc>>,
62 pub req_lte: Option<DateTime<Utc>>,
63}
64
65#[derive(Default)]
67pub struct ListQueryCond<'a> {
68 pub user_id: Option<&'a str>,
70 pub client_id: Option<&'a str>,
72 pub req_gte: Option<DateTime<Utc>>,
74 pub req_lte: Option<DateTime<Utc>>,
76 pub res_gte: Option<DateTime<Utc>>,
78 pub res_lte: Option<DateTime<Utc>>,
80}
81
82#[async_trait]
84pub trait CoremgrOpDataModel: Sync {
85 async fn init(&self) -> Result<(), Box<dyn StdError>>;
87
88 async fn count(&self, cond: &ListQueryCond) -> Result<u64, Box<dyn StdError>>;
92
93 async fn list(
101 &self,
102 opts: &ListOptions,
103 cursor: Option<Box<dyn Cursor>>,
104 ) -> Result<(Vec<CoremgrOpData>, Option<Box<dyn Cursor>>), Box<dyn StdError>>;
105
106 async fn add(&self, data: &CoremgrOpData) -> Result<(), Box<dyn StdError>>;
108
109 async fn del(&self, cond: &QueryCond) -> Result<(), Box<dyn StdError>>;
111}
112
113#[async_trait]
118pub trait Cursor: Send {
119 async fn try_next(&mut self) -> Result<Option<CoremgrOpData>, Box<dyn StdError>>;
120
121 fn offset(&self) -> u64;
122}
123
124pub const EXPIRES: i64 = 100 * 86400;