// This method will kill the current recurring job if it exists
        // and return normally so no retry is attempted.
        protected void ClearAndExit(int projectId)
        {
            var jobToken = GetHangfireToken(projectId);

            RecurringJobManager.RemoveIfExists(jobToken);
            return;
        }
        protected void ClearRecurringJob(Guid productId)
        {
            var jobToken = GetHangfireToken(productId);

            RecurringJobManager.RemoveIfExists(jobToken);
            return;
        }
        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");
            }
        }
        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");
            }
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, 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.UseHangfireDashboard();

            var manager = new RecurringJobManager();

            manager.AddOrUpdate("ReadTransactionJob", Job.FromExpression(() => Console.WriteLine("")), "*/5 * * * *");
            manager.AddOrUpdate("ReadTransactionJob2", Job.FromExpression(() => Console.WriteLine("")), "*/8 * * * *");

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

            app.UseMvc();
        }
        private void ServiceThreadFunc()
        {
            var uri        = ConfigurationManager.AppSettings["HangfireUri"];
            var pluginPath = ConfigurationManager.AppSettings["PluginDirectory"];

            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
                var asmName = new AssemblyName(args.Name);
                var plugin  = Path.Combine(pluginPath, asmName.Name + ".dll");
                if (File.Exists(plugin))
                {
                    return(Assembly.LoadFrom(plugin));
                }
                return(null);
            };

            using (var webApp = WebApp.Start <OwinStartup>(uri))
            {
                var manager = new RecurringJobManager();

                InitializeCatalog(pluginPath);
                LoadPlugins(manager);

                logger.Info("Web Application listening.");

                _shutdownEvent.WaitOne();
            }
        }
        public static void InitializeTenants(this IApplicationBuilder app, ITenantService tenantService)
        {
            //var teervice = app.ApplicationServices.GetRequiredService <ITenantService>();
            var tenants = tenantService.GetTenants().Result;

            foreach (var tenant in tenants)
            {
                GlobalConfiguration.Configuration.UseSqlServerStorage(tenant.ConnectionString);
                var sqlStorage = new SqlServerStorage(tenant.ConnectionString);

                //var myapp = app.New();
                app.UseHangfireDashboard($"/dashboard/{tenant.Name}", new DashboardOptions
                {
                    Authorization = new[] { new HangfireAuthFilter() }
                }, sqlStorage);

                var options = new BackgroundJobServerOptions
                {
                    ServerName = string.Format("{0}.{1}", tenant.Name, Guid.NewGuid().ToString()),
                };

                var jobStorage = JobStorage.Current;

                app.UseHangfireServer(options, null, jobStorage);



                //RecurringJob.AddOrUpdate<IHangfireRecurringJobService>(j => j.CheckForAbandonedCart(), Cron.Minutely);
                var recurringJobManager = new RecurringJobManager();
                recurringJobManager.RemoveIfExists(tenant.Id.ToString());
                recurringJobManager.AddOrUpdate <IHangfireRecurringJobService>(tenant.Id.ToString(), j => j.CheckForAbandonedCart(tenant.ConnectionString), Cron.Minutely);
                recurringJobManager.Trigger(tenant.Id.ToString());
            }
        }
        public async Task Dispatch([NotNull] DashboardContext context)
        {
            var response = new Response()
            {
                Status = true
            };

            var job = new PeriodicJob();

            job.Id     = context.Request.GetQuery("Id");
            job.Cron   = context.Request.GetQuery("Cron");
            job.Class  = context.Request.GetQuery("Class");
            job.Method = context.Request.GetQuery("Method");
            job.Queue  = context.Request.GetQuery("Queue");

            if (!Utility.IsValidSchedule(job.Cron))
            {
                response.Status  = false;
                response.Message = "Invalid CRON";

                await context.Response.WriteAsync(JsonConvert.SerializeObject(response));

                return;
            }

            var manager = new RecurringJobManager(context.Storage);

            var updatedJob = new Job(Type.GetType(job.Class).GetMethod(job.Method));

            manager.AddOrUpdate(job.Id, updatedJob, job.Cron, TimeZoneInfo.Utc, job.Queue);

            context.Response.StatusCode = (int)HttpStatusCode.OK;

            await context.Response.WriteAsync(JsonConvert.SerializeObject(response));
        }
