mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 01:43:16 +01:00
lnrpc+rpcserver: add new GetDebugInfo RPC method
This commit is contained in:
parent
becbe7085d
commit
8a2c3a3d85
File diff suppressed because it is too large
Load Diff
@ -550,6 +550,24 @@ func local_request_Lightning_GetInfo_0(ctx context.Context, marshaler runtime.Ma
|
||||
|
||||
}
|
||||
|
||||
func request_Lightning_GetDebugInfo_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq GetDebugInfoRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
msg, err := client.GetDebugInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
func local_request_Lightning_GetDebugInfo_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq GetDebugInfoRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
msg, err := server.GetDebugInfo(ctx, &protoReq)
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
func request_Lightning_GetRecoveryInfo_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq GetRecoveryInfoRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
@ -2892,6 +2910,29 @@ func RegisterLightningHandlerServer(ctx context.Context, mux *runtime.ServeMux,
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("GET", pattern_Lightning_GetDebugInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
var stream runtime.ServerTransportStream
|
||||
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/lnrpc.Lightning/GetDebugInfo", runtime.WithHTTPPathPattern("/v1/getdebuginfo"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := local_request_Lightning_GetDebugInfo_0(rctx, inboundMarshaler, server, req, pathParams)
|
||||
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_Lightning_GetDebugInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("GET", pattern_Lightning_GetRecoveryInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
@ -4266,6 +4307,26 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("GET", pattern_Lightning_GetDebugInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/lnrpc.Lightning/GetDebugInfo", runtime.WithHTTPPathPattern("/v1/getdebuginfo"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := request_Lightning_GetDebugInfo_0(rctx, inboundMarshaler, client, req, pathParams)
|
||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_Lightning_GetDebugInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("GET", pattern_Lightning_GetRecoveryInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
@ -5322,6 +5383,8 @@ var (
|
||||
|
||||
pattern_Lightning_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getinfo"}, ""))
|
||||
|
||||
pattern_Lightning_GetDebugInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getdebuginfo"}, ""))
|
||||
|
||||
pattern_Lightning_GetRecoveryInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getrecoveryinfo"}, ""))
|
||||
|
||||
pattern_Lightning_PendingChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "pending"}, ""))
|
||||
@ -5458,6 +5521,8 @@ var (
|
||||
|
||||
forward_Lightning_GetInfo_0 = runtime.ForwardResponseMessage
|
||||
|
||||
forward_Lightning_GetDebugInfo_0 = runtime.ForwardResponseMessage
|
||||
|
||||
forward_Lightning_GetRecoveryInfo_0 = runtime.ForwardResponseMessage
|
||||
|
||||
forward_Lightning_PendingChannels_0 = runtime.ForwardResponseMessage
|
||||
|
@ -455,6 +455,31 @@ func RegisterLightningJSONCallbacks(registry map[string]func(ctx context.Context
|
||||
callback(string(respBytes), nil)
|
||||
}
|
||||
|
||||
registry["lnrpc.Lightning.GetDebugInfo"] = func(ctx context.Context,
|
||||
conn *grpc.ClientConn, reqJSON string, callback func(string, error)) {
|
||||
|
||||
req := &GetDebugInfoRequest{}
|
||||
err := marshaler.Unmarshal([]byte(reqJSON), req)
|
||||
if err != nil {
|
||||
callback("", err)
|
||||
return
|
||||
}
|
||||
|
||||
client := NewLightningClient(conn)
|
||||
resp, err := client.GetDebugInfo(ctx, req)
|
||||
if err != nil {
|
||||
callback("", err)
|
||||
return
|
||||
}
|
||||
|
||||
respBytes, err := marshaler.Marshal(resp)
|
||||
if err != nil {
|
||||
callback("", err)
|
||||
return
|
||||
}
|
||||
callback(string(respBytes), nil)
|
||||
}
|
||||
|
||||
registry["lnrpc.Lightning.GetRecoveryInfo"] = func(ctx context.Context,
|
||||
conn *grpc.ClientConn, reqJSON string, callback func(string, error)) {
|
||||
|
||||
|
@ -143,6 +143,13 @@ service Lightning {
|
||||
*/
|
||||
rpc GetInfo (GetInfoRequest) returns (GetInfoResponse);
|
||||
|
||||
/* lncli: 'getdebuginfo'
|
||||
GetDebugInfo returns debug information concerning the state of the daemon
|
||||
and its subsystems. This includes the full configuration and the latest log
|
||||
entries from the log file.
|
||||
*/
|
||||
rpc GetDebugInfo (GetDebugInfoRequest) returns (GetDebugInfoResponse);
|
||||
|
||||
/** lncli: `getrecoveryinfo`
|
||||
GetRecoveryInfo returns information concerning the recovery mode including
|
||||
whether it's in a recovery mode, whether the recovery is finished, and the
|
||||
@ -1955,6 +1962,14 @@ message GetInfoResponse {
|
||||
bool store_final_htlc_resolutions = 22;
|
||||
}
|
||||
|
||||
message GetDebugInfoRequest {
|
||||
}
|
||||
|
||||
message GetDebugInfoResponse {
|
||||
map<string, string> config = 1;
|
||||
repeated string log = 2;
|
||||
}
|
||||
|
||||
message GetRecoveryInfoRequest {
|
||||
}
|
||||
message GetRecoveryInfoResponse {
|
||||
|
@ -1061,6 +1061,29 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/v1/getdebuginfo": {
|
||||
"get": {
|
||||
"summary": "lncli: 'getdebuginfo'\nGetDebugInfo returns debug information concerning the state of the daemon\nand its subsystems. This includes the full configuration and the latest log\nentries from the log file.",
|
||||
"operationId": "Lightning_GetDebugInfo",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "A successful response.",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/lnrpcGetDebugInfoResponse"
|
||||
}
|
||||
},
|
||||
"default": {
|
||||
"description": "An unexpected error response.",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/rpcStatus"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
"Lightning"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/v1/getinfo": {
|
||||
"get": {
|
||||
"summary": "lncli: `getinfo`\nGetInfo returns general information concerning the lightning node including\nit's identity pubkey, alias, the chains it is connected to, and information\nconcerning the number of open+pending channels.",
|
||||
@ -4866,6 +4889,23 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"lnrpcGetDebugInfoResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"config": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"log": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"lnrpcGetInfoResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -44,6 +44,8 @@ http:
|
||||
get: "/v1/peers/subscribe"
|
||||
- selector: lnrpc.Lightning.GetInfo
|
||||
get: "/v1/getinfo"
|
||||
- selector: lnrpc.Lightning.GetDebugInfo
|
||||
get: "/v1/getdebuginfo"
|
||||
- selector: lnrpc.Lightning.GetRecoveryInfo
|
||||
get: "/v1/getrecoveryinfo"
|
||||
- selector: lnrpc.Lightning.PendingChannels
|
||||
|
@ -102,6 +102,11 @@ type LightningClient interface {
|
||||
// it's identity pubkey, alias, the chains it is connected to, and information
|
||||
// concerning the number of open+pending channels.
|
||||
GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error)
|
||||
// lncli: 'getdebuginfo'
|
||||
// GetDebugInfo returns debug information concerning the state of the daemon
|
||||
// and its subsystems. This includes the full configuration and the latest log
|
||||
// entries from the log file.
|
||||
GetDebugInfo(ctx context.Context, in *GetDebugInfoRequest, opts ...grpc.CallOption) (*GetDebugInfoResponse, error)
|
||||
// * lncli: `getrecoveryinfo`
|
||||
// GetRecoveryInfo returns information concerning the recovery mode including
|
||||
// whether it's in a recovery mode, whether the recovery is finished, and the
|
||||
@ -611,6 +616,15 @@ func (c *lightningClient) GetInfo(ctx context.Context, in *GetInfoRequest, opts
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *lightningClient) GetDebugInfo(ctx context.Context, in *GetDebugInfoRequest, opts ...grpc.CallOption) (*GetDebugInfoResponse, error) {
|
||||
out := new(GetDebugInfoResponse)
|
||||
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/GetDebugInfo", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *lightningClient) GetRecoveryInfo(ctx context.Context, in *GetRecoveryInfoRequest, opts ...grpc.CallOption) (*GetRecoveryInfoResponse, error) {
|
||||
out := new(GetRecoveryInfoResponse)
|
||||
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/GetRecoveryInfo", in, out, opts...)
|
||||
@ -1409,6 +1423,11 @@ type LightningServer interface {
|
||||
// it's identity pubkey, alias, the chains it is connected to, and information
|
||||
// concerning the number of open+pending channels.
|
||||
GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error)
|
||||
// lncli: 'getdebuginfo'
|
||||
// GetDebugInfo returns debug information concerning the state of the daemon
|
||||
// and its subsystems. This includes the full configuration and the latest log
|
||||
// entries from the log file.
|
||||
GetDebugInfo(context.Context, *GetDebugInfoRequest) (*GetDebugInfoResponse, error)
|
||||
// * lncli: `getrecoveryinfo`
|
||||
// GetRecoveryInfo returns information concerning the recovery mode including
|
||||
// whether it's in a recovery mode, whether the recovery is finished, and the
|
||||
@ -1773,6 +1792,9 @@ func (UnimplementedLightningServer) SubscribePeerEvents(*PeerEventSubscription,
|
||||
func (UnimplementedLightningServer) GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented")
|
||||
}
|
||||
func (UnimplementedLightningServer) GetDebugInfo(context.Context, *GetDebugInfoRequest) (*GetDebugInfoResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetDebugInfo not implemented")
|
||||
}
|
||||
func (UnimplementedLightningServer) GetRecoveryInfo(context.Context, *GetRecoveryInfoRequest) (*GetRecoveryInfoResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method GetRecoveryInfo not implemented")
|
||||
}
|
||||
@ -2233,6 +2255,24 @@ func _Lightning_GetInfo_Handler(srv interface{}, ctx context.Context, dec func(i
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Lightning_GetDebugInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetDebugInfoRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(LightningServer).GetDebugInfo(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/lnrpc.Lightning/GetDebugInfo",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(LightningServer).GetDebugInfo(ctx, req.(*GetDebugInfoRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Lightning_GetRecoveryInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(GetRecoveryInfoRequest)
|
||||
if err := dec(in); err != nil {
|
||||
@ -3267,6 +3307,10 @@ var Lightning_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "GetInfo",
|
||||
Handler: _Lightning_GetInfo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetDebugInfo",
|
||||
Handler: _Lightning_GetDebugInfo_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "GetRecoveryInfo",
|
||||
Handler: _Lightning_GetRecoveryInfo_Handler,
|
||||
|
40
rpcserver.go
40
rpcserver.go
@ -10,6 +10,8 @@ import (
|
||||
"math"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strconv"
|
||||
@ -330,6 +332,19 @@ func MainRPCServerPermissions() map[string][]bakery.Op {
|
||||
Entity: "info",
|
||||
Action: "read",
|
||||
}},
|
||||
"/lnrpc.Lightning/GetDebugInfo": {{
|
||||
Entity: "info",
|
||||
Action: "read",
|
||||
}, {
|
||||
Entity: "offchain",
|
||||
Action: "read",
|
||||
}, {
|
||||
Entity: "onchain",
|
||||
Action: "read",
|
||||
}, {
|
||||
Entity: "peers",
|
||||
Action: "read",
|
||||
}},
|
||||
"/lnrpc.Lightning/GetRecoveryInfo": {{
|
||||
Entity: "info",
|
||||
Action: "read",
|
||||
@ -3020,6 +3035,31 @@ func (r *rpcServer) GetInfo(_ context.Context,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetDebugInfo returns debug information concerning the state of the daemon
|
||||
// and its subsystems. This includes the full configuration and the latest log
|
||||
// entries from the log file.
|
||||
func (r *rpcServer) GetDebugInfo(_ context.Context,
|
||||
_ *lnrpc.GetDebugInfoRequest) (*lnrpc.GetDebugInfoResponse, error) {
|
||||
|
||||
flatConfig, err := configToFlatMap(*r.cfg)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error converting config to flat map: "+
|
||||
"%w", err)
|
||||
}
|
||||
|
||||
logFileName := filepath.Join(r.cfg.LogDir, defaultLogFilename)
|
||||
logContent, err := os.ReadFile(logFileName)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading log file '%s': %w",
|
||||
logFileName, err)
|
||||
}
|
||||
|
||||
return &lnrpc.GetDebugInfoResponse{
|
||||
Config: flatConfig,
|
||||
Log: strings.Split(string(logContent), "\n"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetRecoveryInfo returns a boolean indicating whether the wallet is started
|
||||
// in recovery mode, whether the recovery is finished, and the progress made
|
||||
// so far.
|
||||
|
Loading…
Reference in New Issue
Block a user