BS / src / conf / qErrorHandler.go
qErrorHandler.go
Raw
package conf

import (
	"context"
	"encoding/json"

	"github.com/hibiken/asynq"

	"github.com/PiperFinance/BS/src/core/schema"
	"github.com/PiperFinance/BS/src/utils"
)

type QueueErrorHandler struct{}

func errType(ChainId int64, v interface{}) interface{} {
	_ = ChainId
	switch v.(type) {
	case *utils.RpcError:
		FailedCallCount.Add(ChainId)
		if Config.SilenceRRCErrs {
			return nil
		} else {
			return v
		}
	case error:
		return v
	default:
		return "unknown"
	}
}

func (er *QueueErrorHandler) HandleError(ctx context.Context, task *asynq.Task, err error) {
	retried, _ := asynq.GetRetryCount(ctx)
	blockTask := schema.BatchBlockTask{}
	if errJson := json.Unmarshal(task.Payload(), &blockTask); errJson == nil && blockTask.ChainId > 0 {
		if errType(blockTask.ChainId, err) == nil {
			return
		}
		// if strings.Contains(err.Error(), "panic") {
		// 	Logger.Panicw("QErr", "task", task.Type(), "Retires", retried, "block", blockTask, "err", err)
		// } else {
		// 	Logger.Errorw("QErr", "task", task.Type(), "Retires", retried, "block", blockTask, "err", err)
		// }
		Logger.Errorw("QErr", "task", task.Type(), "Retires", retried, "block", blockTask, "err", err)
	} else {
		Logger.Errorw("QErr", "task", task.Type(), "Retries", retried, "err", err)
	}
}