Skip to content

Commit

Permalink
Implemented timeout for logger on fethcing blockNumber
Browse files Browse the repository at this point in the history
  • Loading branch information
Yashk767 committed Nov 3, 2022
1 parent ecae421 commit d2c05a0
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 18 deletions.
6 changes: 6 additions & 0 deletions core/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,9 @@ var AssetsDataFile = "assets.json"
var ConfigFile = "razor.yaml"
var LogFileDirectory = "logs"
var DefaultPathName = ".razor"

//LoggerTimeout is threshold number of seconds after which logger will time out from fetching blockNumber
var LoggerTimeout = 10

// LoggerTimeoutErr is the custom error message that would be displayed as a field in logs if logger times out
var LoggerTimeoutErr = "Logger Timeout, error in fetching block number"
76 changes: 58 additions & 18 deletions logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"razor/core"
"razor/path"
"runtime"
"time"
)

type StandardLogger struct {
Expand All @@ -28,6 +29,7 @@ var Epoch uint32
var BlockNumber *big.Int
var FileName string
var Client *ethclient.Client
var loggerTimeoutBool bool

func init() {
path.PathUtilsInterface = &path.PathUtils{}
Expand Down Expand Up @@ -102,12 +104,22 @@ func (logger *StandardLogger) Info(args ...interface{}) {

func (logger *StandardLogger) Debug(args ...interface{}) {
SetEpochAndBlockNumber(Client)
var logFields = logrus.Fields{
"address": Address,
"epoch": Epoch,
"blockNumber": BlockNumber,
if !loggerTimeoutBool {
var logFields = logrus.Fields{
"address": Address,
"epoch": Epoch,
"blockNumber": BlockNumber,
}
logger.WithFields(logFields).Debugln(args...)
} else {
var logFields = logrus.Fields{
"address": Address,
"epoch": Epoch,
"blockNumber": BlockNumber,
"Error": core.LoggerTimeoutErr,
}
logger.WithFields(logFields).Errorln(args...)
}
logger.WithFields(logFields).Debugln(args...)
}

func (logger *StandardLogger) Fatal(args ...interface{}) {
Expand Down Expand Up @@ -144,12 +156,22 @@ func (logger *StandardLogger) Infof(format string, args ...interface{}) {

func (logger *StandardLogger) Debugf(format string, args ...interface{}) {
SetEpochAndBlockNumber(Client)
var logFields = logrus.Fields{
"address": Address,
"epoch": Epoch,
"blockNumber": BlockNumber,
if !loggerTimeoutBool {
var logFields = logrus.Fields{
"address": Address,
"epoch": Epoch,
"blockNumber": BlockNumber,
}
logger.WithFields(logFields).Debugf(format, args...)
} else {
var logFields = logrus.Fields{
"address": Address,
"epoch": Epoch,
"blockNumber": BlockNumber,
"Error": core.LoggerTimeoutErr,
}
logger.WithFields(logFields).Errorf(format, args...)
}
logger.WithFields(logFields).Debugf(format, args...)
}

func (logger *StandardLogger) Fatalf(format string, args ...interface{}) {
Expand All @@ -165,16 +187,34 @@ func (logger *StandardLogger) Fatalf(format string, args ...interface{}) {
}

func SetEpochAndBlockNumber(client *ethclient.Client) {
if client != nil {
latestHeader, err := client.HeaderByNumber(context.Background(), nil)
if err != nil {
log.Error("Error in fetching block: ", err)
var gotBlockNumber = make(chan bool)
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(core.LoggerTimeout)*time.Second)
defer cancel()

go func() {
if client != nil {
latestHeader, err := client.HeaderByNumber(context.Background(), nil)
if err != nil {
log.Error("Error in fetching block: ", err)
return
}
BlockNumber = latestHeader.Number

epoch := latestHeader.Time / core.EpochLength
Epoch = uint32(epoch)
}
loggerTimeoutBool = false
gotBlockNumber <- true
}()
for {
select {
case <-ctx.Done():
loggerTimeoutBool = true
logrus.Error("Logger Timeout! Error in fetching block number, Kindly Check your connection")
return
case <-gotBlockNumber:
return
}
BlockNumber = latestHeader.Number

epoch := latestHeader.Time / uint64(core.EpochLength)
Epoch = uint32(epoch)
}
}

Expand Down

0 comments on commit d2c05a0

Please sign in to comment.