routing+routerrpc: expose mission control state over rpc
This commit exposes mission control state for rpc for development purposes.
This commit is contained in:
parent
7133f37bb8
commit
f7982f0f4c
@ -799,6 +799,213 @@ func (m *ResetMissionControlResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_ResetMissionControlResponse proto.InternalMessageInfo
|
||||
|
||||
type QueryMissionControlRequest struct {
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *QueryMissionControlRequest) Reset() { *m = QueryMissionControlRequest{} }
|
||||
func (m *QueryMissionControlRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryMissionControlRequest) ProtoMessage() {}
|
||||
func (*QueryMissionControlRequest) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_7a0613f69d37b0a5, []int{10}
|
||||
}
|
||||
|
||||
func (m *QueryMissionControlRequest) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_QueryMissionControlRequest.Unmarshal(m, b)
|
||||
}
|
||||
func (m *QueryMissionControlRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_QueryMissionControlRequest.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *QueryMissionControlRequest) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_QueryMissionControlRequest.Merge(m, src)
|
||||
}
|
||||
func (m *QueryMissionControlRequest) XXX_Size() int {
|
||||
return xxx_messageInfo_QueryMissionControlRequest.Size(m)
|
||||
}
|
||||
func (m *QueryMissionControlRequest) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_QueryMissionControlRequest.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_QueryMissionControlRequest proto.InternalMessageInfo
|
||||
|
||||
/// QueryMissionControlResponse contains mission control state per node.
|
||||
type QueryMissionControlResponse struct {
|
||||
Nodes []*NodeHistory `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *QueryMissionControlResponse) Reset() { *m = QueryMissionControlResponse{} }
|
||||
func (m *QueryMissionControlResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*QueryMissionControlResponse) ProtoMessage() {}
|
||||
func (*QueryMissionControlResponse) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_7a0613f69d37b0a5, []int{11}
|
||||
}
|
||||
|
||||
func (m *QueryMissionControlResponse) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_QueryMissionControlResponse.Unmarshal(m, b)
|
||||
}
|
||||
func (m *QueryMissionControlResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_QueryMissionControlResponse.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *QueryMissionControlResponse) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_QueryMissionControlResponse.Merge(m, src)
|
||||
}
|
||||
func (m *QueryMissionControlResponse) XXX_Size() int {
|
||||
return xxx_messageInfo_QueryMissionControlResponse.Size(m)
|
||||
}
|
||||
func (m *QueryMissionControlResponse) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_QueryMissionControlResponse.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_QueryMissionControlResponse proto.InternalMessageInfo
|
||||
|
||||
func (m *QueryMissionControlResponse) GetNodes() []*NodeHistory {
|
||||
if m != nil {
|
||||
return m.Nodes
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/// NodeHistory contains the mission control state for a particular node.
|
||||
type NodeHistory struct {
|
||||
/// Node pubkey
|
||||
Pubkey []byte `protobuf:"bytes,1,opt,name=pubkey,proto3" json:"pubkey,omitempty"`
|
||||
/// Time stamp of last failure. Set to zero if no failure happened yet.
|
||||
LastFailTime int64 `protobuf:"varint,2,opt,name=last_fail_time,proto3" json:"last_fail_time,omitempty"`
|
||||
/// Estimation of success probability for channels not in the channel array.
|
||||
OtherChanSuccessProb float32 `protobuf:"fixed32,3,opt,name=other_chan_success_prob,proto3" json:"other_chan_success_prob,omitempty"`
|
||||
/// Historical information of particular channels.
|
||||
Channels []*ChannelHistory `protobuf:"bytes,4,rep,name=channels,proto3" json:"channels,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *NodeHistory) Reset() { *m = NodeHistory{} }
|
||||
func (m *NodeHistory) String() string { return proto.CompactTextString(m) }
|
||||
func (*NodeHistory) ProtoMessage() {}
|
||||
func (*NodeHistory) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_7a0613f69d37b0a5, []int{12}
|
||||
}
|
||||
|
||||
func (m *NodeHistory) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_NodeHistory.Unmarshal(m, b)
|
||||
}
|
||||
func (m *NodeHistory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_NodeHistory.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *NodeHistory) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_NodeHistory.Merge(m, src)
|
||||
}
|
||||
func (m *NodeHistory) XXX_Size() int {
|
||||
return xxx_messageInfo_NodeHistory.Size(m)
|
||||
}
|
||||
func (m *NodeHistory) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_NodeHistory.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_NodeHistory proto.InternalMessageInfo
|
||||
|
||||
func (m *NodeHistory) GetPubkey() []byte {
|
||||
if m != nil {
|
||||
return m.Pubkey
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *NodeHistory) GetLastFailTime() int64 {
|
||||
if m != nil {
|
||||
return m.LastFailTime
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *NodeHistory) GetOtherChanSuccessProb() float32 {
|
||||
if m != nil {
|
||||
return m.OtherChanSuccessProb
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *NodeHistory) GetChannels() []*ChannelHistory {
|
||||
if m != nil {
|
||||
return m.Channels
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
/// NodeHistory contains the mission control state for a particular channel.
|
||||
type ChannelHistory struct {
|
||||
/// Short channel id
|
||||
ChannelId uint64 `protobuf:"varint,1,opt,name=channel_id,proto3" json:"channel_id,omitempty"`
|
||||
/// Time stamp of last failure.
|
||||
LastFailTime int64 `protobuf:"varint,2,opt,name=last_fail_time,proto3" json:"last_fail_time,omitempty"`
|
||||
/// Minimum penalization amount.
|
||||
MinPenalizeAmtSat int64 `protobuf:"varint,3,opt,name=min_penalize_amt_sat,proto3" json:"min_penalize_amt_sat,omitempty"`
|
||||
/// Estimation of success probability for this channel.
|
||||
SuccessProb float32 `protobuf:"fixed32,4,opt,name=success_prob,proto3" json:"success_prob,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *ChannelHistory) Reset() { *m = ChannelHistory{} }
|
||||
func (m *ChannelHistory) String() string { return proto.CompactTextString(m) }
|
||||
func (*ChannelHistory) ProtoMessage() {}
|
||||
func (*ChannelHistory) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_7a0613f69d37b0a5, []int{13}
|
||||
}
|
||||
|
||||
func (m *ChannelHistory) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_ChannelHistory.Unmarshal(m, b)
|
||||
}
|
||||
func (m *ChannelHistory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_ChannelHistory.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *ChannelHistory) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_ChannelHistory.Merge(m, src)
|
||||
}
|
||||
func (m *ChannelHistory) XXX_Size() int {
|
||||
return xxx_messageInfo_ChannelHistory.Size(m)
|
||||
}
|
||||
func (m *ChannelHistory) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_ChannelHistory.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_ChannelHistory proto.InternalMessageInfo
|
||||
|
||||
func (m *ChannelHistory) GetChannelId() uint64 {
|
||||
if m != nil {
|
||||
return m.ChannelId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *ChannelHistory) GetLastFailTime() int64 {
|
||||
if m != nil {
|
||||
return m.LastFailTime
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *ChannelHistory) GetMinPenalizeAmtSat() int64 {
|
||||
if m != nil {
|
||||
return m.MinPenalizeAmtSat
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *ChannelHistory) GetSuccessProb() float32 {
|
||||
if m != nil {
|
||||
return m.SuccessProb
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterEnum("routerrpc.Failure_FailureCode", Failure_FailureCode_name, Failure_FailureCode_value)
|
||||
proto.RegisterType((*PaymentRequest)(nil), "routerrpc.PaymentRequest")
|
||||
@ -811,92 +1018,107 @@ func init() {
|
||||
proto.RegisterType((*ChannelUpdate)(nil), "routerrpc.ChannelUpdate")
|
||||
proto.RegisterType((*ResetMissionControlRequest)(nil), "routerrpc.ResetMissionControlRequest")
|
||||
proto.RegisterType((*ResetMissionControlResponse)(nil), "routerrpc.ResetMissionControlResponse")
|
||||
proto.RegisterType((*QueryMissionControlRequest)(nil), "routerrpc.QueryMissionControlRequest")
|
||||
proto.RegisterType((*QueryMissionControlResponse)(nil), "routerrpc.QueryMissionControlResponse")
|
||||
proto.RegisterType((*NodeHistory)(nil), "routerrpc.NodeHistory")
|
||||
proto.RegisterType((*ChannelHistory)(nil), "routerrpc.ChannelHistory")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("routerrpc/router.proto", fileDescriptor_7a0613f69d37b0a5) }
|
||||
|
||||
var fileDescriptor_7a0613f69d37b0a5 = []byte{
|
||||
// 1271 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x56, 0xdd, 0x72, 0x1a, 0x37,
|
||||
0x14, 0x2e, 0xf1, 0x0f, 0x70, 0x00, 0xb3, 0x96, 0xed, 0x04, 0xe3, 0x38, 0x71, 0xb6, 0x6d, 0xea,
|
||||
0xc9, 0x74, 0xec, 0x29, 0x9d, 0xe4, 0xb2, 0x1d, 0x02, 0xa2, 0xde, 0x09, 0xec, 0x52, 0x01, 0x4e,
|
||||
0xdc, 0x5e, 0x68, 0x64, 0x56, 0x86, 0xad, 0xd9, 0x1f, 0xef, 0x8a, 0x36, 0x7e, 0x81, 0xbe, 0x4e,
|
||||
0x9f, 0xa2, 0xd7, 0xbd, 0xee, 0xdb, 0x74, 0x24, 0xed, 0x02, 0x76, 0x9c, 0xe9, 0x15, 0xe8, 0xfb,
|
||||
0x3e, 0x9d, 0xa3, 0x73, 0x74, 0xce, 0xd1, 0xc2, 0xe3, 0x38, 0x9c, 0x0b, 0x1e, 0xc7, 0xd1, 0xf8,
|
||||
0x54, 0xff, 0x3b, 0x89, 0xe2, 0x50, 0x84, 0xa8, 0xb8, 0xc0, 0xeb, 0xc5, 0x38, 0x1a, 0x6b, 0xd4,
|
||||
0xfc, 0x3b, 0x07, 0x5b, 0x7d, 0x76, 0xeb, 0xf3, 0x40, 0x10, 0x7e, 0x33, 0xe7, 0x89, 0x40, 0x4f,
|
||||
0x20, 0x1f, 0xb1, 0x5b, 0x1a, 0xf3, 0x9b, 0x5a, 0xee, 0x28, 0x77, 0x5c, 0x24, 0x9b, 0x11, 0xbb,
|
||||
0x25, 0xfc, 0x06, 0x99, 0x50, 0xb9, 0xe2, 0x9c, 0xce, 0x3c, 0xdf, 0x13, 0x34, 0x61, 0xa2, 0xf6,
|
||||
0xe8, 0x28, 0x77, 0xbc, 0x46, 0x4a, 0x57, 0x9c, 0x77, 0x25, 0x36, 0x60, 0x02, 0x1d, 0x02, 0x8c,
|
||||
0x67, 0xe2, 0x77, 0x2d, 0xaa, 0xad, 0x1d, 0xe5, 0x8e, 0x37, 0x48, 0x51, 0x22, 0x4a, 0x81, 0xbe,
|
||||
0x81, 0xaa, 0xf0, 0x7c, 0x1e, 0xce, 0x05, 0x4d, 0xf8, 0x38, 0x0c, 0xdc, 0xa4, 0xb6, 0xae, 0x34,
|
||||
0x5b, 0x29, 0x3c, 0xd0, 0x28, 0x3a, 0x81, 0x9d, 0x70, 0x2e, 0x26, 0xa1, 0x17, 0x4c, 0xe8, 0x78,
|
||||
0xca, 0x82, 0x80, 0xcf, 0xa8, 0xe7, 0xd6, 0x36, 0x94, 0xc7, 0xed, 0x8c, 0x6a, 0x69, 0xc6, 0x72,
|
||||
0xcd, 0xdf, 0xa0, 0xba, 0x08, 0x23, 0x89, 0xc2, 0x20, 0xe1, 0x68, 0x1f, 0x0a, 0x32, 0x8e, 0x29,
|
||||
0x4b, 0xa6, 0x2a, 0x90, 0x32, 0x91, 0x71, 0x9d, 0xb1, 0x64, 0x8a, 0x0e, 0xa0, 0x18, 0xc5, 0x9c,
|
||||
0x7a, 0x3e, 0x9b, 0x70, 0x15, 0x45, 0x99, 0x14, 0xa2, 0x98, 0x5b, 0x72, 0x8d, 0x9e, 0x43, 0x29,
|
||||
0xd2, 0xa6, 0x28, 0x8f, 0x63, 0x15, 0x43, 0x91, 0x40, 0x0a, 0xe1, 0x38, 0x36, 0x7f, 0x80, 0x2a,
|
||||
0x91, 0xb9, 0xec, 0x70, 0x9e, 0xe5, 0x0c, 0xc1, 0xba, 0xcb, 0x13, 0x91, 0xfa, 0x51, 0xff, 0x65,
|
||||
0x1e, 0x99, 0xbf, 0x9a, 0xa8, 0x4d, 0xe6, 0xcb, 0x1c, 0x99, 0x2e, 0x18, 0xcb, 0xfd, 0xe9, 0x61,
|
||||
0x8f, 0xc1, 0x90, 0xf7, 0x23, 0xc3, 0x95, 0x39, 0xf6, 0xe5, 0xae, 0x9c, 0xda, 0xb5, 0x95, 0xe2,
|
||||
0x1d, 0xce, 0x7b, 0x09, 0x13, 0xe8, 0xa5, 0x4e, 0x21, 0x9d, 0x85, 0xe3, 0x6b, 0xea, 0xf2, 0x19,
|
||||
0xbb, 0x4d, 0xcd, 0x57, 0x24, 0xdc, 0x0d, 0xc7, 0xd7, 0x6d, 0x09, 0x9a, 0xbf, 0x02, 0x1a, 0xf0,
|
||||
0xc0, 0x1d, 0x86, 0xca, 0x57, 0x76, 0xd0, 0x17, 0x50, 0xce, 0x82, 0x5b, 0x49, 0x4c, 0x16, 0xb0,
|
||||
0x4a, 0x8e, 0x09, 0x1b, 0xaa, 0x54, 0x94, 0xd9, 0x52, 0xa3, 0x7c, 0x32, 0x0b, 0x64, 0xbd, 0x68,
|
||||
0x33, 0x9a, 0x32, 0x29, 0xec, 0xdc, 0x31, 0x9e, 0x46, 0x51, 0x07, 0x99, 0x46, 0x9d, 0xd6, 0xdc,
|
||||
0x22, 0xad, 0x6a, 0x8d, 0xbe, 0x85, 0xfc, 0x15, 0xf3, 0x66, 0xf3, 0x38, 0x33, 0x8c, 0x4e, 0x16,
|
||||
0x15, 0x79, 0xd2, 0xd1, 0x0c, 0xc9, 0x24, 0xe6, 0x9f, 0x79, 0xc8, 0xa7, 0x20, 0x6a, 0xc0, 0xfa,
|
||||
0x38, 0x74, 0xb5, 0xc5, 0xad, 0xc6, 0xb3, 0x4f, 0xb7, 0x65, 0xbf, 0xad, 0xd0, 0xe5, 0x44, 0x69,
|
||||
0x51, 0x03, 0xf6, 0x52, 0x53, 0x34, 0x09, 0xe7, 0xf1, 0x98, 0xd3, 0x68, 0x7e, 0x79, 0xcd, 0x6f,
|
||||
0xd3, 0xdb, 0xde, 0x49, 0xc9, 0x81, 0xe2, 0xfa, 0x8a, 0x42, 0x3f, 0xc2, 0x56, 0x56, 0x6a, 0xf3,
|
||||
0xc8, 0x65, 0x82, 0xab, 0xbb, 0x2f, 0x35, 0x6a, 0x2b, 0x1e, 0xd3, 0x8a, 0x1b, 0x29, 0x9e, 0x54,
|
||||
0xc6, 0xab, 0x4b, 0x59, 0x56, 0x53, 0x31, 0x1b, 0xeb, 0xdb, 0x93, 0x75, 0xbd, 0x4e, 0x0a, 0x12,
|
||||
0x50, 0xf7, 0x66, 0x42, 0x25, 0x0c, 0xbc, 0x30, 0xa0, 0xc9, 0x94, 0xd1, 0xc6, 0xeb, 0x37, 0xaa,
|
||||
0x96, 0xcb, 0xa4, 0xa4, 0xc0, 0xc1, 0x94, 0x35, 0x5e, 0xbf, 0x91, 0xa5, 0xa7, 0xba, 0x87, 0x7f,
|
||||
0x8c, 0xbc, 0xf8, 0xb6, 0xb6, 0x79, 0x94, 0x3b, 0xae, 0x10, 0xd5, 0x50, 0x58, 0x21, 0x68, 0x17,
|
||||
0x36, 0xae, 0x66, 0x6c, 0x92, 0xd4, 0xf2, 0x8a, 0xd2, 0x0b, 0xf3, 0xdf, 0x75, 0x28, 0xad, 0xa4,
|
||||
0x00, 0x95, 0xa1, 0x40, 0xf0, 0x00, 0x93, 0x73, 0xdc, 0x36, 0xbe, 0x40, 0x35, 0xd8, 0x1d, 0xd9,
|
||||
0xef, 0x6c, 0xe7, 0xbd, 0x4d, 0xfb, 0xcd, 0x8b, 0x1e, 0xb6, 0x87, 0xf4, 0xac, 0x39, 0x38, 0x33,
|
||||
0x72, 0xe8, 0x29, 0xd4, 0x2c, 0xbb, 0xe5, 0x10, 0x82, 0x5b, 0xc3, 0x05, 0xd7, 0xec, 0x39, 0x23,
|
||||
0x7b, 0x68, 0x3c, 0x42, 0xcf, 0xe1, 0xa0, 0x63, 0xd9, 0xcd, 0x2e, 0x5d, 0x6a, 0x5a, 0xdd, 0xe1,
|
||||
0x39, 0xc5, 0x1f, 0xfa, 0x16, 0xb9, 0x30, 0xd6, 0x1e, 0x12, 0x9c, 0x0d, 0xbb, 0xad, 0xcc, 0xc2,
|
||||
0x3a, 0xda, 0x87, 0x3d, 0x2d, 0xd0, 0x5b, 0xe8, 0xd0, 0x71, 0xe8, 0xc0, 0x71, 0x6c, 0x63, 0x03,
|
||||
0x6d, 0x43, 0xc5, 0xb2, 0xcf, 0x9b, 0x5d, 0xab, 0x4d, 0x09, 0x6e, 0x76, 0x7b, 0xc6, 0x26, 0xda,
|
||||
0x81, 0xea, 0x7d, 0x5d, 0x5e, 0x9a, 0xc8, 0x74, 0x8e, 0x6d, 0x39, 0x36, 0x3d, 0xc7, 0x64, 0x60,
|
||||
0x39, 0xb6, 0x51, 0x40, 0x8f, 0x01, 0xdd, 0xa5, 0xce, 0x7a, 0xcd, 0x96, 0x51, 0x44, 0x7b, 0xb0,
|
||||
0x7d, 0x17, 0x7f, 0x87, 0x2f, 0x0c, 0x90, 0x69, 0xd0, 0x07, 0xa3, 0x6f, 0x71, 0xd7, 0x79, 0x4f,
|
||||
0x7b, 0x96, 0x6d, 0xf5, 0x46, 0x3d, 0xa3, 0x84, 0x76, 0xc1, 0xe8, 0x60, 0x4c, 0x2d, 0x7b, 0x30,
|
||||
0xea, 0x74, 0xac, 0x96, 0x85, 0xed, 0xa1, 0x51, 0xd6, 0x9e, 0x1f, 0x0a, 0xbc, 0x22, 0x37, 0xb4,
|
||||
0xce, 0x9a, 0xb6, 0x8d, 0xbb, 0xb4, 0x6d, 0x0d, 0x9a, 0x6f, 0xbb, 0xb8, 0x6d, 0x6c, 0xa1, 0x43,
|
||||
0xd8, 0x1f, 0xe2, 0x5e, 0xdf, 0x21, 0x4d, 0x72, 0x41, 0x33, 0xbe, 0xd3, 0xb4, 0xba, 0x23, 0x82,
|
||||
0x8d, 0x2a, 0x7a, 0x01, 0x87, 0x04, 0xff, 0x3c, 0xb2, 0x08, 0x6e, 0x53, 0xdb, 0x69, 0x63, 0xda,
|
||||
0xc1, 0xcd, 0xe1, 0x88, 0x60, 0xda, 0xb3, 0x06, 0x03, 0xcb, 0xfe, 0xc9, 0x30, 0xd0, 0x57, 0x70,
|
||||
0xb4, 0x90, 0x2c, 0x0c, 0xdc, 0x53, 0x6d, 0xcb, 0xf8, 0xb2, 0xfb, 0xb4, 0xf1, 0x87, 0x21, 0xed,
|
||||
0x63, 0x4c, 0x0c, 0x84, 0xea, 0xf0, 0x78, 0xe9, 0x5e, 0x3b, 0x48, 0x7d, 0xef, 0x48, 0xae, 0x8f,
|
||||
0x49, 0xaf, 0x69, 0xcb, 0x0b, 0xbe, 0xc3, 0xed, 0xca, 0x63, 0x2f, 0xb9, 0xfb, 0xc7, 0xde, 0x33,
|
||||
0xff, 0x5a, 0x83, 0xca, 0x9d, 0xa2, 0x47, 0x4f, 0xa1, 0x98, 0x78, 0x93, 0x80, 0x09, 0xd9, 0xca,
|
||||
0xba, 0xcb, 0x97, 0x80, 0x7a, 0x00, 0xa6, 0xcc, 0x0b, 0xf4, 0x78, 0xd1, 0xdd, 0x56, 0x54, 0x88,
|
||||
0x1a, 0x2e, 0x4f, 0x20, 0x2f, 0x7b, 0x46, 0xce, 0xf2, 0x35, 0xd5, 0x20, 0x9b, 0x72, 0x69, 0xb9,
|
||||
0xd2, 0xaa, 0x9c, 0x5f, 0x89, 0x60, 0x7e, 0xa4, 0x7a, 0xa7, 0x42, 0x96, 0x00, 0xfa, 0x12, 0x2a,
|
||||
0x3e, 0x4f, 0x12, 0x36, 0xe1, 0x54, 0xd7, 0x3f, 0x28, 0x45, 0x39, 0x05, 0x3b, 0x12, 0x93, 0xa2,
|
||||
0xac, 0x7f, 0xb5, 0x68, 0x43, 0x8b, 0x52, 0x50, 0x8b, 0xee, 0x8f, 0x4f, 0xc1, 0xd2, 0x36, 0x5b,
|
||||
0x1d, 0x9f, 0x82, 0xa1, 0x57, 0xb0, 0xad, 0x7b, 0xd9, 0x0b, 0x3c, 0x7f, 0xee, 0xeb, 0x9e, 0xce,
|
||||
0xab, 0x23, 0x57, 0x55, 0x4f, 0x6b, 0x5c, 0xb5, 0xf6, 0x3e, 0x14, 0x2e, 0x59, 0xc2, 0xe5, 0xe4,
|
||||
0xae, 0x15, 0x94, 0xb1, 0xbc, 0x5c, 0x77, 0xb8, 0x7a, 0x84, 0xe4, 0x3c, 0x8f, 0xe5, 0x34, 0x29,
|
||||
0x6a, 0xea, 0x8a, 0x73, 0x22, 0xf3, 0xb8, 0xf0, 0xc0, 0x3e, 0x2e, 0x3d, 0x94, 0x56, 0x3c, 0x68,
|
||||
0x5c, 0x79, 0x78, 0x05, 0xdb, 0xfc, 0xa3, 0x88, 0x19, 0x0d, 0x23, 0x76, 0x33, 0xe7, 0xd4, 0x65,
|
||||
0x82, 0xd5, 0xca, 0x2a, 0xb9, 0x55, 0x45, 0x38, 0x0a, 0x6f, 0x33, 0xc1, 0xcc, 0xa7, 0x50, 0x27,
|
||||
0x3c, 0xe1, 0xa2, 0xe7, 0x25, 0x89, 0x17, 0x06, 0xad, 0x30, 0x10, 0x71, 0x38, 0x4b, 0x1f, 0x00,
|
||||
0xf3, 0x10, 0x0e, 0x1e, 0x64, 0xf5, 0x04, 0x6f, 0xfc, 0xf3, 0x08, 0x36, 0xd5, 0x4c, 0x8f, 0x51,
|
||||
0x1b, 0x4a, 0x72, 0xc6, 0xa7, 0xcf, 0x2a, 0xda, 0x5f, 0x99, 0x82, 0x77, 0xbf, 0x18, 0xea, 0xf5,
|
||||
0x87, 0xa8, 0xf4, 0x49, 0x78, 0x07, 0x06, 0x4e, 0x84, 0xe7, 0xcb, 0x71, 0x99, 0x3e, 0x7a, 0x68,
|
||||
0x55, 0x7f, 0xef, 0x25, 0xad, 0x1f, 0x3c, 0xc8, 0xa5, 0xc6, 0xba, 0xfa, 0x48, 0xe9, 0xb3, 0x83,
|
||||
0x0e, 0x57, 0xb4, 0x9f, 0xbe, 0x75, 0xf5, 0x67, 0x9f, 0xa3, 0x53, 0x6b, 0x2e, 0xec, 0x3c, 0x90,
|
||||
0x0a, 0xf4, 0xf5, 0xea, 0x09, 0x3e, 0x9b, 0xc8, 0xfa, 0xcb, 0xff, 0x93, 0x69, 0x2f, 0x6f, 0xbf,
|
||||
0xfb, 0xe5, 0x74, 0xe2, 0x89, 0xe9, 0xfc, 0xf2, 0x64, 0x1c, 0xfa, 0xa7, 0x33, 0x6f, 0x32, 0x15,
|
||||
0x81, 0x17, 0x4c, 0x02, 0x2e, 0xfe, 0x08, 0xe3, 0xeb, 0xd3, 0x59, 0xe0, 0x9e, 0xaa, 0x07, 0xf6,
|
||||
0x74, 0x61, 0xee, 0x72, 0x53, 0x7d, 0x9b, 0x7d, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01,
|
||||
0xde, 0xa4, 0x83, 0xcb, 0x09, 0x00, 0x00,
|
||||
// 1456 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xdb, 0x72, 0x1a, 0x47,
|
||||
0x13, 0xfe, 0x31, 0x12, 0x87, 0xe6, 0xa0, 0xd5, 0xe8, 0x60, 0x84, 0x2c, 0x5b, 0xde, 0xff, 0xff,
|
||||
0x1d, 0x95, 0xcb, 0x25, 0x55, 0x48, 0xd9, 0x95, 0xab, 0xa4, 0x30, 0x2c, 0xd1, 0x96, 0x60, 0xc1,
|
||||
0x03, 0xc8, 0x56, 0x72, 0x31, 0x35, 0x62, 0x47, 0xb0, 0x11, 0xec, 0xae, 0x76, 0x87, 0xc4, 0xe4,
|
||||
0x01, 0xf2, 0x3a, 0xc9, 0x4d, 0x6e, 0x73, 0x97, 0x87, 0xc8, 0xdb, 0xa4, 0x66, 0x66, 0x97, 0x83,
|
||||
0x8c, 0x92, 0x5c, 0xc1, 0x7e, 0xdf, 0x37, 0xdd, 0xd3, 0x3d, 0xdd, 0x3d, 0x03, 0xfb, 0x81, 0x37,
|
||||
0xe5, 0x2c, 0x08, 0xfc, 0xc1, 0x99, 0xfa, 0x77, 0xea, 0x07, 0x1e, 0xf7, 0x50, 0x76, 0x8e, 0x97,
|
||||
0xb3, 0x81, 0x3f, 0x50, 0xa8, 0xfe, 0x47, 0x02, 0x8a, 0x1d, 0x3a, 0x9b, 0x30, 0x97, 0x63, 0x76,
|
||||
0x37, 0x65, 0x21, 0x47, 0x8f, 0x21, 0xed, 0xd3, 0x19, 0x09, 0xd8, 0x5d, 0x29, 0x71, 0x9c, 0x38,
|
||||
0xc9, 0xe2, 0x94, 0x4f, 0x67, 0x98, 0xdd, 0x21, 0x1d, 0x0a, 0x37, 0x8c, 0x91, 0xb1, 0x33, 0x71,
|
||||
0x38, 0x09, 0x29, 0x2f, 0x3d, 0x3a, 0x4e, 0x9c, 0x24, 0x71, 0xee, 0x86, 0xb1, 0xa6, 0xc0, 0xba,
|
||||
0x94, 0xa3, 0x23, 0x80, 0xc1, 0x98, 0xff, 0xa0, 0x44, 0xa5, 0xe4, 0x71, 0xe2, 0x64, 0x13, 0x67,
|
||||
0x05, 0x22, 0x15, 0xe8, 0x33, 0xd8, 0xe2, 0xce, 0x84, 0x79, 0x53, 0x4e, 0x42, 0x36, 0xf0, 0x5c,
|
||||
0x3b, 0x2c, 0x6d, 0x48, 0x4d, 0x31, 0x82, 0xbb, 0x0a, 0x45, 0xa7, 0xb0, 0xe3, 0x4d, 0xf9, 0xd0,
|
||||
0x73, 0xdc, 0x21, 0x19, 0x8c, 0xa8, 0xeb, 0xb2, 0x31, 0x71, 0xec, 0xd2, 0xa6, 0xf4, 0xb8, 0x1d,
|
||||
0x53, 0x35, 0xc5, 0x98, 0xb6, 0xfe, 0x3d, 0x6c, 0xcd, 0xc3, 0x08, 0x7d, 0xcf, 0x0d, 0x19, 0x3a,
|
||||
0x80, 0x8c, 0x88, 0x63, 0x44, 0xc3, 0x91, 0x0c, 0x24, 0x8f, 0x45, 0x5c, 0xe7, 0x34, 0x1c, 0xa1,
|
||||
0x43, 0xc8, 0xfa, 0x01, 0x23, 0xce, 0x84, 0x0e, 0x99, 0x8c, 0x22, 0x8f, 0x33, 0x7e, 0xc0, 0x4c,
|
||||
0xf1, 0x8d, 0x9e, 0x41, 0xce, 0x57, 0xa6, 0x08, 0x0b, 0x02, 0x19, 0x43, 0x16, 0x43, 0x04, 0x19,
|
||||
0x41, 0xa0, 0x7f, 0x05, 0x5b, 0x58, 0xe4, 0xb2, 0xc1, 0x58, 0x9c, 0x33, 0x04, 0x1b, 0x36, 0x0b,
|
||||
0x79, 0xe4, 0x47, 0xfe, 0x17, 0x79, 0xa4, 0x93, 0xe5, 0x44, 0xa5, 0xe8, 0x44, 0xe4, 0x48, 0xb7,
|
||||
0x41, 0x5b, 0xac, 0x8f, 0x36, 0x7b, 0x02, 0x9a, 0x38, 0x1f, 0x11, 0xae, 0xc8, 0xf1, 0x44, 0xac,
|
||||
0x4a, 0xc8, 0x55, 0xc5, 0x08, 0x6f, 0x30, 0xd6, 0x0a, 0x29, 0x47, 0x2f, 0x54, 0x0a, 0xc9, 0xd8,
|
||||
0x1b, 0xdc, 0x12, 0x9b, 0x8d, 0xe9, 0x2c, 0x32, 0x5f, 0x10, 0x70, 0xd3, 0x1b, 0xdc, 0xd6, 0x05,
|
||||
0xa8, 0x7f, 0x07, 0xa8, 0xcb, 0x5c, 0xbb, 0xe7, 0x49, 0x5f, 0xf1, 0x46, 0x9f, 0x43, 0x3e, 0x0e,
|
||||
0x6e, 0x29, 0x31, 0x71, 0xc0, 0x32, 0x39, 0x3a, 0x6c, 0xca, 0x52, 0x91, 0x66, 0x73, 0x95, 0xfc,
|
||||
0xe9, 0xd8, 0x15, 0xf5, 0xa2, 0xcc, 0x28, 0x4a, 0x27, 0xb0, 0xb3, 0x62, 0x3c, 0x8a, 0xa2, 0x0c,
|
||||
0x22, 0x8d, 0x2a, 0xad, 0x89, 0x79, 0x5a, 0xe5, 0x37, 0x7a, 0x05, 0xe9, 0x1b, 0xea, 0x8c, 0xa7,
|
||||
0x41, 0x6c, 0x18, 0x9d, 0xce, 0x2b, 0xf2, 0xb4, 0xa1, 0x18, 0x1c, 0x4b, 0xf4, 0x9f, 0xd3, 0x90,
|
||||
0x8e, 0x40, 0x54, 0x81, 0x8d, 0x81, 0x67, 0x2b, 0x8b, 0xc5, 0xca, 0xd3, 0x4f, 0x97, 0xc5, 0xbf,
|
||||
0x35, 0xcf, 0x66, 0x58, 0x6a, 0x51, 0x05, 0xf6, 0x22, 0x53, 0x24, 0xf4, 0xa6, 0xc1, 0x80, 0x11,
|
||||
0x7f, 0x7a, 0x7d, 0xcb, 0x66, 0xd1, 0x69, 0xef, 0x44, 0x64, 0x57, 0x72, 0x1d, 0x49, 0xa1, 0xaf,
|
||||
0xa1, 0x18, 0x97, 0xda, 0xd4, 0xb7, 0x29, 0x67, 0xf2, 0xec, 0x73, 0x95, 0xd2, 0x92, 0xc7, 0xa8,
|
||||
0xe2, 0xfa, 0x92, 0xc7, 0x85, 0xc1, 0xf2, 0xa7, 0x28, 0xab, 0x11, 0x1f, 0x0f, 0xd4, 0xe9, 0x89,
|
||||
0xba, 0xde, 0xc0, 0x19, 0x01, 0xc8, 0x73, 0xd3, 0xa1, 0xe0, 0xb9, 0x8e, 0xe7, 0x92, 0x70, 0x44,
|
||||
0x49, 0xe5, 0xf5, 0x1b, 0x59, 0xcb, 0x79, 0x9c, 0x93, 0x60, 0x77, 0x44, 0x2b, 0xaf, 0xdf, 0x88,
|
||||
0xd2, 0x93, 0xdd, 0xc3, 0x3e, 0xfa, 0x4e, 0x30, 0x2b, 0xa5, 0x8e, 0x13, 0x27, 0x05, 0x2c, 0x1b,
|
||||
0xca, 0x90, 0x08, 0xda, 0x85, 0xcd, 0x9b, 0x31, 0x1d, 0x86, 0xa5, 0xb4, 0xa4, 0xd4, 0x87, 0xfe,
|
||||
0xe7, 0x06, 0xe4, 0x96, 0x52, 0x80, 0xf2, 0x90, 0xc1, 0x46, 0xd7, 0xc0, 0x97, 0x46, 0x5d, 0xfb,
|
||||
0x0f, 0x2a, 0xc1, 0x6e, 0xdf, 0xba, 0xb0, 0xda, 0xef, 0x2d, 0xd2, 0xa9, 0x5e, 0xb5, 0x0c, 0xab,
|
||||
0x47, 0xce, 0xab, 0xdd, 0x73, 0x2d, 0x81, 0x9e, 0x40, 0xc9, 0xb4, 0x6a, 0x6d, 0x8c, 0x8d, 0x5a,
|
||||
0x6f, 0xce, 0x55, 0x5b, 0xed, 0xbe, 0xd5, 0xd3, 0x1e, 0xa1, 0x67, 0x70, 0xd8, 0x30, 0xad, 0x6a,
|
||||
0x93, 0x2c, 0x34, 0xb5, 0x66, 0xef, 0x92, 0x18, 0x1f, 0x3a, 0x26, 0xbe, 0xd2, 0x92, 0xeb, 0x04,
|
||||
0xe7, 0xbd, 0x66, 0x2d, 0xb6, 0xb0, 0x81, 0x0e, 0x60, 0x4f, 0x09, 0xd4, 0x12, 0xd2, 0x6b, 0xb7,
|
||||
0x49, 0xb7, 0xdd, 0xb6, 0xb4, 0x4d, 0xb4, 0x0d, 0x05, 0xd3, 0xba, 0xac, 0x36, 0xcd, 0x3a, 0xc1,
|
||||
0x46, 0xb5, 0xd9, 0xd2, 0x52, 0x68, 0x07, 0xb6, 0xee, 0xeb, 0xd2, 0xc2, 0x44, 0xac, 0x6b, 0x5b,
|
||||
0x66, 0xdb, 0x22, 0x97, 0x06, 0xee, 0x9a, 0x6d, 0x4b, 0xcb, 0xa0, 0x7d, 0x40, 0xab, 0xd4, 0x79,
|
||||
0xab, 0x5a, 0xd3, 0xb2, 0x68, 0x0f, 0xb6, 0x57, 0xf1, 0x0b, 0xe3, 0x4a, 0x03, 0x91, 0x06, 0xb5,
|
||||
0x31, 0xf2, 0xd6, 0x68, 0xb6, 0xdf, 0x93, 0x96, 0x69, 0x99, 0xad, 0x7e, 0x4b, 0xcb, 0xa1, 0x5d,
|
||||
0xd0, 0x1a, 0x86, 0x41, 0x4c, 0xab, 0xdb, 0x6f, 0x34, 0xcc, 0x9a, 0x69, 0x58, 0x3d, 0x2d, 0xaf,
|
||||
0x3c, 0xaf, 0x0b, 0xbc, 0x20, 0x16, 0xd4, 0xce, 0xab, 0x96, 0x65, 0x34, 0x49, 0xdd, 0xec, 0x56,
|
||||
0xdf, 0x36, 0x8d, 0xba, 0x56, 0x44, 0x47, 0x70, 0xd0, 0x33, 0x5a, 0x9d, 0x36, 0xae, 0xe2, 0x2b,
|
||||
0x12, 0xf3, 0x8d, 0xaa, 0xd9, 0xec, 0x63, 0x43, 0xdb, 0x42, 0xcf, 0xe1, 0x08, 0x1b, 0xef, 0xfa,
|
||||
0x26, 0x36, 0xea, 0xc4, 0x6a, 0xd7, 0x0d, 0xd2, 0x30, 0xaa, 0xbd, 0x3e, 0x36, 0x48, 0xcb, 0xec,
|
||||
0x76, 0x4d, 0xeb, 0x1b, 0x4d, 0x43, 0xff, 0x83, 0xe3, 0xb9, 0x64, 0x6e, 0xe0, 0x9e, 0x6a, 0x5b,
|
||||
0xc4, 0x17, 0x9f, 0xa7, 0x65, 0x7c, 0xe8, 0x91, 0x8e, 0x61, 0x60, 0x0d, 0xa1, 0x32, 0xec, 0x2f,
|
||||
0xdc, 0x2b, 0x07, 0x91, 0xef, 0x1d, 0xc1, 0x75, 0x0c, 0xdc, 0xaa, 0x5a, 0xe2, 0x80, 0x57, 0xb8,
|
||||
0x5d, 0xb1, 0xed, 0x05, 0x77, 0x7f, 0xdb, 0x7b, 0xfa, 0x2f, 0x49, 0x28, 0xac, 0x14, 0x3d, 0x7a,
|
||||
0x02, 0xd9, 0xd0, 0x19, 0xba, 0x94, 0x8b, 0x56, 0x56, 0x5d, 0xbe, 0x00, 0xe4, 0x05, 0x30, 0xa2,
|
||||
0x8e, 0xab, 0xc6, 0x8b, 0xea, 0xb6, 0xac, 0x44, 0xe4, 0x70, 0x79, 0x0c, 0x69, 0xd1, 0x33, 0x62,
|
||||
0x96, 0x27, 0x65, 0x83, 0xa4, 0xc4, 0xa7, 0x69, 0x0b, 0xab, 0x62, 0x7e, 0x85, 0x9c, 0x4e, 0x7c,
|
||||
0xd9, 0x3b, 0x05, 0xbc, 0x00, 0xd0, 0x7f, 0xa1, 0x30, 0x61, 0x61, 0x48, 0x87, 0x8c, 0xa8, 0xfa,
|
||||
0x07, 0xa9, 0xc8, 0x47, 0x60, 0x43, 0x60, 0x42, 0x14, 0xf7, 0xaf, 0x12, 0x6d, 0x2a, 0x51, 0x04,
|
||||
0x2a, 0xd1, 0xfd, 0xf1, 0xc9, 0x69, 0xd4, 0x66, 0xcb, 0xe3, 0x93, 0x53, 0xf4, 0x12, 0xb6, 0x55,
|
||||
0x2f, 0x3b, 0xae, 0x33, 0x99, 0x4e, 0x54, 0x4f, 0xa7, 0xe5, 0x96, 0xb7, 0x64, 0x4f, 0x2b, 0x5c,
|
||||
0xb6, 0xf6, 0x01, 0x64, 0xae, 0x69, 0xc8, 0xc4, 0xe4, 0x2e, 0x65, 0xa4, 0xb1, 0xb4, 0xf8, 0x6e,
|
||||
0x30, 0x79, 0x09, 0x89, 0x79, 0x1e, 0x88, 0x69, 0x92, 0x55, 0xd4, 0x0d, 0x63, 0x58, 0xe4, 0x71,
|
||||
0xee, 0x81, 0x7e, 0x5c, 0x78, 0xc8, 0x2d, 0x79, 0x50, 0xb8, 0xf4, 0xf0, 0x12, 0xb6, 0xd9, 0x47,
|
||||
0x1e, 0x50, 0xe2, 0xf9, 0xf4, 0x6e, 0xca, 0x88, 0x4d, 0x39, 0x2d, 0xe5, 0x65, 0x72, 0xb7, 0x24,
|
||||
0xd1, 0x96, 0x78, 0x9d, 0x72, 0xaa, 0x3f, 0x81, 0x32, 0x66, 0x21, 0xe3, 0x2d, 0x27, 0x0c, 0x1d,
|
||||
0xcf, 0xad, 0x79, 0x2e, 0x0f, 0xbc, 0x71, 0x74, 0x01, 0xe8, 0x47, 0x70, 0xb8, 0x96, 0x55, 0x13,
|
||||
0x5c, 0x2c, 0x7e, 0x37, 0x65, 0xc1, 0x6c, 0xfd, 0xe2, 0x0b, 0x38, 0x5c, 0xcb, 0x46, 0xe3, 0xff,
|
||||
0x15, 0x6c, 0xba, 0x9e, 0xcd, 0xc2, 0x52, 0xe2, 0x38, 0x79, 0x92, 0xab, 0xec, 0x2f, 0xcd, 0x4d,
|
||||
0xcb, 0xb3, 0xd9, 0xb9, 0x13, 0x72, 0x2f, 0x98, 0x61, 0x25, 0xd2, 0x7f, 0x4f, 0x40, 0x6e, 0x09,
|
||||
0x46, 0xfb, 0x90, 0x8a, 0x66, 0xb4, 0x2a, 0xaa, 0xe8, 0x0b, 0xbd, 0x80, 0xe2, 0x98, 0x86, 0x9c,
|
||||
0x88, 0x91, 0x4d, 0xc4, 0x21, 0x45, 0xf7, 0xdd, 0x3d, 0x14, 0x7d, 0x09, 0x8f, 0x3d, 0x3e, 0x62,
|
||||
0x81, 0x7c, 0x2f, 0x90, 0x70, 0x3a, 0x18, 0xb0, 0x30, 0x24, 0x7e, 0xe0, 0x5d, 0xcb, 0x52, 0x7b,
|
||||
0x84, 0x1f, 0xa2, 0xd1, 0x6b, 0xc8, 0x44, 0x35, 0x22, 0x9e, 0x23, 0x62, 0xeb, 0x07, 0x9f, 0x8e,
|
||||
0xfc, 0x78, 0xf7, 0x73, 0xa9, 0xfe, 0x6b, 0x02, 0x8a, 0xab, 0x24, 0x7a, 0x2a, 0xab, 0x3f, 0x7e,
|
||||
0xad, 0x24, 0xe4, 0x61, 0x2e, 0x21, 0xff, 0x3a, 0x96, 0x0a, 0xec, 0x4e, 0x1c, 0x97, 0xf8, 0xcc,
|
||||
0xa5, 0x63, 0xe7, 0x27, 0x46, 0xe2, 0x87, 0x44, 0x52, 0xaa, 0xd7, 0x72, 0x48, 0x87, 0xfc, 0x4a,
|
||||
0xd0, 0x1b, 0x32, 0xe8, 0x15, 0xac, 0xf2, 0x5b, 0x12, 0x52, 0xf2, 0xca, 0x0e, 0x50, 0x1d, 0x72,
|
||||
0xe2, 0x0a, 0x8f, 0x5e, 0x4d, 0x68, 0x39, 0xe2, 0xd5, 0x07, 0x61, 0xb9, 0xbc, 0x8e, 0x8a, 0x8e,
|
||||
0xfc, 0x02, 0x34, 0x23, 0xe4, 0xce, 0x44, 0xdc, 0x86, 0xd1, 0x9b, 0x06, 0x2d, 0xeb, 0xef, 0x3d,
|
||||
0x94, 0xca, 0x87, 0x6b, 0xb9, 0xc8, 0x58, 0x53, 0x6d, 0x29, 0x7a, 0x55, 0xa0, 0xa3, 0x25, 0xed,
|
||||
0xa7, 0x4f, 0x99, 0xf2, 0xd3, 0x87, 0xe8, 0xc8, 0x9a, 0x0d, 0x3b, 0x6b, 0x2a, 0x1d, 0xfd, 0x7f,
|
||||
0x79, 0x07, 0x0f, 0xf6, 0x49, 0xf9, 0xc5, 0x3f, 0xc9, 0x16, 0x5e, 0xd6, 0xb4, 0xc4, 0x8a, 0x97,
|
||||
0x87, 0x1b, 0x6a, 0xc5, 0xcb, 0xdf, 0x74, 0xd6, 0xdb, 0xcf, 0xbf, 0x3d, 0x1b, 0x3a, 0x7c, 0x34,
|
||||
0xbd, 0x3e, 0x1d, 0x78, 0x93, 0xb3, 0xb1, 0x33, 0x1c, 0x71, 0xd7, 0x71, 0x87, 0x2e, 0xe3, 0x3f,
|
||||
0x7a, 0xc1, 0xed, 0xd9, 0xd8, 0xb5, 0xcf, 0xe4, 0x2b, 0xed, 0x6c, 0x6e, 0xee, 0x3a, 0x25, 0x1f,
|
||||
0xf8, 0x5f, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x3e, 0x2a, 0xde, 0x10, 0x0c, 0x00, 0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
@ -931,6 +1153,10 @@ type RouterClient interface {
|
||||
//ResetMissionControl clears all mission control state and starts with a clean
|
||||
//slate.
|
||||
ResetMissionControl(ctx context.Context, in *ResetMissionControlRequest, opts ...grpc.CallOption) (*ResetMissionControlResponse, error)
|
||||
//*
|
||||
//QueryMissionControl exposes the internal mission control state to callers.
|
||||
//It is a development feature.
|
||||
QueryMissionControl(ctx context.Context, in *QueryMissionControlRequest, opts ...grpc.CallOption) (*QueryMissionControlResponse, error)
|
||||
}
|
||||
|
||||
type routerClient struct {
|
||||
@ -977,6 +1203,15 @@ func (c *routerClient) ResetMissionControl(ctx context.Context, in *ResetMission
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *routerClient) QueryMissionControl(ctx context.Context, in *QueryMissionControlRequest, opts ...grpc.CallOption) (*QueryMissionControlResponse, error) {
|
||||
out := new(QueryMissionControlResponse)
|
||||
err := c.cc.Invoke(ctx, "/routerrpc.Router/QueryMissionControl", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// RouterServer is the server API for Router service.
|
||||
type RouterServer interface {
|
||||
//*
|
||||
@ -999,6 +1234,10 @@ type RouterServer interface {
|
||||
//ResetMissionControl clears all mission control state and starts with a clean
|
||||
//slate.
|
||||
ResetMissionControl(context.Context, *ResetMissionControlRequest) (*ResetMissionControlResponse, error)
|
||||
//*
|
||||
//QueryMissionControl exposes the internal mission control state to callers.
|
||||
//It is a development feature.
|
||||
QueryMissionControl(context.Context, *QueryMissionControlRequest) (*QueryMissionControlResponse, error)
|
||||
}
|
||||
|
||||
func RegisterRouterServer(s *grpc.Server, srv RouterServer) {
|
||||
@ -1077,6 +1316,24 @@ func _Router_ResetMissionControl_Handler(srv interface{}, ctx context.Context, d
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Router_QueryMissionControl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(QueryMissionControlRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(RouterServer).QueryMissionControl(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/routerrpc.Router/QueryMissionControl",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(RouterServer).QueryMissionControl(ctx, req.(*QueryMissionControlRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
var _Router_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "routerrpc.Router",
|
||||
HandlerType: (*RouterServer)(nil),
|
||||
@ -1097,6 +1354,10 @@ var _Router_serviceDesc = grpc.ServiceDesc{
|
||||
MethodName: "ResetMissionControl",
|
||||
Handler: _Router_ResetMissionControl_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "QueryMissionControl",
|
||||
Handler: _Router_QueryMissionControl_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "routerrpc/router.proto",
|
||||
|
@ -249,6 +249,43 @@ message ResetMissionControlRequest{}
|
||||
|
||||
message ResetMissionControlResponse{}
|
||||
|
||||
message QueryMissionControlRequest {}
|
||||
|
||||
/// QueryMissionControlResponse contains mission control state per node.
|
||||
message QueryMissionControlResponse {
|
||||
repeated NodeHistory nodes = 1;
|
||||
}
|
||||
|
||||
/// NodeHistory contains the mission control state for a particular node.
|
||||
message NodeHistory {
|
||||
/// Node pubkey
|
||||
bytes pubkey = 1 [json_name = "pubkey"];
|
||||
|
||||
/// Time stamp of last failure. Set to zero if no failure happened yet.
|
||||
int64 last_fail_time = 2 [json_name = "last_fail_time"];
|
||||
|
||||
/// Estimation of success probability for channels not in the channel array.
|
||||
float other_chan_success_prob = 3 [json_name = "other_chan_success_prob"];
|
||||
|
||||
/// Historical information of particular channels.
|
||||
repeated ChannelHistory channels = 4 [json_name = "channels"];
|
||||
}
|
||||
|
||||
/// NodeHistory contains the mission control state for a particular channel.
|
||||
message ChannelHistory {
|
||||
/// Short channel id
|
||||
uint64 channel_id = 1 [json_name = "channel_id"];
|
||||
|
||||
/// Time stamp of last failure.
|
||||
int64 last_fail_time = 2 [json_name = "last_fail_time"];
|
||||
|
||||
/// Minimum penalization amount.
|
||||
int64 min_penalize_amt_sat = 3 [json_name = "min_penalize_amt_sat"];
|
||||
|
||||
/// Estimation of success probability for this channel.
|
||||
float success_prob = 4 [json_name = "success_prob"];
|
||||
}
|
||||
|
||||
service Router {
|
||||
/**
|
||||
SendPayment attempts to route a payment described by the passed
|
||||
@ -277,4 +314,10 @@ service Router {
|
||||
slate.
|
||||
*/
|
||||
rpc ResetMissionControl(ResetMissionControlRequest) returns (ResetMissionControlResponse);
|
||||
|
||||
/**
|
||||
QueryMissionControl exposes the internal mission control state to callers.
|
||||
It is a development feature.
|
||||
*/
|
||||
rpc QueryMissionControl(QueryMissionControlRequest) returns (QueryMissionControlResponse);
|
||||
}
|
||||
|
@ -59,6 +59,10 @@ var (
|
||||
Entity: "offchain",
|
||||
Action: "read",
|
||||
}},
|
||||
"/routerrpc.Router/QueryMissionControl": {{
|
||||
Entity: "offchain",
|
||||
Action: "read",
|
||||
}},
|
||||
"/routerrpc.Router/ResetMissionControl": {{
|
||||
Entity: "offchain",
|
||||
Action: "write",
|
||||
@ -453,3 +457,46 @@ func (s *Server) ResetMissionControl(ctx context.Context,
|
||||
|
||||
return &ResetMissionControlResponse{}, nil
|
||||
}
|
||||
|
||||
// QueryMissionControl exposes the internal mission control state to callers. It
|
||||
// is a development feature.
|
||||
func (s *Server) QueryMissionControl(ctx context.Context,
|
||||
req *QueryMissionControlRequest) (*QueryMissionControlResponse, error) {
|
||||
|
||||
snapshot := s.cfg.RouterBackend.MissionControl.GetHistorySnapshot()
|
||||
|
||||
rpcNodes := make([]*NodeHistory, len(snapshot.Nodes))
|
||||
for i, node := range snapshot.Nodes {
|
||||
channels := make([]*ChannelHistory, len(node.Channels))
|
||||
for j, channel := range node.Channels {
|
||||
channels[j] = &ChannelHistory{
|
||||
ChannelId: channel.ChannelID,
|
||||
LastFailTime: channel.LastFail.Unix(),
|
||||
MinPenalizeAmtSat: int64(
|
||||
channel.MinPenalizeAmt.ToSatoshis(),
|
||||
),
|
||||
SuccessProb: float32(channel.SuccessProb),
|
||||
}
|
||||
}
|
||||
|
||||
var lastFail int64
|
||||
if node.LastFail != nil {
|
||||
lastFail = node.LastFail.Unix()
|
||||
}
|
||||
|
||||
rpcNodes[i] = &NodeHistory{
|
||||
Pubkey: node.Node[:],
|
||||
LastFailTime: lastFail,
|
||||
OtherChanSuccessProb: float32(
|
||||
node.OtherChanSuccessProb,
|
||||
),
|
||||
Channels: channels,
|
||||
}
|
||||
}
|
||||
|
||||
response := QueryMissionControlResponse{
|
||||
Nodes: rpcNodes,
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
}
|
||||
|
@ -84,6 +84,48 @@ type channelHistory struct {
|
||||
minPenalizeAmt lnwire.MilliSatoshi
|
||||
}
|
||||
|
||||
// MissionControlSnapshot contains a snapshot of the current state of mission
|
||||
// control.
|
||||
type MissionControlSnapshot struct {
|
||||
// Nodes contains the per node information of this snapshot.
|
||||
Nodes []MissionControlNodeSnapshot
|
||||
}
|
||||
|
||||
// MissionControlNodeSnapshot contains a snapshot of the current node state in
|
||||
// mission control.
|
||||
type MissionControlNodeSnapshot struct {
|
||||
// Node pubkey.
|
||||
Node route.Vertex
|
||||
|
||||
// Lastfail is the time of last failure, if any.
|
||||
LastFail *time.Time
|
||||
|
||||
// Channels is a list of channels for which specific information is
|
||||
// logged.
|
||||
Channels []MissionControlChannelSnapshot
|
||||
|
||||
// OtherChanSuccessProb is the success probability for channels not in
|
||||
// the Channels slice.
|
||||
OtherChanSuccessProb float64
|
||||
}
|
||||
|
||||
// MissionControlChannelSnapshot contains a snapshot of the current channel
|
||||
// state in mission control.
|
||||
type MissionControlChannelSnapshot struct {
|
||||
// ChannelID is the short channel id of the snapshot.
|
||||
ChannelID uint64
|
||||
|
||||
// LastFail is the time of last failure.
|
||||
LastFail time.Time
|
||||
|
||||
// MinPenalizeAmt is the minimum amount for which the channel will be
|
||||
// penalized.
|
||||
MinPenalizeAmt lnwire.MilliSatoshi
|
||||
|
||||
// SuccessProb is the success probability estimation for this channel.
|
||||
SuccessProb float64
|
||||
}
|
||||
|
||||
// NewMissionControl returns a new instance of missionControl.
|
||||
//
|
||||
// TODO(roasbeef): persist memory
|
||||
@ -358,3 +400,55 @@ func (m *MissionControl) reportEdgeFailure(failedEdge edge,
|
||||
minPenalizeAmt: minPenalizeAmt,
|
||||
}
|
||||
}
|
||||
|
||||
// GetHistorySnapshot takes a snapshot from the current mission control state
|
||||
// and actual probability estimates.
|
||||
func (m *MissionControl) GetHistorySnapshot() *MissionControlSnapshot {
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
|
||||
log.Debugf("Requesting history snapshot from mission control: "+
|
||||
"node_count=%v", len(m.history))
|
||||
|
||||
nodes := make([]MissionControlNodeSnapshot, 0, len(m.history))
|
||||
|
||||
for v, h := range m.history {
|
||||
channelSnapshot := make([]MissionControlChannelSnapshot, 0,
|
||||
len(h.channelLastFail),
|
||||
)
|
||||
|
||||
for id, lastFail := range h.channelLastFail {
|
||||
// Show probability assuming amount meets min
|
||||
// penalization amount.
|
||||
prob := m.getEdgeProbabilityForNode(
|
||||
h, id, lastFail.minPenalizeAmt,
|
||||
)
|
||||
|
||||
channelSnapshot = append(channelSnapshot,
|
||||
MissionControlChannelSnapshot{
|
||||
ChannelID: id,
|
||||
LastFail: lastFail.lastFail,
|
||||
MinPenalizeAmt: lastFail.minPenalizeAmt,
|
||||
SuccessProb: prob,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
otherProb := m.getEdgeProbabilityForNode(h, 0, 0)
|
||||
|
||||
nodes = append(nodes,
|
||||
MissionControlNodeSnapshot{
|
||||
Node: v,
|
||||
LastFail: h.lastFail,
|
||||
OtherChanSuccessProb: otherProb,
|
||||
Channels: channelSnapshot,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
snapshot := MissionControlSnapshot{
|
||||
Nodes: nodes,
|
||||
}
|
||||
|
||||
return &snapshot
|
||||
}
|
||||
|
@ -64,4 +64,14 @@ func TestMissionControl(t *testing.T) {
|
||||
// to zero.
|
||||
mc.reportVertexFailure(testNode)
|
||||
expectP(1000, 0)
|
||||
|
||||
// Check whether history snapshot looks sane.
|
||||
history := mc.GetHistorySnapshot()
|
||||
if len(history.Nodes) != 1 {
|
||||
t.Fatal("unexpected number of nodes")
|
||||
}
|
||||
|
||||
if len(history.Nodes[0].Channels) != 1 {
|
||||
t.Fatal("unexpected number of channels")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user