@@ -11,6 +11,7 @@ import (
1111 "fmt"
1212 "strings"
1313 "sync"
14+ "time"
1415
1516 x "github.com/celzero/firestack/intra/backend"
1617 "github.com/celzero/firestack/intra/core"
@@ -363,16 +364,63 @@ func (r *rpnp) forkMain() {
363364
364365func (r * rpnp ) forkAll () {
365366 provider := r .RpnAcc .ProviderID ()
366- log .I ("proxy: rpn: forkAll: %s[%s]" , provider , r .kidsCsv ())
367+ kids := r .flattenKids ()
368+ log .I ("proxy: rpn: forkAll: %s[%v]" , provider , kids )
367369
368370 r .forkMain ()
369371
370- for _ , cc := range r . flattenKids () {
372+ for _ , cc := range kids {
371373 _ , err := r .fork (cc )
372374 loged (err )("proxy: rpn: forkAll: forked %s[%s]; err? %v" , provider , cc , err )
373375 }
374376}
375377
378+ func (r * rpnp ) Redo () (err error ) {
379+ r .forkMain ()
380+ r .forkAll ()
381+ return nil
382+ }
383+
384+ func (r * rpnp ) PingAll () (csvpids string , err error ) {
385+ start := time .Now ()
386+ provider := r .RpnAcc .ProviderID ()
387+ kids := r .flattenKids ()
388+ main , err := r .requireProxy ()
389+
390+ logei (err )("proxy: rpn: pingAll: %s[%v]; got main? %t; err: %v" ,
391+ provider , kids , main != nil , err )
392+
393+ if err != nil {
394+ return
395+ }
396+
397+ mainpinged := main .Ping ()
398+ if ! mainpinged {
399+ log .W ("proxy: rpn: pingAll: main proxy %s failed ping" , provider )
400+ }
401+
402+ kidspinged := make ([]string , 0 , len (kids ))
403+ errs := make ([]error , 0 )
404+ for _ , cc := range kids {
405+ p , rerr := r .pxr .rpnProxyFor (provider , cc )
406+ if rerr != nil {
407+ errs = append (errs , rerr )
408+ continue
409+ }
410+ if ! p .Ping () {
411+ log .W ("proxy: rpn: pingAll: proxy for %s[%s] failed ping" , provider , cc )
412+ } else {
413+ kidspinged = append (kidspinged , cc )
414+ }
415+ }
416+
417+ err = core .JoinErr (errs ... )
418+ logei (err )("proxy: rpn: pingAll: %s[%v] done in %s; main pinged? %t / kids pinged? %v; err? %v" ,
419+ provider , kids , core .FmtTimeAsPeriod (start ), mainpinged , kidspinged , errs )
420+
421+ return strings .Join (kidspinged , "," ), err
422+ }
423+
376424func (r * rpnp ) PurgeAll () (n uint32 ) {
377425 for _ , cc := range r .flattenKids () {
378426 if r .purge (cc ) {
0 commit comments