@@ -6,11 +6,16 @@ use crate::epsilon::server::templates::template::Template;
6
6
use crate :: { EResult , EpsilonApi , InstanceProvider , Task } ;
7
7
use async_trait:: async_trait;
8
8
use std:: sync:: Arc ;
9
+ use std:: time:: Duration ;
9
10
use tokio:: sync:: Mutex ;
10
11
12
+ const DEFAULT_TIME : & ' static u32 = & 60 ;
13
+
11
14
pub struct HubTask {
12
15
instance_provider : Arc < InstanceProvider > ,
13
16
hub_template : Template ,
17
+
18
+ time : u32 ,
14
19
}
15
20
16
21
#[ async_trait]
@@ -23,6 +28,8 @@ impl Task for HubTask {
23
28
Ok ( Box :: new ( Self {
24
29
instance_provider : Arc :: clone ( instance_provider) ,
25
30
hub_template : instance_provider. get_template ( "hub" ) . await ?,
31
+
32
+ time : 0 ,
26
33
} ) )
27
34
}
28
35
@@ -37,15 +44,26 @@ impl Task for HubTask {
37
44
let proxy_number = proxies. len ( ) ;
38
45
39
46
if proxy_number > 0 {
40
- let hubs = self
47
+ let hubs_starting = self
41
48
. instance_provider
42
- . get_instances ( & InstanceType :: Server , Some ( template_name) , None )
49
+ . get_instances (
50
+ & InstanceType :: Server ,
51
+ Some ( template_name) ,
52
+ Some ( & EpsilonState :: Starting ) ,
53
+ )
43
54
. await ?;
44
55
45
- let hub_online_count_result = hubs. get_online_count ( ) . await ;
56
+ let hubs_ready = self
57
+ . instance_provider
58
+ . get_instances (
59
+ & InstanceType :: Server ,
60
+ Some ( template_name) ,
61
+ Some ( & EpsilonState :: Running ) ,
62
+ )
63
+ . await ?;
46
64
47
- if let Ok ( hub_online_count) = hub_online_count_result {
48
- let hub_number = hubs . len ( ) as u32 ;
65
+ if let Ok ( hub_online_count) = hubs_ready . get_online_count ( ) . await {
66
+ let hub_number = hubs_ready . len ( ) as u32 ;
49
67
50
68
let hub_necessary =
51
69
( ( hub_online_count as f32 * 1.6 / self . hub_template . slots as f32 ) + 1.0 ) as u32 ;
@@ -55,10 +73,18 @@ impl Task for HubTask {
55
73
}
56
74
57
75
if hub_number > hub_necessary {
76
+ if self . time != * DEFAULT_TIME {
77
+ self . time += 1 ;
78
+
79
+ return Ok ( ( ) ) ;
80
+ } else {
81
+ self . time = 0 ;
82
+ }
83
+
58
84
let mut n = 0 ;
59
85
let mut hub_option = None ;
60
86
61
- for instance in hubs {
87
+ for instance in hubs_ready {
62
88
let info_result = instance. get_info ( ) . await ;
63
89
64
90
if let Ok ( info) = info_result {
0 commit comments