@@ -14,7 +14,9 @@ lazy_static! {
1414#[ derive( Parser ) ]
1515struct Args {
1616 #[ clap( long) ]
17- test : bool ,
17+ staging : bool ,
18+ #[ clap( long) ]
19+ local : bool ,
1820 #[ clap( long = "d" , short = 'd' , value_parser = parse_hashrate) ]
1921 downstream_hashrate : Option < f32 > ,
2022 #[ clap( long = "loglevel" , short = 'l' ) ]
@@ -29,8 +31,10 @@ struct Args {
2931 adjustment_interval : Option < u64 > ,
3032 #[ clap( long = "pool" , short = 'p' , value_delimiter = ',' ) ]
3133 pool_addresses : Option < Vec < String > > ,
32- #[ clap( long = "test-pool" , value_delimiter = ',' ) ]
33- test_pool_addresses : Option < Vec < String > > ,
34+ #[ clap( long = "staging-pool" , value_delimiter = ',' ) ]
35+ staging_pool_addresses : Option < Vec < String > > ,
36+ #[ clap( long = "local-pool" , value_delimiter = ',' ) ]
37+ local_pool_addresses : Option < Vec < String > > ,
3438 #[ clap( long) ]
3539 token : Option < String > ,
3640 #[ clap( long) ]
@@ -52,32 +56,60 @@ struct ConfigFile {
5256 token : Option < String > ,
5357 tp_address : Option < String > ,
5458 pool_addresses : Option < Vec < String > > ,
55- test_pool_addresses : Option < Vec < String > > ,
59+ staging_pool_addresses : Option < Vec < String > > ,
60+ local_pool_addresses : Option < Vec < String > > ,
5661 interval : Option < u64 > ,
5762 delay : Option < u64 > ,
5863 downstream_hashrate : Option < String > ,
5964 loglevel : Option < String > ,
6065 nc_loglevel : Option < String > ,
6166 sv1_log : Option < bool > ,
62- test : Option < bool > ,
67+ staging : Option < bool > ,
68+ local : Option < bool > ,
6369 listening_addr : Option < String > ,
6470 api_server_port : Option < String > ,
6571 monitor : Option < bool > ,
6672 auto_update : Option < bool > ,
6773}
6874
75+ impl ConfigFile {
76+ pub fn default ( ) -> Self {
77+ ConfigFile {
78+ token : None ,
79+ tp_address : None ,
80+ pool_addresses : None ,
81+ staging_pool_addresses : None ,
82+ local_pool_addresses : None ,
83+ interval : None ,
84+ delay : None ,
85+ downstream_hashrate : None ,
86+ loglevel : None ,
87+ nc_loglevel : None ,
88+ sv1_log : None ,
89+ staging : None ,
90+ local : None ,
91+ listening_addr : None ,
92+ api_server_port : None ,
93+ monitor : None ,
94+ auto_update : None ,
95+ }
96+ }
97+ }
98+
6999pub struct Configuration {
70100 token : Option < String > ,
71101 tp_address : Option < String > ,
72102 pool_addresses : Option < Vec < SocketAddr > > ,
73- test_pool_addresses : Option < Vec < SocketAddr > > ,
103+ staging_pool_addresses : Option < Vec < SocketAddr > > ,
104+ local_pool_addresses : Option < Vec < SocketAddr > > ,
74105 interval : u64 ,
75106 delay : u64 ,
76107 downstream_hashrate : f32 ,
77108 loglevel : String ,
78109 nc_loglevel : String ,
79110 sv1_log : bool ,
80- test : bool ,
111+ staging : bool ,
112+ local : bool ,
81113 listening_addr : Option < String > ,
82114 api_server_port : String ,
83115 monitor : bool ,
@@ -93,10 +125,12 @@ impl Configuration {
93125 }
94126
95127 pub fn pool_address ( ) -> Option < Vec < SocketAddr > > {
96- if CONFIG . test {
97- CONFIG . test_pool_addresses . clone ( ) // Return test pool addresses in test mode
128+ if CONFIG . staging {
129+ CONFIG . staging_pool_addresses . clone ( ) // Return staging pool addresses
130+ } else if CONFIG . local {
131+ CONFIG . local_pool_addresses . clone ( ) // Return local pool addresses
98132 } else {
99- CONFIG . pool_addresses . clone ( )
133+ CONFIG . pool_addresses . clone ( ) // Return production pool addresses
100134 }
101135 }
102136
@@ -149,8 +183,25 @@ impl Configuration {
149183 CONFIG . sv1_log
150184 }
151185
152- pub fn test ( ) -> bool {
153- CONFIG . test
186+ pub fn staging ( ) -> bool {
187+ CONFIG . staging
188+ }
189+
190+ pub fn local ( ) -> bool {
191+ CONFIG . local
192+ }
193+
194+ /// Returns the environment based on the configuration.
195+ /// Possible values: "staging", "local", "production".
196+ /// If no environment is set, it defaults to "production".
197+ pub fn environment ( ) -> String {
198+ if CONFIG . staging {
199+ "staging" . to_string ( )
200+ } else if CONFIG . local {
201+ "local" . to_string ( )
202+ } else {
203+ "production" . to_string ( )
204+ }
154205 }
155206
156207 pub fn monitor ( ) -> bool {
@@ -168,23 +219,7 @@ impl Configuration {
168219 let config: ConfigFile = std:: fs:: read_to_string ( & config_path)
169220 . ok ( )
170221 . and_then ( |content| toml:: from_str ( & content) . ok ( ) )
171- . unwrap_or ( ConfigFile {
172- token : None ,
173- tp_address : None ,
174- pool_addresses : None ,
175- test_pool_addresses : None ,
176- interval : None ,
177- delay : None ,
178- downstream_hashrate : None ,
179- loglevel : None ,
180- nc_loglevel : None ,
181- sv1_log : None ,
182- test : None ,
183- listening_addr : None ,
184- api_server_port : None ,
185- monitor : None ,
186- auto_update : None ,
187- } ) ;
222+ . unwrap_or ( ConfigFile :: default ( ) ) ;
188223
189224 let token = args
190225 . token
@@ -221,24 +256,48 @@ impl Configuration {
221256 } )
222257 } ) ;
223258
224- let test_pool_addresses : Option < Vec < SocketAddr > > = args
225- . test_pool_addresses
259+ let staging_pool_addresses : Option < Vec < SocketAddr > > = args
260+ . staging_pool_addresses
226261 . map ( |addresses| {
227262 addresses
228263 . into_iter ( )
229264 . map ( parse_address)
230265 . collect :: < Vec < SocketAddr > > ( )
231266 } )
232267 . or_else ( || {
233- config. test_pool_addresses . map ( |addresses| {
268+ config. staging_pool_addresses . map ( |addresses| {
234269 addresses
235270 . into_iter ( )
236271 . map ( parse_address)
237272 . collect :: < Vec < SocketAddr > > ( )
238273 } )
239274 } )
240275 . or_else ( || {
241- std:: env:: var ( "TEST_POOL_ADDRESSES" ) . ok ( ) . map ( |s| {
276+ std:: env:: var ( "STAGING_POOL_ADDRESSES" ) . ok ( ) . map ( |s| {
277+ s. split ( ',' )
278+ . map ( |s| parse_address ( s. trim ( ) . to_string ( ) ) )
279+ . collect :: < Vec < SocketAddr > > ( )
280+ } )
281+ } ) ;
282+
283+ let local_pool_addresses: Option < Vec < SocketAddr > > = args
284+ . local_pool_addresses
285+ . map ( |addresses| {
286+ addresses
287+ . into_iter ( )
288+ . map ( parse_address)
289+ . collect :: < Vec < SocketAddr > > ( )
290+ } )
291+ . or_else ( || {
292+ config. local_pool_addresses . map ( |addresses| {
293+ addresses
294+ . into_iter ( )
295+ . map ( parse_address)
296+ . collect :: < Vec < SocketAddr > > ( )
297+ } )
298+ } )
299+ . or_else ( || {
300+ std:: env:: var ( "LOCAL_POOL_ADDRESSES" ) . ok ( ) . map ( |s| {
242301 s. split ( ',' )
243302 . map ( |s| parse_address ( s. trim ( ) . to_string ( ) ) )
244303 . collect :: < Vec < SocketAddr > > ( )
@@ -316,8 +375,9 @@ impl Configuration {
316375 || config. sv1_log . unwrap_or ( false )
317376 || std:: env:: var ( "SV1_LOGLEVEL" ) . is_ok ( ) ;
318377
319- let test = args. test || config. test . unwrap_or ( false ) || std:: env:: var ( "TEST" ) . is_ok ( ) ;
320-
378+ let staging =
379+ args. staging || config. staging . unwrap_or ( false ) || std:: env:: var ( "STAGING" ) . is_ok ( ) ;
380+ let local = args. local || config. local . unwrap_or ( false ) || std:: env:: var ( "LOCAL" ) . is_ok ( ) ;
321381 let monitor =
322382 args. monitor || config. monitor . unwrap_or ( false ) || std:: env:: var ( "MONITOR" ) . is_ok ( ) ;
323383
@@ -329,14 +389,16 @@ impl Configuration {
329389 token,
330390 tp_address,
331391 pool_addresses,
332- test_pool_addresses,
392+ staging_pool_addresses,
393+ local_pool_addresses,
333394 interval,
334395 delay,
335396 downstream_hashrate,
336397 loglevel,
337398 nc_loglevel,
338399 sv1_log,
339- test,
400+ staging,
401+ local,
340402 listening_addr,
341403 api_server_port,
342404 monitor,
0 commit comments