filter log done

main
Mathias Rothenhaeusler 2023-04-23 17:57:24 +02:00
parent fce81a0809
commit 277a69334d
10 changed files with 129 additions and 16 deletions

36
Cargo.lock generated
View File

@ -85,6 +85,17 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi 0.1.19",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "1.1.0"
@ -322,6 +333,17 @@ dependencies = [
"cc",
]
[[package]]
name = "colored"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
dependencies = [
"atty",
"lazy_static",
"winapi",
]
[[package]]
name = "concolor-override"
version = "1.0.0"
@ -692,6 +714,15 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "hermit-abi"
version = "0.3.1"
@ -733,7 +764,7 @@ version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
dependencies = [
"hermit-abi",
"hermit-abi 0.3.1",
"libc",
"windows-sys 0.45.0",
]
@ -744,7 +775,7 @@ version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
dependencies = [
"hermit-abi",
"hermit-abi 0.3.1",
"io-lifetimes",
"rustix 0.37.7",
"windows-sys 0.48.0",
@ -1236,6 +1267,7 @@ name = "rcc"
version = "0.1.0"
dependencies = [
"clap",
"colored",
"directories",
"dotenv",
"log",

View File

@ -7,6 +7,7 @@ edition = "2021"
[dependencies]
clap = { version = "4.2.1", features = ["derive"] }
colored = "2.0.0"
directories = "5.0.0"
dotenv = "0.15.0"
log = "0.4.17"

10
README.md 100644
View File

@ -0,0 +1,10 @@
## Configuration File
Location: .config/rcc/env
```
USERNAME=root
PASSWORD=cidb
DB=cidb
PORT=3306
```

View File

@ -30,5 +30,7 @@ pub enum Commands {
all: bool,
#[arg(short, long)]
config: bool,
#[arg(short, long)]
log: bool,
}
}

View File

@ -1 +1 @@
pub mod cli;
pub mod command;

View File

@ -14,13 +14,13 @@ pub struct Db {
}
impl Db {
pub fn initialize() -> Self {
pub fn initialize(env: String) -> Self {
let base_dir: BaseDirs = match BaseDirs::new() {
Some(dirs) => dirs,
None => panic!("No config folder found."),
};
let config_file_path: PathBuf = base_dir.config_dir().join("rcc/.env");
let config_file_path: PathBuf = base_dir.config_dir().join("rcc/").join(env);
match dotenv::from_path(config_file_path.as_path()) {
Ok(env) => env,
@ -52,7 +52,7 @@ impl Db {
};
let conn: PooledConn = match pool.get_conn() {
Ok(db) => db,
Err(_) => panic!("Cannot connect to DB"),
Err(e) => panic!("Cannot connect to DB: {e}"),
};
conn

View File

@ -1,6 +1,8 @@
use time::PrimitiveDateTime;
#[derive(Debug, PartialEq, Eq)]
pub struct FilterLog {
pub run_ts: String,
pub run_ts: PrimitiveDateTime,
pub error_code: String,
pub error_msg: String,
pub mysql_error: String,

View File

@ -1,5 +1,5 @@
use clap::Parser;
use cli::cli::{Cli, Commands};
use cli::command::{Cli, Commands};
use database::db::Db;
use mysql::PooledConn;
use service::{
@ -15,7 +15,8 @@ pub mod service;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
let args = Cli::parse();
let db = Db::initialize();
let env = args.env.unwrap_or("local".to_string());
let db = Db::initialize(env);
let mut conn: PooledConn = db.get_connection();
match args.mode {
@ -31,12 +32,15 @@ fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
filter_id,
config,
all,
log,
} => {
let mut filter_service: FilterService = container::get_filter_service(&mut conn);
if config {
filter_service.get_filter_configs(&filter_id)
} else {
} else if all {
filter_service.get_filter(&filter_id, all)
} else if log {
filter_service.get_filter_log(&filter_id)
}
}
}

View File

@ -1,6 +1,6 @@
use mysql::{params, prelude::Queryable, PooledConn};
use crate::entity::{filter::Filter, filter_config::FilterConfig};
use crate::entity::{filter::Filter, filter_config::FilterConfig, filter_log::FilterLog};
#[derive(Debug)]
pub struct FilterRepo<'a> {
@ -12,10 +12,7 @@ impl<'a> FilterRepo<'a> {
Self { db_pool }
}
pub fn find_by_id(
&mut self,
filter_id: &usize,
) -> Result<Vec<Filter>, mysql::Error> {
pub fn find_by_id(&mut self, filter_id: &usize) -> Result<Vec<Filter>, mysql::Error> {
let stat = self.db_pool
.prep(
"SELECT f.filter_module_id, f.file_name, f.description, fm.filter_module_no, fm.filter_user
@ -65,4 +62,31 @@ impl<'a> FilterRepo<'a> {
},
)
}
pub(crate) fn find_filter_log(
&mut self,
filter_id: &usize,
) -> Result<Vec<FilterLog>, mysql::Error> {
let stat = self
.db_pool
.prep(
"
SELECT t1.run_ts, t1.error_code, t1.error_msg, t1.mysql_error
FROM filter_run_error_log t1
WHERE t1.filter_id = :filter_id
",
)
.unwrap();
self.db_pool.exec_map(
stat,
params! {"filter_id" => filter_id},
|(run_ts, error_code, error_msg, mysql_error)| FilterLog {
run_ts,
error_code,
error_msg,
mysql_error,
},
)
}
}

View File

@ -1,5 +1,7 @@
use colored::Colorize;
use crate::{
entity::{filter::Filter, filter_config::FilterConfig},
entity::{filter::Filter, filter_config::FilterConfig, filter_log::FilterLog},
repository::filter_repo::FilterRepo,
};
@ -67,4 +69,40 @@ impl<'a> FilterService<'a> {
Err(err) => panic!("{}", err),
};
}
pub fn get_filter_log(&mut self, filter_id: &usize) {
let result = self.repo.find_filter_log(filter_id);
match result {
Ok(filter_log) => {
if filter_log.is_empty() {
println!("No filter log found!");
} else {
println!("{}", "-".repeat(150));
filter_log.into_iter().for_each(|filter_log: FilterLog| {
println!(
"TS: {} Error Code: {}",
filter_log.run_ts, filter_log.error_code
);
match filter_log.error_code.as_str() {
"WARNING" => {
println!("{}", filter_log.error_msg.yellow());
}
"ERROR" => {
println!("{}", filter_log.error_msg.red());
}
"DEBUG" => {
println!("{}", filter_log.error_msg.green());
}
_ => {
println!("{}", filter_log.error_msg);
}
}
println!("{}", "-".repeat(150));
})
}
}
Err(err) => panic!("{}", err),
}
}
}