From 32e23f0fc0131cbffd07ca8b31fe37b41abc5de2 Mon Sep 17 00:00:00 2001 From: Collin Barrett Date: Thu, 16 Aug 2018 19:26:31 -0500 Subject: [PATCH] minor SnapshotService refactors --- .../Snapshot/SnapshotDe.cs | 75 +++++++++---------- .../Snapshot/SnapshotService.cs | 4 +- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/FilterLists.Services/Snapshot/SnapshotDe.cs b/src/FilterLists.Services/Snapshot/SnapshotDe.cs index c1473e252..25ecf20ff 100644 --- a/src/FilterLists.Services/Snapshot/SnapshotDe.cs +++ b/src/FilterLists.Services/Snapshot/SnapshotDe.cs @@ -36,38 +36,42 @@ public SnapshotDe(FilterListsDbContext dbContext, EmailService emailService, Fil }; } - public async Task SaveAsync() + public async Task TrySaveAsync() { - await AddSnapshot(); - using (var transaction = dbContext.Database.BeginTransaction()) + await Add(); + try { - try - { - var content = await TryGetContent(); - if (content != null) - { - await SaveSnapshotInBatches(content); - await DedupSnapshotRules(); - await SetSuccessful(); - } - - transaction.Commit(); - } - catch (Exception e) - { - await SendExceptionEmail(e); - } + await SaveAsync(); + } + catch (Exception e) + { + await SaveHttpStatusCodeBak(); + await SendExceptionEmail(e); } - - await EnsureHttpStatusCodeSaved(); } - private async Task AddSnapshot() + private async Task Add() { await dbContext.Snapshots.AddAsync(snapshot); await dbContext.SaveChangesAsync(); } + private async Task SaveAsync() + { + using (var transaction = dbContext.Database.BeginTransaction()) + { + var content = await TryGetContent(); + if (content != null) + { + await SaveInBatches(content); + await DedupSnapshotRules(); + await SetSuccessful(); + } + + transaction.Commit(); + } + } + private async Task TryGetContent() { try @@ -80,12 +84,6 @@ private async Task TryGetContent() await SendWebExceptionEmail(); return null; } - catch (Exception e) - { - snapshot.HttpStatusCode = null; - await SendExceptionEmail(e); - return null; - } } private async Task GetContent() @@ -95,8 +93,7 @@ private async Task GetContent() httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(UserAgentString); using (var httpResponseMessage = await httpClient.GetAsync(list.ViewUrl)) { - snapshot.HttpStatusCode = ((int)httpResponseMessage.StatusCode).ToString(); - httpStatusCodeBak = snapshot.HttpStatusCode; + snapshot.HttpStatusCode = httpStatusCodeBak = ((int)httpResponseMessage.StatusCode).ToString(); if (httpResponseMessage.IsSuccessStatusCode) return await httpResponseMessage.Content.ReadAsStringAsync(); } @@ -106,7 +103,7 @@ private async Task GetContent() return null; } - private async Task EnsureHttpStatusCodeSaved() + private async Task SaveHttpStatusCodeBak() { if (!snapshot.WasSuccessful) { @@ -137,11 +134,11 @@ private async Task SendExceptionEmail(Exception e) await emailService.SendEmailAsync("Snapshot Exception", message.ToString()); } - private async Task SaveSnapshotInBatches(string content) + private async Task SaveInBatches(string content) { var rawRules = ParseRawRules(content); - var snapshotBatches = CreateSnapshotBatches(rawRules); - await SaveSnapshotBatches(snapshotBatches); + var snapshotBatches = CreateBatches(rawRules); + await SaveBatches(snapshotBatches); } private static IEnumerable ParseRawRules(string content) @@ -152,13 +149,13 @@ private static IEnumerable ParseRawRules(string content) return rawRules.Where(r => r != null); } - private IEnumerable CreateSnapshotBatches(IEnumerable rawRules) => + private IEnumerable CreateBatches(IEnumerable rawRules) => rawRules.Batch(BatchSize).Select(b => new SnapshotDeBatch(dbContext, snapshot, b)); - private static async Task SaveSnapshotBatches(IEnumerable snapshotBatches) + private static async Task SaveBatches(IEnumerable snapshotBatches) { - foreach (var snapshotBatch in snapshotBatches) - await snapshotBatch.SaveAsync(); + foreach (var batch in snapshotBatches) + await batch.SaveAsync(); } private async Task DedupSnapshotRules() @@ -179,7 +176,7 @@ private void UpdateRemovedSnapshotRules(IQueryable existingSnapsho { var newSnapshotRules = dbContext.SnapshotRules.Where(sr => sr.AddedBySnapshot == snapshot); var removedSnapshotRules = existingSnapshotRules.Where(sr => !newSnapshotRules.Any(n => n.Rule == sr.Rule)); - removedSnapshotRules.ToList().ForEach(sr => sr.RemovedBySnapshot = snapshot); + removedSnapshotRules.ForEach(sr => sr.RemovedBySnapshot = snapshot); } private void RemoveDuplicateSnapshotRules(IQueryable existingSnapshotRules) diff --git a/src/FilterLists.Services/Snapshot/SnapshotService.cs b/src/FilterLists.Services/Snapshot/SnapshotService.cs index 986161807..70eb06d0e 100644 --- a/src/FilterLists.Services/Snapshot/SnapshotService.cs +++ b/src/FilterLists.Services/Snapshot/SnapshotService.cs @@ -29,7 +29,7 @@ public async Task CaptureAsync(int batchSize) await SaveSnapshots(snapshots); } - private async Task> GetListsToCapture(int batchSize) => + private async Task> GetListsToCapture(int batchSize) => await DbContext .FilterLists .Where(l => !l.CantSnapshot && @@ -53,7 +53,7 @@ private IEnumerable CreateSnapshots(IEnumerable snapshots) { foreach (var snapshot in snapshots) - await snapshot.SaveAsync(); + await snapshot.TrySaveAsync(); } } } \ No newline at end of file