Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Bien Vo committed Dec 19, 2023
2 parents 102f103 + 1896cc8 commit 592ffcf
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 21 deletions.
17 changes: 8 additions & 9 deletions pkg/entities/vault.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,22 +151,21 @@ func (e *Entity) GetVault(req request.GetVaultRequest) (*model.Vault, error) {
}

if req.NoFetchAmount != "true" {

walletAssetsEVM, _, _, err := e.ListWalletAssets(request.ListWalletAssetsRequest{Type: "evm", Address: vault.WalletAddress})
if err != nil {
e.log.Fields(logger.Fields{"vault": vault}).Errorf(err, "[entity.GetVaults] e.ListWalletAssets() failed")
return nil, err
}
vault.TotalAmountEVM = fmt.Sprintf("%.4f", sumBal(walletAssetsEVM))

walletAssetsSolana, _, _, err := e.ListWalletAssets(request.ListWalletAssetsRequest{Type: "sol", Address: vault.SolanaWalletAddress})
if err != nil {
e.log.Fields(logger.Fields{"vault": vault}).Errorf(err, "[entity.GetVaults] e.ListWalletAssets() failed")
vault.TotalAmountSolana = "0"
}
if len(walletAssetsSolana) > 0 {
vault.TotalAmountSolana = fmt.Sprintf("%.4f", sumBal(walletAssetsSolana))
}
// walletAssetsSolana, _, _, err := e.ListWalletAssets(request.ListWalletAssetsRequest{Type: "sol", Address: vault.SolanaWalletAddress})
// if err != nil {
// e.log.Fields(logger.Fields{"vault": vault}).Errorf(err, "[entity.GetVaults] e.ListWalletAssets() failed")
// vault.TotalAmountSolana = "0"
// }
// if len(walletAssetsSolana) > 0 {
// vault.TotalAmountSolana = fmt.Sprintf("%.4f", sumBal(walletAssetsSolana))
// }

}

Expand Down
48 changes: 36 additions & 12 deletions pkg/service/covalent/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import (
"github.com/defipod/mochi/pkg/util"
)

var (
retryMap map[string]string = make(map[string]string)
)

func (c *Covalent) doCacheSolanaTokenBalances(address string) (string, error) {
return c.cache.GetString(fmt.Sprintf("%s-%s", covalentSolanaTokenBalanceKey, strings.ToLower(address)))
}
Expand Down Expand Up @@ -120,27 +124,47 @@ func (c *Covalent) doNetworkTokenBalances(chainID int, address string, retry int
c.logger.Fields(logger.Fields{"endpoint": endpoint, "code": code}).Error(err, "[covalent.GetTokenBalances] util.FetchData() failed")
return nil, err
}

if res.Error {
if res.ErrorCode == http.StatusNotAcceptable {
//TODO: predictably timeout -> should ignore now to avoid missing data from other chains. Will be fixed in the future
c.logger.Fields(logger.Fields{"endpoint": endpoint, "code": code}).Error(err, "[covalent.fetchCovalentData] Endpoint will predictably time out")
return res, nil
}

if retry == 0 {
c.sentry.CaptureErrorEvent(sentrygo.SentryCapturePayload{
Message: fmt.Sprintf("[API mochi] - Covalent - doNetworkTokenBalances failed %v", err),
Tags: sentryTags,
Extra: map[string]interface{}{
"chainID": chainID,
"address": address,
"retry": retry,
},
})
return nil, fmt.Errorf("%d - %s", res.ErrorCode, res.ErrorMessage)
c.logger.Fields(logger.Fields{"endpoint": endpoint, "code": code}).Error(err, "[covalent.GetTokenBalances] cannot get data from covalent, retrying ...")
retryTime := retryMap[fmt.Sprintf("TokenBalances-%d-%s", chainID, address)]
t, _ := time.Parse(time.RFC3339, retryTime)
now := time.Now()

// current temp solution to fix covalent exceed quota
// check if last time retry < now + 30 minutes -> allow retry else ignore
// TODO: need real solution for this
if now.Sub(t) > 30*time.Minute {
c.logger.Fields(logger.Fields{"endpoint": endpoint, "code": code}).Error(err, "[covalent.GetTokenBalances] time passed, allow retry")
// temp fix for covalent bug
retryMap[fmt.Sprintf("TokenBalances-%d-%s", chainID, address)] = time.Now().Format(time.RFC3339)

if retry == 0 {
c.sentry.CaptureErrorEvent(sentrygo.SentryCapturePayload{
Message: fmt.Sprintf("[API mochi] - Covalent - doNetworkTokenBalances failed %v", err),
Tags: sentryTags,
Extra: map[string]interface{}{
"chainID": chainID,
"address": address,
"retry": retry,
},
})

return nil, fmt.Errorf("%d - %s", res.ErrorCode, res.ErrorMessage)
} else {
return c.GetTokenBalances(chainID, address, retry-1)
}
} else {
return c.GetTokenBalances(chainID, address, retry-1)
c.logger.Fields(logger.Fields{"endpoint": endpoint, "code": code}).Error(err, "[covalent.GetTokenBalances] time not passed, ignore retry")
return &GetTokenBalancesResponse{Data: &GetTokenBalancesData{Items: nil}}, nil
}

}

// cache solana-balance-token-data
Expand Down
1 change: 1 addition & 0 deletions pkg/service/friendtech/friend_tech.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ func NewService(cfg *config.Config, sentry sentrygo.Service) Service {

return &FriendTech{
baseUrl: baseUrl,
sentry: sentry,
}
}

Expand Down

0 comments on commit 592ffcf

Please sign in to comment.