コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }