public async Task UpdateProjectAsync(int projectId) { var project = await ProjectRepository.Get() .Where(p => p.Id == projectId) .Include(p => p.Organization) .Include(p => p.Owner) .FirstOrDefaultAsync(); if (project == null) { // Can't find the project record whose creation should have // triggered this process. Exception will trigger retry // TODO: Send notification record // Don't send exception because there doesn't seem to be a point in retrying ClearAndExit(projectId); return; } var buildEngineProject = new BuildEngineProject { UserId = project.Owner.Email, PublishingKey = project.Owner.PublishingKey, }; if (SetBuildEngineEndpoint(project.Organization)) { var projectResponse = BuildEngineApi.UpdateProject(project.WorkflowProjectId, buildEngineProject); } }
protected async Task CreateBuildEngineProjectAsync(Project project) { var buildEngineProject = new BuildEngineProject { UserId = project.Owner.Email, GroupId = project.Group.Abbreviation, AppId = project.Type.Name, LanguageCode = project.Language, PublishingKey = project.Owner.PublishingKey, ProjectName = project.Name }; ProjectResponse projectResponse = null; if (SetBuildEngineEndpoint(project.Organization)) { projectResponse = BuildEngineApi.CreateProject(buildEngineProject); } if ((projectResponse != null) && (projectResponse.Id != 0)) { // Set state to active? project.WorkflowProjectId = projectResponse.Id; await ProjectRepository.UpdateAsync(project); var monitorJob = Job.FromExpression <BuildEngineProjectService>(service => service.ManageProject(project.Id)); RecurringJobManager.AddOrUpdate(GetHangfireToken(project.Id), monitorJob, "* * * * *"); } else { // TODO: Send Notification // Throw Exception to force retry throw new Exception("Create project failed"); } }
protected async Task CreateBuildEngineProjectAsync(Project project, PerformContext context) { var buildEngineProject = new BuildEngineProject { AppId = project.Type.Name, LanguageCode = project.Language, ProjectName = project.Name, StorageType = "s3" }; ProjectResponse projectResponse = null; if (SetBuildEngineEndpoint(project.Organization)) { projectResponse = BuildEngineApi.CreateProject(buildEngineProject); } if ((projectResponse != null) && (projectResponse.Id != 0)) { // Set state to active? project.WorkflowProjectId = projectResponse.Id; if (projectResponse.Status == "completed") { if (projectResponse.Result == "SUCCESS") { await ProjectCompletedAsync(project, projectResponse); } else { await ProjectCreationFailedAsync(project, projectResponse); } return; } } if (IsFinalRetry(context)) { var messageParms = new Dictionary <string, object>() { { "projectName", project.Name } }; await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner, "projectFailedUnableToCreate", messageParms); } // Throw Exception to force retry throw new Exception("Create project failed"); }
protected async Task CreateBuildEngineProjectAsync(Project project, PerformContext context) { var buildEngineProject = new BuildEngineProject { UserId = project.Owner.Email, GroupId = project.Group.Abbreviation, AppId = project.Type.Name, LanguageCode = project.Language, PublishingKey = project.Owner.PublishingKey, ProjectName = project.Name }; ProjectResponse projectResponse = null; if (SetBuildEngineEndpoint(project.Organization)) { projectResponse = BuildEngineApi.CreateProject(buildEngineProject); } if ((projectResponse != null) && (projectResponse.Id != 0)) { // Set state to active? project.WorkflowProjectId = projectResponse.Id; await ProjectRepository.UpdateAsync(project); var monitorJob = Job.FromExpression <BuildEngineProjectService>(service => service.ManageProject(project.Id, null)); RecurringJobManager.AddOrUpdate(GetHangfireToken(project.Id), monitorJob, "* * * * *"); } else { if (IsFinalRetry(context)) { var messageParms = new Dictionary <string, object>() { { "projectName", project.Name } }; await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner, "projectFailedUnableToCreate", messageParms); } // Throw Exception to force retry throw new Exception("Create project failed"); } }
public async Task UpdateProjectAsync(int projectId, PerformContext context) { var project = await ProjectRepository.Get() .Where(p => p.Id == projectId) .Include(p => p.Organization) .Include(p => p.Owner) .FirstOrDefaultAsync(); if (project == null) { // Can't find the project record whose creation should have // triggered this process. Exception will trigger retry // Don't send exception because there doesn't seem to be a point in retrying var messageParms = new Dictionary <string, object>() { { "projectId", projectId.ToString() } }; await SendNotificationSvc.SendNotificationToSuperAdminsAsync("projectRecordNotFound", messageParms); ClearAndExit(projectId); return; } var buildEngineProject = new BuildEngineProject { UserId = project.Owner.Email, PublishingKey = project.Owner.PublishingKey, }; if (!BuildEngineLinkAvailable(project.Organization)) { if (IsFinalRetry(context)) { var messageParms = new Dictionary <string, object>() { { "projectName", project.Name } }; await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner, "projectUpdateFailedBuildEngine", messageParms); } // Throw Exception to force retry throw new Exception("Connection not available"); } if (SetBuildEngineEndpoint(project.Organization)) { var projectResponse = BuildEngineApi.UpdateProject(project.WorkflowProjectId, buildEngineProject); if (projectResponse.Status == "completed" && projectResponse.Result == "SUCCESS") { var messageParms = new Dictionary <string, object>() { { "projectName", project.Name } }; await SendNotificationSvc.SendNotificationToUserAsync(project.Owner, "projectUpdateComplete", messageParms); } else { var messageParms = new Dictionary <string, object>() { { "projectName", project.Name }, { "buildEngineProjectId", project.WorkflowProjectId.ToString() }, { "status", projectResponse.Status ?? "null" }, { "result", projectResponse.Result ?? "null" } }; await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner, "projectUpdateFailed", messageParms); } } }