in src/Microsoft.Azure.WebJobs.Logging/Internal/ContainerActiveLogger.cs [78:131]
async Task PollerAsync()
{
do
{
try
{
await Task.Delay(_interval, _cancel.Token);
}
catch (OperationCanceledException)
{
// Don't return yet. One last chance to flush
}
bool hasOutstanding;
lock (_lock)
{
hasOutstanding = _outstandingCount.Count > 0;
}
bool active = _recent || hasOutstanding;
_recent = false;
if (active)
{
var now = DateTime.UtcNow;
// If previous exists, update it
var currentBucket = TimeBucket.ConvertToBucket(now);
var prevBucket = currentBucket - 1;
ContainerActiveEntity prevEntry = await TryGetAsync(prevBucket);
if (prevEntry == null)
{
prevEntry = await TryGetAsync(currentBucket);
}
if (prevEntry != null)
{
if (prevEntry.GetLength() > LengthThreshold)
{
prevEntry = null;
}
}
if (prevEntry == null)
{
prevEntry = ContainerActiveEntity.New(now, _containerName);
}
// Update the length on the previous entry
prevEntry.EndTime = now;
await SaveAsync(prevEntry);
}
} while (!_cancel.IsCancellationRequested);
}