Skip to content

Commit a7cdf3b

Browse files
committed
Coherent clean task, and little refactor
1 parent 7b3fba9 commit a7cdf3b

File tree

7 files changed

+35
-22
lines changed

7 files changed

+35
-22
lines changed

src/epsilon/server/instance.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,14 @@ impl Instance {
119119
self.get_instance_slots() - self.get_online_count().await
120120
}
121121

122-
pub fn need_close(&self) -> bool {
122+
pub fn is_succeeded(&self) -> bool {
123+
self.pod.status.as_ref().unwrap().phase.as_ref().unwrap() == "Succeeded"
124+
}
125+
126+
pub fn is_failed(&self) -> bool {
123127
let phase = self.pod.status.as_ref().unwrap().phase.as_ref().unwrap();
124128

125-
phase == "Failed" || phase == "Unknown" || phase == "Succeeded"
129+
phase == "Failed" || phase == "Unknown"
126130
}
127131

128132
pub fn get_state(&self) -> EpsilonState {
@@ -141,7 +145,7 @@ impl Instance {
141145
let label = &labels.get(Label::IN_GAME_LABEL);
142146
let is_in_game = label.is_some() && label.unwrap() == "true";
143147

144-
let is_stopping = metadata.deletion_timestamp.is_some() || self.need_close();
148+
let is_stopping = metadata.deletion_timestamp.is_some() || self.is_succeeded();
145149

146150
if is_ready && is_in_game {
147151
EpsilonState::InGame

src/epsilon/server/instance_provider.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ impl InstanceProvider {
4848
instance_type: &InstanceType,
4949
template_option: Option<&str>,
5050
state_option: Option<&EpsilonState>,
51+
get_all: bool,
5152
) -> EResult<Vec<Instance>> {
5253
let mut labels = vec![Label::get_instance_type_label(instance_type)];
5354

@@ -61,10 +62,12 @@ impl InstanceProvider {
6162

6263
match state_option {
6364
Some(state) => Ok(map
64-
.filter(|instance| instance.get_state().eq(state))
65+
.filter(|instance| instance.get_state() == *state)
6566
.collect()),
6667

67-
None => Ok(map.collect()),
68+
None => Ok(map
69+
.filter(|instance| get_all || !instance.is_failed())
70+
.collect()),
6871
}
6972
}
7073

@@ -167,7 +170,7 @@ pub async fn in_game(instance: &str, instance_provider: &State<Arc<InstanceProvi
167170
#[rocket::get("/get/<template>")]
168171
pub async fn get(template: &str, instance_provider: &State<Arc<InstanceProvider>>) -> String {
169172
let instances = instance_provider
170-
.get_instances(&InstanceType::Server, Some(template), None)
173+
.get_instances(&InstanceType::Server, Some(template), None, false)
171174
.await
172175
.map_err(|_| {
173176
EpsilonError::ApiServerError(format!(
@@ -190,7 +193,7 @@ pub async fn get(template: &str, instance_provider: &State<Arc<InstanceProvider>
190193
#[rocket::get("/get_all")]
191194
pub async fn get_all(instance_provider: &State<Arc<InstanceProvider>>) -> String {
192195
let instances = instance_provider
193-
.get_instances(&InstanceType::Server, None, None)
196+
.get_instances(&InstanceType::Server, None, None, false)
194197
.await
195198
.map_err(|_| EpsilonError::ApiServerError("Failed to get every instance".to_string()))
196199
.unwrap()

src/main.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::epsilon::queue::queue_provider::QueueProvider;
66
use crate::epsilon::server::instance_provider::InstanceProvider;
77
use crate::epsilon::server::EResult;
88
use crate::k8s::kube::Kube;
9+
use crate::tasks::clean_task::CleanTask;
910
use crate::tasks::hub_task::HubTask;
1011
use crate::tasks::proxy_task::ProxyTask;
1112
use crate::tasks::queue_task::QueueTask;
@@ -94,10 +95,10 @@ async fn main() -> EResult<()> {
9495
HubTask::init(&epsilon_api, &instance_provider, &queue_provider).await?,
9596
2000,
9697
)
97-
// .ignite_task(
98-
// CleanTask::init(&epsilon_api, &instance_provider, &queue_provider).await?,
99-
// 10000,
100-
// )
98+
.ignite_task(
99+
CleanTask::init(&epsilon_api, &instance_provider, &queue_provider).await?,
100+
10000,
101+
)
101102
.ignite_task(
102103
QueueTask::init(&epsilon_api, &instance_provider, &queue_provider).await?,
103104
2000,

src/tasks/clean_task.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,42 +27,38 @@ impl Task for CleanTask {
2727
async fn run(&mut self) -> EResult<()> {
2828
let servers = self
2929
.instance_provider
30-
.get_instances(&InstanceType::Server, None, None)
30+
.get_instances(&InstanceType::Server, None, None, false)
3131
.await?;
3232

3333
let proxies = self
3434
.instance_provider
35-
.get_instances(&InstanceType::Proxy, None, None)
35+
.get_instances(&InstanceType::Proxy, None, None, false)
3636
.await?;
3737

3838
for instance in servers {
39-
if instance.need_close() {
39+
if instance.is_succeeded() {
4040
let name = instance.get_name();
4141
let event = EpsilonEvent::ClearServer(name.to_string());
4242

4343
self.epsilon_api.send(event);
4444
self.instance_provider.remove_instance(name).await?;
45-
46-
info!("Cleaned server: {}", name);
4745
}
4846
}
4947

5048
for instance in proxies {
51-
if instance.need_close() {
49+
if instance.is_succeeded() {
5250
let name = instance.get_name();
5351
let event = EpsilonEvent::ClearServer(name.to_string());
5452

5553
self.epsilon_api.send(event);
5654
self.instance_provider.remove_instance(name).await?;
57-
58-
info!("Clean proxy: {}", name);
5955
}
6056
}
6157

6258
Ok(())
6359
}
6460

6561
fn get_name(&self) -> &'static str {
66-
"Clean:Task, clean all servers and proxies that need to be closed"
62+
"Clean:Task, clean all servers and proxies that need to be closed (Succeeded = true)"
6763
}
6864
}

src/tasks/hub_task.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ impl Task for HubTask {
3838

3939
let proxies = self
4040
.instance_provider
41-
.get_instances(&InstanceType::Proxy, None, Some(&EpsilonState::Running))
41+
.get_instances(
42+
&InstanceType::Proxy,
43+
None,
44+
Some(&EpsilonState::Running),
45+
false,
46+
)
4247
.await?;
4348

4449
let proxy_number = proxies.len();
@@ -50,6 +55,7 @@ impl Task for HubTask {
5055
&InstanceType::Server,
5156
Some(template_name),
5257
Some(&EpsilonState::Starting),
58+
false,
5359
)
5460
.await?;
5561

@@ -60,6 +66,7 @@ impl Task for HubTask {
6066
&InstanceType::Server,
6167
Some(template_name),
6268
Some(&EpsilonState::Running),
69+
false,
6370
)
6471
.await?;
6572

src/tasks/proxy_task.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ impl Task for ProxyTask {
3030

3131
let proxies = self
3232
.instance_provider
33-
.get_instances(&InstanceType::Proxy, None, None)
33+
.get_instances(&InstanceType::Proxy, None, None, false)
3434
.await?;
3535

3636
if proxies.is_empty() {

src/tasks/queue_task.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ impl Task for QueueTask {
3939
&InstanceType::Server,
4040
Some(template_name),
4141
Some(&EpsilonState::Starting),
42+
false,
4243
)
4344
.await?;
4445

@@ -48,6 +49,7 @@ impl Task for QueueTask {
4849
&InstanceType::Server,
4950
Some(template_name),
5051
Some(&EpsilonState::Running),
52+
false,
5153
)
5254
.await?;
5355

0 commit comments

Comments
 (0)