Skip to content

Commit 82670a8

Browse files
committed
Clean code, Error implementation, Refactor ...
1 parent ebbe8b1 commit 82670a8

File tree

15 files changed

+68
-47
lines changed

15 files changed

+68
-47
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ serde = { version = "1.0", features = ["derive"] }
1919

2020
serde_json = "1.0"
2121

22+
thiserror = "1.0.30"
2223
anyhow = { version = "1.0.53", features = ["backtrace"]}
2324

2425
log = "0.4.14"

src/epsilon/epsilon_error.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use thiserror::Error;
2+
3+
#[derive(Error, Debug)]
4+
pub enum EpsilonError {
5+
#[error("API server error -> {0}")]
6+
ApiServerError(String),
7+
}

src/epsilon/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
pub mod api;
2+
pub mod epsilon_error;
23
pub mod queue;
34
pub mod server;

src/epsilon/queue/epsilon_queue.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::epsilon::queue::queue_provider::Group;
2-
use crate::epsilon::server::template::Template;
2+
use crate::epsilon::server::templates::template::Template;
3+
34
use std::collections::{HashSet, VecDeque};
45

56
pub struct Queue {

src/epsilon/server/instance.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::sync::Arc;
1111
use std::time::Duration;
1212

1313
use crate::epsilon::server::state::EpsilonState;
14-
use crate::epsilon::server::template::Template;
14+
use crate::epsilon::server::templates::template::Template;
1515
use serde::Serialize;
1616

1717
pub struct Instance {

src/epsilon/server/instance_provider.rs

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use crate::k8s::label::Label;
22
use crate::{EResult, Kube};
3-
use std::collections::HashMap;
43

4+
use crate::epsilon::epsilon_error::EpsilonError;
55
use crate::epsilon::server::instance::{Instance, InstanceJson};
66
use crate::epsilon::server::instance_type::InstanceType;
77
use crate::epsilon::server::state::EpsilonState;
8-
use crate::epsilon::server::template::Template;
8+
use crate::epsilon::server::templates::template::Template;
99
use anyhow::format_err;
1010
use rocket::State;
1111
use serde_json::json;
@@ -47,7 +47,7 @@ impl InstanceProvider {
4747
&self,
4848
instance_type: &InstanceType,
4949
template_option: Option<&str>,
50-
state: Option<&EpsilonState>,
50+
state_option: Option<&EpsilonState>,
5151
) -> EResult<Vec<Instance>> {
5252
let mut labels = vec![Label::get_instance_type_label(instance_type)];
5353

@@ -59,9 +59,9 @@ impl InstanceProvider {
5959

6060
let map = pods.into_iter().map(Instance::from_pod);
6161

62-
match state {
63-
Some(_) => Ok(map
64-
.filter(|instance| instance.get_state().eq(state.unwrap()))
62+
match state_option {
63+
Some(state) => Ok(map
64+
.filter(|instance| instance.get_state().eq(state))
6565
.collect()),
6666

6767
None => Ok(map.collect()),
@@ -124,21 +124,30 @@ impl InstanceProvider {
124124
}
125125
}
126126

127-
#[rocket::post("/create/<template_name>")]
128-
pub async fn create(template_name: &str, instance_provider: &State<Arc<InstanceProvider>>) {
127+
#[rocket::post("/create/<template>")]
128+
pub async fn create(template: &str, instance_provider: &State<Arc<InstanceProvider>>) {
129129
instance_provider
130-
.start_instance(template_name)
130+
.start_instance(template)
131131
.await
132+
.map_err(|_e| {
133+
EpsilonError::ApiServerError(format!(
134+
"Failed to create an instance from template ({})",
135+
template
136+
))
137+
})
132138
.unwrap();
133139

134-
info!("An instance has been created (template={})", template_name);
140+
info!("An instance has been created (template={})", template);
135141
}
136142

137-
#[rocket::post("/close/<instance_name>")]
138-
pub async fn close(instance_name: &str, instance_provider: &State<Arc<InstanceProvider>>) {
143+
#[rocket::post("/close/<instance>")]
144+
pub async fn close(instance: &str, instance_provider: &State<Arc<InstanceProvider>>) {
139145
instance_provider
140-
.remove_instance(instance_name)
146+
.remove_instance(instance)
141147
.await
148+
.map_err(|_| {
149+
EpsilonError::ApiServerError(format!("Failed to close instance ({})", instance))
150+
})
142151
.unwrap();
143152
}
144153

@@ -147,16 +156,25 @@ pub async fn in_game(instance: &str, instance_provider: &State<Arc<InstanceProvi
147156
instance_provider
148157
.set_in_game_instance(instance, true)
149158
.await
159+
.map_err(|_| {
160+
EpsilonError::ApiServerError(format!("Failed to set in game instance ({})", instance))
161+
})
150162
.unwrap();
151163

152164
info!("An instance is now in game (name={})", instance);
153165
}
154166

155-
#[rocket::get("/get/<template_name>")]
156-
pub async fn get(template_name: &str, instance_provider: &State<Arc<InstanceProvider>>) -> String {
167+
#[rocket::get("/get/<template>")]
168+
pub async fn get(template: &str, instance_provider: &State<Arc<InstanceProvider>>) -> String {
157169
let instances = instance_provider
158-
.get_instances(&InstanceType::Server, Some(template_name), None)
170+
.get_instances(&InstanceType::Server, Some(template), None)
159171
.await
172+
.map_err(|_| {
173+
EpsilonError::ApiServerError(format!(
174+
"Failed to get instance from template {}",
175+
template
176+
))
177+
})
160178
.unwrap()
161179
.into_iter();
162180

@@ -174,6 +192,7 @@ pub async fn get_all(instance_provider: &State<Arc<InstanceProvider>>) -> String
174192
let instances = instance_provider
175193
.get_instances(&InstanceType::Server, None, None)
176194
.await
195+
.map_err(|_| EpsilonError::ApiServerError("Failed to get every instance".to_string()))
177196
.unwrap()
178197
.into_iter();
179198

src/epsilon/server/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ pub mod instance;
22
pub mod instance_provider;
33
pub mod instance_type;
44

5-
pub mod resources;
65
pub mod state;
7-
pub mod template;
6+
pub mod templates;
87

98
pub type EResult<T> = anyhow::Result<T>;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pub mod resources;
2+
pub mod template;
File renamed without changes.

src/epsilon/server/template.rs renamed to src/epsilon/server/templates/template.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::collections::HashMap;
44
use serde::{Deserialize, Serialize};
55

66
use crate::epsilon::server::instance_type::InstanceType;
7-
use crate::epsilon::server::resources::Resources;
7+
use crate::epsilon::server::templates::resources::Resources;
88

99
#[derive(Serialize, Deserialize)]
1010
pub struct Template {

0 commit comments

Comments
 (0)