public override Response Execute() { Response response = new Response() { Success = true, Message = string.Empty }; if (!ActiveArtifact.IsNew) { var statusField = ActiveArtifact.Fields[Constant.Guids.Field.ExportUtilityJob.Status.ToString()].Value; var expectedField = ActiveArtifact.Fields[Constant.Guids.Field.ExportUtilityJob.Expected.ToString()].Value; if (statusField != null && statusField.Value != null & expectedField != null) { String currentStatus = (String)statusField.Value; Int32 expectedNumberOfImports = ((Int32?)expectedField.Value).GetValueOrDefault(); if (currentStatus == Constant.Status.Job.IN_PROGRESS_WORKER && expectedNumberOfImports > 0) { ISqlQueryHelper sqlQueryHelper = new SqlQueryHelper(); Int32 numberOfWorkerRecords = sqlQueryHelper.CountNumberOfExportWorkerRecordsAsync(Helper.GetDBContext(-1), Helper.GetActiveCaseID(), ActiveArtifact.ArtifactID).Result; ActiveArtifact.Fields[Constant.Guids.Field.ExportUtilityJob.RecordsThatHaveBeenProcessed.ToString()].Value.Value = expectedNumberOfImports - numberOfWorkerRecords; } } } return(response); }
public async Task CheckIfWorkersCompletedJob(IEnumerable <ExportManagerQueueRecord> exportManagerQueueRecords) { var jobsInTheWorkerQueue = exportManagerQueueRecords.Where(x => x.QueueStatus == Constant.Status.Queue.WAITING_FOR_WORKERS_TO_FINISH); foreach (var exportManagerQueueRecord in jobsInTheWorkerQueue) { try { SetJobProperties(exportManagerQueueRecord); Int32 numberOfWorkerRecords = await SqlQueryHelper.CountNumberOfExportWorkerRecordsAsync( eddsDbContext : AgentHelper.GetDBContext(-1), workspaceArtifactId : exportManagerQueueRecord.WorkspaceArtifactId, exportJobArtifactId : exportManagerQueueRecord.ExportJobArtifactId); if (numberOfWorkerRecords == 0) { FileInfo exportFileInfo = await ConstructExportFileNameAsync(exportManagerQueueRecord.ObjectType, exportManagerQueueRecord.ExportJobArtifactId); //create export file Int32 numberOfRecordsExported = await CreateExportFileAsync(exportManagerQueueRecord, exportFileInfo); //attach export file to RDO await AttachFileToExportJobAsync(exportManagerQueueRecord, exportFileInfo.FullName); //delete export file from temp directory await DeleteExportFileAsync(exportFileInfo); //drop results table await DropExportWorkerResultsTableAsync(exportManagerQueueRecord.ResultsTableName); //delete record from export manager queue await ClearRecordsFromQueueTables(exportManagerQueueRecord); Boolean jobErrorsRecorded = await ArtifactQueries.JobErrorRecordExistsAsync(RsapiApiOptions, exportManagerQueueRecord.WorkspaceArtifactId, RsapiRepositoryGroup.RdoRepository, Constant.Guids.ObjectType.ExportUtilityJobErrors, Constant.Guids.Field.ExportUtilityJobErrors.ExportUtilityJob, exportManagerQueueRecord.ExportJobArtifactId); await FinalizeJobStatiaticsAsync(exportManagerQueueRecord, numberOfRecordsExported); //update status of export job to complete if (jobErrorsRecorded) { await UpdateExportJobStatus(Constant.Status.Job.COMPLETED_WITH_ERRORS, exportManagerQueueRecord); await SendEmail(exportManagerQueueRecord, Constant.Status.Job.COMPLETED_WITH_ERRORS); } else { await UpdateExportJobStatus(Constant.Status.Job.COMPLETED, exportManagerQueueRecord); await SendEmail(exportManagerQueueRecord, Constant.Status.Job.COMPLETED); } } } catch (Exception ex) { throw new AdminMigrationUtilityException(Constant.ErrorMessages.CheckIfExportWorkersAreStillWorkingOnExportJobInExportWorkerQueueTableError, ex); } } }