From 1f4d4770a38f653dc9bc2d4e3f2747f7312c8134 Mon Sep 17 00:00:00 2001 From: heimoshuiyu Date: Fri, 17 Jan 2025 09:51:12 +0800 Subject: [PATCH] fin update --- Cargo.lock | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 ++ Dockerfile | 4 ++ src/main.rs | 18 +++++++ 4 files changed, 171 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index db0f630..cf82709 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,12 +17,71 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "aligned-vec" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.95" @@ -261,6 +320,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "colored" version = "2.2.0" @@ -328,6 +393,29 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -566,6 +654,18 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "human_bytes" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "1.5.2" @@ -803,8 +903,11 @@ dependencies = [ "anyhow", "axum", "colored", + "env_logger", + "human_bytes", "image", "libwebp-sys 0.11.0", + "log", "reqwest", "thiserror 2.0.9", "tokio", @@ -844,6 +947,12 @@ version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.12.1" @@ -950,9 +1059,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "loop9" @@ -1393,6 +1502,35 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "reqwest" version = "0.12.12" @@ -1969,6 +2107,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "v_frame" version = "0.3.8" diff --git a/Cargo.toml b/Cargo.toml index 0920582..a483ebf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,8 +7,11 @@ edition = "2021" anyhow = "1.0.95" axum = { version = "0.8.1", features = ["http2"] } colored = "2.2.0" +env_logger = "0.11.6" +human_bytes = "0.4.3" image = "0.25.5" libwebp-sys = "0.11.0" +log = "0.4.25" reqwest = { version = "0.12.12", default-features = false, features = ["json", "stream", "rustls-tls"] } thiserror = "2.0.9" tokio = { version = "1.42.0", features = ["full"] } diff --git a/Dockerfile b/Dockerfile index cbdbb91..5b2873a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,9 @@ from docker.io/alpine:latest +RUN apk add --no-cache ca-certificates + +ENV RUST_LOG=info + COPY ./imageproxy /usr/bin/imageproxy EXPOSE 2999 diff --git a/src/main.rs b/src/main.rs index b88d43d..80962d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,8 @@ use axum::{ response::Response, routing::get, }; +use colored::Colorize; +use human_bytes::human_bytes; use image::GenericImageView; use reqwest::StatusCode; use webp::WebPConfig; @@ -52,9 +54,12 @@ impl Downloader { } #[tokio::main] async fn main() -> anyhow::Result<()> { + env_logger::builder().format_timestamp(None).init(); let downloader = Downloader::new(); let downloader = Arc::new(downloader); + log::info!("Logging enabled"); + let app = axum::Router::new() .fallback(get(api_proxy_image)) .with_state(downloader); @@ -142,6 +147,19 @@ async fn api_proxy_image( })?; let convert_time = convert_begin.elapsed(); + log::info!( + "download_time: {}ms, resize_time: {}ms, convert_time: {}ms, {} -> {} save size: {}% [{}]", + download_time.as_millis().to_string().green(), + resize_time.as_millis().to_string().green(), + convert_time.as_millis().to_string().green(), + human_bytes(original_size as f64).red(), + human_bytes(webp.len() as f64).yellow(), + ((webp.len() as f64 / original_size as f64 * 100.0) as i32) + .to_string() + .green(), + target_url, + ); + Ok(Response::builder() .header("Content-Type", "image/webp") .header("Cache-Control", "public, max-age=31536000")