public async Task ProcessSingleUserAsync(Int32 workspaceArtifactID, Int32 jobArtifactID, ExportWorkerQueueRecord exportWorkerQueueRecord) { try { RaiseAndLogDebugMessage($"Processing a single user in export worker batch. [{nameof(exportWorkerQueueRecord.ArtifactId)}] = {exportWorkerQueueRecord.ArtifactId}"); kCura.Relativity.Client.DTOs.User userRDO = await ArtifactQueries.RetrieveUserAsync(RsapiApiOptions, RsapiRepositoryGroup.UserRepository, exportWorkerQueueRecord.ArtifactId); //query user Auth data LoginProfile userLoginProfile = await AuthenticationHelper.RetrieveExistingUserLoginProfileAsync(userRDO.ArtifactID); //query keywords and notes for user KeywordsNotesModel userKeywordsNotesModel = await SqlQueryHelper.RetrieveKeywordsAndNotesForUserAsync( eddsDbContext : AgentHelper.GetDBContext(-1), userArtifactId : userRDO.ArtifactID); //query groups user is part of IEnumerable <String> userGroupNameList = await QueryGroupsNamesUserIsPartOfAsync(userRDO); UserAdminObject userAdminObject = await ConvertUserResultToUserAdminObjectAsync(userRDO); //add keywords and notes, auth and groups data to UserAdminObject await AddKeywordsNotesAuthInfoAndGroupsToUserAdminObjectAsync(userAdminObject, userKeywordsNotesModel, userGroupNameList, userLoginProfile); //insert user data info into the export worker results table await InsertUserDataIntoExportWorkerResultsTableAsync(exportWorkerQueueRecord, userAdminObject); RaiseAndLogDebugMessage($"Processed a single user in export worker batch. [{nameof(exportWorkerQueueRecord.ArtifactId)}] = {exportWorkerQueueRecord.ArtifactId}"); } catch (Exception ex) { //create export job error record String details = ExceptionMessageFormatter.GetExceptionMessageIncludingAllInnerExceptions(ex); await CreateExportJobErrorRecordAsync(workspaceArtifactID, jobArtifactID, exportWorkerQueueRecord.ObjectType, Constant.Status.JobErrors.ERROR, details); } }
public async Task ProcessNewRecordAsync(String delimitedListOfResourceGroupIds) { if (delimitedListOfResourceGroupIds != String.Empty) { DataTable dataTable = await RetrieveNextRecordInExportManagerQueueTableAsync(delimitedListOfResourceGroupIds); if (TableIsNotEmpty(dataTable)) { ExportManagerQueueRecord exportManagerQueueRecord = new ExportManagerQueueRecord(dataTable.Rows[0]); SetJobProperties(exportManagerQueueRecord); String context = $"[Table = {QueueTable}, ID = {TableRowId}, Workspace Artifact ID = {WorkspaceArtifactId}, Export Job Artifact ID = {ExportJobArtifactId}]"; RaiseAndLogDebugMessage($"Processing record(s). {context}"); try { Int32 numberOfExpectedExports; //update export job status to in progress await UpdateExportJobStatus(Constant.Status.Job.IN_PROGRESS_MANAGER, exportManagerQueueRecord); //update export manager queue record with export results table name String exportResultsTableName = $"{Constant.Names.ExportWorkerResultsTablePrefix}{Guid.NewGuid()}"; await SqlQueryHelper.UpdateResultsTableNameInExportManagerQueueAsync(AgentHelper.GetDBContext(-1), exportManagerQueueRecord.TableRowId, exportResultsTableName); // Add specific logic for other types of objects here #DifferentObject Constant.Enums.SupportedObjects migrationObjectType = (Constant.Enums.SupportedObjects)Enum.Parse(typeof(Constant.Enums.SupportedObjects), exportManagerQueueRecord.ObjectType); switch (migrationObjectType) { case Constant.Enums.SupportedObjects.User: numberOfExpectedExports = await ProcessUsers(exportManagerQueueRecord, exportResultsTableName); break; default: throw new AdminMigrationUtilityException(Constant.ErrorMessages.InvalidAdminObjectTypeError); } //Update status and statistics long as cancellation is not requested if (!await CancellationRequestedAsync(exportManagerQueueRecord)) { await SqlQueryHelper.UpdateStatusInExportManagerQueueByWorkspaceJobIdAsync( eddsDbContext : AgentHelper.GetDBContext(-1), workspaceArtifactId : exportManagerQueueRecord.WorkspaceArtifactId, exportJobArtifactId : exportManagerQueueRecord.ExportJobArtifactId, queueStatus : Constant.Status.Queue.WAITING_FOR_WORKERS_TO_FINISH); await UpdateExportJobStatus(Constant.Status.Job.COMPLETED_MANAGER, exportManagerQueueRecord); await UpdateExportJobExpectedNumberOfExports(numberOfExpectedExports, exportManagerQueueRecord); } } catch (Exception ex) { //update export job status to error await UpdateExportJobStatus(Constant.Status.Job.ERROR, exportManagerQueueRecord); String details = ExceptionMessageFormatter.GetExceptionMessageIncludingAllInnerExceptions(ex); RaiseAndLogDebugMessage(details); //remove record from export manager queue table await ClearRecordsFromQueueTables(exportManagerQueueRecord); } } } }