コード例 #1
0
        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}");
                    }
                }
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        private async Task <IPDetails> GetIPDetailsFromIPStack(string ip)
        {
            IIPInfoProvider pr = new IPInfoProvider();

            return(await pr.GetDetails(ip));
        }