public async Task AddGeoLocationAsync(List <string> errorList)
        {
            using (VisitorEntryDataProvider visitorEntryDP = new VisitorEntryDataProvider()) {
                DateTime startTime = DateTime.UtcNow;
                int      overall   = 0;
                List <DataProviderFilterInfo> filters = null;
                filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo {
                    Field = nameof(VisitorEntry.ContinentCode), Operator = "==", Value = VisitorEntry.Unknown
                });
                filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo {
                    Field = nameof(VisitorEntry.AccessDateTime), Operator = "<", Value = startTime
                });

                GeoLocation geoLocation = new GeoLocation();
                int         maxRequest  = geoLocation.GetRemainingRequests();
                for (; maxRequest > 0; --maxRequest)
                {
                    DataProviderGetRecords <VisitorEntry> list = await visitorEntryDP.GetItemsAsync(0, 1, null, filters);

                    if (list.Data.Count == 0)
                    {
                        break;
                    }
                    VisitorEntry         geoData  = list.Data.First();
                    GeoLocation.UserInfo userInfo = await geoLocation.GetUserInfoAsync(geoData.IPAddress);

                    if (!string.IsNullOrWhiteSpace(userInfo.ContinentCode))
                    {
                        geoData.City          = userInfo.City;
                        geoData.ContinentCode = userInfo.ContinentCode;
                        geoData.CountryCode   = userInfo.CountryCode;
                        geoData.RegionCode    = userInfo.RegionCode;
                    }
                    else
                    {
                        geoData.City          = "";
                        geoData.ContinentCode = "";
                        geoData.CountryCode   = "";
                        geoData.RegionCode    = "";
                    }
                    await visitorEntryDP.UpdateSameIPAddressesAsync(geoData);

                    ++overall;
                }
                Logging.AddLog($"Updated {overall} visitor entries");
            }
        }
Esempio n. 2
0
        private GridDefinition GetGridModel()
        {
            return(new GridDefinition {
                ModuleGuid = Module.ModuleGuid,
                SettingsModuleGuid = Module.PermanentGuid,
                RecordType = typeof(BrowseItem),
                AjaxUrl = GetActionUrl(nameof(Visitors_GridData)),
                DirectDataAsync = async(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters) => {
                    using (VisitorEntryDataProvider dataProvider = new VisitorEntryDataProvider()) {
                        DataProviderGetRecords <VisitorEntry> browseItems = await dataProvider.GetItemsAsync(skip, take, sort, filters);

                        return new DataSourceResult {
                            Data = (from s in browseItems.Data select new BrowseItem(Module, s)).ToList <object>(),
                            Total = browseItems.Total
                        };
                    }
                },
            });
        }