heartbeat

package
v1.0.94 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 16, 2020 License: GPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidLengthHeartbeat        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowHeartbeat          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupHeartbeat = fmt.Errorf("proto: unexpected end of group")
)
View Source
var ErrEmptyPublicKeysMap = errors.New("nil or empty public keys map")

ErrEmptyPublicKeysMap signals that a nil or empty public keys map has been provided

View Source
var ErrFetchGenesisTimeFromDb = errors.New("monitor: can't get genesis time from db")

ErrFetchGenesisTimeFromDb signals that the genesis time cannot be fetched from db

View Source
var ErrInvalidMaxDurationPeerUnresponsive = errors.New("invalid max duration to declare the peer unresponsive")

ErrInvalidMaxDurationPeerUnresponsive signals that the duration provided is invalid

View Source
var ErrMarshalGenesisTime = errors.New("monitor: can't marshal genesis time")

ErrMarshalGenesisTime signals that the marshaling of the genesis time didn't work

View Source
var ErrNilAppStatusHandler = errors.New("nil AppStatusHandler")

ErrNilAppStatusHandler defines the error for setting a nil AppStatusHandler

View Source
var ErrNilDataToProcess = errors.New("nil data to process")

ErrNilDataToProcess signals that nil data was provided

View Source
var ErrNilHeartbeatStorer = errors.New("nil heartbeat storer")

ErrNilHeartbeatStorer signals that the provided heartbeat storer is nil

View Source
var ErrNilKeyGenerator = errors.New("key generator is nil")

ErrNilKeyGenerator is raised when a valid key generator is expected but nil used

View Source
var ErrNilMarshalizer = errors.New("nil marshalizer")

ErrNilMarshalizer signals that a nil marshalizer has been provided

View Source
var ErrNilMessage = errors.New("nil message")

ErrNilMessage signals that a nil message has been received

View Source
var ErrNilMessageHandler = errors.New("nil message handler")

ErrNilMessageHandler signals that the provided message handler is nil

View Source
var ErrNilMessenger = errors.New("nil P2P Messenger")

ErrNilMessenger signals that a nil p2p messenger has been provided

View Source
var ErrNilMonitorDb = errors.New("nil monitor db")

ErrNilMonitorDb signals that a nil monitor db was provided

View Source
var ErrNilPrivateKey = errors.New("nil private key")

ErrNilPrivateKey signals that a nil private key has been provided

View Source
var ErrNilShardCoordinator = errors.New("nil shard coordinator")

ErrNilShardCoordinator signals that an operation has been attempted to or with a nil shard coordinator

View Source
var ErrNilSingleSigner = errors.New("nil single signer")

ErrNilSingleSigner signals that a nil single signer has been provided

View Source
var ErrNilTimer = errors.New("nil time getter handler")

ErrNilTimer signals that a nil time getter handler has been provided

View Source
var ErrPropertyTooLong = errors.New("property too long in Heartbeat")

ErrPropertyTooLong signals that one of the properties is too long

View Source
var ErrStoreGenesisTimeToDb = errors.New("monitor: can't store genesis time")

ErrStoreGenesisTimeToDb signals that the genesis time cannot be store to db

View Source
var ErrUnmarshalGenesisTime = errors.New("monitor: can't unmarshal genesis time")

ErrUnmarshalGenesisTime signals that the unmarshaling of the genesis time didn't work

Functions

This section is empty.

Types

type DbTimeStamp

type DbTimeStamp struct {
	TS *types.Timestamp `protobuf:"bytes,1,opt,name=TS,proto3" json:"TS,omitempty"`
}

func (*DbTimeStamp) Descriptor

func (*DbTimeStamp) Descriptor() ([]byte, []int)

func (*DbTimeStamp) Equal

func (this *DbTimeStamp) Equal(that interface{}) bool

func (*DbTimeStamp) GetTS added in v1.0.93

func (m *DbTimeStamp) GetTS() *types.Timestamp

func (*DbTimeStamp) GoString

func (this *DbTimeStamp) GoString() string

func (*DbTimeStamp) Marshal

