diff --git a/server/src/storage/localfs.rs b/server/src/storage/localfs.rs index fc7bd7f23..9fb72946e 100644 --- a/server/src/storage/localfs.rs +++ b/server/src/storage/localfs.rs @@ -31,8 +31,11 @@ use relative_path::{RelativePath, RelativePathBuf}; use tokio::fs::{self, DirEntry}; use tokio_stream::wrappers::ReadDirStream; -use crate::metrics::storage::{localfs::REQUEST_RESPONSE_TIME, StorageMetrics}; use crate::option::validation; +use crate::{ + handlers::http::users::USERS_ROOT_DIR, + metrics::storage::{localfs::REQUEST_RESPONSE_TIME, StorageMetrics}, +}; use super::{ LogStream, ObjectStorage, ObjectStorageError, ObjectStorageProvider, PARSEABLE_ROOT_DIRECTORY, @@ -291,7 +294,7 @@ impl ObjectStorage for LocalFS { } async fn list_streams(&self) -> Result, ObjectStorageError> { - let ignore_dir = &["lost+found", PARSEABLE_ROOT_DIRECTORY]; + let ignore_dir = &["lost+found", PARSEABLE_ROOT_DIRECTORY, USERS_ROOT_DIR]; let directories = ReadDirStream::new(fs::read_dir(&self.root).await?); let entries: Vec = directories.try_collect().await?; let entries = entries diff --git a/server/src/users/filters.rs b/server/src/users/filters.rs index 87580a8c6..6b2577fd0 100644 --- a/server/src/users/filters.rs +++ b/server/src/users/filters.rs @@ -26,16 +26,45 @@ use crate::{handlers::http::users::USERS_ROOT_DIR, metadata::LOCK_EXPECT, option pub static FILTERS: Lazy = Lazy::new(Filters::default); -#[derive(Debug, Serialize, Deserialize, Clone)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Filter { version: String, stream_name: String, filter_name: String, filter_id: String, - query: String, + query: FilterQuery, time_filter: Option, } +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] +pub struct FilterQuery { + filter_type: String, + filter_query: Option, + filter_builder: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] +pub struct FilterBuilder { + id: String, + combinator: String, + rules: Vec, +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] +pub struct FilterRules { + id: String, + combinator: String, + rules: Vec, +} + +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] +pub struct Rules { + id: String, + field: String, + value: String, + operator: String, +} + impl Filter { pub fn filter_id(&self) -> &str { &self.filter_id @@ -70,7 +99,7 @@ impl Filters { pub fn update(&self, filter: Filter) { let mut s = self.0.write().expect(LOCK_EXPECT); - + s.retain(|f| f.filter_id() != filter.filter_id()); s.push(filter); } diff --git a/server/src/users/mod.rs b/server/src/users/mod.rs index 7bfac6726..c08edcec9 100644 --- a/server/src/users/mod.rs +++ b/server/src/users/mod.rs @@ -21,7 +21,7 @@ pub mod filters; use serde::{Deserialize, Serialize}; -#[derive(Debug, Serialize, Deserialize, Default, Clone)] +#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq)] pub struct TimeFilter { to: String, from: String,