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"); } }
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 }; } }, }); }