You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

53 lines
1.5 KiB

package handlers
import (
"github.com/tendermint/go-event-meter"
"github.com/tendermint/go-events"
tmtypes "github.com/tendermint/tendermint/types"
)
// implements eventmeter.EventCallbackFunc
func (tn *TendermintNetwork) newBlockCallback(chainID, valID string) eventmeter.EventCallbackFunc {
return func(metric *eventmeter.EventMetric, data events.EventData) {
block := data.(tmtypes.EventDataNewBlock).Block
tn.mtx.Lock()
defer tn.mtx.Unlock()
// grab chain and validator
chain := tn.Chains[chainID]
val, _ := chain.Config.GetValidatorByID(valID)
// update height for validator
val.BlockHeight = block.Header.Height
// possibly update height and mean block time for chain
if block.Header.Height > chain.Status.Height {
chain.Status.NewBlock(block)
}
}
}
// implements eventmeter.EventLatencyFunc
func (tn *TendermintNetwork) latencyCallback(chainID, valID string) eventmeter.LatencyCallbackFunc {
return func(latency float64) {
tn.mtx.Lock()
defer tn.mtx.Unlock()
// grab chain and validator
chain := tn.Chains[chainID]
val, _ := chain.Config.GetValidatorByID(valID)
// update latency for this validator and avg latency for chain
mean := chain.Status.MeanLatency * float64(chain.Status.NumValidators)
mean = (mean - val.Latency + latency) / float64(chain.Status.NumValidators)
val.Latency = latency
chain.Status.MeanLatency = mean
// TODO: possibly update active nodes and uptime for chain
chain.Status.ActiveValidators = chain.Status.NumValidators // XXX
}
}