public SearchMonkeyService(IEbayFinder finder, INotifier notifier, ISearchRepositoryFactory repoFactory, ICompletedItemReviewer completedItemReviewer, IResultAggregator resultAggregator) { if (finder == null) throw new ArgumentNullException(nameof(finder)); if (notifier == null) throw new ArgumentNullException(nameof(notifier)); if (repoFactory == null) throw new ArgumentNullException(nameof(repoFactory)); if (completedItemReviewer == null) throw new ArgumentNullException(nameof(completedItemReviewer)); if (resultAggregator == null) throw new ArgumentNullException(nameof(resultAggregator)); // Config settings _apiDailyRateLimit = Int32.Parse(ConfigurationManager.AppSettings["ApiDailyRateLimit"]); _apiRateThreshold = double.Parse(ConfigurationManager.AppSettings["ApiRateThreshold"]); _finder = finder; _notifier = notifier; _repoFactory = repoFactory; _completedItemReviewer = completedItemReviewer; _resultAggregator = resultAggregator; _cts = new CancellationTokenSource(); _searchTask = t => { try { // Execute current search var searchMetrics = ExecuteSearch(); // Schedule the next search var nextSearchInterval = (SearchScheduleInterval * ((searchMetrics.ApiCallsMade) == 0 ? 1 : searchMetrics.ApiCallsMade)) - searchMetrics.ExecutionTime; Task.Delay(TimeSpan.FromMilliseconds(nextSearchInterval >= 0 ? nextSearchInterval : 0), _cts.Token) .ContinueWith(ta => _searchTask(t), _cts.Token); } catch(Exception ex) { _log.Fatal(ex); } }; InstallInstrumentation(); }
/// <summary>Initializes a new instance of the <see cref="SimpleTransformer"/> class.</summary> /// <param name="aggregator">The aggregator.</param> public SimpleTransformer(IResultAggregator aggregator) { _aggregator = aggregator; }