func (m *DbTimeStamp) Marshal() (dAtA []byte, err error)

func (*DbTimeStamp) MarshalTo

func (m *DbTimeStamp) MarshalTo(dAtA []byte) (int, error)

func (*DbTimeStamp) MarshalToSizedBuffer

func (m *DbTimeStamp) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*DbTimeStamp) ProtoMessage

func (*DbTimeStamp) ProtoMessage()

func (*DbTimeStamp) Reset

func (m *DbTimeStamp) Reset()

func (*DbTimeStamp) Size

func (m *DbTimeStamp) Size() (n int)

func (*DbTimeStamp) String

func (this *DbTimeStamp) String() string

func (*DbTimeStamp) Unmarshal

func (m *DbTimeStamp) Unmarshal(dAtA []byte) error

func (*DbTimeStamp) XXX_DiscardUnknown

func (m *DbTimeStamp) XXX_DiscardUnknown()

func (*DbTimeStamp) XXX_Marshal

func (m *DbTimeStamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DbTimeStamp) XXX_Merge

func (m *DbTimeStamp) XXX_Merge(src proto.Message)

func (*DbTimeStamp) XXX_Size

func (m *DbTimeStamp) XXX_Size() int

func (*DbTimeStamp) XXX_Unmarshal

func (m *DbTimeStamp) XXX_Unmarshal(b []byte) error

type Duration

type Duration struct {
	time.Duration
}

Duration is a wrapper of the original Duration struct that has JSON marshal and unmarshal capabilities golang issue: https://github.com/golang/go/issues/10275

func (Duration) MarshalJSON

func (d Duration) MarshalJSON() ([]byte, error)

MarshalJSON is called when a json marshal is triggered on this field

func (*Duration) UnmarshalJSON

func (d *Duration) UnmarshalJSON(b []byte) error

UnmarshalJSON is called when a json unmarshal is triggered on this field

type Heartbeat

type Heartbeat struct {
	Payload         []byte `protobuf:"bytes,1,opt,name=Payload,proto3" json:"Payload,omitempty"`
	Pubkey          []byte `protobuf:"bytes,2,opt,name=Pubkey,proto3" json:"Pubkey,omitempty"`
	Signature       []byte `protobuf:"bytes,3,opt,name=Signature,proto3" json:"Signature,omitempty"`
	ShardID         uint32 `protobuf:"varint,4,opt,name=ShardID,proto3" json:"ShardID,omitempty"`
	VersionNumber   string `protobuf:"bytes,5,opt,name=VersionNumber,proto3" json:"VersionNumber,omitempty"`
	NodeDisplayName string `protobuf:"bytes,6,opt,name=NodeDisplayName,proto3" json:"NodeDisplayName,omitempty"`
}

Heartbeat represents the heartbeat message that is sent between peers

func (*Heartbeat) Descriptor

func (*Heartbeat) Descriptor() ([]byte, []int)

func (*Heartbeat) Equal

func (this *Heartbeat) Equal(that interface{}) bool

func (*Heartbeat) GetNodeDisplayName

func (m *Heartbeat) GetNodeDisplayName() string

func (*Heartbeat) GetPayload

func (m *Heartbeat) GetPayload() []byte

func (*Heartbeat) GetPubkey

func (m *Heartbeat) GetPubkey() []byte

func (*Heartbeat) GetShardID

func (m *Heartbeat) GetShardID() uint32

func (*Heartbeat) GetSignature

func (m *Heartbeat) GetSignature() []byte

func (*Heartbeat) GetVersionNumber

func (m *Heartbeat) GetVersionNumber() string

func (*Heartbeat) GoString

func (this *Heartbeat) GoString() string

func (*Heartbeat) Marshal

func (m *Heartbeat) Marshal() (dAtA []byte, err error)

func (*Heartbeat) MarshalTo

func (m *Heartbeat) MarshalTo(dAtA []byte) (int, error)

func (*Heartbeat) MarshalToSizedBuffer

func (m *Heartbeat) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Heartbeat) ProtoMessage

func (*Heartbeat) ProtoMessage()

func (*Heartbeat) Reset

func (m *Heartbeat) Reset()

