public async Task RetryableIngestionSuccess() { SetupAdapterSendResponse(HttpStatusCode.OK); var call = _retryableIngestion.Call(AppSecret, InstallId, Logs); await call.ToTask(); VerifyAdapterSend(Times.Once()); // No throw any exception }
private async Task TriggerIngestionAsync(State state) { using (await _mutex.GetLockAsync(state).ConfigureAwait(false)) { if (!_enabled || !_batchScheduled) { return; } AppCenterLog.Debug(AppCenterLog.LogTag, $"TriggerIngestion({Name}) pending log count: {_pendingLogCount}"); _batchScheduled = false; if (_sendingBatches.Count >= _maxParallelBatches) { AppCenterLog.Debug(AppCenterLog.LogTag, $"Already sending {_maxParallelBatches} batches of analytics data to the server"); return; } } // Get a batch from storage var logs = new List <Log>(); var batchId = await _storage.GetLogsAsync(Name, _maxLogsPerBatch, logs).ConfigureAwait(false); if (batchId != null) { using (await _mutex.GetLockAsync(state).ConfigureAwait(false)) { _sendingBatches.Add(batchId, logs); _pendingLogCount -= logs.Count; } try { // Before sending logs, trigger the sending event for this channel if (SendingLog != null) { foreach (var log in logs) { AppCenterLog.Debug(AppCenterLog.LogTag, $"Invoke SendingLog event for channel '{Name}'"); SendingLog?.Invoke(this, new SendingLogEventArgs(log)); } } // If the optional Install ID has no value, default to using empty GUID var installId = await AppCenter.GetInstallIdAsync().ConfigureAwait(false) ?? Guid.Empty; var ingestionCall = _ingestion.Call(_appSecret, installId, logs); using (await _mutex.GetLockAsync(state).ConfigureAwait(false)) { _calls.Add(ingestionCall); } ingestionCall.ContinueWith(call => HandleSendingResult(state, batchId, call)); CheckPendingLogs(state); } catch (StorageException) { AppCenterLog.Warn(AppCenterLog.LogTag, "Something went wrong sending logs to ingestion"); } } }
public virtual IServiceCall Call(string appSecret, Guid installId, IList <Log> logs) { return(DecoratedApi.Call(appSecret, installId, logs)); }