示例#1
0
        private string ProxiedDownload(string url, int i)
        {
            var result = ProxiedDownload(url);

            Logger.LogInfo("ProxiedDownload", "Success", true, "Attempts", i + 1, "Url", url);
            return(result);
        }
示例#2
0
        public void Process(ZipCode zipCode)
        {
            Logger.LogInfo("Processing", nameof(zipCode), zipCode.Zip);

            Logger.LogInfo("Downloading Stores", nameof(zipCode), zipCode.Zip);

            StoreInfo[] stores;
            try
            {
                stores = _downloader.Download(zipCode).ToArray();
                Logger.LogInfo("Stores Data Downloaded", "storesCount", stores.Length, nameof(zipCode), zipCode.Zip);
            }
            catch (WebException ex)
            {
                if (_webExceptionHandler.ShouldBubbleUpException(ex))
                {
                    throw;
                }

                LogFailure(zipCode);
                return;
            }

            _storesPersistor.Persist(stores);

            _zipCodeDataService.UpdateZipCode(zipCode.Zip);

            LogSuccess(zipCode);

            _deadlockDetector.UpdateStatus();
        }
        public static string InstrumentedDownload(this WebRequest request, Func <WebRequest, String> downloader)
        {
            var stopwatch = Stopwatch.StartNew();

            var url = request.RequestUri.AbsoluteUri;

            Logger.LogDebug("Download", nameof(url), url, "Proxy", request.GetProxyString());

            try
            {
                var result = downloader(request);

                var kbytes = Convert.ToInt32(result.Length / 1024);
                stopwatch.Stop();
                Logger.LogInfo("Download", "KBytes", kbytes, "Result", true, "ElapsedMs", stopwatch.ElapsedMilliseconds);

                return(result);
            }
            catch (WebException e)
            {
                stopwatch.Stop();
                Logger.LogError("Download Error", e, nameof(url), url, "ElapsedMs", stopwatch.ElapsedMilliseconds);

                throw;
            }
        }
        public void Persist(IEnumerable <StoreInfo> storesEnumerableParam)
        {
            var allStores       = (storesEnumerableParam ?? new StoreInfo[] {}).ToArray();
            var storesToPersist = allStores
                                  .Where(_ => !_persistenceCalculator.WasPersistedRecently(_.StoreNumber))
                                  .ToArray();
            var numbersToPersist = storesToPersist.Select(_ => _.StoreNumber).ToArray();

            Logger.LogInfo("Saving Stores", "totalCount", allStores.Length, "count", numbersToPersist.Length);

            if (numbersToPersist.Length == 0)
            {
                return;
            }

            var numbersToUpdate = (_dataService.ContainsStore(numbersToPersist)).ToArray();
            var numbersToCreate = numbersToPersist.Except(numbersToUpdate).ToArray();

            var storesToUpdate = storesToPersist.Where(_ => numbersToUpdate.Contains(_.StoreNumber)).ToArray();
            var storesToCreate = storesToPersist.Where(_ => numbersToCreate.Contains(_.StoreNumber)).ToArray();

            Logger.LogDebug("Creating Stores", "count", storesToCreate.Length);
            _dataService.CreateNew(storesToCreate);

            Logger.LogDebug("Updating Stores", "count", storesToUpdate.Length);
            _dataService.Update(storesToUpdate);

            foreach (var storeNumber in numbersToPersist)
            {
                _persistenceCalculator.PreventFuturePersistence(storeNumber);
            }
        }
示例#5
0
        private void InvokeGarbageCollection()
        {
            var stopwatch     = Stopwatch.StartNew();
            var shouldCollect = AcquireCollectionLock();

            Logger.LogInfo("InvokeGarbageCollectionStart", "ShouldCollect", shouldCollect);

            if (shouldCollect)
            {
                CollectInternal();
            }

            stopwatch.Stop();
            Logger.LogInfo("InvokeGarbageCollection",
                           "Result", true,
                           "ShouldCollect", shouldCollect,
                           "ElapsedMs", stopwatch.ElapsedMilliseconds
                           );
        }
        private void Init()
        {
            if (_initialized)
            {
                return;
            }
            _initialized = true;

            Logger.LogInfo("Init", nameof(IsEnabled), IsEnabled, nameof(TimeoutMs), TimeoutMs);
            StartTimer();
        }