in SDK/AppCenter/Microsoft.AppCenter.Windows.Shared/Channel/Channel.cs [421:477]
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));
CheckPendingLogsInternal(state);
}
catch (StorageException)
{
AppCenterLog.Warn(AppCenterLog.LogTag, "Something went wrong sending logs to ingestion");
}
}
}