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");
            }
        }
Esempio n. 3
0
        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);
                }
            }
        }