protected async Task CreateBuildEngineBuildAsync(Product product)
        {
            await ResetPreviousBuildAsync(product);

            BuildResponse buildResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                buildResponse = BuildEngineApi.CreateBuild(product.WorkflowJobId);
            }
            if ((buildResponse != null) && (buildResponse.Id != 0))
            {
                product.WorkflowBuildId = buildResponse.Id;
                var productBuild = new ProductBuild
                {
                    ProductId = product.Id,
                    BuildId   = product.WorkflowBuildId
                };
                await ProductBuildRepository.CreateAsync(productBuild);

                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineBuildService>(service => service.CheckBuild(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create build failed");
            }
        }
示例#2
0
文件: Client.cs 项目: o-jakub/HfRepo
        public void CreateJob()
        {
            var filterValue = "YYY";
            var value       = Expression.Constant(filterValue);
            var prm         = Expression.Parameter(typeof(SamplePlugin.Plugin), "output");

            ParameterExpression[] pe = new ParameterExpression[] { prm };
            Type[] types             = new Type[] { typeof(string), typeof(string) };
            var    run     = typeof(SamplePlugin.Plugin).GetMethod(nameof(SamplePlugin.Plugin.Kuk), types);
            var    nameJob = string.Empty;

            if (false)
            {
                MethodCallExpression body = Expression.Call(Expression.Constant(new SamplePlugin.Plugin()), run, value, Expression.Constant("0"));
                Expression <Action <SamplePlugin.Plugin> > lambda = Expression.Lambda <Action <SamplePlugin.Plugin> >(body, "robot", pe);

                nameJob = hfClient.Create <SamplePlugin.Plugin>(lambda, new Hangfire.States.EnqueuedState());

                //hfClient.Schedule(lambda, TimeSpan.FromSeconds(30));

                //RecurringJob.AddOrUpdate("sample", lambda, Cron.Minutely);
            }
            else
            {
                Hangfire.Common.Job job = new Hangfire.Common.Job(run, "sss", "0");
                JobUpdate("testR1", job, "* * * * *");
                //nameJob = hfClient.Create(job, new Hangfire.States.EnqueuedState());
            }

            Console.WriteLine($"nameJob = {nameJob}");
            //hfClient.Requeue(nameJob);
        }
        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");
            }
        }
示例#4
0
        protected async Task CreateBuildEngineReleaseAsync(Product product, string channel)
        {
            var release = new Release
            {
                Channel = channel
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
        protected async Task CreateBuildEngineReleaseAsync(Product product, Dictionary <string, object> paramsDictionary, PerformContext context)
        {
            var channel     = GetChannel(paramsDictionary);
            var targets     = GetTargets(paramsDictionary, "google-play");
            var environment = GetEnvironment(paramsDictionary);

            environment["PRODUCT_ID"] = product.Id.ToString();
            environment["PROJECT_ID"] = product.ProjectId.ToString();
            var release = new Release
            {
                Channel     = channel,
                Targets     = targets,
                Environment = environment
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var build = await BuildRepository.Get().Where(b => b.BuildId == product.WorkflowBuildId).FirstOrDefaultAsync();

                if (build == null)
                {
                    throw new Exception($"Failed to find ProductBuild: {product.WorkflowBuildId}");
                }
                var publish = new ProductPublication
                {
                    ProductId      = product.Id,
                    ProductBuildId = build.Id,
                    ReleaseId      = releaseResponse.Id,
                    Channel        = channel
                };
                await PublicationRepository.CreateAsync(publish);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "releaseFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
示例#6
0
文件: Client.cs 项目: o-jakub/HfRepo
        public void JobUpdate(string recurringJobId, Hangfire.Common.Job job, string interval)
        {
            var manager = new RecurringJobManager();

            //manager.RemoveIfExists("my-job-id");
            manager.AddOrUpdate(recurringJobId, job, interval);
            manager.Trigger(recurringJobId);
        }
示例#7
0
        string IBackgroundJobClient.Create(Hangfire.Common.Job job, IState state)
        {
            var tenantId = TenantId;
            var jobId    = Inner.Create(job, state);
            var j        = GDB.Job.Find(int.Parse(jobId));

            j.TenantId       = tenantId;
            j.ContactId      = CurrentUser?.User?.ContactId;
            j.RecurringJobId = JobInfoFinder?.JobInfo?.RecurringJobId;
            GDB.SaveChanges();
            return(jobId);
        }
        protected async Task CreateBuildEngineBuildAsync(Product product, Dictionary <string, object> parmsDictionary, PerformContext context)
        {
            await ResetPreviousBuildAsync(product);

            BuildResponse buildResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                var targets     = GetTargets(parmsDictionary, "apk play-listing");
                var environment = GetEnvironment(parmsDictionary);
                environment["PRODUCT_ID"] = product.Id.ToString();
                environment["PROJECT_ID"] = product.ProjectId.ToString();
                var build = new Build
                {
                    Targets     = targets,
                    Environment = environment
                };
                buildResponse = BuildEngineApi.CreateBuild(product.WorkflowJobId, build);
            }
            if ((buildResponse != null) && (buildResponse.Id != 0))
            {
                product.WorkflowBuildId = buildResponse.Id;
                var productBuild = new ProductBuild
                {
                    ProductId = product.Id,
                    BuildId   = product.WorkflowBuildId
                };
                await ProductBuildRepository.CreateAsync(productBuild);

                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineBuildService>(service => service.CheckBuild(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "buildFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create build 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");
            }
        }
示例#10
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IHostingEnvironment env)
        {
            //if (env.IsDevelopment())
            //{
            //    app.UseDeveloperExceptionPage();
            //}
            //else
            //{
            //    app.UseExceptionHandler("/Error");
            //    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            //    app.UseHsts();
            //}

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();


            // 將console的結果呈現在dashboard
            app.UseHangfireDashboard();
            //backgroundJobs.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));

            //RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely);
            //移除排程工作
            RecurringJob.RemoveIfExists("Console.Write");

            var manager = new RecurringJobManager();

            manager.AddOrUpdate("2", Job.FromExpression(() => ExecutePowershell()), Cron.Minutely());


            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
        protected async Task CreateBuildEngineReleaseAsync(Product product, string channel, PerformContext context)
        {
            var release = new Release
            {
                Channel = channel
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "releaseFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
示例#12
0
        string ITraffkRecurringJobManager.Add(Hangfire.Common.Job job, string cronExpression)
        {
            var tenantId       = Finder.GetTenantIdAsync().ExecuteSynchronously();
            var contactId      = CurrentUser?.User?.ContactId;
            var recurringJobId = GetRecurringJobId();
            var q       = job.Method.GetCustomAttributes(false).OfType <QueueAttribute>().FirstOrDefault() ?? job.Type.GetCustomAttribute <QueueAttribute>();
            var options = new RecurringJobOptions
            {
                QueueName = q?.Queue,
            };

            RecurringJobManager.AddOrUpdate(recurringJobId, job, cronExpression, options);
            GDB.Hash.Add(new HangfireHash {
                Key = "recurring-job:" + recurringJobId, Field = "TenantId", Value = tenantId.ToString()
            });
            if (contactId != null)
            {
                GDB.Hash.Add(new HangfireHash {
                    Key = "recurring-job:" + recurringJobId, Field = "ContactId", Value = contactId.ToString()
                });
            }
            GDB.SaveChanges();
            return(recurringJobId);
        }
示例#13
0
 void ITraffkRecurringJobManager.Update(string recurringJobId, Hangfire.Common.Job job, string cronExpression)
 {
     //TODO: Make sure recurringJobId actually exists - need to read Hangfire.Hash table
 }