11const runtimeConfigModule = require ( './runtime-config' ) ;
2- const runtimeConfig = runtimeConfigModule . getInstance ( ) ;
32
43function isValidIP ( ip ) {
54 if ( ! ip || typeof ip !== 'string' ) return false ;
@@ -23,90 +22,60 @@ function isValidIP(ip) {
2322 return false ;
2423}
2524
26- async function getDrainedServers ( ) {
27- const drained = await runtimeConfig . get ( 'drainedFeatureServers' ) ;
28-
29- if ( ! drained ) return [ ] ;
30-
31- if ( typeof drained === 'string' ) {
32- return drained . split ( ',' ) . map ( ( s ) => s . trim ( ) ) . filter ( ( s ) => s . length > 0 ) ;
33- }
34-
35- if ( Array . isArray ( drained ) ) return drained ;
36-
37- return [ ] ;
38- }
39-
4025async function isDrained ( serverIP ) {
41- const drained = await getDrainedServers ( ) ;
42- return drained . includes ( serverIP ) ;
43- }
44-
45- async function drainServer ( serverIP ) {
4626 if ( ! isValidIP ( serverIP ) ) {
47- return {
48- added : false ,
49- array : await getDrainedServers ( ) ,
50- error : `Invalid IP: ${ serverIP } `
51- } ;
27+ return false ;
5228 }
5329
54- return await runtimeConfig . addToArray ( 'drainedFeatureServers' , serverIP ) ;
30+ try {
31+ const runtimeConfig = runtimeConfigModule . getInstance ( ) ;
32+ return await runtimeConfig . isServerDrained ( serverIP ) ;
33+ } catch {
34+ return false ;
35+ }
5536}
5637
57- async function undrainServer ( serverIP ) {
58- if ( ! isValidIP ( serverIP ) ) {
59- return {
60- removed : false ,
61- array : await getDrainedServers ( ) ,
62- error : `Invalid IP: ${ serverIP } `
63- } ;
38+ async function getDrainedServers ( ) {
39+ try {
40+ const runtimeConfig = runtimeConfigModule . getInstance ( ) ;
41+ return await runtimeConfig . getDrainedFeatureServers ( ) ;
42+ } catch {
43+ return [ ] ;
6444 }
65-
66- return await runtimeConfig . removeFromArray ( 'drainedFeatureServers' , serverIP ) ;
6745}
6846
69- async function setDrainedServers ( servers ) {
70- let serverList = [ ] ;
71-
72- if ( typeof servers === 'string' ) {
73- serverList = servers . split ( ',' ) . map ( ( s ) => s . trim ( ) ) . filter ( ( s ) => s . length > 0 ) ;
74- } else if ( Array . isArray ( servers ) ) {
75- serverList = servers ;
76- } else {
77- return {
78- key : 'drainedFeatureServers' ,
79- value : await getDrainedServers ( ) ,
80- error : 'Invalid format'
81- } ;
47+ async function getActiveServers ( ) {
48+ try {
49+ const runtimeConfig = runtimeConfigModule . getInstance ( ) ;
50+ return await runtimeConfig . getActiveFeatureServers ( ) ;
51+ } catch {
52+ return [ ] ;
8253 }
54+ }
8355
84- // Check all IPs are valid
85- const badIPs = serverList . filter ( ( ip ) => ! isValidIP ( ip ) ) ;
86- if ( badIPs . length > 0 ) {
87- return {
88- key : 'drainedFeatureServers' ,
89- value : await getDrainedServers ( ) ,
90- error : `Invalid IPs: ${ badIPs . join ( ', ' ) } `
91- } ;
56+ async function getAvailableServers ( ) {
57+ try {
58+ const runtimeConfig = runtimeConfigModule . getInstance ( ) ;
59+ return await runtimeConfig . getAvailableFeatureServers ( ) ;
60+ } catch {
61+ return [ ] ;
9262 }
63+ }
9364
94- return await runtimeConfig . set ( 'drainedFeatureServers' , serverList ) ;
65+ async function getAllServersWithStatus ( ) {
66+ try {
67+ const runtimeConfig = runtimeConfigModule . getInstance ( ) ;
68+ return await runtimeConfig . getAllFeatureServersWithStatus ( ) ;
69+ } catch {
70+ return { servers : [ ] , drained : [ ] } ;
71+ }
9572}
9673
9774module . exports = {
98- getDrainedServers,
99- isDrained,
100- drainServer,
101- undrainServer,
102- setDrainedServers,
10375 isValidIP,
104- runtimeConfig,
105-
106- // Legacy names for backward compatibility
107- getDrainedFeatureServers : getDrainedServers ,
108- isFeatureServerDrained : isDrained ,
109- drainFeatureServer : drainServer ,
110- undrainFeatureServer : undrainServer ,
111- setDrainedFeatureServers : setDrainedServers
76+ isDrained,
77+ getDrainedServers,
78+ getActiveServers,
79+ getAvailableServers,
80+ getAllServersWithStatus
11281} ;
0 commit comments