/// <summary> /// Generates Save Search Results Job tasks /// </summary> /// <param name="jobParameters">Job BEO</param> /// <param name="previouslyCommittedTaskCount">The previously committed task count.</param> /// <returns> /// List of Job Tasks (BEOs) /// </returns> protected override Tasks <SaveSearchResultsJobTaskBEO> GenerateTasks(SaveSearchResultsJobBEO jobParameters, out int previouslyCommittedTaskCount) { var tasks = new Tasks <SaveSearchResultsJobTaskBEO>(); previouslyCommittedTaskCount = 0; LogMessage(Constants.TaskGenerationStartedMessage, false, LogCategory.Job, null); LogMessage(Constants.TaskGenerationStartedMessage, GetType(), Constants.GenerateTaskMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); jobParameters.DocumentQuery.IgnoreDocumentSnippet = true; jobParameters.DocumentQuery.OutputFields.Clear(); jobParameters.DocumentQuery.OutputFields.Add(new Field { FieldName = EVSystemFields.DcnField }); jobParameters.DocumentQuery.QueryObject.TransactionName = "SaveSearchResultsJob - GenerateTasks (GetCount)"; var totalResultCount = JobSearchHandler.GetSearchResultsCount(jobParameters.DocumentQuery.QueryObject); // getting total no. of documents present in current search List for (var pageno = 1;; pageno++) { var task = new SaveSearchResultsJobTaskBEO { PageNo = pageno - 1, PageSize = _taskBatchSize, TaskNumber = pageno, TaskPercent = 100 / Math.Ceiling((float)totalResultCount / _taskBatchSize) }; tasks.Add(task); //pageno * _taskBatchSize exhaust if (pageno * _taskBatchSize >= totalResultCount) { break; } } if (tasks.Count == 0) { LogMessage(Constants.NoTaskToExecuteError, GetType(), Constants.GenerateTaskMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); } LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), false, LogCategory.Job, null); LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), GetType(), Constants.GenerateTaskMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); return(tasks); }
/// <summary> /// Method to execute the query and get the search results /// </summary> /// <param name="searchBizEntityObj">Document Query Entity</param> /// <param name="query">query to execute</param> /// <returns></returns> private long GetAlertResultCount(DocumentQueryEntity searchBizEntityObj, string query) { if (searchBizEntityObj != null) { searchBizEntityObj.QueryObject.QueryList.Clear(); searchBizEntityObj.QueryObject.QueryList.AddRange(new List <Query> { new Query { SearchQuery = HttpUtility.HtmlDecode(query), Precedence = 1 } }); searchBizEntityObj.TransactionName = "AlertsJob - GetAlertResultCount"; // Do the search to get all results return(JobSearchHandler.GetSearchResultsCount(searchBizEntityObj.QueryObject)); } return(0); }
/// <summary> /// Atomic work 1)Get old search result 2)New Search 3) Compare 4) generate report to database. /// </summary> /// <param name="task"></param> /// <param name="jobParameters"></param> /// <returns></returns> protected override bool DoAtomicWork(CompareSavedSearchResultsJobTaskEntity task, CompareSavedSearchResultsJobBEO jobParameters) { task.ShouldNotBe(null); jobParameters.ShouldNotBe(null); var queryContext = _searchResultsProperty.DocumentQuery; queryContext.DocumentStartIndex = 0; queryContext.DocumentCount = 1; queryContext.IgnoreDocumentSnippet = true; queryContext.OutputFields.Clear(); queryContext.OutputFields.Add(new Field { FieldName = EVSystemFields.DcnField }); try { LogMessage(string.Format(Constants.DoAtomicWorkStartMessage, task.TaskNumber), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); switch (task.TaskType) { case TypeOfTask.FetchRecordFromDb: { var searchResultuuid = string.Format(SaveSearchResultIdentifierBEO.UniqueIdentifierFormat, _searchResultsProperty.DocumentQuery.QueryObject.MatterId, _searchResultsProperty.DocumentQuery.QueryObject.DatasetId, _searchResultsProperty.SearchResultId); _oldSearchResult = SearchResultsService.GetSavedSearchResultsWithDocument(searchResultuuid); } break; case TypeOfTask.FetchRecordFromSearchSubSystem: { LogMessage(string.Format("New Search start at : {0}", DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); //SearchContextObject searchContextObject = ConvertToSearchContextObject(queryContext); ReviewerSearchResults rvwSearchBeo; queryContext.QueryObject.TransactionName = "CompareSavedSearchResultsJob - DoAtomicWork (GetCount)"; var totalResultCount = JobSearchHandler.GetSearchResultsCount(queryContext.QueryObject); //searchContextObject.ItemsPerPage = totalResultCount; queryContext.DocumentCount = (int)totalResultCount; queryContext.TransactionName = "CompareSavedSearchResultsJob - DoAtomicWork (GetAll)"; rvwSearchBeo = JobSearchHandler.GetAllDocuments(queryContext, false); // Getting search result list by page index LogMessage(string.Format("New Search End at : {0}", DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); //Constructing New search Result Beo _newSearchResult = new SearchResultsDataContract { Information = new SearchResultsInformationDataContract { Properties = new SearchResultsPropertiesDataContract { SearchResultId = _searchResultsProperty.SearchResultId, SearchResultsName = _searchResultsProperty.SearchResultsName, SearchResultsDescription = _searchResultsProperty.SearchResultsDescription, DocumentQuery = _searchResultsProperty.DocumentQuery }, CreatedBy = _userEntityOfJobOwner.UserId, CreatedDate = DateTime.UtcNow.ConvertToUserTime() } }; if (rvwSearchBeo != null) { if (rvwSearchBeo.ResultDocuments != null && rvwSearchBeo.ResultDocuments.Any()) { //int totalHitCount = 0; foreach (var document in rvwSearchBeo.ResultDocuments) { var documentDeatail = new SearchResultDocumentDetailsDataContract(); documentDeatail.DocumentId = document.DocumentID; documentDeatail.DocumentControlNumber = document.DocumentControlNumber; documentDeatail.NativeFilePath = GetNativeFilePath(document); _newSearchResult.Details.Add(documentDeatail); } _newSearchResult.Information.NumberOfDocuments = rvwSearchBeo.ResultDocuments.Count; } } LogMessage(string.Format("New Search Results Construction done at : {0}", DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); } break; case TypeOfTask.CompareRecords: { var comparisonStart = DateTime.Now; _savedSearchCompareReport = new SavedSearchCompareReportBEO(); LogMessage(string.Format("Comparison Start at: {0}", DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); var oldResultSet = new List <SearchResultsDetailBEO>(); var newResultSet = new List <SearchResultsDetailBEO>(); _oldSearchResult.Details.SafeForEach(x => oldResultSet.Add(x.ToBusinessEntity())); _newSearchResult.Details.SafeForEach(x => newResultSet.Add(x.ToBusinessEntity())); // Extracting Common document details (newResultSet.Intersect(oldResultSet).ToList()).SafeForEach(x => _savedSearchCompareReport.CommonDocumentSet.Add(x)); //Extracting Unique document details from new Search result (newResultSet.Except(_savedSearchCompareReport.CommonDocumentSet).ToList()). SafeForEach(x => _savedSearchCompareReport.DocumentsOnlyInNewResultSet.Add(x)); //Extracting Unique document details from old(Saved) Search result (oldResultSet.Except(_savedSearchCompareReport.CommonDocumentSet).ToList()). SafeForEach(x => _savedSearchCompareReport.DocumentOnlyInOldResultSet.Add(x)); var comparisonStop = DateTime.Now; LogMessage(string.Format("Total Time taken for comparison: {0}", (comparisonStop - comparisonStart).Milliseconds), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); } break; case TypeOfTask.ConstructFileContent: { LogMessage( string.Format("File Construction start at: {0}", DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); //Saving Old search results information _savedSearchCompareReport.OldResultDetails = new SearchResultsInformationBEO { CreatedBy = _oldSearchResult.Information.CreatedBy, CreatedDate = _oldSearchResult.Information.CreatedDate, NumberOfDocuments = _oldSearchResult.Information.NumberOfDocuments, NumberOfSearchHits = _oldSearchResult.Information.NumberOfSearchHits }; //Saving Old search results information _savedSearchCompareReport.NewResultDetails = new SearchResultsInformationBEO { CreatedBy = _newSearchResult.Information.CreatedBy, CreatedDate = _newSearchResult.Information.CreatedDate, NumberOfDocuments = _newSearchResult.Information.NumberOfDocuments, NumberOfSearchHits = _newSearchResult.Information.NumberOfSearchHits }; _savedSearchCompareReport.CreatedBy = _userEntityOfJobOwner.UserId; _savedSearchCompareReport.SearchQueryTerm = queryContext.QueryObject.DisplayQuery; _savedSearchCompareReport.CreatedDate = DateTime.UtcNow.ConvertToUserTime(); //File Creation Logic CreateReportFile(out _reportString); LogMessage(string.Format("File Construction End at: {0}", DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); //Clean up all class level variable _oldSearchResult = null; _newSearchResult = null; } break; } } catch (EVException ex) { _isJobFailed = true; WriteToEventViewer(ex, GetType(), MethodBase.GetCurrentMethod().Name, jobParameters.JobId, jobParameters.JobRunId); HandleTaskException(null, string.Format(Constants.TaskKeyStringFormat, task.TaskType), ErrorCodes.ProblemInDoAtomicWork); } catch (Exception ex) { _isJobFailed = true; // Handle exception in DoAutomic LogMessage(ex, GetType(), MethodBase.GetCurrentMethod().Name, EventLogEntryType.Error, jobParameters.JobId, jobParameters.JobRunId); HandleTaskException(ex, string.Format(Constants.TaskKeyStringFormat, task.TaskType), ErrorCodes.ProblemInDoAtomicWork); } return(true); }
/// <summary> /// This is the overridden GenerateTasks() method. /// </summary> /// <param name="jobParameters">GlobalReplaceJobBEO</param> /// <param name="previouslyCommittedTaskCount">int</param> /// <returns>list of GlobalReplaceTaskBEO object</returns> protected override Tasks <GlobalReplaceTaskBEO> GenerateTasks(GlobalReplaceJobBEO jobParameters, out int previouslyCommittedTaskCount) { var tasks = new Tasks <GlobalReplaceTaskBEO>(); previouslyCommittedTaskCount = 0; try { LogMessage(Constants.TaskGenerationStartedMessage, false, LogCategory.Job, null); LogMessage(Constants.TaskGenerationStartedMessage, GetType(), "LexisNexis.Evolution.BatchJobs.FindandReplaceJob.GenerateTasks", EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); var searchQueryEntity = new SearchQueryEntity { MatterId = jobParameters.SearchContext.MatterId, ReviewsetId = jobParameters.SearchContext.ReviewSetId, DatasetId = jobParameters.SearchContext.DataSetId, IsConceptSearchEnabled = jobParameters.SearchContext.IsConceptSearchEnabled }; searchQueryEntity.TransactionName = "FindandReplaceJob - GenerateTasks (GetCount)"; searchQueryEntity.QueryList.Add(new Query(jobParameters.SearchContext.Query)); long totalResultCount = JobSearchHandler.GetSearchResultsCount(searchQueryEntity); if (totalResultCount > 0) { //estimated enqueue time for a document is 30 seconds _mEstimatedTimeToIndexInMinutes = (totalResultCount * 30) / 60; for (int pageno = 1;; pageno++) { var task = new GlobalReplaceTaskBEO { PageNumber = pageno - 1, PageSize = _mTaskBatchSize, TaskNumber = pageno, SearchQueryObject = searchQueryEntity, TaskPercent = 100 / Math.Ceiling((float)totalResultCount / _mTaskBatchSize), TaskComplete = false, ActualString = jobParameters.ActualString, ReplaceString = jobParameters.ReplaceString }; tasks.Add(task); //pageno * _taskBatchSize exhaust if (pageno * _mTaskBatchSize >= totalResultCount) { break; } } } else { CustomNotificationMessage = string.Format(Constants.SearchTextNotFound, jobParameters.ActualString); } if (tasks.Count == 0) { LogMessage(Constants.NoTaskToExecuteError, GetType(), "LexisNexis.Evolution.BatchJobs.FindandReplaceJob.GenerateTasks", EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); } LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), false, LogCategory.Job, null); LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), GetType(), "LexisNexis.Evolution.BatchJobs.FindandReplaceJob.GenerateTasks", EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId); } catch (EVException ex) { EvLog.WriteEntry(Constants.JOB_NAME + " : " + jobParameters.JobId + Constants.TaskGenerationFails, ex.ToUserString(), EventLogEntryType.Error); LogException(jobParameters.JobId, ex, string.Empty, LogCategory.Job, string.Empty, ErrorCodes.ProblemInGenerateTasks); } catch (Exception exp) { EvLog.WriteEntry(Constants.JOB_NAME + " : " + jobParameters.JobId + Constants.TaskGenerationFails, exp.Message, EventLogEntryType.Error); LogException(jobParameters.JobId, exp, string.Empty, LogCategory.Job, string.Empty, ErrorCodes.ProblemInGenerateTasks); } return(tasks); }