mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-07 02:02:18 +00:00
d6ae838bbf
* WIP * event stream wip * returning nil * temp removing some tests * wip health checks * fixing conficts * updating fields based on linting * fixing more errors * fixing mocks * fixing more mocks * fixing more linting * removing white space for lint * fixing log format * gaz * reverting changes on grpc * fixing unit tests * adding in tests for health tracker and event stream * adding more tests for streaming slot * gaz * Update api/client/event/event_stream.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * review comments * Update validator/client/runner.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/beacon-api/beacon_api_validator_client.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * addressing radek comments * Update validator/client/validator.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * addressing review feedback * moving things to below next slot ticker * fixing tests * update naming * adding TODO comment * Update api/client/beacon/health.go Co-authored-by: Radosław Kapka <rkapka@wp.pl> * addressing comments * fixing broken linting * fixing more import issues * fixing more import issues * linting * updating based on radek's comments * addressing more comments * fixing nogo error * fixing duplicate import * gaz * adding radek's review suggestion * Update proto/prysm/v1alpha1/node.proto Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com> * preston review comments * Update api/client/event/event_stream.go Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com> * Update validator/client/validator.go Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com> * addressing some more preston review items * fixing tests for linting * fixing missed linting * updating based on feedback to simplify * adding interface check at the top * reverting some comments * cleaning up intatiations * reworking the health tracker * fixing linting * fixing more linting to adhear to interface * adding interface check at the the top of the file * fixing unit tests * attempting to fix dependency cycle * addressing radek's comment * Update validator/client/beacon-api/beacon_api_validator_client.go Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com> * adding more tests and feedback items * fixing TODO comment --------- Co-authored-by: Radosław Kapka <rkapka@wp.pl> Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package beacon
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"github.com/prysmaticlabs/prysm/v5/api/client/beacon/iface"
|
|
)
|
|
|
|
type NodeHealthTracker struct {
|
|
isHealthy *bool
|
|
healthChan chan bool
|
|
node iface.HealthNode
|
|
sync.RWMutex
|
|
}
|
|
|
|
func NewNodeHealthTracker(node iface.HealthNode) *NodeHealthTracker {
|
|
return &NodeHealthTracker{
|
|
node: node,
|
|
healthChan: make(chan bool, 1),
|
|
}
|
|
}
|
|
|
|
// HealthUpdates provides a read-only channel for health updates.
|
|
func (n *NodeHealthTracker) HealthUpdates() <-chan bool {
|
|
return n.healthChan
|
|
}
|
|
|
|
func (n *NodeHealthTracker) IsHealthy() bool {
|
|
n.RLock()
|
|
defer n.RUnlock()
|
|
if n.isHealthy == nil {
|
|
return false
|
|
}
|
|
return *n.isHealthy
|
|
}
|
|
|
|
func (n *NodeHealthTracker) CheckHealth(ctx context.Context) bool {
|
|
n.RLock()
|
|
newStatus := n.node.IsHealthy(ctx)
|
|
if n.isHealthy == nil {
|
|
n.isHealthy = &newStatus
|
|
}
|
|
isStatusChanged := newStatus != *n.isHealthy
|
|
n.RUnlock()
|
|
|
|
if isStatusChanged {
|
|
n.Lock()
|
|
// Double-check the condition to ensure it hasn't changed since the first check.
|
|
n.isHealthy = &newStatus
|
|
n.Unlock() // It's better to unlock as soon as the protected section is over.
|
|
n.healthChan <- newStatus
|
|
}
|
|
return newStatus
|
|
}
|