use log crate

This commit is contained in:
DataHearth 2022-03-06 00:24:47 +01:00
parent 4c55e8cfff
commit 264102b92d
No known key found for this signature in database
GPG Key ID: E88FD356ACC5F3C4
5 changed files with 42 additions and 22 deletions

16
Cargo.lock generated
View File

@ -25,6 +25,12 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "chrono" name = "chrono"
version = "0.4.19" version = "0.4.19"
@ -74,6 +80,7 @@ version = "0.4.1"
dependencies = [ dependencies = [
"chrono", "chrono",
"clap", "clap",
"log",
"serde", "serde",
"serde_json", "serde_json",
] ]
@ -127,6 +134,15 @@ version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c"
[[package]]
name = "log"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.4.1" version = "2.4.1"

View File

@ -12,4 +12,5 @@ readme = "README.md"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
clap = { version = "3.0", features = ["derive"] } clap = { version = "3.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"
chrono = "0.4" chrono = "0.4"
log = "0.4"

View File

@ -1,6 +1,7 @@
use chrono::{Date, DateTime, Datelike, FixedOffset, NaiveDate, NaiveDateTime, TimeZone, Utc}; use chrono::{Date, DateTime, Datelike, FixedOffset, NaiveDate, NaiveDateTime, TimeZone, Utc};
use serde::{self, Deserialize, Deserializer}; use serde::{self, Deserialize, Deserializer};
use std::{num::TryFromIntError, process::exit}; use std::{num::TryFromIntError, process::exit};
use log::error;
pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<FixedOffset>, D::Error> pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<FixedOffset>, D::Error>
where where
@ -25,7 +26,7 @@ fn get_day_month(year: i32, month: u32) -> u32 {
.num_days(), .num_days(),
) )
.unwrap_or_else(|_: TryFromIntError| { .unwrap_or_else(|_: TryFromIntError| {
eprintln!("failed to convert i64 to u32"); error!("failed to convert i64 to u32");
exit(1); exit(1);
}) })
} }
@ -44,7 +45,7 @@ pub fn get_past_date(mut year: i32, mut month: u32, mut day: u32, day_remove: u3
2 => new_day, 2 => new_day,
1 => new_day - 1, 1 => new_day - 1,
_ => { _ => {
eprintln!("invalid day in condition..."); error!("invalid day in condition...");
exit(1) exit(1)
} }
} }
@ -74,14 +75,14 @@ pub fn parse_date(date: Option<String>) -> (DateTime<Utc>, Option<DateTime<Utc>>
}; };
let base_from = NaiveDateTime::parse_from_str(&base_from, "%FT%T").unwrap_or_else(|e| { let base_from = NaiveDateTime::parse_from_str(&base_from, "%FT%T").unwrap_or_else(|e| {
eprintln!( error!(
"failed to parse from date. Verify its format (example: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS): {}", "failed to parse from date. Verify its format (example: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS): {}",
e e
); );
exit(1); exit(1);
}); });
let base_to = NaiveDateTime::parse_from_str(&base_to, "%FT%T").unwrap_or_else(|e| { let base_to = NaiveDateTime::parse_from_str(&base_to, "%FT%T").unwrap_or_else(|e| {
eprintln!( error!(
"failed to parse to date. Verify its format (example: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS): {}", "failed to parse to date. Verify its format (example: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS): {}",
e e
); );
@ -94,7 +95,7 @@ pub fn parse_date(date: Option<String>) -> (DateTime<Utc>, Option<DateTime<Utc>>
let date = NaiveDateTime::parse_from_str(&formatted_date, "%FT%T") let date = NaiveDateTime::parse_from_str(&formatted_date, "%FT%T")
.unwrap_or_else(|e| { .unwrap_or_else(|e| {
eprintln!( error!(
"failed to parse date. Verify its format (example: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS): {}", "failed to parse date. Verify its format (example: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS): {}",
e e
); );

View File

@ -1,4 +1,5 @@
use chrono::{DateTime, FixedOffset}; use chrono::{DateTime, FixedOffset};
use log::{error, warn};
use serde::Deserialize; use serde::Deserialize;
use std::{ use std::{
num::ParseFloatError, num::ParseFloatError,
@ -64,7 +65,7 @@ pub fn process_imgs(
.unwrap_or_else(failed_convert_size) .unwrap_or_else(failed_convert_size)
* 1000 as f32 * 1000 as f32
} else { } else {
eprintln!("Unknown size identification: {}", image.size); error!("Unknown size identification: {}", image.size);
exit(1); exit(1);
} }
} }
@ -85,18 +86,18 @@ fn get_images(repo: Option<String>) -> Vec<u8> {
match cmd.output() { match cmd.output() {
Ok(o) => { Ok(o) => {
if !o.status.success() { if !o.status.success() {
eprintln!( error!(
"{}", "{}",
std::str::from_utf8(&o.stderr).expect("failed to parse STDERR to UTF-8") std::str::from_utf8(&o.stderr).expect("failed to parse STDERR to UTF-8")
); );
eprintln!("failed to retrieve docker images. Please checkout STDERR"); error!("failed to retrieve docker images. Please checkout STDERR");
exit(1); exit(1);
} }
o.stdout o.stdout
} }
Err(e) => { Err(e) => {
eprintln!("docker command failed: {}", e); error!("docker command failed: {}", e);
exit(1); exit(1);
} }
} }
@ -106,7 +107,7 @@ fn parse_imgs(repository: Option<String>) -> Vec<String> {
let stdout = get_images(repository); let stdout = get_images(repository);
let output = String::from_utf8(stdout).unwrap_or_else(|e| { let output = String::from_utf8(stdout).unwrap_or_else(|e| {
eprintln!("failed to parse docker output: {}", e); error!("failed to parse docker output: {}", e);
exit(1); exit(1);
}); });
let mut images: Vec<String> = output.lines().map(|s| s.to_string()).collect(); let mut images: Vec<String> = output.lines().map(|s| s.to_string()).collect();
@ -114,7 +115,7 @@ fn parse_imgs(repository: Option<String>) -> Vec<String> {
images.remove(images.len() - 1); images.remove(images.len() - 1);
if images.len() == 0 { if images.len() == 0 {
println!("No images found for current timestamp and/or repository"); warn!("No images found for current timestamp and/or repository");
exit(1); exit(1);
} }
@ -122,6 +123,6 @@ fn parse_imgs(repository: Option<String>) -> Vec<String> {
} }
fn failed_convert_size(e: ParseFloatError) -> f32 { fn failed_convert_size(e: ParseFloatError) -> f32 {
eprintln!("failed to convert \"String\" to \"f32\": {}", e); error!("failed to convert \"String\" to \"f32\": {}", e);
exit(1); exit(1);
} }

View File

@ -3,6 +3,7 @@ mod images;
use clap::Parser; use clap::Parser;
use std::process::{Command, Stdio}; use std::process::{Command, Stdio};
use log::{error, info};
use crate::images::process_imgs; use crate::images::process_imgs;
@ -46,41 +47,41 @@ fn main() {
let (ids, saved_size) = process_imgs(args.repository, tags, args.date); let (ids, saved_size) = process_imgs(args.repository, tags, args.date);
if args.dry_run { if args.dry_run {
println!("dry run activated"); info!("dry run activated");
} else { } else {
let mut cmd = Command::new(DOCKER_BIN); let mut cmd = Command::new(DOCKER_BIN);
cmd.arg("rmi"); cmd.arg("rmi");
if args.force { if args.force {
println!("\"--force\" flag set"); info!("\"--force\" flag set");
cmd.arg("--force"); cmd.arg("--force");
} }
if ids.len() == 0 { if ids.len() == 0 {
println!("nothing to do..."); info!("nothing to do...");
return; return;
} }
if args.verbose { if args.verbose {
println!("trigger \"docker rmi\" command"); info!("trigger \"docker rmi\" command");
} }
match cmd.args(&ids).stdout(Stdio::null()).status() { match cmd.args(&ids).stdout(Stdio::null()).status() {
Ok(s) => { Ok(s) => {
if !s.success() { if !s.success() {
eprintln!("failed to delete images. Please checkout STDERR") error!("failed to delete images. Please checkout STDERR")
} }
println!("images deleted!") info!("images deleted!")
} }
Err(e) => eprintln!("docker command failed: {}", e), Err(e) => error!("docker command failed: {}", e),
}; };
} }
if args.verbose || args.dry_run { if args.verbose || args.dry_run {
println!("deleted images: {:#?}", ids); info!("deleted images: {:#?}", ids);
} }
println!( info!(
"Total disk space saved: {}", "Total disk space saved: {}",
if saved_size / 1000 as f32 > 1 as f32 { if saved_size / 1000 as f32 > 1 as f32 {
format!("{:.2}GB", saved_size / 1000.0) format!("{:.2}GB", saved_size / 1000.0)