From f72a20ef61b83b4ef8e8d03b3156c8415074b496 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Thu, 24 Mar 2022 22:20:09 -0500 Subject: refactor: rename api module to http --- zoned/src/api.rs | 92 ------------------------------------------------------- zoned/src/http.rs | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ zoned/src/lib.rs | 2 +- zoned/src/main.rs | 4 +-- 4 files changed, 95 insertions(+), 95 deletions(-) delete mode 100644 zoned/src/api.rs create mode 100644 zoned/src/http.rs diff --git a/zoned/src/api.rs b/zoned/src/api.rs deleted file mode 100644 index 5236764..0000000 --- a/zoned/src/api.rs +++ /dev/null @@ -1,92 +0,0 @@ -use axum::{ - extract::{ws::WebSocketUpgrade, Extension, Query, TypedHeader}, - headers, - response::IntoResponse, - routing::{get, post}, - Json, Router, -}; -use std::sync::Arc; -use tracing::{info, instrument, warn}; -use zone_core::{Container, ContainerOptions, FilterContainer}; -use zone_nspawn::NSpawn; - -use crate::{ws, Error, Result, State}; - -#[instrument()] -pub fn build_routes() -> Router { - Router::new() - .route("/test", get(test_endpoint)) - .route("/container", post(clone_container)) - .route("/container/list?", get(container_list)) - .route("/ws", get(ws_upgrade)) -} - -/// # Test endpoint -/// -/// Returns a list of containers based on the query. -#[instrument(ret, skip(state))] -async fn test_endpoint(Extension(state): Extension>) -> Json { - Json(state.zfs.config.pool_name.to_owned()) -} - -/// List containers -/// -/// Returns a list of containers based on the query. -#[instrument(err, ret)] -async fn container_list( - container: Option>, -) -> Result>> { - let mut containers = NSpawn::get_containers()?.into_iter().filter_map(|c| { - Container::try_from(c) - .map_err(|err| warn!("Ignoring invalid nspawn container {:?}", err)) - .ok() - }); - - match container { - Some(Query(params)) => Ok(containers.filter_container(params).into()), - _ => Ok(containers.collect::>().into()), - } -} - -/// Create container -/// -/// Creates a new container volume from the provided container json data -#[instrument(err, ret, skip(state))] -async fn clone_container( - Json(container): Json, - Extension(state): Extension>, -) -> Result> { - state - .zfs - .clone_from_latest( - format!("{}-{}", container.user, container.id).into(), - container.template.into(), - )? - .try_into() - .map_err(Error::from) - .map(Container::into) -} - -/// Upgrade to websocket -/// -/// Creates a new container volume from the provided container json data -#[instrument(ret, skip_all)] -async fn ws_upgrade( - ws: WebSocketUpgrade, - user_agent: Option>, - Extension(state): Extension>, -) -> impl IntoResponse { - let ua = user_agent.map_or("Unknown".to_string(), |u| u.to_string()); - info!(%ua, "Client connected"); - - ws.on_upgrade(|socket| ws::handler(socket, state)) -} - -#[cfg(test)] -mod tests { - #[test] - fn hello_world() { - // use super::*; - assert!("true" == "true"); - } -} diff --git a/zoned/src/http.rs b/zoned/src/http.rs new file mode 100644 index 0000000..5236764 --- /dev/null +++ b/zoned/src/http.rs @@ -0,0 +1,92 @@ +use axum::{ + extract::{ws::WebSocketUpgrade, Extension, Query, TypedHeader}, + headers, + response::IntoResponse, + routing::{get, post}, + Json, Router, +}; +use std::sync::Arc; +use tracing::{info, instrument, warn}; +use zone_core::{Container, ContainerOptions, FilterContainer}; +use zone_nspawn::NSpawn; + +use crate::{ws, Error, Result, State}; + +#[instrument()] +pub fn build_routes() -> Router { + Router::new() + .route("/test", get(test_endpoint)) + .route("/container", post(clone_container)) + .route("/container/list?", get(container_list)) + .route("/ws", get(ws_upgrade)) +} + +/// # Test endpoint +/// +/// Returns a list of containers based on the query. +#[instrument(ret, skip(state))] +async fn test_endpoint(Extension(state): Extension>) -> Json { + Json(state.zfs.config.pool_name.to_owned()) +} + +/// List containers +/// +/// Returns a list of containers based on the query. +#[instrument(err, ret)] +async fn container_list( + container: Option>, +) -> Result>> { + let mut containers = NSpawn::get_containers()?.into_iter().filter_map(|c| { + Container::try_from(c) + .map_err(|err| warn!("Ignoring invalid nspawn container {:?}", err)) + .ok() + }); + + match container { + Some(Query(params)) => Ok(containers.filter_container(params).into()), + _ => Ok(containers.collect::>().into()), + } +} + +/// Create container +/// +/// Creates a new container volume from the provided container json data +#[instrument(err, ret, skip(state))] +async fn clone_container( + Json(container): Json, + Extension(state): Extension>, +) -> Result> { + state + .zfs + .clone_from_latest( + format!("{}-{}", container.user, container.id).into(), + container.template.into(), + )? + .try_into() + .map_err(Error::from) + .map(Container::into) +} + +/// Upgrade to websocket +/// +/// Creates a new container volume from the provided container json data +#[instrument(ret, skip_all)] +async fn ws_upgrade( + ws: WebSocketUpgrade, + user_agent: Option>, + Extension(state): Extension>, +) -> impl IntoResponse { + let ua = user_agent.map_or("Unknown".to_string(), |u| u.to_string()); + info!(%ua, "Client connected"); + + ws.on_upgrade(|socket| ws::handler(socket, state)) +} + +#[cfg(test)] +mod tests { + #[test] + fn hello_world() { + // use super::*; + assert!("true" == "true"); + } +} diff --git a/zoned/src/lib.rs b/zoned/src/lib.rs index e118e68..f44f000 100644 --- a/zoned/src/lib.rs +++ b/zoned/src/lib.rs @@ -2,7 +2,7 @@ pub use crate::config::Config; pub use crate::error::{Error, Result}; pub use crate::state::State; -pub mod api; +pub mod http; mod config; mod error; mod state; diff --git a/zoned/src/main.rs b/zoned/src/main.rs index 14b5ca1..d6aee47 100644 --- a/zoned/src/main.rs +++ b/zoned/src/main.rs @@ -7,7 +7,7 @@ use figment::{ Figment, }; use tracing::{debug_span, info, instrument, Instrument}; -use zoned::{api, Config, State}; +use zoned::{http, Config, State}; #[tokio::main] #[instrument(err)] @@ -22,7 +22,7 @@ async fn main() -> Result<(), zoned::Error> { let shared_state = State::try_from(&config)?.into_arc(); - let routes = api::build_routes().layer(Extension(shared_state)); + let routes = http::build_routes().layer(Extension(shared_state)); let socket_addr = SocketAddr::from(config); -- cgit v1.2.3-70-g09d2