Ejemplo n.º 1
0
        public async Task <bool> JoinAdGroup(AdGroup adGroup)
        {
            try
            {
                var accountTrack = _repository.GetAccountTrackInfo(adGroup.Id, AccountType.AdGroup);
                _repository.DeleteAccountTrackInfo(adGroup.Id, AccountType.AdGroup);
                var request = new CreateOrUpdateBudgetAccountRequest
                {
                    AccountKey        = adGroup.GetAccountKey(),
                    MinUnitPrice      = Utilities.ToInt64Value(adGroup.MinimumUnitPrice),
                    PacingPolicy      = (BudgetPacingPolicies)((int)adGroup.Pacing),
                    PreviousSpent     = Utilities.ToInt64Value(accountTrack.LastSpend),
                    NewBudget         = Utilities.GetNewBudget(adGroup.Budget, adGroup.DailyBudget, accountTrack.LastSpend),
                    BudgetExpiryEpoch = adGroup.DailyBudget.HasValue ? Utilities.ToInt64ValueEndOfDay(DateTime.UtcNow) : Utilities.ToInt64Value(adGroup.EndDate)
                };
                await _rpcClient.CreateOrUpdateBudgetAccountAsync(request);

                _log.Info($"Adgroup joined successfully (AdgroupId : {adGroup.Id})");
                return(true);
            }
            catch (Exception ex)
            {
                _log.Error($"Adgroup failed to be joined (AdgroupId : {adGroup.Id})", ex);
                if (ex is RpcException && (ex as RpcException).Status.StatusCode == StatusCode.InvalidArgument)
                {
                    return(HandleCampaignAccountNotFound(adGroup.Id, () => JoinAdGroup(adGroup).Wait()));
                }
                return(false);
            }
        }
Ejemplo n.º 2
0
        private bool HandleCampaignAccountNotFound(int campaignId, Action postAction)
        {
            Campaign account = null;

            try
            {
                account = GetCampaign(campaignId);
                var accountTrack = _repository.GetAccountTrackInfo(campaignId, AccountType.Campaign);
                _repository.DeleteAccountTrackInfo(campaignId, AccountType.Campaign);
                var request = new CreateOrUpdateBudgetAccountRequest
                {
                    AccountKey        = account.GetAccountKey(),
                    MinUnitPrice      = Utilities.ToInt64Value(account.MinimumUnitPrice),
                    PacingPolicy      = (BudgetPacingPolicies)((int)account.Pacing),
                    PreviousSpent     = Utilities.ToInt64Value(accountTrack.LastSpend),
                    NewBudget         = Utilities.GetNewBudget(account.Budget, account.DailyBudget, accountTrack.LastSpend),
                    BudgetExpiryEpoch = account.DailyBudget.HasValue ? Utilities.ToInt64ValueEndOfDay(DateTime.UtcNow) : Utilities.ToInt64Value(account.EndDate)
                };

                _rpcClient.CreateOrUpdateBudgetAccountAsync(request);
                _log.Info($"Billing info created successfully for campaign {campaignId}");
                postAction();
                return(true);
            }
            catch (Exception ex)
            {
                _log.Error($"Failed to create billing info for campaign {campaignId}", ex);
                if (ex is RpcException && (ex as RpcException).Status.StatusCode == StatusCode.NotFound)
                {
                    return(HandleFundAccountNotFound(account.AccountId, () => HandleCampaignAccountNotFound(campaignId, postAction)));
                }
                return(false);
            }
        }
Ejemplo n.º 3
0
 private void OnAdGroupBillingInfoChanged(AdGroupBillingInfoChanged evt)
 {
     try
     {
         var accountTrack = _repository.GetAccountTrackInfo(evt.AdGroupId, AccountType.AdGroup);
         var request      = new CreateOrUpdateBudgetAccountRequest
         {
             AccountKey        = evt.GetAccountKey(),
             MinUnitPrice      = Utilities.ToInt64Value(evt.MinimumUnitPrice),
             PacingPolicy      = (BudgetPacingPolicies)((int)evt.Pacing),
             PreviousSpent     = Utilities.ToInt64Value(accountTrack.LastSpend),
             NewBudget         = Utilities.GetNewBudget(evt.Budget, evt.DailyBudget, accountTrack.LastSpend),
             BudgetExpiryEpoch = evt.DailyBudget.HasValue ? Utilities.ToInt64ValueEndOfDay(DateTime.UtcNow) : Utilities.ToInt64Value(evt.EndDate)
         };
         _rpcClient.CreateOrUpdateBudgetAccount(request);
         _log.Info($"Billing info created/updated successfully for adgroup {evt.AdGroupId}");
     }
     catch (Exception ex)
     {
         if (ex is RpcException && (ex as RpcException).Status.StatusCode == StatusCode.NotFound)
         {
             _log.Error($"Parent account not found for adgroup {evt.AdGroupId}", ex);
         }
         else
         {
             _log.Error($"Failed to create/update billing info for adgroup {evt.AdGroupId}", ex);
         }
     }
 }