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

View File

@ -7,6 +7,7 @@ edition = "2021"
[dependencies] [dependencies]
clap = { version = "4.2.1", features = ["derive"] } clap = { version = "4.2.1", features = ["derive"] }
colored = "2.0.0"
directories = "5.0.0" directories = "5.0.0"
dotenv = "0.15.0" dotenv = "0.15.0"
log = "0.4.17" 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, all: bool,
#[arg(short, long)] #[arg(short, long)]
config: bool, 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 { impl Db {
pub fn initialize() -> Self { pub fn initialize(env: String) -> Self {
let base_dir: BaseDirs = match BaseDirs::new() { let base_dir: BaseDirs = match BaseDirs::new() {
Some(dirs) => dirs, Some(dirs) => dirs,
None => panic!("No config folder found."), 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()) { match dotenv::from_path(config_file_path.as_path()) {
Ok(env) => env, Ok(env) => env,
@ -52,7 +52,7 @@ impl Db {
}; };
let conn: PooledConn = match pool.get_conn() { let conn: PooledConn = match pool.get_conn() {
Ok(db) => db, Ok(db) => db,
Err(_) => panic!("Cannot connect to DB"), Err(e) => panic!("Cannot connect to DB: {e}"),
}; };
conn conn

View File

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

View File

@ -1,5 +1,5 @@
use clap::Parser; use clap::Parser;
use cli::cli::{Cli, Commands}; use cli::command::{Cli, Commands};
use database::db::Db; use database::db::Db;
use mysql::PooledConn; use mysql::PooledConn;
use service::{ use service::{
@ -15,7 +15,8 @@ pub mod service;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> { fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
let args = Cli::parse(); 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(); let mut conn: PooledConn = db.get_connection();
match args.mode { match args.mode {
@ -31,12 +32,15 @@ fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
filter_id, filter_id,
config, config,
all, all,
log,
} => { } => {
let mut filter_service: FilterService = container::get_filter_service(&mut conn); let mut filter_service: FilterService = container::get_filter_service(&mut conn);
if config { if config {
filter_service.get_filter_configs(&filter_id) filter_service.get_filter_configs(&filter_id)
} else { } else if all {
filter_service.get_filter(&filter_id, 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 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)] #[derive(Debug)]
pub struct FilterRepo<'a> { pub struct FilterRepo<'a> {
@ -12,10 +12,7 @@ impl<'a> FilterRepo<'a> {
Self { db_pool } Self { db_pool }
} }
pub fn find_by_id( pub fn find_by_id(&mut self, filter_id: &usize) -> Result<Vec<Filter>, mysql::Error> {
&mut self,
filter_id: &usize,
) -> Result<Vec<Filter>, mysql::Error> {
let stat = self.db_pool let stat = self.db_pool
.prep( .prep(
"SELECT f.filter_module_id, f.file_name, f.description, fm.filter_module_no, fm.filter_user "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::{ use crate::{
entity::{filter::Filter, filter_config::FilterConfig}, entity::{filter::Filter, filter_config::FilterConfig, filter_log::FilterLog},
repository::filter_repo::FilterRepo, repository::filter_repo::FilterRepo,
}; };
@ -67,4 +69,40 @@ impl<'a> FilterService<'a> {
Err(err) => panic!("{}", err), 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),
}
}
} }