public static Poller GetPoller(string sourceDirectory, string fileFilter, FileEnumeratingBasicFileController controller) { lock (Pollers) { Poller p = Pollers.FirstOrDefault(i => i.SourceDirectory.Equals(sourceDirectory, StringComparison.InvariantCultureIgnoreCase) && i.FileFilter.Equals(fileFilter, StringComparison.InvariantCultureIgnoreCase)); if (p == null) { p = new Poller(); p.SourceDirectory = sourceDirectory; p.FileFilter = fileFilter; p.Files = new Dictionary <string, long>(StringComparer.InvariantCultureIgnoreCase); p._References.Add(controller); _PollerPool.BeginAsync(p); Pollers.Add(p); } if (!p._References.Contains(controller)) { p._References.Add(controller); } return(p); } }
public void Configuration(IAppBuilder app) { Database.SetInitializer(new MigrateDatabaseToLatestVersion <ReadWriteDataContext, Configuration>()); using (var c = new ReadWriteDataContext()) c.Database.Initialize(true); GlobalConfiguration.Configuration.UseSqlServerStorage(ReadWriteDataContext.READ_WRITE_CONNECTION_STRING_NAME, new SqlServerStorageOptions { JobExpirationCheckInterval = TimeSpan.FromMinutes(5) }); if (Utils.GlobalConfiguration.EnableHangfire) { Pollers.StartPolling(); app.UseHangfireServer(); var options = new DashboardOptions { AppPath = VirtualPathUtility.ToAbsolute("~"), AuthorizationFilters = new[] { new RemoveAuthorizationFilter() } }; app.UseHangfireDashboard("/hangfire", options); GlobalJobFilters.Filters.Add(new ImmediatelyExpireSuccessfulJobs()); } }
public static void GetRecentCloseVoteReviews() { var closeVoteReviews = SEDataScraper.GetRecentCloseVoteReviews(); using (var con = ReadWriteDataContext.PlainConnection()) { using (var trans = con.BeginTransaction()) { foreach (var closeVote in closeVoteReviews) { //If the question doesn't exist, insert a blank row (we will queue it for scraping later) con.Execute(@" IF NOT EXISTS (SELECT NULL FROM Questions with (XLOCK, ROWLOCK) WHERE Id = @questionId) BEGIN INSERT INTO Questions(Id, Closed, LastUpdated, Deleted, DeleteVotes, UndeleteVotes, ReopenVotes, LastTimeActive, ReviewId) VALUES (@questionId, 0, GETUTCDATE(), 0, 0, 0, 0, GETUTCDATE(), @reviewId) END ELSE BEGIN UPDATE Questions SET ReviewId = @reviewId WHERE Id = @questionId END ", new { questionId = closeVote.Key, reviewId = closeVote.Value }, trans); } trans.Commit(); } } Pollers.QueueQuestionQueries(closeVoteReviews.Keys); }
public static void QueryQuestionAndLogRequest(int userId, int questionId, string fullMessage) { Pollers.QueueQuestionQuery(questionId); using (var connection = ReadWriteDataContext.PlainConnection()) connection.Execute(UPSERT_CVPLS_SQL, new { UserId = userId, QuestionId = questionId, FullMessage = fullMessage }); }
public ActionResult RefreshQuestionIds(List <int> questionIds) { foreach (var questionId in questionIds) { Pollers.QueueQuestionQuery(questionId); } return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); }
public ActionResult Poll(IList <int> questionIds) { Logger.LogInfo($"Polling questions: {string.Join(",", questionIds)}"); foreach (var questionId in questionIds) { Pollers.QueueQuestionQuery(questionId, null, true); } return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); }
protected override void DoWork(double pollinterval) { ConcurrentDictionary <string, bool> bag; if (!PollIntervals.TryGetValue(pollinterval, out bag)) { return; } BetfairServerResponse <List <MarketBook> > book; try { book = _client.ListMarketBook(bag.Keys, _priceProjection, _orderProjection, _matchProjection).Result; } catch (AggregateException ex) { foreach (var e in ex.Flatten().InnerExceptions) { _logger.Invoke(e, $"pollInterval {pollinterval}"); } return; } if (book.HasError) { foreach (var observer in Observers.Where(k => bag.Keys.Contains(k.Key))) { observer.Value.OnError(book.Error); } return; } // we may have fresher data than the response to this pollinterval request Poller p; if (!Pollers.TryGetValue(pollinterval, out p)) { return; } if (book.RequestStart < p.LatestDataRequestStart && book.LastByte > p.LatestDataRequestFinish) { return; } lock (LockObj) { p.LatestDataRequestStart = book.RequestStart; p.LatestDataRequestFinish = book.LastByte; } UpdateObservers(book.Response); }
protected override void Dispose(bool dispose) { lock (Pollers) { if (Pollers.Contains(this)) { Pollers.Remove(this); } } base.Dispose(dispose); }
public ActionResult EnqueueAndRedirectReview(int reviewId) { new Thread(() => { using (var con = ReadWriteDataContext.PlainConnection()) { var questionId = con.Query <int?>("SELECT Id from QUESTIONS Where ReviewID = @reviewId", new { reviewId = reviewId }).FirstOrDefault(); if (questionId != null) { Pollers.QueueQuestionQuery(questionId.Value); } } }).Start(); return(Redirect($"http://stackoverflow.com/review/close/{reviewId}")); }
public static void CheckCVPls() { using (var ctx = new ReadWriteDataContext()) { var weekAgo = DateTime.Now.ToUniversalTime().AddDays(-7); var questionIdsToCheck = ctx.CVPlsRequests .Where(r => !r.Question.Closed && r.CreatedAt >= weekAgo) .Select(r => r.QuestionId) .ToList(); foreach (var questionId in questionIdsToCheck) { Pollers.QueueQuestionQuery(questionId); } } }
public void Dispose(FileEnumeratingBasicFileController controller) { lock (Pollers) { if (_References.Contains(controller)) { _References.Remove(controller); } if (_References.Count == 0) { Dispose(); if (Pollers.Contains(this)) { Pollers.Remove(this); } } } }
public ActionResult EnqueueAndRedirect(int questionId) { new Thread(() => Pollers.QueueQuestionQuery(questionId)).Start(); return(Redirect($"http://stackoverflow.com/q/{questionId}")); }
public ActionResult PollQuestion(int questionId) { Pollers.QueueQuestionQuery(questionId, TimeSpan.FromMinutes(2), true); return(new HttpStatusCodeResult(HttpStatusCode.NoContent)); }
public void Configuration(IAppBuilder app) { ConfigureAuth(app); Pollers.StartPolling(); }