func (*Heartbeat) Size

func (m *Heartbeat) Size() (n int)

func (*Heartbeat) String

func (this *Heartbeat) String() string

func (*Heartbeat) Unmarshal

func (m *Heartbeat) Unmarshal(dAtA []byte) error

func (*Heartbeat) XXX_DiscardUnknown

func (m *Heartbeat) XXX_DiscardUnknown()

func (*Heartbeat) XXX_Marshal

func (m *Heartbeat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Heartbeat) XXX_Merge

func (m *Heartbeat) XXX_Merge(src proto.Message)

func (*Heartbeat) XXX_Size

func (m *Heartbeat) XXX_Size() int

func (*Heartbeat) XXX_Unmarshal

func (m *Heartbeat) XXX_Unmarshal(b []byte) error

type HeartbeatDTO

type HeartbeatDTO struct {
	MaxDurationPeerUnresponsive *types.Duration  `protobuf:"bytes,1,opt,name=MaxDurationPeerUnresponsive,proto3" json:"MaxDurationPeerUnresponsive,omitempty"`
	MaxInactiveTime             *types.Duration  `protobuf:"bytes,2,opt,name=MaxInactiveTime,proto3" json:"MaxInactiveTime,omitempty"`
	TotalUpTime                 *types.Duration  `protobuf:"bytes,3,opt,name=TotalUpTime,proto3" json:"TotalUpTime,omitempty"`
	TotalDownTime               *types.Duration  `protobuf:"bytes,4,opt,name=TotalDownTime,proto3" json:"TotalDownTime,omitempty"`
	TimeStamp                   *types.Timestamp `protobuf:"bytes,5,opt,name=TimeStamp,proto3" json:"TimeStamp,omitempty"`
	IsActive                    bool             `protobuf:"varint,6,opt,name=IsActive,proto3" json:"IsActive,omitempty"`
	ReceivedShardID             uint32           `protobuf:"varint,7,opt,name=ReceivedShardID,proto3" json:"ReceivedShardID,omitempty"`
	ComputedShardID             uint32           `protobuf:"varint,8,opt,name=ComputedShardID,proto3" json:"ComputedShardID,omitempty"`
	VersionNumber               string           `protobuf:"bytes,9,opt,name=VersionNumber,proto3" json:"VersionNumber,omitempty"`
	NodeDisplayName             string           `protobuf:"bytes,10,opt,name=NodeDisplayName,proto3" json:"NodeDisplayName,omitempty"`
	IsValidator                 bool             `protobuf:"varint,11,opt,name=IsValidator,proto3" json:"IsValidator,omitempty"`
	LastUptimeDowntime          *types.Timestamp `protobuf:"bytes,12,opt,name=LastUptimeDowntime,proto3" json:"LastUptimeDowntime,omitempty"`
	GenesisTime                 *types.Timestamp `protobuf:"bytes,13,opt,name=GenesisTime,proto3" json:"GenesisTime,omitempty"`
}

HeartbeatDTO is the struct used for handling DB operations for heartbeatMessageInfo struct

func (*HeartbeatDTO) Descriptor

func (*HeartbeatDTO) Descriptor() ([]byte, []int)

func (*HeartbeatDTO) Equal

func (this *HeartbeatDTO) Equal(that interface{}) bool

func (*HeartbeatDTO) GetComputedShardID

func (m *HeartbeatDTO) GetComputedShardID() uint32

func (*HeartbeatDTO) GetGenesisTime

func (m *HeartbeatDTO) GetGenesisTime() *types.Timestamp

func (*HeartbeatDTO) GetIsActive

func (m *HeartbeatDTO) GetIsActive() bool

func (*HeartbeatDTO) GetIsValidator added in v1.0.93

func (m *HeartbeatDTO) GetIsValidator() bool

func (*HeartbeatDTO) GetLastUptimeDowntime

func (m *HeartbeatDTO) GetLastUptimeDowntime() *types.Timestamp

func (*HeartbeatDTO) GetMaxDurationPeerUnresponsive

func (m *HeartbeatDTO) GetMaxDurationPeerUnresponsive() *types.Duration

