public async Task BatchRequest(string[] batch, string guid) { using (var scope = _serviceScopeFactory.CreateScope()) { var scopedServices = scope.ServiceProvider; var db = scopedServices.GetRequiredService <DataContext>(); foreach (var ip in batch) { try { if (!db.IPProfiles.Any(p => p.IP == ip)) { var pDetails = _client.GetDetails(ip); var profile = new IPProfile(pDetails) { IP = ip }; db.IPProfiles.Add(profile); await db.SaveChangesAsync(); } db.Works.Where(w => w.Id == guid).First().CompletedActions++; await db.SaveChangesAsync(); } catch (Exception ex) { db.Works.Where(w => w.Id == guid).First().FailedActions++; await db.SaveChangesAsync(); _logger.LogError(ex, $" Guid: {guid}. An error occurred writing to the " + $"database. Error: {ex.Message}"); } } } }
private IPDetails GetDetails(string ip) { if (_context.IPProfiles.Any(p => p.IP == ip)) { return(_context.IPProfiles.Where(p => p.IP == ip).First()); } else { var pDetails = _client.GetDetails(ip); var profile = new IPProfile(pDetails) { IP = ip }; _context.IPProfiles.Add(profile); _context.SaveChanges(); return(profile); } }
private async Task <IPDetails> GetIPDetailsFromIPStack(string ip) { IIPInfoProvider pr = new IPInfoProvider(); return(await pr.GetDetails(ip)); }