Beispiel #9
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            System.Web.Http.GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            HangfireAspNet.Use(GetHangfireServers);


            //BackgroundJob.Enqueue(() => CrawlerJobs.RemoveAll());
            //BackgroundJob.Enqueue(() => CrawlerJobs.GetDiscounts());

            //using (var connection = JobStorage.Current.GetConnection())
            //{

            //    foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection))
            //    {
            //        RecurringJob.RemoveIfExists(recurringJob.Id);
            //    }
            //}
            // BackgroundJob.Enqueue(() => CrawlerJobs.AddGame());


            //RecurringJob.AddOrUpdate(() => CrawlerJobs.RemoveAll(), Cron.Daily);
            var manager = new RecurringJobManager();

            manager.RemoveIfExists("500");
            manager.AddOrUpdate("500", () => CrawlerJobs.GetDiscounts(), Cron.Daily);
            manager.Trigger("500");
        }
Beispiel #10
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseHangfireServer();
            app.UseHangfireDashboard();

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

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

            var recurringJobs = new RecurringJobManager();

            RecurringJob.AddOrUpdate <Tasks>(x => x.SuccessTask(null, null), Cron.Minutely);
            //            RecurringJob.AddOrUpdate<Tasks>(x => x.FailedTask(null, null), "*/2 * * * *");
            recurringJobs.AddOrUpdate("Failed Task", Job.FromExpression <Tasks>(x => x.FailedTask(null)), "*/2 * * * *", TimeZoneInfo.Local);
        }
Beispiel #11
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseHangfireServer();
            app.UseHangfireDashboard();

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

            app.UseRouting();
            app.UseEndpoints(routes => routes.MapDefaultControllerRoute());

            var recurringJobs = new RecurringJobManager();

            RecurringJob.AddOrUpdate <Tasks>(x => x.SuccessTask(null, null), Cron.Minutely);
            //            RecurringJob.AddOrUpdate<Tasks>(x => x.FailedTask(null, null), "*/2 * * * *");
            recurringJobs.AddOrUpdate("Failed Task", Job.FromExpression <Tasks>(x => x.FailedTask(null)), "*/2 * * * *", TimeZoneInfo.Local);

            BackgroundJob.Enqueue <BaseJob>(x => x.Run());
            BackgroundJob.Enqueue <DerivedJob>(x => x.Run());
        }
Beispiel #12
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");
            }
        }
Beispiel #14
0
        public ActionResult Index(SettingsModel model)
        {
            // Event
            SysEvent ev = new SysEvent();

            ev.Action      = Action.Settings;
            ev.Description = "Updated system settings";

            if (ModelState.IsValid)
            {
                // Check for changed settings we need to reflect here and now.
                SettingsModel settings = db.Settings.Single(x => x.Id == 1);
                if (settings.PingInterval != model.PingInterval)
                {
                    // Reset Hangfires recurring ping job.
                    var manager = new RecurringJobManager();
                    manager.AddOrUpdate("Enqueue", Job.FromExpression(() => Core.Jobs.Enqueue()), Cron.MinuteInterval(model.PingInterval));
                }

                // Save to database
                db.Settings.AddOrUpdate(model);
                db.SaveChanges();


                ev.ActionStatus = ActionStatus.OK;
                LogsController.AddEvent(ev, User.Identity.GetUserId());

                return(RedirectToAction("Index", "Home"));
            }
            ev.ActionStatus = ActionStatus.Error;
            LogsController.AddEvent(ev, User.Identity.GetUserId());
            return(View(model));
        }
Beispiel #15
0
        private void ScheduleJob(JobConfigDetails job)
        {
            //LogManager.Log($"Starting job: {job.Id}");
            if (string.IsNullOrEmpty(job.Cron) || string.IsNullOrEmpty(job.TypeName))
            {
                return;
            }

            try
            {
                var jobManager = new RecurringJobManager();
                jobManager.RemoveIfExists(job.Id);
                var type = Type.GetType(job.TypeName);
                if (type != null && job.Enabled)
                {
                    var jobSchedule = new Job(type, type.GetMethod("Start"));
                    jobManager.AddOrUpdate(job.Id, jobSchedule, job.Cron, TimeZoneInfo.Local);
                    //LogManager.Log($"Job {job.Id} has started");
                }
                else
                {
                    //LogManager.Log($"Job {job.Id} of type {type} is not found or job is disabled");
                }
            }
            catch (Exception ex)
            {
                //LogManager.Log($"Exception has been thrown when starting the job {ex.Message}", LogLevel.Critical);
            }
        }
        // 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();
            }

            /* app.ApplicationServices.UseSmartSqlSync();
             * app.ApplicationServices.UseSmartSqlSubscriber((syncRequest) =>
             * {
             *  Console.Error.WriteLine(syncRequest.Scope);
             * });*/

            app.UseMvc();



            app.UseHangfireDashboard();
            backgroundJobs.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));


            var manager = new RecurringJobManager();

            manager.AddOrUpdate("hello-world-id", () => Console.WriteLine("Hello World!"), Cron.Minutely());

            app.UseHealthChecks("/healthz", new HealthCheckOptions
            {
                Predicate      = _ => true,
                ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
            })
            .UseHealthChecksUI();

            app.UseSwagger(c => { });
            app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Zema.Sample.AspNetCore"); });
        }
