Alternative web UI (Quartzmin)

3,067 views
Skip to first unread message

Ján Lučanský

unread,
Jan 6, 2019, 4:17:35 PM1/6/19
to Quartz.NET
Hi, and happy new year :) 
don’t know if this is the right place but hope some of you find this useful.

I struggled for a long time to find usable UI to manage jobs and triggers on Quartz.NET. Most advanced right now is probably CrystalQuartz which is amazing for monitoring and scheduling simple Cron based jobs but still, you can do much more with IScheduler API... 
The most crucial for me is to put strongly typed values to JobDataMap and this was impossible with existing UI. So I decided to create new web UI, easily pluggable to existing OWIN or .NET Core app. 
I recently released the first version. Web UI is called Quartzmin. You can find it on NuGet.org and github. 




Cheers

Marko Lahma

unread,
Jan 8, 2019, 12:54:20 AM1/8/19
to Quartz. NET

Looks like great work - complete and eye-candy! It seems that you've implemented things I would have liked to be there already (and pretty much the same way I had planned it!). I haven't had the time to complete the much requested web UI and management API ( https://github.com/quartznet/quartznet/issues/251 ) but seems that there's now a very viable solution for that. If you have interest to make it an official part of Quartz please join the discussion on the issue mentioned above.

Cheers,
Marko



--
You received this message because you are subscribed to the Google Groups "Quartz.NET" group.
To unsubscribe from this group and stop receiving emails from it, send an email to quartznet+...@googlegroups.com.
To post to this group, send email to quar...@googlegroups.com.
Visit this group at https://groups.google.com/group/quartznet.
For more options, visit https://groups.google.com/d/optout.

Marko Lahma

unread,
Jan 8, 2019, 12:58:07 AM1/8/19
to Quartz. NET

And forgot to add, I don't want to undermine the great work done in CrystalQuartz either. These are alternative routes for a reason, but collaboration of course brings concentrated efforts when possible.

Cheers,
Marko

Alexcei Shmakov

unread,
Jan 9, 2019, 2:25:00 AM1/9/19
to quar...@googlegroups.com
Hello,

Ехеcuse me  that I am interrupting your conversation but I want to ask question(may be it is not related with Web UI)

I have tried a Quartzmin functionality. I have successfull ran embedded server from my application. All work good for me.
My question is below

From Web UI I can add, modify jobs and triggers. If I restart my application I will lose all my changes because the jobs and triggers are saved in the RAM.
Can I save the changes to reliable storage, for example to any database?
Maybe I can set up it from Web UI?

Thank you.
 

Ján Lučanský

unread,
Jan 9, 2019, 6:23:03 AM1/9/19
to Quartz.NET
Hi, 
you can configure AdoJobStore following this tutorial: https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/job-stores.html
It is not possible to change job store in runtime. It must be resolved during quartz initialization.

Alexcei Shmakov

unread,
Jan 9, 2019, 7:59:15 AM1/9/19
to quar...@googlegroups.com
Thanks Jan.

ср, 9 янв. 2019 г. в 14:23, Ján Lučanský <luca...@gmail.com>:
--

Terry Harrison

unread,
Jan 10, 2019, 3:14:53 PM1/10/19
to quar...@googlegroups.com
Hi,
I have tried the code above and it looks very interesting. I also tried the AdoJobStore and it is not working for me. I am guessing it has to do with the set up for OWIN. Here is what I am using

public void Configuration(IAppBuilder app)
        {
           
            NameValueCollection properties = new NameValueCollection
            {
                { "quartz.serializer.type", "json" }
            };
            properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";
            properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
            properties["quartz.jobStore.dataSource"] = "default";
            properties["quartz.dataSource.default.connectionString"] = "Server=myserver; Database=mydatabase; User Id=sa; Password=mypwd";
            properties["quartz.dataSource.default.provider"] = "SqlServer";
            properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
            properties["quartz.jobStore.useProperties"] = "true";
            properties["quartz.jobStore.tablePrefix"] = "QRTZ_";

            StdSchedulerFactory factory = new StdSchedulerFactory(properties);
            IScheduler scheduler = factory.GetScheduler().Result;
            //scheduler.Start();

            app.UseQuartzmin(new QuartzminOptions()
            {
                Scheduler = scheduler,
                DefaultDateFormat = "dd.MM.yyyy",
            });


        }

The db has jobs in it and triggers but the plug in dashboard just shows 0. No errors are raised so I am scratching my head. Can you give me any ideas? 
Thanks
Terry Harrison

vse narola

unread,
Jan 11, 2019, 4:37:58 AM1/11/19
to quar...@googlegroups.com
Hi Guys,

I have also one problem regarding multiple server we have and jobs are scheduled from both server and get email twice.

so it is possible to run scheduler once. if we have multiple iis server.

please help us out.

Thanks. 

Ján Lučanský

unread,
Jan 11, 2019, 7:41:49 AM1/11/19
to Quartz.NET
Please update quartzmin to latest version 1.0.2 there was an issue with AdoJobStore and dashboard page.

Terry Harrison

unread,
Jan 11, 2019, 9:41:32 AM1/11/19
to quar...@googlegroups.com
Thanks I have updated to 1.0.2 and still the same issue. The project is a simple OWIN site hosted by IIS. The database connection string works as tested independently so I am not sure what is going on. The job table has jobs but the dashboard shows 0 Jobs. The dashboard shows  Quartz.Impl.StdScheduler, Quartz, Version=3.0.7.0, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4 so it seems correct. One puzzle is that  Job Store Supports Persistence = FALSE. I would think that it should show TRUE. It also does not show any SQL error which I would expect if it can't connect. Not sure what else to look for. 

Terry Harrison

unread,
Jan 11, 2019, 3:02:55 PM1/11/19
to quar...@googlegroups.com
Just a follow up. I still have been unable to make the QuartzWin work with Ado. I built a very simple webapi project and used Quartz directly and the exact configuration from above and the Ado works fine. It is almost as if the dashboard is not looking at the configured instance of Quartz in the QuartzWin package. I really like the implementation of QuartzWin and if you can let me know what to do to fix it I would appreciate it. Thanks. Regards,
Terry

Ján Lučanský

unread,
Jan 11, 2019, 4:19:18 PM1/11/19
to Quartz.NET
I dont have MS SQL available but I configured SQLite persistent AdoJobStore successfully with OWIN.

Web.config:
  <quartz>

   
<add key="quartz.plugin.recentHistory.type" value="Quartz.Plugins.RecentHistory.ExecutionHistoryPlugin, Quartz.Plugins.RecentHistory" />
   
<add key="quartz.plugin.recentHistory.storeType" value="Quartz.Plugins.RecentHistory.Impl.InProcExecutionHistoryStore, Quartz.Plugins.RecentHistory" />
   
<add key="quartz.serializer.type" value="json" />
   
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
   
<add key="quartz.threadPool.threadCount" value="10" />
   
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
   
<add key="quartz.jobStore.misfireThreshold" value="60000" />
   
<add key="quartz.jobStore.dataSource" value="default" />
   
<add key="quartz.jobStore.tablePrefix" value="qrtz_" />
   
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz" />
   
<add key="quartz.dataSource.default.provider" value="SQLite" />
   
<add key="quartz.dataSource.default.connectionString" value="Data Source=E:\WebApplication1\App_Data\quartznet.db;Version=3;" />
 
</quartz>


Startup.cs:
    public class Startup
   
{
       
public void Configuration(IAppBuilder app)
       
{
           
var scheduler = Quartz.Impl.StdSchedulerFactory.GetDefaultScheduler().Result;



            scheduler
.Start();


            app
.UseQuartzmin(new QuartzminOptions()
           
{
               
Scheduler = scheduler,

           
});
       
}
   
}



Btw host quartz in IIS is generally very bad idea.

Ján Lučanský

unread,
Jan 11, 2019, 4:29:45 PM1/11/19
to Quartz.NET

Terry Harrison

unread,
Jan 13, 2019, 7:19:53 PM1/13/19
to quar...@googlegroups.com
Thanks I will give it a try tomorrow. Thanks for the comment on IIS and I am aware of this issue. Our main product has an IIS server that is heavily accessed for authentication but lightly loaded for processing. We have taken steps to insure that it is always on (and tested it to verify) so it would seem it can be used for a scheduling task as well. We are trying to get an IIS based solution up to run tests to support whether it is capable or not. A windows service is on the back burner in the case it fails but the way we deploy our product makes that a non-preferred approach. Thanks for your support and I will let you know how it goes. I was able to get a vanilla implementation using just Quartz running so I have confirmed my data source is working correctly and Quartz can use it. This next step should get me your dashboard I hope. I am also looking at your Web API controller and using that as inspiration for what else we could do for our needs.

Best regards,
Terry

On Fri, Jan 11, 2019 at 4:29 PM Ján Lučanský <luca...@gmail.com> wrote:
--

Kenny Otto

unread,
Feb 7, 2020, 12:56:03 AM2/7/20
to Quartz.NET
I'm new to Quartz and Quartzmin, but I have to say I love the project.  It has worked very well for me, looks great, and easy to use.  I have the jobs and triggers storing to sql server with no problem.  Now that leads me to a question... How to you store history in the database?  I see the QRTZ_FIRED_TRIGGERS table but nothing in it.  Like to save information my history once the app has closed.  Recent history is awesome though!  Any advice would be greatly appreciated.

Twinklekumar Patel

unread,
Jul 31, 2020, 3:18:03 PM7/31/20
to Quartz.NET
Hi Kenny,

Just curious, did you find a solution for storing history, I know this is 1 yr old blog but there were some persistent store written I think in QuartzMin. 

If you would like to share your solution, please thanks. Moreover, while moving to AdoStore, have you face any challenges?

Twinkle
Reply all
Reply to author
Forward
0 new messages