|
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using Quartz;
- using Quartz.Collection;
- using System.Net.Sockets;
- //using ClickForensics.Quartz.Jobs;
- using System.IO;
-
- namespace ClickForensics.Quartz.Manager
- {
- public partial class MainForm : Form
- {
- public MainForm()
- {
- InitializeComponent();
- jobGroupsTreeView.AfterSelect += new TreeViewEventHandler(jobGroupsTreeView_AfterSelect);
- ctxScheduler.Opening += new CancelEventHandler(ctxScheduler_Opening);
- jobGroupsTreeView.MouseDown += new MouseEventHandler(jobGroupsTreeView_MouseDown);
-
- }
-
- void ctxScheduler_Opening(object sender, CancelEventArgs e)
- {
-
- }
-
- void jobGroupsTreeView_AfterSelect(object sender, TreeViewEventArgs e)
- {
- jobDetailsToggle(false);
- if (e.Node is TriggerNode || e.Node is JobNode)
- {
- btnDeleteJob.Enabled = true;
- }
- else
- {
- btnDeleteJob.Enabled = false;
- }
-
- if (e.Node is JobNode)
- {
- btnRunJobNow.Enabled = true;
- pnlDetails.Controls.Add(new NativeJobDetailDisplay(((JobNode)e.Node).Detail));
- jobDetailsToggle(true);
- }
- else
- {
- btnRunJobNow.Enabled = false;
-
- }
- if (e.Node is TriggerNode)
- {
- btnPause.Enabled = true;
- setPauseButtonText();
- if (((TriggerNode)e.Node).Trigger is CronTrigger)
- {
- pnlDetails.Controls.Add(new CronTriggerDisplay((CronTrigger)((TriggerNode)e.Node).Trigger));
- jobDetailsToggle(true);
- }
- btnEdit.Enabled = true;
- }
- else
- {
- btnEdit.Enabled = false;
- btnPause.Enabled = false;
- }
- }
-
- private void setPauseButtonText()
- {
- TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode;
- string name = node.Trigger.Name;
- string group = node.Trigger.Group;
- if (Scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused)
- {
- btnPause.Text = "Resume";
- }
- else
- {
- btnPause.Text = "Pause";
- }
- }
-
- private void connectToolStripMenuItem_Click(object sender, EventArgs e)
- {
- using (ServerConnectForm form = new ServerConnectForm())
- {
- form.ShowDialog();
- try
- {
- Scheduler = new QuartzScheduler(form.Server, form.Port, form.Scheduler);
- serverConnectStatusLabel.Text = string.Format("Connected to {0}", Scheduler.Address);
- connectToolStripMenuItem.Enabled = false;
- jobsToolStripMenuItem.Enabled = true;
- loadJobGroups();
- updateRunningJobs();
- }
- catch (SocketException ex)
- {
- ErrorDialog dialog = new ErrorDialog();
- dialog.Message = string.Format("Unable to connect to scheduler {0} on {1}:{2}", form.Scheduler, form.Server, form.Port);
- dialog.Description = ex.Message;
- dialog.ShowDialog();
- }
- form.Close();
- }
- //loadGlobalTriggers();
- }
-
- //private void loadGlobalTriggers()
- //{
- // foreach (IJobListener jobListener in Scheduler.GetScheduler().GetJobDetail(null,null)..GlobalJobListeners)
- // {
- // globalTriggersListView.Items.Add(jobListener.Name);
- // }
- //}
-
- private void loadJobGroups()
- {
-
- try
- {
- this.Cursor = Cursors.WaitCursor;
-
- jobDetailsToggle(false);
- jobGroupsTreeView.Nodes.Clear();
- SchedulerNode schedulerNode = new SchedulerNode(Scheduler);
- schedulerNode.ContextMenuStrip = ctxScheduler;
- jobGroupsTreeView.Nodes.Add(schedulerNode);
- TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Job Groups");
- string[] jobGroups = Scheduler.GetScheduler().JobGroupNames;
- foreach (string jobGroup in jobGroups)
- {
- TreeNode jobGroupNode = jobGroupsNode.Nodes.Add(jobGroup);
- TreeNode jobsNode = jobGroupNode.Nodes.Add("Jobs");
- addJobNodes(jobsNode);
- }
-
- jobGroupsTreeView.Nodes[0].Expand();
- jobGroupsNode.Expand();
-
- StripStatusLabel_Job_Groups.Text = System.DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss");
-
- }
- finally
- {
- this.Cursor = Cursors.Default;
- }
-
-
- }
-
- private void jobDetailsToggle(System.Boolean isVisible)
- {
- if (isVisible == false)
- {
- pnlDetails.Controls.Clear();
- }
- }
-
- void jobGroupsTreeView_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Right)
- {
- TreeNode node = jobGroupsTreeView.GetNodeAt(e.X, e.Y);
- if (node != null)
- {
- jobGroupsTreeView.SelectedNode = node;
- ctxScheduler.Show(jobGroupsTreeView, e.Location);
- }
- }
- }
- //private void loadJobs()
- //{
- // foreach (TreeNode node in jobGroupsTreeView.Nodes)
- // {
- // addJobNodes(node);
- // }
- //}
-
- private void addJobNodes(TreeNode node)
- {
- string group = node.Parent.Text;
- string[] jobs = Scheduler.GetScheduler().GetJobNames(group);
- foreach (string jobName in jobs)
- {
- try
- {
- JobDetail detail = Scheduler.GetScheduler().GetJobDetail(jobName, group);
- JobNode jobNode = new JobNode(detail);
- node.Nodes.Add(jobNode);
- addTriggerNodes(jobNode);
- addListenerNodes(jobNode);
- }
- catch (Exception ex)
- {
- //TODO: Do something useful with this exception. Most likely cause is the client does not have a copy of a given dll and can't load the type.
- }
- }
- }
-
- private void addListenerNodes(JobNode node)
- {
- string jobName = node.Text;
- string jobGroupName = node.Parent.Text;
- string[] listenerNames = node.Detail.JobListenerNames;
- foreach (string listener in listenerNames)
- {
- node.Text = string.Format("JL {0}", listenerNames);
- }
- //ISet set = Scheduler.GetScheduler().JobListenerNames;
- }
-
- private void addTriggerNodes(TreeNode treeNode)
- {
- Trigger[] triggers = Scheduler.GetScheduler().GetTriggersOfJob(treeNode.Text, treeNode.Parent.Parent.Text);
- TreeNode triggersNode = treeNode.Nodes.Add("Triggers");
- foreach (Trigger trigger in triggers)
- {
- TriggerNode node = new TriggerNode(trigger);
- triggersNode.Nodes.Add(node);
- }
-
- }
- private void updateRunningJobs()
- {
- try
- {
- this.Cursor = Cursors.WaitCursor;
-
- timer_Refresh_Running_Jobs.Stop();
-
- listView_RunningJobs.Items.Clear();
-
- DataTable table = Scheduler.GetRunningJobs();
- foreach (DataRow row in table.Rows)
- {
- //JobName JobDuration
- ListViewItem item = new ListViewItem(new string[] { System.Convert.ToString(row["JobName"]), System.Convert.ToString(row["Runtime"]) });
- listView_RunningJobs.Items.Add(item);
- }
- StripStatusLabel_Jobs_Refresh_date.Text = System.DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss");
-
-
- //reset the timer ( documentation not clear if .stop = restart @ 0 in timing, but changing the interval sure should do that. )
- int timer_was = timer_Refresh_Running_Jobs.Interval;
- timer_Refresh_Running_Jobs.Interval = timer_was + 1;
- timer_Refresh_Running_Jobs.Interval = timer_was;
-
- timer_Refresh_Running_Jobs.Start();
- }
- finally
- {
- this.Cursor = Cursors.Default;
- }
- }
- public QuartzScheduler Scheduler { get; set; }
-
- private void addGlobalListenerToolStripMenuItem_Click(object sender, EventArgs e)
- {
- AddListenerForm form = new AddListenerForm();
- form.ListenerInterface = typeof(IJobListener);
- form.ShowDialog();
- JobDataMap map = new JobDataMap();
- map.Add("type", form.ListenerType);
- //Scheduler.ScheduleOneTimeJob(typeof(AddJobListenerJob), map, 0);
- loadJobGroups();
- }
-
- private void addJobListenerToolStripMenuItem_Click(object sender, EventArgs e)
- {
- TreeNode selectedNode = jobGroupsTreeView.SelectedNode;
- if (selectedNode != null && selectedNode is JobNode)
- {
- AddListenerForm form = new AddListenerForm();
- form.ListenerInterface = typeof(IJobListener);
- form.ShowDialog();
- //JobHistoryListener listener = new JobHistoryListener();
- //listener.Name = null;
- //((JobNode)selectedNode).Detail.AddJobListener();
- }
- }
-
- private void addJobToolStripMenuItem_Click(object sender, EventArgs e)
- {
- AddJobForm form = new AddJobForm();
- form.ShowDialog();
- if (form.JobDetail != null && form.Trigger != null)
- {
- Scheduler.GetScheduler().ScheduleJob(form.JobDetail, form.Trigger);
- loadJobGroups();
- }
- }
-
- private void btnRefreshRunningJobs_Click(object sender, EventArgs e)
- {
- updateRunningJobs();
- }
-
- private void btnRefreshJobGroups_Click(object sender, EventArgs e)
- {
- loadJobGroups();
- }
-
- private void btnRunJobNow_Click(object sender, EventArgs e)
- {
- JobNode node = (JobNode)jobGroupsTreeView.SelectedNode;
- string job = node.Detail.Name;
- string group = node.Detail.Group;
- Scheduler.GetScheduler().TriggerJobWithVolatileTrigger(job, group);
- }
-
- private void btnDeleteJob_Click(object sender, EventArgs e)
- {
- TreeNode selectedNode = jobGroupsTreeView.SelectedNode;
- if (selectedNode is JobNode)
- {
- JobNode node = (JobNode)jobGroupsTreeView.SelectedNode;
- string job = node.Detail.Name;
- string group = node.Detail.Group;
- Scheduler.GetScheduler().DeleteJob(job, group);
- jobGroupsTreeView.SelectedNode.Remove();
-
- }
- if (selectedNode is TriggerNode)
- {
- Scheduler.GetScheduler().UnscheduleJob(((TriggerNode)selectedNode).Trigger.Name, ((TriggerNode)selectedNode).Trigger.Group);
- }
-
- //loadJobGroups();
- }
-
- private void btnPause_Click(object sender, EventArgs e)
- {
- TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode;
- string name = node.Trigger.Name;
- string group = node.Trigger.Group;
- if (Scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused)
- {
- Scheduler.GetScheduler().ResumeTrigger(name, group);
- }
- else
- {
- Scheduler.GetScheduler().PauseTrigger(name, group);
- }
- setPauseButtonText();
- }
-
- private void assembliesToolStripMenuItem_Click(object sender, EventArgs e)
- {
-
- }
-
- private void configureToolStripMenuItem_Click(object sender, EventArgs e)
- {
-
- }
-
- private void btnEdit_Click(object sender, EventArgs e)
- {
- TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode;
- AddJobForm form = new AddJobForm(node);
- form.ShowDialog();
- if (form.JobDetail != null && form.Trigger != null)
- {
- Scheduler.GetScheduler().RescheduleJob(node.Trigger.Name, node.Trigger.Group, form.Trigger);
- loadJobGroups();
- }
- }
-
- private void deleteThemAllToolStripMenuItem_Click(object sender, EventArgs e)
- {
- foreach (var job in Scheduler.GetScheduler().GetJobNames("Cube"))
- {
- if (job.Contains("CreateCubeFor"))
- {
-
- Scheduler.GetScheduler().DeleteJob(job, "Cube");
- }
- }
- }
-
- private void backupToolStripMenuItem_Click(object sender, EventArgs e)
- {
- QuartzScheduler scheduler = ((SchedulerNode)((TreeView)((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl).SelectedNode).Scheduler;
- FileDialog dialog = new SaveFileDialog();
- dialog.ShowDialog();
- FileInfo file = new FileInfo(dialog.FileName);
- scheduler.BackupToFile(file);
- }
-
- private void timer_Refresh_Running_Jobs_Tick(object sender, EventArgs e)
- {
- updateRunningJobs();
- }
-
- private void runningJobsListView_SelectedIndexChanged(object sender, EventArgs e)
- {
-
- }
-
- private void listView_RunningJobs_SelectedIndexChanged(object sender, EventArgs e)
- {
-
- }
- }
- }
|