//public void OnTimerCallBack(object state) //{ // //LogMessage("Timer Tick - "); // MSYNC(); //} public void MSYNC() { try { long? rowUpated = 0; List <List_IP> NotFoundIps = new List <List_IP>(); List <CountryCityModel> list_CountryCity = new List <CountryCityModel>(); long? lastrow_updated_id = dc.tmp_rownum_update.Select(x => x.row_update).SingleOrDefault(); List <List_IP> ipobj = (from s in dc.SHORTURLDATAs where s.PK_Shorturl > lastrow_updated_id select new List_IP() { ipnum = s.ip_num, ipaddress = s.Ipv4, pk_shorturl_id = s.PK_Shorturl, userAgent = s.UserAgent }).ToList(); //check if any records are there for updation if (ipobj.Count != 0) { //get matched records from master_location table List <locids> locids = ipobj.Where(i => dc.Master_Location.AsNoTracking().Any(foo => i.ipnum >= foo.startIpNum && i.ipnum <= foo.endIpNum)).Select(x => new locids() { userAgent = x.userAgent, ipnum = x.ipnum, pk_shorturl_id = x.pk_shorturl_id, localid = dc.Master_Location.Where(foo => x.ipnum >= foo.startIpNum && x.ipnum <= foo.endIpNum).Select(y => y.locId).FirstOrDefault(), fk_city_master_id = dc.Master_Location.Where(foo => x.ipnum >= foo.startIpNum && x.ipnum <= foo.endIpNum).Select(y => y.PK_MASTERID).FirstOrDefault() }).ToList(); if (locids.Count != 0) { //get records from location_data table list_CountryCity = (from l in dc.Locations_Data .AsNoTracking() .AsEnumerable() // Continue in memory join i in locids on l.locId equals i.localid where l.locId == i.localid select new CountryCityModel() { ipnum = i.ipnum, Country = GetCountryName(l.country), CountryCode = l.country, City = l.city, Region = l.region, PostalCode = l.postalCode, latitude = l.latitude, longitude = l.longitude, metro_code = l.metroCode, fk_city_master_id = i.fk_city_master_id, pk_shorturl_id = i.pk_shorturl_id, userAgent = i.userAgent }).ToList(); if (list_CountryCity.Count != 0) { //check if any ips not found in databaase tables if (list_CountryCity.Count != ipobj.Count) { NotFoundIps = ipobj.Where(p => !list_CountryCity.Any(p2 => p2.ipnum == p.ipnum)).ToList(); } //foreach (CountryCityModel i in list_CountryCity) //{ // new DataInsertionBO().UpdateCityCountry(i); //} } else { NotFoundIps = ipobj; } if (NotFoundIps.Count != 0) { //get data from freegeoip service and save data for future use List <CountryCityModel> list = new DataInsertionBO().GetDataForNotFoundIPS(NotFoundIps); list_CountryCity = list_CountryCity.Concat(list).ToList(); } } else { //if no record found in master_location table NotFoundIps = ipobj; List <CountryCityModel> list = new DataInsertionBO().GetDataForNotFoundIPS(NotFoundIps); list_CountryCity = list_CountryCity.Concat(list).ToList(); } foreach (CountryCityModel i in list_CountryCity) { new DataInsertionBO().UpdateCityCountry(i); } List_IP lastrecord = ipobj[ipobj.Count - 1]; rowUpated = lastrecord.pk_shorturl_id; tmp_rownum_update obj = new tmp_rownum_update(); obj.row_update = rowUpated; new DataInsertionBO().UpdateRowid(rowUpated); } } catch (Exception ex) { ErrorLogs.LogErrorData(ex.StackTrace, ex.InnerException.ToString()); } //List<CountryCityModel> ipdata = (from m in dc.Master_Location // join l in dc.Locations_Data on m.locId equals l.locId // select new CountryCityModel() // { // startIpNum=m.startIpNum, // endIpNum=m.endIpNum, // //Country=GetCountryName(l.country), // CountryCode=l.country, // City=l.city, // Region=l.region, // PostalCode=l.postalCode, // latitude=l.latitude, // longitude=l.longitude, // metro_code=l.metroCode, // fk_city_master_id=m.PK_MASTERID // // pk_shorturl_id=m.PK_MASTERID // }).ToList(); //var lobj = ipdata.Where(i => ipobj.Any(foo => foo.ipnum >= i.startIpNum && foo.ipnum <= i.endIpNum)). // Select(l => new CountryCityModel() // { // Country = GetCountryName(l.CountryCode), // CountryCode = l.CountryCode, // City = l.City, // Region = l.Region, // PostalCode = l.PostalCode, // latitude = l.latitude, // longitude = l.longitude, // metro_code = l.metro_code, // fk_city_master_id = l.fk_city_master_id, // pk_shorturl_id = l.pk_shorturl_id // // pk_shorturl_id=(from i in ipobj select i.pk_shorturl_id).Single()}).ToList(); // }).ToList(); }
public CountryCityModel GetDataFromfreegeoip(List_IP l) { string jsonstring = ""; string url = ""; CountryCityModel obj = new CountryCityModel(); WebClient client = new WebClient(); try { url = "http://freegeoip.net/json/" + l.ipaddress; jsonstring = client.DownloadString(url); if (jsonstring != "") { dynamic dynObj = JsonConvert.DeserializeObject(jsonstring); obj.City = dynObj.city; obj.Region = dynObj.region_name; // obj.region_code = dynObj.region_code; obj.Country = dynObj.country_name; obj.CountryCode = dynObj.country_code; obj.PostalCode = dynObj.zip_code; // obj.time_zone = dynObj.time_zone; obj.latitude = dynObj.latitude; obj.longitude = dynObj.longitude; obj.metro_code = dynObj.metro_code; //obj.accuracy_radius = ""; } obj.pk_shorturl_id = l.pk_shorturl_id; obj.userAgent = l.userAgent; //var res= dc.SHORTURLDATAs.Where(x => x.PK_Shorturl == l.pk_shorturl_id).SingleOrDefault(); // res.City = obj.City; // res.Region = obj.Region; // res.Country = obj.Country; // res.CountryCode = obj.CountryCode; // res.PostalCode = obj.PostalCode; // res.Latitude = obj.latitude; // res.Longitude = obj.longitude; // res.MetroCode = obj.metro_code; // dc.SaveChanges(); // UpdateCityCountry(obj); freeGeoipData objf = dc.freeGeoipDatas.SingleOrDefault(x => x.Ipv4 == l.ipaddress); if (objf == null) { freeGeoipData f = new freeGeoipData(); f.Ipv4 = l.ipaddress; f.ip_num = l.ipnum; f.City = obj.City; f.Region = obj.Region; f.Country = obj.Country; f.CountryCode = obj.CountryCode; f.PostalCode = obj.PostalCode; f.Latitude = obj.latitude; f.Longitude = obj.longitude; f.MetroCode = obj.metro_code; dc.freeGeoipDatas.Add(f); dc.SaveChanges(); } return(obj); } catch (Exception ex) { url = "http://geoip.nekudo.com/api/" + l.ipaddress; jsonstring = client.DownloadString(url); if (jsonstring != "") { dynamic dynObj = JsonConvert.DeserializeObject(jsonstring); obj.City = dynObj.city; obj.Region = dynObj.region_name; // obj.region_code = dynObj.region_code; obj.Country = dynObj.country_name; obj.CountryCode = dynObj.country_code; obj.PostalCode = dynObj.zip_code; // obj.time_zone = dynObj.time_zone; obj.latitude = dynObj.latitude; obj.longitude = dynObj.longitude; obj.metro_code = dynObj.metro_code; //obj.accuracy_radius = ""; } obj.pk_shorturl_id = l.pk_shorturl_id; obj.userAgent = l.userAgent; //UpdateCityCountry(obj); //var res = dc.SHORTURLDATAs.Where(x => x.PK_Shorturl == l.pk_shorturl_id).SingleOrDefault(); //res.City = obj.City; //res.Region = obj.Region; //res.Country = obj.Country; //res.CountryCode = obj.CountryCode; //res.PostalCode = obj.PostalCode; //res.Latitude = obj.latitude; //res.Longitude = obj.longitude; //res.MetroCode = obj.metro_code; //dc.SaveChanges(); freeGeoipData objf = dc.freeGeoipDatas.SingleOrDefault(x => x.Ipv4 == l.ipaddress); if (objf == null) { freeGeoipData f = new freeGeoipData(); f.Ipv4 = l.ipaddress; f.ip_num = l.ipnum; f.City = obj.City; f.Region = obj.Region; f.Country = obj.Country; f.CountryCode = obj.CountryCode; f.PostalCode = obj.PostalCode; f.Latitude = obj.latitude; f.Longitude = obj.longitude; f.MetroCode = obj.metro_code; dc.freeGeoipDatas.Add(f); dc.SaveChanges(); } return(obj); } }