Beispiel #17
0
        // Method creating the time-bound scheduler jobs
        public static void SendEmailDaily()
        {
            GlobalConfiguration.Configuration
            .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
            .UseColouredConsoleLogProvider()
            .UseSimpleAssemblyNameTypeSerializer()
            .UseRecommendedSerializerSettings()
            .UseSqlServerStorage("Server=(localdb)\\MSSQLLocalDB;Database=DBEmailScheduler;Trusted_Connection=True;", new SqlServerStorageOptions
            {
                CommandBatchMaxTimeout       = TimeSpan.FromMinutes(5),
                SlidingInvisibilityTimeout   = TimeSpan.FromMinutes(5),
                QueuePollInterval            = TimeSpan.Zero,
                UseRecommendedIsolationLevel = true,
                UsePageLocksOnDequeue        = true,
                DisableGlobalLocks           = true
            });

            int hourDiff = DateTimeOffset.Now.Offset.Hours;
            int minDiff  = DateTimeOffset.Now.Offset.Minutes;

            var manager = new RecurringJobManager();

            manager.AddOrUpdate("EmailSchedulerDaily", Job.FromExpression(() => EmailSchedulerDailyJob()), Cron.Daily(hourDiff, minDiff));

            using (var server = new BackgroundJobServer())
            {
                Console.ReadLine();
            }
        }
Beispiel #18
0
        public async Task <string> Start()
        {
            var contailers = await _container.GetContainerListAsync(Client);

            var ids = contailers.Select(x => x.ID).ToArray();

            lock ("1")
            {
                foreach (var id in ids)
                {
                    // if (!StaticValue.SENTRY_THREAD.ContainsKey((SentryEnum.Log, id)))
                    //     StaticValue.SENTRY_THREAD.TryAdd(
                    //         (SentryEnum.Log, id),
                    //         _sentry.StartLogs(Client, id, (_, __, ___) =>
                    //         {

                    //         })
                    //     );
                    var job     = Hangfire.Common.Job.FromExpression <ISentry>(x => x.StartStats(id));
                    var manager = new RecurringJobManager(JobStorage.Current);
                    manager.AddOrUpdate($"stats_{id}", job, Cron.Minutely(), TimeZoneInfo.Local);
                }
                _log.LogWarning("Sentry started");
                return("Done");
            }
        }
        public void MultipleServerRunsRecurrentJobs()
        {
            // ARRANGE
            const int serverCount = 20;
            const int workerCount = 20;

            var options = new BackgroundJobServerOptions[serverCount];
            var storage = ConnectionUtils.CreateStorage(new MongoStorageOptions());
            var servers = new BackgroundJobServer[serverCount];

            var jobManagers = new RecurringJobManager[serverCount];

            for (int i = 0; i < serverCount; i++)
            {
                options[i] = new BackgroundJobServerOptions {
                    Queues = new[] { $"queue_options_{i}" }, WorkerCount = workerCount
                };

                servers[i]     = new BackgroundJobServer(options[i], storage);
                jobManagers[i] = new RecurringJobManager(storage);
            }

            try
            {
                // ACT
                for (int i = 0; i < serverCount; i++)
                {
                    var i1         = i;
                    var jobManager = jobManagers[i1];

                    for (int j = 0; j < workerCount; j++)
                    {
                        var j1         = j;
                        var queueIndex = j1 % options[i1].Queues.Length;
                        var queueName  = options[i1].Queues[queueIndex];
                        var job        = Job.FromExpression(() => Console.WriteLine("Setting signal for queue {0}",
                                                                                    queueName));
                        var jobId = $"job:[{i},{j}]";

                        jobManager.AddOrUpdate(jobId, job, Cron.Minutely(), new RecurringJobOptions
                        {
                            QueueName = queueName
                        });
                        jobManager.Trigger(jobId);
                    }
                }

                // let hangfire run for 1 sec
                Task.Delay(1000).Wait();
            }
            finally
            {
                for (int i = 0; i < serverCount; i++)
                {
                    servers[i].SendStop();
                    servers[i].Dispose();
                }
            }
        }
Beispiel #20
0
        public JsonResult AddJob1([FromServices] RecurringJobManager jobManager)
        {
            string id = Guid.NewGuid().ToString("N");

            jobManager.AddOrUpdate(id, () => MyJob.即時任務(null), Cron.Minutely);

            return(Json(new { success = true, id }));
        }
