mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-01-19 05:45:21 +01:00
lnrpc: Add experimential uptime and lifetime fields to list channels
This commit adds the total observed lifetime of a channel and the totaluptime of its remote peer to the lnrpc channel struct. These fields are marked as experimential because they are subject to change.
This commit is contained in:
parent
1e86589bee
commit
31bf542276
1103
lnrpc/rpc.pb.go
1103
lnrpc/rpc.pb.go
File diff suppressed because it is too large
Load Diff
@ -1258,6 +1258,19 @@ message Channel {
|
||||
directly to that key.
|
||||
*/
|
||||
bool static_remote_key = 22 [json_name = "static_remote_key"];
|
||||
|
||||
/**
|
||||
The number of seconds that the channel has been monitored by the channel
|
||||
scoring system. Scores are currently not persisted, so this value may be
|
||||
less than the lifetime of the channel [EXPERIMENTAL].
|
||||
*/
|
||||
int64 lifetime = 23 [json_name = "lifetime"];
|
||||
|
||||
/**
|
||||
The number of seconds that the remote peer has been observed as being online
|
||||
by the channel scoring system over the lifetime of the channel [EXPERIMENTAL].
|
||||
*/
|
||||
int64 uptime = 24 [json_name = "uptime"];
|
||||
}
|
||||
|
||||
|
||||
|
@ -1715,6 +1715,16 @@
|
||||
"type": "boolean",
|
||||
"format": "boolean",
|
||||
"description": "*\nIf true, then this channel uses the modern commitment format where the key\nin the output of the remote party does not change each state. This makes\nback up and recovery easier as when the channel is closed, the funds go\ndirectly to that key."
|
||||
},
|
||||
"lifetime": {
|
||||
"type": "string",
|
||||
"format": "int64",
|
||||
"description": "*\nThe number of seconds that the channel has been monitored by the channel\nscoring system. Scores are currently not persisted, so this value may be\nless than the lifetime of the channel [EXPERIMENTAL]."
|
||||
},
|
||||
"uptime": {
|
||||
"type": "string",
|
||||
"format": "int64",
|
||||
"description": "*\nThe number of seconds that the remote peer has been observed as being online\nby the channel scoring system over the lifetime of the channel [EXPERIMENTAL]."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
46
rpcserver.go
46
rpcserver.go
@ -17,12 +17,6 @@ import (
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/lightningnetwork/lnd/chanacceptor"
|
||||
"github.com/lightningnetwork/lnd/lnrpc/routerrpc"
|
||||
"github.com/lightningnetwork/lnd/routing/route"
|
||||
"github.com/lightningnetwork/lnd/tlv"
|
||||
"github.com/lightningnetwork/lnd/watchtower"
|
||||
|
||||
"github.com/btcsuite/btcd/blockchain"
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
@ -36,6 +30,7 @@ import (
|
||||
proxy "github.com/grpc-ecosystem/grpc-gateway/runtime"
|
||||
"github.com/lightningnetwork/lnd/autopilot"
|
||||
"github.com/lightningnetwork/lnd/build"
|
||||
"github.com/lightningnetwork/lnd/chanacceptor"
|
||||
"github.com/lightningnetwork/lnd/chanbackup"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/channelnotifier"
|
||||
@ -46,14 +41,18 @@ import (
|
||||
"github.com/lightningnetwork/lnd/lncfg"
|
||||
"github.com/lightningnetwork/lnd/lnrpc"
|
||||
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
|
||||
"github.com/lightningnetwork/lnd/lnrpc/routerrpc"
|
||||
"github.com/lightningnetwork/lnd/lntypes"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/macaroons"
|
||||
"github.com/lightningnetwork/lnd/monitoring"
|
||||
"github.com/lightningnetwork/lnd/routing"
|
||||
"github.com/lightningnetwork/lnd/routing/route"
|
||||
"github.com/lightningnetwork/lnd/signal"
|
||||
"github.com/lightningnetwork/lnd/sweep"
|
||||
"github.com/lightningnetwork/lnd/tlv"
|
||||
"github.com/lightningnetwork/lnd/watchtower"
|
||||
"github.com/lightningnetwork/lnd/zpay32"
|
||||
"github.com/tv42/zbase32"
|
||||
"google.golang.org/grpc"
|
||||
@ -2702,12 +2701,43 @@ func createRPCOpenChannel(r *rpcServer, graph *channeldb.ChannelGraph,
|
||||
}
|
||||
externalCommitFee := dbChannel.Capacity - sumOutputs
|
||||
|
||||
chanID := dbChannel.ShortChannelID.ToUint64()
|
||||
|
||||
var (
|
||||
uptime time.Duration
|
||||
lifespan time.Duration
|
||||
)
|
||||
|
||||
// Get the lifespan observed by the channel event store.
|
||||
startTime, endTime, err := r.server.chanEventStore.GetLifespan(chanID)
|
||||
if err != nil {
|
||||
// If the channel cannot be found, log an error and do not perform
|
||||
// further calculations for uptime and lifespan.
|
||||
rpcsLog.Warnf("GetLifespan %v error: %v", chanID, err)
|
||||
} else {
|
||||
// If endTime is zero, the channel is still open, progress endTime to
|
||||
// the present so we can calculate lifespan.
|
||||
if endTime.IsZero() {
|
||||
endTime = time.Now()
|
||||
}
|
||||
lifespan = endTime.Sub(startTime)
|
||||
|
||||
uptime, err = r.server.chanEventStore.GetUptime(
|
||||
chanID,
|
||||
startTime,
|
||||
endTime,
|
||||
)
|
||||
if err != nil {
|
||||
rpcsLog.Warnf("GetUptime %v error: %v", chanID, err)
|
||||
}
|
||||
}
|
||||
|
||||
channel := &lnrpc.Channel{
|
||||
Active: isActive,
|
||||
Private: !isPublic,
|
||||
RemotePubkey: nodeID,
|
||||
ChannelPoint: chanPoint.String(),
|
||||
ChanId: dbChannel.ShortChannelID.ToUint64(),
|
||||
ChanId: chanID,
|
||||
Capacity: int64(dbChannel.Capacity),
|
||||
LocalBalance: int64(localBalance.ToSatoshis()),
|
||||
RemoteBalance: int64(remoteBalance.ToSatoshis()),
|
||||
@ -2724,6 +2754,8 @@ func createRPCOpenChannel(r *rpcServer, graph *channeldb.ChannelGraph,
|
||||
LocalChanReserveSat: int64(dbChannel.LocalChanCfg.ChanReserve),
|
||||
RemoteChanReserveSat: int64(dbChannel.RemoteChanCfg.ChanReserve),
|
||||
StaticRemoteKey: dbChannel.ChanType.IsTweakless(),
|
||||
Lifetime: int64(lifespan.Seconds()),
|
||||
Uptime: int64(uptime.Seconds()),
|
||||
}
|
||||
|
||||
for i, htlc := range localCommit.Htlcs {
|
||||
|
Loading…
Reference in New Issue
Block a user