@@ -232,6 +232,10 @@ func (g *LightningTerminal) Run() error {
232
232
return fmt .Errorf ("could not create permissions manager" )
233
233
}
234
234
235
+ // Register LND and LiT with the status manager.
236
+ g .statusMgr .RegisterAndEnableSubServer (subservers .LND )
237
+ g .statusMgr .RegisterAndEnableSubServer (subservers .LIT )
238
+
235
239
// Create the instances of our subservers now so we can hook them up to
236
240
// lnd once it's fully started.
237
241
g .subServerMgr = subservers .NewManager (g .permsMgr , g .statusMgr )
@@ -273,8 +277,9 @@ func (g *LightningTerminal) Run() error {
273
277
// could not start or LND could not start or be connected to.
274
278
startErr := g .start ()
275
279
if startErr != nil {
276
- log .Errorf ("Error starting Lightning Terminal: %v" , startErr )
277
- return startErr
280
+ g .statusMgr .SetErrored (
281
+ subservers .LIT , "could not start Lit: %v" , startErr ,
282
+ )
278
283
}
279
284
280
285
// Now block until we receive an error or the main shutdown
@@ -447,8 +452,13 @@ func (g *LightningTerminal) start() error {
447
452
if e , ok := err .(* flags.Error ); err != nil &&
448
453
(! ok || e .Type != flags .ErrHelp ) {
449
454
450
- log .Errorf ("Error running main lnd: %v" , err )
455
+ errStr := fmt .Sprintf ("Error running main " +
456
+ "lnd: %v" , err )
457
+ log .Errorf (errStr )
458
+
459
+ g .statusMgr .SetErrored (subservers .LND , errStr )
451
460
g .errQueue .ChanIn () <- err
461
+
452
462
return
453
463
}
454
464
@@ -474,10 +484,18 @@ func (g *LightningTerminal) start() error {
474
484
case <- readyChan :
475
485
476
486
case err := <- g .errQueue .ChanOut ():
477
- return err
487
+ g .statusMgr .SetErrored (
488
+ subservers .LND , "error from errQueue channel" ,
489
+ )
490
+
491
+ return fmt .Errorf ("could not start LND: %v" , err )
478
492
479
493
case <- lndQuit :
480
- return nil
494
+ g .statusMgr .SetErrored (
495
+ subservers .LND , "lndQuit channel closed" ,
496
+ )
497
+
498
+ return fmt .Errorf ("LND has stopped" )
481
499
482
500
case <- interceptor .ShutdownChannel ():
483
501
return fmt .Errorf ("received the shutdown signal" )
@@ -507,6 +525,10 @@ func (g *LightningTerminal) start() error {
507
525
// Connect to LND.
508
526
g .lndConn , err = connectLND (g .cfg , bufRpcListener )
509
527
if err != nil {
528
+ g .statusMgr .SetErrored (
529
+ subservers .LND , "could not connect to LND: %v" , err ,
530
+ )
531
+
510
532
return fmt .Errorf ("could not connect to LND" )
511
533
}
512
534
@@ -537,6 +559,11 @@ func (g *LightningTerminal) start() error {
537
559
err )
538
560
}
539
561
562
+ // We can now set the status of LND as running.
563
+ // This is done _before_ we wait for the macaroon so that
564
+ // LND commands to create and unlock a wallet can be allowed.
565
+ g .statusMgr .SetRunning (subservers .LND )
566
+
540
567
// Now that we have started the main UI web server, show some useful
541
568
// information to the user so they can access the web UI easily.
542
569
if err := g .showStartupInfo (); err != nil {
@@ -556,7 +583,11 @@ func (g *LightningTerminal) start() error {
556
583
return err
557
584
558
585
case <- lndQuit :
559
- return nil
586
+ g .statusMgr .SetErrored (
587
+ subservers .LND , "lndQuit channel closed" ,
588
+ )
589
+
590
+ return fmt .Errorf ("LND has stopped" )
560
591
561
592
case <- interceptor .ShutdownChannel ():
562
593
return fmt .Errorf ("received the shutdown signal" )
@@ -592,8 +623,11 @@ func (g *LightningTerminal) start() error {
592
623
// Set up all the LND clients required by LiT.
593
624
err = g .setUpLNDClients ()
594
625
if err != nil {
595
- log .Errorf ("Could not set up LND clients: %v" , err )
596
- return err
626
+ g .statusMgr .SetErrored (
627
+ subservers .LND , "could not set up LND clients: %v" , err ,
628
+ )
629
+
630
+ return fmt .Errorf ("could not start LND" )
597
631
}
598
632
599
633
// If we're in integrated and stateless init mode, we won't create
@@ -622,6 +656,9 @@ func (g *LightningTerminal) start() error {
622
656
return fmt .Errorf ("could not start litd sub-servers: %v" , err )
623
657
}
624
658
659
+ // We can now set the status of LiT as running.
660
+ g .statusMgr .SetRunning (subservers .LIT )
661
+
625
662
// Now block until we receive an error or the main shutdown signal.
626
663
select {
627
664
case err := <- g .errQueue .ChanOut ():
@@ -631,7 +668,11 @@ func (g *LightningTerminal) start() error {
631
668
}
632
669
633
670
case <- lndQuit :
634
- return nil
671
+ g .statusMgr .SetErrored (
672
+ subservers .LND , "lndQuit channel closed" ,
673
+ )
674
+
675
+ return fmt .Errorf ("LND is not running" )
635
676
636
677
case <- interceptor .ShutdownChannel ():
637
678
log .Infof ("Shutdown signal received" )
0 commit comments