rpc_proxy+terminal: add LND and LiT to status server

This commit is contained in:
Elle Mouton 2023-08-07 12:41:43 +02:00
parent 75cfa0b053
commit 0f53f434d0
No known key found for this signature in database
GPG key ID: D7D916376026F177
2 changed files with 60 additions and 20 deletions

View file

@ -619,18 +619,17 @@ func (p *rpcProxy) checkSubSystemStarted(requestURI string) error {
return ErrWaitingToStart
}
// Currently, Lit and LND are not registered with the sub-server
// manager, so we let any request for them through.
if p.permsMgr.IsSubServerURI(subservers.LIT, requestURI) ||
p.permsMgr.IsSubServerURI(subservers.LND, requestURI) {
return nil
}
// Check that the sub-server manager does have a sub-server registered
// that can handle the given URI.
handled, system := p.subServerMgr.Handles(requestURI)
if !handled {
switch {
case handled:
case p.permsMgr.IsSubServerURI(subservers.LIT, requestURI):
system = subservers.LIT
case p.permsMgr.IsSubServerURI(subservers.LND, requestURI):
system = subservers.LND
default:
return fmt.Errorf("unknown gRPC web request: %v", requestURI)
}

View file

@ -232,6 +232,10 @@ func (g *LightningTerminal) Run() error {
return fmt.Errorf("could not create permissions manager")
}
// Register LND and LiT with the status manager.
g.statusMgr.RegisterAndEnableSubServer(subservers.LND)
g.statusMgr.RegisterAndEnableSubServer(subservers.LIT)
// Create the instances of our subservers now so we can hook them up to
// lnd once it's fully started.
g.subServerMgr = subservers.NewManager(g.permsMgr, g.statusMgr)
@ -273,8 +277,9 @@ func (g *LightningTerminal) Run() error {
// could not start or LND could not start or be connected to.
startErr := g.start()
if startErr != nil {
log.Errorf("Error starting Lightning Terminal: %v", startErr)
return startErr
g.statusMgr.SetErrored(
subservers.LIT, "could not start Lit: %v", startErr,
)
}
// Now block until we receive an error or the main shutdown
@ -447,8 +452,13 @@ func (g *LightningTerminal) start() error {
if e, ok := err.(*flags.Error); err != nil &&
(!ok || e.Type != flags.ErrHelp) {
log.Errorf("Error running main lnd: %v", err)
errStr := fmt.Sprintf("Error running main "+
"lnd: %v", err)
log.Errorf(errStr)
g.statusMgr.SetErrored(subservers.LND, errStr)
g.errQueue.ChanIn() <- err
return
}
@ -474,10 +484,18 @@ func (g *LightningTerminal) start() error {
case <-readyChan:
case err := <-g.errQueue.ChanOut():
return err
g.statusMgr.SetErrored(
subservers.LND, "error from errQueue channel",
)
return fmt.Errorf("could not start LND: %v", err)
case <-lndQuit:
return nil
g.statusMgr.SetErrored(
subservers.LND, "lndQuit channel closed",
)
return fmt.Errorf("LND has stopped")
case <-interceptor.ShutdownChannel():
return fmt.Errorf("received the shutdown signal")
@ -507,6 +525,10 @@ func (g *LightningTerminal) start() error {
// Connect to LND.
g.lndConn, err = connectLND(g.cfg, bufRpcListener)
if err != nil {
g.statusMgr.SetErrored(
subservers.LND, "could not connect to LND: %v", err,
)
return fmt.Errorf("could not connect to LND")
}
@ -537,6 +559,11 @@ func (g *LightningTerminal) start() error {
err)
}
// We can now set the status of LND as running.
// This is done _before_ we wait for the macaroon so that
// LND commands to create and unlock a wallet can be allowed.
g.statusMgr.SetRunning(subservers.LND)
// Now that we have started the main UI web server, show some useful
// information to the user so they can access the web UI easily.
if err := g.showStartupInfo(); err != nil {
@ -556,7 +583,11 @@ func (g *LightningTerminal) start() error {
return err
case <-lndQuit:
return nil
g.statusMgr.SetErrored(
subservers.LND, "lndQuit channel closed",
)
return fmt.Errorf("LND has stopped")
case <-interceptor.ShutdownChannel():
return fmt.Errorf("received the shutdown signal")
@ -592,8 +623,11 @@ func (g *LightningTerminal) start() error {
// Set up all the LND clients required by LiT.
err = g.setUpLNDClients()
if err != nil {
log.Errorf("Could not set up LND clients: %v", err)
return err
g.statusMgr.SetErrored(
subservers.LND, "could not set up LND clients: %v", err,
)
return fmt.Errorf("could not start LND")
}
// If we're in integrated and stateless init mode, we won't create
@ -622,6 +656,9 @@ func (g *LightningTerminal) start() error {
return fmt.Errorf("could not start litd sub-servers: %v", err)
}
// We can now set the status of LiT as running.
g.statusMgr.SetRunning(subservers.LIT)
// Now block until we receive an error or the main shutdown signal.
select {
case err := <-g.errQueue.ChanOut():
@ -631,7 +668,11 @@ func (g *LightningTerminal) start() error {
}
case <-lndQuit:
return nil
g.statusMgr.SetErrored(
subservers.LND, "lndQuit channel closed",
)
return fmt.Errorf("LND is not running")
case <-interceptor.ShutdownChannel():
log.Infof("Shutdown signal received")