update algo for getting lists to scrape

This commit is contained in:
Collin Barrett 2018-02-03 07:07:49 -06:00
parent f651a33ad8
commit fcfdd2c0ac

View file

@ -28,8 +28,32 @@ public async Task ScrapeAsync(int batchSize)
private async Task<List<FilterListViewUrlDto>> GetNextListsToScrape(int batchSize)
{
//TODO: order by least recently scraped
return await dbContext.FilterLists.Take(batchSize).ProjectTo<FilterListViewUrlDto>().ToListAsync();
var neverScraped = await GetNeverScrapedLists(batchSize);
if (neverScraped.Count == batchSize)
return neverScraped;
var leastRecentlyScraped = await GetLeastRecentlyScrapedLists(batchSize - neverScraped.Count);
return neverScraped.Concat(leastRecentlyScraped).ToList();
}
private async Task<List<FilterListViewUrlDto>> GetNeverScrapedLists(int batchSize)
{
return await dbContext.FilterLists
.Where(x => x.Scrapes.Count == 0)
.Take(batchSize)
.ProjectTo<FilterListViewUrlDto>()
.ToListAsync();
}
private async Task<List<FilterListViewUrlDto>> GetLeastRecentlyScrapedLists(int batchSize)
{
return await dbContext.Scrapes
.GroupBy(x => x.FilterList)
.Select(x => x.OrderByDescending(y => y.CreatedDateUtc).First())
.OrderBy(x => x.CreatedDateUtc)
.Select(x => x.FilterList)
.Take(batchSize)
.ProjectTo<FilterListViewUrlDto>()
.ToListAsync();
}
private async Task<IEnumerable<Snapshot>> GetSnapshots(IEnumerable<FilterListViewUrlDto> lists)