Beispiel #21
0
        protected override void Initialize(HttpControllerContext controllerContext)
        {
            base.Initialize(controllerContext);

            var manager = new RecurringJobManager();

            manager.AddOrUpdate("CheckProductsObsolete", Job.FromExpression(() => CheckProductsObsolete()), Cron.Daily());
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        private static void CreateRecurringJobs(JobBuilderOptions builderOptions)
        {
            var jobManager = new RecurringJobManager(JobStorage.Current);

            builderOptions.JsonFileLocations.Select(GetFileContents)
            .SelectMany(JsonConvert.DeserializeObject <List <RecurringJobInfo> >)
            .ToList()
            .ForEach(x => AddOrUpdateRecurringJob(x, jobManager));
        }
Beispiel #24
0
        public static void SetupJobs()
        {
            var manager = new RecurringJobManager();

            //manager.AddOrUpdate ("email_send", Job.FromExpression (() => EmailSend ()), Cron.Minutely ());
            manager.AddOrUpdate("tabels_create", Job.FromExpression(() => TabelsCreate()), Cron.Daily(0, 5));
            manager.AddOrUpdate("alert_users", Job.FromExpression(() => AlertUsers()), Cron.Monthly(20, 9));
            manager.AddOrUpdate("alert_managers", Job.FromExpression(() => AlertManagers()), Cron.Monthly(25, 9));
        }
Beispiel #25
0
        private void OnStopped()
        {
            var manager = new RecurringJobManager(JobStorage.Current);

            foreach (var item in StaticValue.CONTAINERS)
            {
                manager.RemoveIfExists($"stats_{item.ID}");
            }
            _logger.LogInformation("Sentry stoped");
        }
        public static void ConfigureBackgroundJobs(ISettingManager settingManager)
        {
            var recurringJobManager = new RecurringJobManager();

            recurringJobManager.RemoveIfExists(BackgroundJobNames.Users);
            recurringJobManager.RemoveIfExists(BackgroundJobNames.Veeam);

            ConfigureUsers(recurringJobManager, settingManager);
            ConfigureVeeam(recurringJobManager, settingManager);
        }
Beispiel #27
0
 public TenantedBackgroundJobClient(TraffkGlobalDbContext gdb, ITraffkTenantFinder finder, IJobInfoFinder jobInfoFinder = null, ICurrentUser currentUser = null)
 {
     Inner               = new BackgroundJobClient();
     GDB                 = gdb;
     Finder              = finder;
     CurrentUser         = currentUser;
     RecurringJobManager = new RecurringJobManager();
     TenantId            = Finder.GetTenantIdAsync().ExecuteSynchronously();
     JobInfoFinder       = jobInfoFinder;
 }
        public void Attach(Container container)
        {
            GlobalConfiguration.Configuration.UseActivator(new Activator(container));

            var jobManager = new RecurringJobManager();

            jobManager.AddOrUpdate(
                NotifyParserJob.JobId,
                Job.FromExpression((NotifyParserJob job) => job.Execute()), Cron.Daily(20));
        }
Beispiel #29
0
 public void StopJobs()
 {
     using (var conn = JobStorage.Current.GetConnection())
     {
         var manager = new RecurringJobManager();
         foreach (var job in conn.GetRecurringJobs())
         {
             manager.RemoveIfExists(job.Id);
             //LogManager.Log($"Job has been stopped: {job.Id}", LogLevel.Information);
         }
     }
 }
Beispiel #30
0
        private static void AddRecurringJobs()
        {
            //LogProvider.SetCurrentLogProvider(new ColouredConsoleLogProvider());
            //RecurringJob.AddOrUpdate("ev-min-recur", () => Console.WriteLine("Recurring Background Methods"), Cron.Minutely);
            var jobManager = new RecurringJobManager(new SqlServerStorage("HangfireConnection"));
            Action <HttpContext> expression = PerformJob;
            var job = new Job(expression.Method, HttpContext.Current);

            jobManager.AddOrUpdate("recurring-job-minute",
                                   job,
                                   Cron.Minutely());
            jobManager.Trigger("recurring-job-minute");
        }
        public static void AddRecurringBatchCommand(
            this RouteCollection routes,
            string pathTemplate,
            [NotNull] Action<RecurringJobManager, string> command)
        {
            if (command == null) throw new ArgumentNullException("command");

            routes.AddBatchCommand(pathTemplate, (context, jobId) =>
            {
                var manager = new RecurringJobManager(context.JobStorage);
                command(manager, jobId);
            });
        }