public VendorTestResult GetResultFromCache(string address, Vendor vendor) { VendorTestResult cachedResult = null; using (var dbContext = new ResultModelContainer()) { cachedResult = dbContext.VendorTestResults.Include("TestItem").Include("Vendor") .Where(e => e.Vendor.Id == vendor.Id && e.TestItem.Address.Equals(address)) .FirstOrDefault(); } if (cachedResult != null) { log.InfoFormat("Found cached value for {0} from vendor {1} in recordId:{2}", address, vendor.Name, cachedResult.Id); } return cachedResult; }
static void Main(string[] args) { log4net.Config.XmlConfigurator.Configure(); log.Info("Begin."); using (var dbTest = new ResultModelContainer()) { IList<TestItem> testItemList = null; IList<VendorTestResult> vendorResultList = null; IList<vwMapTest> addressList; if (USE_SAMPLE_ADDRESSES) addressList = sampleAddressList; else addressList = AddressChecker.GetGenevaAddresses(RESULT_COUNT, RESELLER_ID_MIN, RESELLER_ID_MAX); // create testitems from raw addresses testItemList = TestItem.GetTestItems(addressList); dbTest.SaveTestItems(testItemList); log.Info(String.Format("Created {0} testItems from address list, saved to database.", testItemList.Count)); // TODO: add an Active field in db to vendors table so it will know which to use? log.Info("Using vendors " + string.Join(",", vendorList.Select(e => e.Name).ToArray())); if (testItemList != null) { vendorResultList = VendorTestResult.GetResultsForVendors(testItemList, vendorList); log.Info(String.Format("Processed {0} vendor results.", vendorResultList.Count)); } // IList<DistanceResult> distanceResultList = null; //if (vendorResultList != null) //{ // // get distance results from vendor test pairs. // distanceResultList = DistanceResult.ProcessDistances(vendorResultList); // dbTest.SaveDistanceResults(distanceResultList); // log.Info(String.Format("Processed {0} distances, saved to database.", distanceResultList.Count)); //} } log.Info("Done"); //Console.WriteLine("\n\nDone. Press any key to close."); //Console.ReadKey(); }
public static Vendor GetByName(string name) { using (ResultModelContainer dbTest = new ResultModelContainer()) { Vendor v = null; try { v = (dbTest.Vendors.Where(e => e.Name.Equals(name)).Single()); } catch (Exception) { log.ErrorFormat("Vendor not found for '{0}'", name); throw; } return v; } }
public static IList<TestItem> GetTestItems(IList<Models.vwMapTest> rawAddresses) { IList<TestItem> testItems = new List<TestItem>(); foreach (vwMapTest rawAddress in rawAddresses) { using (var dbTest = new ResultModelContainer()) { // create a test item from the raw address var testItem = new TestItem { Address = GeoMapUtil.GetLocationString(rawAddress.City, rawAddress.Region, rawAddress.PostalCode), ResellerId = rawAddress.ResellerID }; testItems.Add(testItem); } } return testItems; }
public VendorTestResult Query(TestItem testItem) { //PlaceBase place = null; VendorTestResult vr = null; if (testItem == null || string.IsNullOrEmpty(testItem.Address)) { throw new Exception("Address must not be a null or empty string."); } Vendor vendor = Vendor.GetByName(Provider.ToString()); // Check cache VendorTestResult cachedRecord = GetResultFromCache(testItem.Address, vendor); if (cachedRecord != null) { log.InfoFormat("Using cached coords for address '{0}' from {1}", testItem.Address, vendor.Name); vr = cachedRecord; } else { log.InfoFormat("Querying address '{0}' from {1}", testItem.Address, vendor.Name); Uri queryUri = GetQueryUri(testItem.Address); string response = null; try { response = new WebClient().DownloadString(queryUri); } catch (Exception) { log.Error("Bad response from " + vendor.Name); response = null; throw; } PlaceBase place = null; if (response != null) { place = ParseResponse(response, testItem.Address); } // CACHE IT if (place != null) { try { using (var dbContext = new ResultModelContainer()) { vr = new VendorTestResult(place, testItem, Vendor.GetByName(Provider.ToString())); dbContext.VendorTestResults.Add(vr); dbContext.SaveChanges(); } } catch (Exception e) { log.WarnFormat("Failed to cache address {0}\n{1}\n{2}", testItem.Address, e.ToString()); } } } return vr; }