Skip to content

Commit

Permalink
refactor(lib/accounting): revise ServerConsumptionRequest to use Serv…
Browse files Browse the repository at this point in the history
…erConsumptionParams

Signed-off-by: Sandro-Alessio Gierens <[email protected]>
  • Loading branch information
gierens committed Dec 31, 2024
1 parent 8066e75 commit 9afa15a
Showing 1 changed file with 102 additions and 79 deletions.
181 changes: 102 additions & 79 deletions lib/src/accounting/server_consumption.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ use crate::error::ApiError;
use anyhow::Context;
use chrono::{DateTime, FixedOffset};
use lrzcc_wire::accounting::{
ServerConsumptionAll, ServerConsumptionFlavors, ServerConsumptionProject,
ServerConsumptionServer, ServerConsumptionUser,
ServerConsumptionAll, ServerConsumptionFlavors, ServerConsumptionParams,
ServerConsumptionProject, ServerConsumptionServer, ServerConsumptionUser,
};
use reqwest::blocking::Client;
use reqwest::{Method, StatusCode, Url};
use reqwest::{Method, StatusCode};
use std::fmt::Debug;
use std::rc::Rc;

Expand All @@ -16,13 +16,7 @@ pub struct ServerConsumptionRequest {
url: String,
client: Rc<Client>,

begin: Option<DateTime<FixedOffset>>,
end: Option<DateTime<FixedOffset>>,
server: Option<String>,
user: Option<u32>,
project: Option<u32>,
all: bool,
detail: bool,
params: ServerConsumptionParams,
}

impl ServerConsumptionRequest {
Expand All @@ -31,57 +25,41 @@ impl ServerConsumptionRequest {
url: url.to_string(),
client: Rc::clone(client),

begin: None,
end: None,
server: None,
user: None,
project: None,
all: false,
detail: false,
params: ServerConsumptionParams {
begin: None,
end: None,
server: None,
user: None,
project: None,
all: false,
detail: false,
},
}
}

fn params(&self) -> Vec<(&str, String)> {
let mut params = Vec::new();
if let Some(begin) = self.begin {
params.push(("begin", begin.to_rfc3339().to_string()));
}
if let Some(end) = self.end {
params.push(("end", end.to_rfc3339().to_string()));
}
if let Some(server) = &self.server {
params.push(("server", server.to_string()));
} else if let Some(user) = self.user {
params.push(("user", user.to_string()));
} else if let Some(project) = self.project {
params.push(("project", project.to_string()));
} else if self.all {
params.push(("all", "1".to_string()));
}
if self.detail {
params.push(("detail", "1".to_string()));
}
params
}

pub fn begin(&mut self, begin: DateTime<FixedOffset>) -> &mut Self {
self.begin = Some(begin);
self.params.begin = Some(begin);
self
}

pub fn end(&mut self, end: DateTime<FixedOffset>) -> &mut Self {
self.end = Some(end);
self.params.end = Some(end);
self
}

pub fn server(
&mut self,
server: &str,
) -> Result<ServerConsumptionFlavors, ApiError> {
self.server = Some(server.to_string());
self.detail = false;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.server = Some(server.to_string());
self.params.detail = false;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -95,10 +73,15 @@ impl ServerConsumptionRequest {
&mut self,
server: &str,
) -> Result<ServerConsumptionServer, ApiError> {
self.server = Some(server.to_string());
self.detail = true;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.server = Some(server.to_string());
self.params.detail = true;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -112,10 +95,15 @@ impl ServerConsumptionRequest {
&mut self,
user: u32,
) -> Result<ServerConsumptionFlavors, ApiError> {
self.user = Some(user);
self.detail = false;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.user = Some(user);
self.params.detail = false;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -129,10 +117,15 @@ impl ServerConsumptionRequest {
&mut self,
user: u32,
) -> Result<ServerConsumptionUser, ApiError> {
self.user = Some(user);
self.detail = true;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.user = Some(user);
self.params.detail = true;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -146,10 +139,15 @@ impl ServerConsumptionRequest {
&mut self,
project: u32,
) -> Result<ServerConsumptionFlavors, ApiError> {
self.project = Some(project);
self.detail = false;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.project = Some(project);
self.params.detail = false;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -163,10 +161,15 @@ impl ServerConsumptionRequest {
&mut self,
project: u32,
) -> Result<ServerConsumptionProject, ApiError> {
self.project = Some(project);
self.detail = true;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.project = Some(project);
self.params.detail = true;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -177,10 +180,15 @@ impl ServerConsumptionRequest {
}

pub fn all(&mut self) -> Result<ServerConsumptionFlavors, ApiError> {
self.all = true;
self.detail = false;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.all = true;
self.params.detail = false;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -191,10 +199,15 @@ impl ServerConsumptionRequest {
}

pub fn all_detail(&mut self) -> Result<ServerConsumptionAll, ApiError> {
self.all = true;
self.detail = true;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.all = true;
self.params.detail = true;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -205,8 +218,13 @@ impl ServerConsumptionRequest {
}

pub fn mine(&mut self) -> Result<ServerConsumptionFlavors, ApiError> {
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand All @@ -217,9 +235,14 @@ impl ServerConsumptionRequest {
}

pub fn mine_detail(&mut self) -> Result<ServerConsumptionUser, ApiError> {
self.detail = true;
let url = Url::parse_with_params(self.url.as_str(), self.params())
.context("Could not parse URL GET parameters.")?;
self.params.detail = true;
let params = serde_urlencoded::to_string(&self.params)
.context("Failed to envode URL parameters")?;
let url = if params.is_empty() {
self.url.clone()
} else {
format!("{}?{}", self.url, params)
};
request(
&self.client,
Method::GET,
Expand Down

0 comments on commit 9afa15a

Please sign in to comment.