Skip to main content

dnslib/core/dns/
logs.rs

1use std::future::Future;
2
3use crate::core::error::Result;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize, clap::ValueEnum)]
6#[serde(rename_all = "lowercase")]
7pub enum LogLevel {
8    Trace,
9    Debug,
10    Info,
11    Warning,
12    Error,
13    Critical,
14}
15
16#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
17pub struct LogLine {
18    pub timestamp: String,
19    pub level: LogLevel,
20    pub title: Option<String>,
21    pub message: String,
22}
23
24#[derive(Debug, Clone, Default)]
25pub struct LogsOptions {
26    pub lines: u32,
27    pub start: Option<String>,
28    pub end: Option<String>,
29    pub level: Option<LogLevel>,
30}
31
32pub trait LogsRead {
33    fn get_logs(
34        &self,
35        options: LogsOptions,
36    ) -> impl Future<Output = Result<Vec<LogLine>>> + Send + '_;
37}
38
39pub async fn get_logs<C: LogsRead + ?Sized>(
40    client: &C,
41    options: LogsOptions,
42) -> Result<Vec<LogLine>> {
43    client.get_logs(options).await
44}