private IEnumerable <RuleEvaluationRequest> GetNextRequests( IEvaluationRequestsService evaluationRequestsService, int fileSizeConfig, int maxFileSizeCount) { _logger.Info("GetNextRequests Start"); var ruleEvaluationRequests = new List <RuleEvaluationRequest>(); List <EvaluationRequest> pendingRequests = evaluationRequestsService.GetNextRequests(fileSizeConfig, maxFileSizeCount).ToList(); foreach (var pendingRequest in pendingRequests) { ruleEvaluationRequests.Add(new RuleEvaluationRequest() { Id = pendingRequest.Id, Year = pendingRequest.TaxAppYear, ReturnType = pendingRequest.ReturnType, SchemaType = pendingRequest.SchemaType, Locator = pendingRequest.Locator, Jurisdiction = pendingRequest.Jurisdiction, DocumentToEvaluate = pendingRequest.DocumentToEvaluate, FileSize = pendingRequest.FileSize }); } _logger.Info("GetNextRequests End"); return(ruleEvaluationRequests); }
public RuleEvaluationRequestsDatabaseProducer(IEvaluationRequestsService evaluationRequestsService, BlockingCollection <RuleEvaluationRequest> workQueue, Func <IEvaluationRequestsService> evaluationRequestsServiceFactory /*, ILoggerFactory loggerFactory*/, WorkQueueCounter counter, PerformanceMetricsCollector performanceMetricsCollector) { //_logger = loggerFactory.GetLogger("RuleEngine_WindowsService"); //_context = new TrmrLogContext("RuleEngine_WindowsService"); this._workQueue = workQueue; this._evaluationRequestsServiceFactory = evaluationRequestsServiceFactory; this._counter = counter; _metricsCollector = performanceMetricsCollector; InitializeCapacityThresholds(); }
public void CreatePendingRequests() { //_context.StartEventLog("CreatePendingRequests start"); _logger.Info("CreatePendingRequests"); float avgCpu = _metricsCollector.Cpu; float commitCharge = _metricsCollector.PercentCommitCharge; if ((!this.CancelToken.IsCancellationRequested) && (avgCpu < _cpuUsageThreshold) && (commitCharge < _memoryUsageThreshold) && (_counter.count < _workQueue.BoundedCapacity)) { IEvaluationRequestsService evaluationRequestsService = this._evaluationRequestsServiceFactory(); try { IEnumerable <RuleEvaluationRequest> pendingRequests = GetNextRequests(evaluationRequestsService, fileSizeConfig, maxFileSizeCount); foreach (RuleEvaluationRequest request in pendingRequests) { bool added = _workQueue.TryAdd(request, timeOut, CancelToken); if (added) { _counter.count++; } } } catch (Exception e) { _logger.Error("Error in CreatePendingRequests", e); } finally { //TODO Verify this code if needed if (this.CancelToken.IsCancellationRequested) { foreach (var request in _workQueue.GetConsumingEnumerable()) { evaluationRequestsService.UpdateRequestStatusToInPending(request.Id, RequestStatusConstants.PENDING, string.Empty); } } } } }
public void ProcessRequests() { //_context.StartEventLog("ProcessRequests start"); _logger.Info("ProcessRequests"); while (!CancelToken.IsCancellationRequested) { try { RuleEvaluationRequest nextRequest = new RuleEvaluationRequest() { Id = 43888, Year = "2015", ReturnType = "1120", Locator = "CTEST075", SchemaType = "Jurisdiction", DocumentToEvaluate = "9ca715b2-c923-4ede-8f95-619f96e91117-CTEST075.xil", Jurisdiction = "Illinois" }; //this.sem.WaitOne(); //Task newTask = Task.Run(() => //{ IEvaluationRequestsService evaluationRequestService = this._evaluationRequestsServiceFactory(); try { _logger.Info(String.Format("Processing RequestId {0} - Start", nextRequest.Id)); evaluationRequestService.UpdateRequestStatus(nextRequest.Id, RequestStatusConstants.IN_PROGRESS); IRuleLogicExecutionService <EFileDocument> newService = _logicExecutionServiceFactory(); Stopwatch sw = Stopwatch.StartNew(); _logger.Info(String.Format("Start ExecuteRules for RequestId {0}", nextRequest.Id)); newService.ExecuteRules(nextRequest, _processor); sw.Stop(); _logger.Info(String.Format("End ExecuteRules for RequestId {0} - Time {1:0.00}s", nextRequest.Id, sw.ElapsedMilliseconds / 1000)); evaluationRequestService.UpdateRequestStatus(nextRequest.Id, RequestStatusConstants.COMPLETED); _logger.Info(String.Format("Processing RequestId {0} - End", nextRequest.Id)); } catch (Exception ex) { _logger.Error(string.Format("Error Processing RequestId {0}", nextRequest.Id), ex); evaluationRequestService.UpdateRequestStatus(nextRequest.Id, RequestStatusConstants.FAILED); } finally { _counter.count--; sem.Release(); } //}); //_allTasks.Add(newTask); //newTask.ContinueWith( // t => { _allTasks.Remove(t); }, CancelToken //); } catch (OperationCanceledException e) { _logger.Error("Operation was cancelled.", e); } } Task.WaitAll(_allTasks.Where(t => t.Status != TaskStatus.RanToCompletion).ToArray()); this.sem.Dispose(); //_context.EndEventLog(); }