func (*HeartbeatDTO) GetMaxInactiveTime

func (m *HeartbeatDTO) GetMaxInactiveTime() *types.Duration

func (*HeartbeatDTO) GetNodeDisplayName

func (m *HeartbeatDTO) GetNodeDisplayName() string

func (*HeartbeatDTO) GetReceivedShardID

func (m *HeartbeatDTO) GetReceivedShardID() uint32

func (*HeartbeatDTO) GetTimeStamp

func (m *HeartbeatDTO) GetTimeStamp() *types.Timestamp

func (*HeartbeatDTO) GetTotalDownTime

func (m *HeartbeatDTO) GetTotalDownTime() *types.Duration

func (*HeartbeatDTO) GetTotalUpTime

func (m *HeartbeatDTO) GetTotalUpTime() *types.Duration

func (*HeartbeatDTO) GetVersionNumber

func (m *HeartbeatDTO) GetVersionNumber() string

func (*HeartbeatDTO) GoString

func (this *HeartbeatDTO) GoString() string

func (*HeartbeatDTO) Marshal

func (m *HeartbeatDTO) Marshal() (dAtA []byte, err error)

func (*HeartbeatDTO) MarshalTo

func (m *HeartbeatDTO) MarshalTo(dAtA []byte) (int, error)

func (*HeartbeatDTO) MarshalToSizedBuffer

func (m *HeartbeatDTO) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*HeartbeatDTO) ProtoMessage

func (*HeartbeatDTO) ProtoMessage()

func (*HeartbeatDTO) Reset

func (m *HeartbeatDTO) Reset()

func (*HeartbeatDTO) Size

func (m *HeartbeatDTO) Size() (n int)

func (*HeartbeatDTO) String

func (this *HeartbeatDTO) String() string

func (*HeartbeatDTO) Unmarshal

func (m *HeartbeatDTO) Unmarshal(dAtA []byte) error

func (*HeartbeatDTO) XXX_DiscardUnknown

func (m *HeartbeatDTO) XXX_DiscardUnknown()

func (*HeartbeatDTO) XXX_Marshal

func (m *HeartbeatDTO) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*HeartbeatDTO) XXX_Merge

func (m *HeartbeatDTO) XXX_Merge(src proto.Message)

func (*HeartbeatDTO) XXX_Size

func (m *HeartbeatDTO) XXX_Size() int

func (*HeartbeatDTO) XXX_Unmarshal

func (m *HeartbeatDTO) XXX_Unmarshal(b []byte) error

type HeartbeatStorageHandler

type HeartbeatStorageHandler interface {
	LoadGenesisTime() (time.Time, error)
	UpdateGenesisTime(genesisTime time.Time) error
	LoadHbmiDTO(pubKey string) (*HeartbeatDTO, error)
	SavePubkeyData(pubkey []byte, heartbeat *HeartbeatDTO) error
	LoadKeys() ([][]byte, error)
	SaveKeys(peersSlice [][]byte) error
	IsInterfaceNil() bool
}

HeartbeatStorageHandler defines what a heartbeat's storer should do

type MessageHandler

type MessageHandler interface {
	CreateHeartbeatFromP2pMessage(message p2p.MessageP2P) (*Heartbeat, error)
	IsInterfaceNil() bool
}

MessageHandler defines what a message processor for heartbeat should do

type MessageProcessor

type MessageProcessor struct {
	// contains filtered or unexported fields
}

MessageProcessor is the struct that will handle heartbeat message verifications and conversion between heartbeatMessageInfo and HeartbeatDTO

func NewMessageProcessor

func NewMessageProcessor(
	singleSigner crypto.SingleSigner,
	keygen crypto.KeyGenerator,
	marshalizer marshal.Marshalizer,
) (*MessageProcessor, error)

NewMessageProcessor will return a new instance of MessageProcessor

func (*MessageProcessor) CreateHeartbeatFromP2pMessage added in v1.0.23

func (mp *MessageProcessor) CreateHeartbeatFromP2pMessage(message p2p.MessageP2P) (*Heartbeat, error)

