public async Task UpdateUserAssignmentFail(string contractAddress, string userAddress, string coinAdapter) { var canBeRestoredInternally = !string.IsNullOrEmpty(userAddress) && userAddress != Constants.EmptyEthereumAddress; var userAssignmentFail = await _userAssignmentFailRepository.GetAsync(contractAddress); if (userAssignmentFail == null) { userAssignmentFail = new UserAssignmentFail() { CanBeRestoredInternally = canBeRestoredInternally, ContractAddress = contractAddress, NotifiedInSlack = false, FailCount = 0 }; } if (userAssignmentFail.FailCount == _attempsBeforeReassign) { if (canBeRestoredInternally) { var message = new TransferContractUserAssignment() { CoinAdapterAddress = coinAdapter, TransferContractAddress = contractAddress, UserAddress = userAddress }; await _queueUserAssignment.PutRawMessageAsync(JsonConvert.SerializeObject(message)); userAssignmentFail.FailCount = 0; } else { if (userAssignmentFail.NotifiedInSlack.HasValue && !userAssignmentFail.NotifiedInSlack.Value) { await _slackNotifier.ErrorAsync($"TransferAddress - {contractAddress}, UserAddress - {userAddress}, " + $"CoinAdapter Address - {coinAdapter} can't be restored internally"); await _userAssignmentFailRepository.SaveAsync(userAssignmentFail); } return; } } else { userAssignmentFail.FailCount++; } await _userAssignmentFailRepository.SaveAsync(userAssignmentFail); }
public async Task Execute(TransferContractUserAssignment transaction, QueueTriggeringContext context) { try { string assignedUser = await _transferContractService.GetTransferAddressUser(transaction.CoinAdapterAddress, transaction.TransferContractAddress); if (string.IsNullOrEmpty(assignedUser) || assignedUser == Constants.EmptyEthereumAddress) { await _transferContractUserAssignmentQueueService.CompleteTransfer(transaction); } else { await _logger.WriteInfoAsync("TransferContractUserAssignmentJob", "Execute", $"{transaction.TransferContractAddress}", $"Skipp assignment, current user {assignedUser}", DateTime.UtcNow); } } catch (Exception ex) { if (ex.Message != transaction.LastError) { await _logger.WriteWarningAsync("TransferContractUserAssignmentJob", "Execute", $"TransferContractAddress: [{transaction.TransferContractAddress}]", ""); } transaction.LastError = ex.Message; if (transaction.DequeueCount >= 4) { context.MoveMessageToPoison(); } else { transaction.DequeueCount++; context.MoveMessageToEnd(); context.SetCountQueueBasedDelay(_settings.MaxQueueDelay, 200); } await _logger.WriteErrorAsync("TransferContractUserAssignmentJob", "Execute", "", ex); } }