From 2ad8cab9beee039c03bb13cadce12e89ee1ff6d1 Mon Sep 17 00:00:00 2001 From: Zynh0722 Date: Fri, 9 Feb 2024 22:19:50 -0800 Subject: [PATCH] docker and messing with middleware --- Dockerfile | 9 ++++++++ docker-compose.yml | 13 +++++++++++ src/api_setup.rs | 2 +- src/cache.rs | 56 ++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 72 insertions(+), 8 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fd60a38 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM rust:1.76 + +WORKDIR /usr/src/lol-pairing-stat-fetcher-rs +COPY . . + +RUN cargo install --path . + +CMD ["lol-pairing-stat-fetcher-rs"] + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b00e16b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +volumes: + data: + +services: + fetcher: + build: . + depends_on: + - redis + + redis: + image: redis + volumes: + - data:/data diff --git a/src/api_setup.rs b/src/api_setup.rs index 236b0ea..889cc44 100644 --- a/src/api_setup.rs +++ b/src/api_setup.rs @@ -21,7 +21,7 @@ pub(crate) fn fetch_api() -> Result> { .default_headers(default_headers) .build()?, ) - .with(RedisMiddleware); + .with(RedisMiddleware::new("redis://redis/")?); let config = RiotApiConfig::with_client_builder(c_builder); Ok(RiotApi::new(config)) diff --git a/src/cache.rs b/src/cache.rs index b219834..cd7476a 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -1,9 +1,28 @@ +use std::error::Error; + +use redis::{aio::Connection, AsyncCommands, IntoConnectionInfo, RedisResult}; use reqwest::{Request, Response}; -use reqwest_middleware::{Middleware, Next, Result}; +use reqwest_middleware::{Middleware, Next}; use task_local_extensions::Extensions; use tracing::info; -pub(crate) struct RedisMiddleware; +type MiddlewareResult = reqwest_middleware::Result; +type MiddlewareError = reqwest_middleware::Error; + +pub(crate) struct RedisMiddleware { + pub redis_client: redis::Client, +} +impl RedisMiddleware { + pub(crate) fn new(params: T) -> Result> { + Ok(Self { + redis_client: redis::Client::open(params)?, + }) + } + + pub async fn get_connection(&self) -> RedisResult { + self.redis_client.get_async_connection().await + } +} #[async_trait::async_trait] impl Middleware for RedisMiddleware { @@ -12,11 +31,34 @@ impl Middleware for RedisMiddleware { req: Request, extensions: &mut Extensions, next: Next<'_>, - ) -> Result { - info!("Request started: {}", req.url().as_str()); - let res = next.run(req, extensions).await; - info!("Request ended: {:?}", res.as_ref().unwrap().url().as_str()); + ) -> MiddlewareResult { + // let con = self + // .get_connection() + // .await + // .map_err(|e| MiddlewareError::Middleware(e.into()))?; - res + // let url = req.url().as_str(); + // let data = con.get(url).await; + // match data { + // Ok(_) => todo!(), + // Err(_) => todo!(), + // } + info!("Request started: {}", req.url().as_str()); + let res = next.run(req, extensions).await?; + + // let mut con = self + // .get_connection() + // .await + // .map_err(|e| MiddlewareError::Middleware(e.into()))?; + + let url = res.url().to_owned(); + // let body = res.text().await?; + // let data: String = con + // .set(url.as_str(), &body) + // .await + // .map_err(|e| MiddlewareError::Middleware(e.into()))?; + info!("Request ended: {:?}", url.as_str()); + + Ok(res) } }