CreateHeartbeatFromP2pMessage will return a heartbeat if all the checks pass

func (*MessageProcessor) IsInterfaceNil

func (mp *MessageProcessor) IsInterfaceNil() bool

IsInterfaceNil returns true if there is no value under the interface

type Monitor

type Monitor struct {
	// contains filtered or unexported fields
}

Monitor represents the heartbeat component that processes received heartbeat messages

func NewMonitor

func NewMonitor(
	marshalizer marshal.Marshalizer,
	maxDurationPeerUnresponsive time.Duration,
	pubKeysMap map[uint32][]string,
	genesisTime time.Time,
	messageHandler MessageHandler,
	storer HeartbeatStorageHandler,
	timer Timer,
) (*Monitor, error)

NewMonitor returns a new monitor instance

func (*Monitor) GetHeartbeats

func (m *Monitor) GetHeartbeats() []PubKeyHeartbeat

GetHeartbeats returns the heartbeat status

func (*Monitor) IsInterfaceNil

func (m *Monitor) IsInterfaceNil() bool

IsInterfaceNil returns true if there is no value under the interface

func (*Monitor) ProcessReceivedMessage

func (m *Monitor) ProcessReceivedMessage(message p2p.MessageP2P, _ func(buffToSend []byte)) error

ProcessReceivedMessage satisfies the p2p.MessageProcessor interface so it can be called by the p2p subsystem each time a new heartbeat message arrives

func (*Monitor) SaveMultipleHeartbeatMessageInfos

func (m *Monitor) SaveMultipleHeartbeatMessageInfos(pubKeysToSave map[string]*heartbeatMessageInfo)

SaveMultipleHeartbeatMessageInfos stores all heartbeatMessageInfos to the storer

func (*Monitor) SetAppStatusHandler

func (m *Monitor) SetAppStatusHandler(ash core.AppStatusHandler) error

SetAppStatusHandler will set the AppStatusHandler which will be used for monitoring

type PeerMessenger

type PeerMessenger interface {
	Broadcast(topic string, buff []byte)
	IsInterfaceNil() bool
}

PeerMessenger defines a subset of the p2p.Messenger interface

type PubKeyHeartbeat

type PubKeyHeartbeat struct {
	HexPublicKey    string    `json:"hexPublicKey"`
	TimeStamp       time.Time `json:"timeStamp"`
	MaxInactiveTime Duration  `json:"maxInactiveTime"`
	IsActive        bool      `json:"isActive"`
	ReceivedShardID uint32    `json:"receivedShardID"`
	ComputedShardID uint32    `json:"computedShardID"`
	TotalUpTime     int64     `json:"totalUpTimeSec"`
	TotalDownTime   int64     `json:"totalDownTimeSec"`
	VersionNumber   string    `json:"versionNumber"`
	IsValidator     bool      `json:"isValidator"`
	NodeDisplayName string    `json:"nodeDisplayName"`
}

PubKeyHeartbeat returns the heartbeat status for a public key

type RealTimer

type RealTimer struct {
}

RealTimer is an implementation of Timer and uses real time.now

func (*RealTimer) IsInterfaceNil

func (rt *RealTimer) IsInterfaceNil() bool

IsInterfaceNil verifies if the interface is nil

func (*RealTimer) Now

func (rt *RealTimer) Now() time.Time

Now returns the time.Now() Time

type Sender

type Sender struct {
	// contains filtered or unexported fields
}

Sender periodically sends heartbeat messages on a pubsub topic

func NewSender

func NewSender(
	peerMessenger PeerMessenger,
	singleSigner crypto.SingleSigner,
	privKey crypto.PrivateKey,
	marshalizer marshal.Marshalizer,
	topic string,
	shardCoordinator sharding.Coordinator,
	versionNumber string,
	nodeDisplayName string,
) (*Sender, error)

NewSender will create a new sender instance

func (*Sender) SendHeartbeat

func (s *Sender) SendHeartbeat() error

SendHeartbeat broadcasts a new heartbeat message

type Timer

type Timer interface {
	Now() time.Time
	IsInterfaceNil() bool
}

Timer defines an interface for tracking time

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL