| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
571a22297b | add support for stuck triggers | 14 years ago |
|
|
9d6b7f0c05 | add support for deleting all orphan jobs at once | 14 years ago |
|
|
12b6782203 | update with the latest release information | 15 years ago |
|
|
1c5a798b72 | add support for viewing multiple schedulers. added log4net package | 15 years ago |
|
|
4d7698bf1d | refactor to support multiple schedulers | 15 years ago |
|
|
3ffe4fcc2c | change product name to version 1 | 15 years ago |
|
|
2f9ec2d882 | only show the last server | 15 years ago |
| @@ -80,6 +80,19 @@ | |||
| "PrerequisitesLocation" = "2:1" | |||
| "Url" = "8:" | |||
| "ComponentsUrl" = "8:" | |||
| "Items" | |||
| { | |||
| "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client" | |||
| { | |||
| "Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)" | |||
| "ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client" | |||
| } | |||
| "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" | |||
| { | |||
| "Name" = "8:Windows Installer 3.1" | |||
| "ProductCode" = "8:Microsoft.Windows.Installer.3.1" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| "Release" | |||
| @@ -275,7 +288,7 @@ | |||
| "Product" | |||
| { | |||
| "Name" = "8:Microsoft Visual Studio" | |||
| "ProductName" = "8:Quartz.Net Manager" | |||
| "ProductName" = "8:Quartz.Net-1.0 Manager" | |||
| "ProductCode" = "8:{35E7E363-C413-4BCA-B0D6-1E0D7277F2EB}" | |||
| "PackageCode" = "8:{E292DFAA-0752-4BA9-945D-F33FD0742798}" | |||
| "UpgradeCode" = "8:{41236195-C6AD-462D-934D-034CDFCDB6E0}" | |||
| @@ -812,7 +825,7 @@ | |||
| { | |||
| "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_22F9343A882E45B59179759884B708BD" | |||
| { | |||
| "SourcePath" = "8:..\\ClickForensics.Quartz.Manager\\obj\\Release\\ClickForensics.Quartz.Manager.exe" | |||
| "SourcePath" = "8:..\\ClickForensics.Quartz.Manager\\obj\\Debug\\ClickForensics.Quartz.Manager.exe" | |||
| "TargetName" = "8:" | |||
| "Tag" = "8:" | |||
| "Folder" = "8:_D7658F850B314942942D9354F682D7DA" | |||
| @@ -54,6 +54,9 @@ | |||
| <Reference Include="Common.Logging"> | |||
| <HintPath>..\lib\Common.Logging.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> | |||
| <HintPath>..\packages\log4net.1.2.10\lib\2.0\log4net.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="Quartz"> | |||
| <HintPath>..\lib\Quartz.dll</HintPath> | |||
| </Reference> | |||
| @@ -161,6 +164,10 @@ | |||
| <DesignTime>True</DesignTime> | |||
| </Compile> | |||
| <None Include="app.config" /> | |||
| <None Include="log4net.config"> | |||
| <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||
| </None> | |||
| <None Include="packages.config" /> | |||
| <None Include="Properties\Settings.settings"> | |||
| <Generator>SettingsSingleFileGenerator</Generator> | |||
| <LastGenOutput>Settings.Designer.cs</LastGenOutput> | |||
| @@ -210,11 +217,11 @@ | |||
| </BootstrapperPackage> | |||
| </ItemGroup> | |||
| <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||
| <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
| Other similar extension points exist, see Microsoft.Common.targets. | |||
| <Target Name="BeforeBuild"> | |||
| </Target> | |||
| <Target Name="AfterBuild"> | |||
| </Target> | |||
| <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
| Other similar extension points exist, see Microsoft.Common.targets. | |||
| <Target Name="BeforeBuild"> | |||
| </Target> | |||
| <Target Name="AfterBuild"> | |||
| </Target> | |||
| --> | |||
| </Project> | |||
| @@ -0,0 +1,228 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
| <PropertyGroup> | |||
| <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
| <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||
| <ProductVersion>9.0.30729</ProductVersion> | |||
| <SchemaVersion>2.0</SchemaVersion> | |||
| <ProjectGuid>{D23DACFA-11A1-480E-A6C4-1F37B564523D}</ProjectGuid> | |||
| <OutputType>WinExe</OutputType> | |||
| <AppDesignerFolder>Properties</AppDesignerFolder> | |||
| <RootNamespace>ClickForensics.Quartz.Manager</RootNamespace> | |||
| <AssemblyName>ClickForensics.Quartz.Manager</AssemblyName> | |||
| <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | |||
| <FileAlignment>512</FileAlignment> | |||
| <FileUpgradeFlags> | |||
| </FileUpgradeFlags> | |||
| <OldToolsVersion>3.5</OldToolsVersion> | |||
| <UpgradeBackupLocation /> | |||
| <TargetFrameworkProfile /> | |||
| <PublishUrl>publish\</PublishUrl> | |||
| <Install>true</Install> | |||
| <InstallFrom>Disk</InstallFrom> | |||
| <UpdateEnabled>false</UpdateEnabled> | |||
| <UpdateMode>Foreground</UpdateMode> | |||
| <UpdateInterval>7</UpdateInterval> | |||
| <UpdateIntervalUnits>Days</UpdateIntervalUnits> | |||
| <UpdatePeriodically>false</UpdatePeriodically> | |||
| <UpdateRequired>false</UpdateRequired> | |||
| <MapFileExtensions>true</MapFileExtensions> | |||
| <ApplicationRevision>0</ApplicationRevision> | |||
| <ApplicationVersion>1.0.0.%2a</ApplicationVersion> | |||
| <IsWebBootstrapper>false</IsWebBootstrapper> | |||
| <UseApplicationTrust>false</UseApplicationTrust> | |||
| <BootstrapperEnabled>true</BootstrapperEnabled> | |||
| </PropertyGroup> | |||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||
| <DebugSymbols>true</DebugSymbols> | |||
| <DebugType>full</DebugType> | |||
| <Optimize>false</Optimize> | |||
| <OutputPath>bin\Debug\</OutputPath> | |||
| <DefineConstants>DEBUG;TRACE</DefineConstants> | |||
| <ErrorReport>prompt</ErrorReport> | |||
| <WarningLevel>4</WarningLevel> | |||
| </PropertyGroup> | |||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||
| <DebugType>pdbonly</DebugType> | |||
| <Optimize>true</Optimize> | |||
| <OutputPath>bin\Release\</OutputPath> | |||
| <DefineConstants>TRACE</DefineConstants> | |||
| <ErrorReport>prompt</ErrorReport> | |||
| <WarningLevel>4</WarningLevel> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <Reference Include="Common.Logging"> | |||
| <HintPath>..\lib\Common.Logging.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> | |||
| <HintPath>..\packages\log4net.1.2.10\lib\2.0\log4net.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="Quartz, Version=1.0.3.3, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL"> | |||
| <SpecificVersion>False</SpecificVersion> | |||
| <HintPath>..\..\..\svn\clickforensics\TRUNK\Libraries\Quartz.dll</HintPath> | |||
| </Reference> | |||
| <Reference Include="System" /> | |||
| <Reference Include="System.configuration" /> | |||
| <Reference Include="System.Core"> | |||
| <RequiredTargetFramework>3.5</RequiredTargetFramework> | |||
| </Reference> | |||
| <Reference Include="System.Xml.Linq"> | |||
| <RequiredTargetFramework>3.5</RequiredTargetFramework> | |||
| </Reference> | |||
| <Reference Include="System.Data.DataSetExtensions"> | |||
| <RequiredTargetFramework>3.5</RequiredTargetFramework> | |||
| </Reference> | |||
| <Reference Include="System.Data" /> | |||
| <Reference Include="System.Deployment" /> | |||
| <Reference Include="System.Drawing" /> | |||
| <Reference Include="System.Windows.Forms" /> | |||
| <Reference Include="System.Xml" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Compile Include="AddJobForm.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="AddJobForm.Designer.cs"> | |||
| <DependentUpon>AddJobForm.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="AddListenerForm.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="AddListenerForm.Designer.cs"> | |||
| <DependentUpon>AddListenerForm.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="AssemblyRepository.cs" /> | |||
| <Compile Include="ConnectionInfo.cs" /> | |||
| <Compile Include="DeleteAssembliesForm.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="DeleteAssembliesForm.Designer.cs"> | |||
| <DependentUpon>DeleteAssembliesForm.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="SimpleTriggerDisplay.cs"> | |||
| <SubType>UserControl</SubType> | |||
| </Compile> | |||
| <Compile Include="SimpleTriggerDisplay.Designer.cs"> | |||
| <DependentUpon>SimpleTriggerDisplay.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="ErrorDialog.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="ErrorDialog.Designer.cs"> | |||
| <DependentUpon>ErrorDialog.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="JobType.cs" /> | |||
| <Compile Include="NativeJobDetailDisplay.cs"> | |||
| <SubType>UserControl</SubType> | |||
| </Compile> | |||
| <Compile Include="NativeJobDetailDisplay.Designer.cs"> | |||
| <DependentUpon>NativeJobDetailDisplay.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="JobNode.cs" /> | |||
| <Compile Include="MainForm.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="MainForm.Designer.cs"> | |||
| <DependentUpon>MainForm.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="Program.cs" /> | |||
| <Compile Include="Properties\AssemblyInfo.cs" /> | |||
| <EmbeddedResource Include="AddJobForm.resx"> | |||
| <DependentUpon>AddJobForm.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="AddListenerForm.resx"> | |||
| <DependentUpon>AddListenerForm.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="DeleteAssembliesForm.resx"> | |||
| <DependentUpon>DeleteAssembliesForm.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="SimpleTriggerDisplay.resx"> | |||
| <DependentUpon>SimpleTriggerDisplay.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="CronTriggerDisplay.resx"> | |||
| <DependentUpon>CronTriggerDisplay.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="ErrorDialog.resx"> | |||
| <DependentUpon>ErrorDialog.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="MainForm.resx"> | |||
| <DependentUpon>MainForm.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="NativeJobDetailDisplay.resx"> | |||
| <DependentUpon>NativeJobDetailDisplay.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="Properties\Resources.resx"> | |||
| <Generator>ResXFileCodeGenerator</Generator> | |||
| <LastGenOutput>Resources.Designer.cs</LastGenOutput> | |||
| <SubType>Designer</SubType> | |||
| </EmbeddedResource> | |||
| <EmbeddedResource Include="ServerConnectForm.resx"> | |||
| <DependentUpon>ServerConnectForm.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| <Compile Include="Properties\Resources.Designer.cs"> | |||
| <AutoGen>True</AutoGen> | |||
| <DependentUpon>Resources.resx</DependentUpon> | |||
| <DesignTime>True</DesignTime> | |||
| </Compile> | |||
| <None Include="app.config" /> | |||
| <None Include="log4net.config"> | |||
| <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||
| </None> | |||
| <None Include="packages.config" /> | |||
| <None Include="Properties\Settings.settings"> | |||
| <Generator>SettingsSingleFileGenerator</Generator> | |||
| <LastGenOutput>Settings.Designer.cs</LastGenOutput> | |||
| </None> | |||
| <Compile Include="Properties\Settings.Designer.cs"> | |||
| <AutoGen>True</AutoGen> | |||
| <DependentUpon>Settings.settings</DependentUpon> | |||
| <DesignTimeSharedInput>True</DesignTimeSharedInput> | |||
| </Compile> | |||
| <Compile Include="QuartzScheduler.cs" /> | |||
| <Compile Include="RegistryStore.cs" /> | |||
| <Compile Include="SchedulerNode.cs" /> | |||
| <Compile Include="ServerConnectForm.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="ServerConnectForm.Designer.cs"> | |||
| <DependentUpon>ServerConnectForm.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="CronTriggerDisplay.cs"> | |||
| <SubType>UserControl</SubType> | |||
| </Compile> | |||
| <Compile Include="CronTriggerDisplay.Designer.cs"> | |||
| <DependentUpon>CronTriggerDisplay.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="TriggerNode.cs" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Content Include="JobAssemblies.txt"> | |||
| <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||
| </Content> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> | |||
| <Visible>False</Visible> | |||
| <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> | |||
| <Install>false</Install> | |||
| </BootstrapperPackage> | |||
| <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> | |||
| <Visible>False</Visible> | |||
| <ProductName>.NET Framework 3.5 SP1</ProductName> | |||
| <Install>true</Install> | |||
| </BootstrapperPackage> | |||
| <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> | |||
| <Visible>False</Visible> | |||
| <ProductName>Windows Installer 3.1</ProductName> | |||
| <Install>true</Install> | |||
| </BootstrapperPackage> | |||
| </ItemGroup> | |||
| <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||
| <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
| Other similar extension points exist, see Microsoft.Common.targets. | |||
| <Target Name="BeforeBuild"> | |||
| </Target> | |||
| <Target Name="AfterBuild"> | |||
| </Target> | |||
| --> | |||
| </Project> | |||
| @@ -34,11 +34,9 @@ | |||
| this.connectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.jobsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.addJobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.listenersStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.globalListenersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.addGlobalJobListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.addTriggerListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.addJobListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.jobAssembliesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.addAssemblyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.deleteAssemblyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.statusStrip1 = new System.Windows.Forms.StatusStrip(); | |||
| this.serverConnectStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); | |||
| this.StripStatusLabel_Job_Groups = new System.Windows.Forms.ToolStripStatusLabel(); | |||
| @@ -60,9 +58,7 @@ | |||
| this.listView_RunningJobs = new System.Windows.Forms.ListView(); | |||
| this.JobName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); | |||
| this.JobDuration = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); | |||
| this.jobAssembliesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.addAssemblyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.deleteAssemblyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
| this.mainMenuStrip.SuspendLayout(); | |||
| this.statusStrip1.SuspendLayout(); | |||
| this.ctxScheduler.SuspendLayout(); | |||
| @@ -73,7 +69,6 @@ | |||
| this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
| this.schedulerToolStripMenuItem, | |||
| this.jobsToolStripMenuItem, | |||
| this.listenersStripMenuItem, | |||
| this.jobAssembliesToolStripMenuItem}); | |||
| this.mainMenuStrip.Location = new System.Drawing.Point(0, 0); | |||
| this.mainMenuStrip.Name = "mainMenuStrip"; | |||
| @@ -108,48 +103,32 @@ | |||
| // addJobToolStripMenuItem | |||
| // | |||
| this.addJobToolStripMenuItem.Name = "addJobToolStripMenuItem"; | |||
| this.addJobToolStripMenuItem.Size = new System.Drawing.Size(96, 22); | |||
| this.addJobToolStripMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.addJobToolStripMenuItem.Text = "Add"; | |||
| this.addJobToolStripMenuItem.Click += new System.EventHandler(this.addJobToolStripMenuItem_Click); | |||
| // | |||
| // listenersStripMenuItem | |||
| // | |||
| this.listenersStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
| this.globalListenersToolStripMenuItem, | |||
| this.addJobListenerToolStripMenuItem}); | |||
| this.listenersStripMenuItem.Enabled = false; | |||
| this.listenersStripMenuItem.Name = "listenersStripMenuItem"; | |||
| this.listenersStripMenuItem.Size = new System.Drawing.Size(65, 20); | |||
| this.listenersStripMenuItem.Text = "Listeners"; | |||
| // | |||
| // globalListenersToolStripMenuItem | |||
| // | |||
| this.globalListenersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
| this.addGlobalJobListenerToolStripMenuItem, | |||
| this.addTriggerListenerToolStripMenuItem}); | |||
| this.globalListenersToolStripMenuItem.Name = "globalListenersToolStripMenuItem"; | |||
| this.globalListenersToolStripMenuItem.Size = new System.Drawing.Size(161, 22); | |||
| this.globalListenersToolStripMenuItem.Text = "Global"; | |||
| // | |||
| // addGlobalJobListenerToolStripMenuItem | |||
| // jobAssembliesToolStripMenuItem | |||
| // | |||
| this.addGlobalJobListenerToolStripMenuItem.Name = "addGlobalJobListenerToolStripMenuItem"; | |||
| this.addGlobalJobListenerToolStripMenuItem.Size = new System.Drawing.Size(181, 22); | |||
| this.addGlobalJobListenerToolStripMenuItem.Text = "Add Job Listener"; | |||
| this.addGlobalJobListenerToolStripMenuItem.Click += new System.EventHandler(this.addGlobalListenerToolStripMenuItem_Click); | |||
| this.jobAssembliesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
| this.addAssemblyMenuItem, | |||
| this.deleteAssemblyMenuItem}); | |||
| this.jobAssembliesToolStripMenuItem.Name = "jobAssembliesToolStripMenuItem"; | |||
| this.jobAssembliesToolStripMenuItem.Size = new System.Drawing.Size(99, 20); | |||
| this.jobAssembliesToolStripMenuItem.Text = "Job Assemblies"; | |||
| // | |||
| // addTriggerListenerToolStripMenuItem | |||
| // addAssemblyMenuItem | |||
| // | |||
| this.addTriggerListenerToolStripMenuItem.Name = "addTriggerListenerToolStripMenuItem"; | |||
| this.addTriggerListenerToolStripMenuItem.Size = new System.Drawing.Size(181, 22); | |||
| this.addTriggerListenerToolStripMenuItem.Text = "Add Trigger Listener"; | |||
| this.addAssemblyMenuItem.Name = "addAssemblyMenuItem"; | |||
| this.addAssemblyMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.addAssemblyMenuItem.Text = "Add"; | |||
| this.addAssemblyMenuItem.Click += new System.EventHandler(this.addAssemblyMenuItem_Click); | |||
| // | |||
| // addJobListenerToolStripMenuItem | |||
| // deleteAssemblyMenuItem | |||
| // | |||
| this.addJobListenerToolStripMenuItem.Name = "addJobListenerToolStripMenuItem"; | |||
| this.addJobListenerToolStripMenuItem.Size = new System.Drawing.Size(161, 22); | |||
| this.addJobListenerToolStripMenuItem.Text = "Add Job Listener"; | |||
| this.addJobListenerToolStripMenuItem.Click += new System.EventHandler(this.addJobListenerToolStripMenuItem_Click); | |||
| this.deleteAssemblyMenuItem.Name = "deleteAssemblyMenuItem"; | |||
| this.deleteAssemblyMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.deleteAssemblyMenuItem.Text = "Delete"; | |||
| this.deleteAssemblyMenuItem.Click += new System.EventHandler(this.deleteAssemblyMenuItem_Click); | |||
| // | |||
| // statusStrip1 | |||
| // | |||
| @@ -295,14 +274,15 @@ | |||
| // ctxScheduler | |||
| // | |||
| this.ctxScheduler.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
| this.backupToolStripMenuItem}); | |||
| this.backupToolStripMenuItem, | |||
| this.deleteToolStripMenuItem}); | |||
| this.ctxScheduler.Name = "ctxScheduler"; | |||
| this.ctxScheduler.Size = new System.Drawing.Size(109, 26); | |||
| this.ctxScheduler.Size = new System.Drawing.Size(153, 70); | |||
| // | |||
| // backupToolStripMenuItem | |||
| // | |||
| this.backupToolStripMenuItem.Name = "backupToolStripMenuItem"; | |||
| this.backupToolStripMenuItem.Size = new System.Drawing.Size(108, 22); | |||
| this.backupToolStripMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.backupToolStripMenuItem.Text = "Backup"; | |||
| this.backupToolStripMenuItem.Click += new System.EventHandler(this.backupToolStripMenuItem_Click); | |||
| // | |||
| @@ -333,28 +313,12 @@ | |||
| // | |||
| this.JobDuration.Text = "Duration"; | |||
| // | |||
| // jobAssembliesToolStripMenuItem | |||
| // | |||
| this.jobAssembliesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
| this.addAssemblyMenuItem, | |||
| this.deleteAssemblyMenuItem}); | |||
| this.jobAssembliesToolStripMenuItem.Name = "jobAssembliesToolStripMenuItem"; | |||
| this.jobAssembliesToolStripMenuItem.Size = new System.Drawing.Size(99, 20); | |||
| this.jobAssembliesToolStripMenuItem.Text = "Job Assemblies"; | |||
| // | |||
| // addAssemblyMenuItem | |||
| // | |||
| this.addAssemblyMenuItem.Name = "addAssemblyMenuItem"; | |||
| this.addAssemblyMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.addAssemblyMenuItem.Text = "Add"; | |||
| this.addAssemblyMenuItem.Click += new System.EventHandler(this.addAssemblyMenuItem_Click); | |||
| // deleteToolStripMenuItem | |||
| // | |||
| // deleteAssemblyMenuItem | |||
| // | |||
| this.deleteAssemblyMenuItem.Name = "deleteAssemblyMenuItem"; | |||
| this.deleteAssemblyMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.deleteAssemblyMenuItem.Text = "Delete"; | |||
| this.deleteAssemblyMenuItem.Click += new System.EventHandler(this.deleteAssemblyMenuItem_Click); | |||
| this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; | |||
| this.deleteToolStripMenuItem.Size = new System.Drawing.Size(152, 22); | |||
| this.deleteToolStripMenuItem.Text = "Delete"; | |||
| this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); | |||
| // | |||
| // MainForm | |||
| // | |||
| @@ -396,11 +360,6 @@ | |||
| private System.Windows.Forms.StatusStrip statusStrip1; | |||
| private System.Windows.Forms.ToolStripStatusLabel serverConnectStatusLabel; | |||
| private System.Windows.Forms.TreeView jobGroupsTreeView; | |||
| private System.Windows.Forms.ToolStripMenuItem listenersStripMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem globalListenersToolStripMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem addGlobalJobListenerToolStripMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem addTriggerListenerToolStripMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem addJobListenerToolStripMenuItem; | |||
| private System.Windows.Forms.Label label1; | |||
| private System.Windows.Forms.Label label2; | |||
| private System.Windows.Forms.ToolStripMenuItem jobsToolStripMenuItem; | |||
| @@ -424,6 +383,7 @@ | |||
| private System.Windows.Forms.ToolStripMenuItem jobAssembliesToolStripMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem addAssemblyMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem deleteAssemblyMenuItem; | |||
| private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; | |||
| } | |||
| } | |||
| @@ -12,6 +12,7 @@ using System.Net.Sockets; | |||
| //using ClickForensics.Quartz.Jobs; | |||
| using System.IO; | |||
| using System.Reflection; | |||
| using log4net; | |||
| namespace ClickForensics.Quartz.Manager | |||
| { | |||
| @@ -21,14 +22,7 @@ namespace ClickForensics.Quartz.Manager | |||
| { | |||
| 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) | |||
| @@ -80,9 +74,11 @@ namespace ClickForensics.Quartz.Manager | |||
| private void setPauseButtonText() | |||
| { | |||
| TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| string name = node.Trigger.Name; | |||
| string group = node.Trigger.Group; | |||
| if (Scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused) | |||
| if (scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused) | |||
| { | |||
| btnPause.Text = "Resume"; | |||
| } | |||
| @@ -101,11 +97,10 @@ namespace ClickForensics.Quartz.Manager | |||
| { | |||
| try | |||
| { | |||
| Scheduler = new QuartzScheduler(form.Server, form.Port, form.Scheduler); | |||
| serverConnectStatusLabel.Text = string.Format("Connected to {0}", Scheduler.Address); | |||
| connectToolStripMenuItem.Enabled = false; | |||
| QuartzScheduler scheduler = new QuartzScheduler(form.Server, form.Port, form.Scheduler); | |||
| serverConnectStatusLabel.Text = string.Format("Connected to {0}", scheduler.Address); | |||
| jobsToolStripMenuItem.Enabled = true; | |||
| loadJobGroups(); | |||
| loadJobGroups(scheduler); | |||
| updateRunningJobs(); | |||
| } | |||
| catch (SocketException ex) | |||
| @@ -118,31 +113,26 @@ namespace ClickForensics.Quartz.Manager | |||
| } | |||
| form.Close(); | |||
| } | |||
| //loadGlobalTriggers(); | |||
| } | |||
| //private void loadGlobalTriggers() | |||
| //{ | |||
| // foreach (IJobListener jobListener in Scheduler.GetScheduler().GetJobDetail(null,null)..GlobalJobListeners) | |||
| // { | |||
| // globalTriggersListView.Items.Add(jobListener.Name); | |||
| // } | |||
| //} | |||
| private void loadJobGroups() | |||
| private void loadJobGroups(QuartzScheduler scheduler) | |||
| { | |||
| try | |||
| { | |||
| this.Cursor = Cursors.WaitCursor; | |||
| jobDetailsToggle(false); | |||
| jobGroupsTreeView.Nodes.Clear(); | |||
| SchedulerNode schedulerNode = new SchedulerNode(Scheduler); | |||
| SchedulerNode schedulerNode = new SchedulerNode(scheduler); | |||
| if (jobGroupsTreeView.Nodes.ContainsKey(schedulerNode.Name)) | |||
| { | |||
| jobGroupsTreeView.Nodes.RemoveByKey(schedulerNode.Name); | |||
| } | |||
| schedulerNode.ContextMenuStrip = ctxScheduler; | |||
| jobGroupsTreeView.Nodes.Add(schedulerNode); | |||
| TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Job Groups"); | |||
| string[] jobGroups = Scheduler.GetScheduler().JobGroupNames; | |||
| string[] jobGroups = schedulerNode.Scheduler.GetScheduler().JobGroupNames; | |||
| foreach (string jobGroup in jobGroups) | |||
| { | |||
| TreeNode jobGroupNode = jobGroupsNode.Nodes.Add(jobGroup); | |||
| @@ -162,8 +152,6 @@ namespace ClickForensics.Quartz.Manager | |||
| { | |||
| this.Cursor = Cursors.Default; | |||
| } | |||
| } | |||
| private static void loadCalendars(SchedulerNode schedulerNode) | |||
| @@ -178,12 +166,49 @@ namespace ClickForensics.Quartz.Manager | |||
| private void loadStuckTriggers(SchedulerNode schedulerNode) | |||
| { | |||
| TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Stuck Triggers"); | |||
| TreeNode stuckTriggersNode = schedulerNode.Nodes.Add("Stuck Triggers"); | |||
| var triggerGroupNames = schedulerNode.Scheduler.GetScheduler().TriggerGroupNames; | |||
| foreach (var triggerGroupName in triggerGroupNames) | |||
| { | |||
| var triggerNames = schedulerNode.Scheduler.GetScheduler().GetTriggerNames(triggerGroupName); | |||
| foreach (var triggerName in triggerNames) | |||
| { | |||
| var state = schedulerNode.Scheduler.GetScheduler().GetTriggerState(triggerName, triggerGroupName); | |||
| var trigger = schedulerNode.Scheduler.GetScheduler().GetTrigger(triggerName, triggerGroupName); | |||
| if (state == TriggerState.Complete) | |||
| { | |||
| stuckTriggersNode.Nodes.Add(new TriggerNode(trigger)); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| private void loadOrphanJobs(SchedulerNode schedulerNode) | |||
| { | |||
| TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Orphan Jobs"); | |||
| TreeNode orphanJobsNode = schedulerNode.Nodes.Add("Orphan Jobs"); | |||
| var groupNames = schedulerNode.Scheduler.GetScheduler().JobGroupNames; | |||
| foreach (var jobGroupName in groupNames) | |||
| { | |||
| var jobNames = schedulerNode.Scheduler.GetScheduler().GetJobNames(jobGroupName); | |||
| foreach (var jobName in jobNames) | |||
| { | |||
| try | |||
| { | |||
| var triggers = schedulerNode.Scheduler.GetScheduler().GetTriggersOfJob(jobName, jobGroupName); | |||
| if (triggers.Length == 0) | |||
| { | |||
| orphanJobsNode.Nodes.Add( | |||
| new JobNode(schedulerNode.Scheduler.GetScheduler().GetJobDetail(jobName, jobGroupName))); | |||
| } | |||
| } | |||
| catch (Exception ex) | |||
| { | |||
| _Log.Error("Error loading orphan jobs.", ex); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| private void jobDetailsToggle(bool isVisible) | |||
| @@ -202,27 +227,30 @@ namespace ClickForensics.Quartz.Manager | |||
| if (node != null) | |||
| { | |||
| jobGroupsTreeView.SelectedNode = node; | |||
| if (node.Text == "Orphan Jobs") | |||
| { | |||
| ctxScheduler.Items["deleteToolStripMenuItem"].Enabled = true; | |||
| } | |||
| else | |||
| { | |||
| ctxScheduler.Items["deleteToolStripMenuItem"].Enabled = false; | |||
| } | |||
| 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); | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| string[] jobs = scheduler.GetScheduler().GetJobNames(group); | |||
| foreach (string jobName in jobs) | |||
| { | |||
| try | |||
| { | |||
| JobDetail detail = Scheduler.GetScheduler().GetJobDetail(jobName, group); | |||
| JobDetail detail = scheduler.GetScheduler().GetJobDetail(jobName, group); | |||
| JobNode jobNode = new JobNode(detail); | |||
| node.Nodes.Add(jobNode); | |||
| addTriggerNodes(jobNode); | |||
| @@ -232,10 +260,12 @@ namespace ClickForensics.Quartz.Manager | |||
| { | |||
| node.Nodes.Add(string.Format("Unknown Job Type ({0})", jobName)); | |||
| //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. | |||
| _Log.Error("Error loading jobs.", ex); | |||
| } | |||
| } | |||
| } | |||
| private void addListenerNodes(JobNode node) | |||
| { | |||
| string jobName = node.Text; | |||
| @@ -245,12 +275,13 @@ namespace ClickForensics.Quartz.Manager | |||
| { | |||
| 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); | |||
| QuartzScheduler scheduler = getScheduler(treeNode); | |||
| Trigger[] triggers = scheduler.GetScheduler().GetTriggersOfJob(treeNode.Text, treeNode.Parent.Parent.Text); | |||
| TreeNode triggersNode = treeNode.Nodes.Add("Triggers"); | |||
| foreach (Trigger trigger in triggers) | |||
| { | |||
| @@ -258,7 +289,6 @@ namespace ClickForensics.Quartz.Manager | |||
| triggersNode.Nodes.Add(node); | |||
| addCalendarNode(node); | |||
| } | |||
| } | |||
| private void addCalendarNode(TriggerNode node) | |||
| @@ -283,54 +313,43 @@ namespace ClickForensics.Quartz.Manager | |||
| timer_Refresh_Running_Jobs.Stop(); | |||
| listView_RunningJobs.Items.Clear(); | |||
| DataTable table = Scheduler.GetRunningJobs(); | |||
| foreach (DataRow row in table.Rows) | |||
| List<QuartzScheduler> schedulers = getAllSchedulers(); | |||
| foreach (var quartzScheduler in schedulers) | |||
| { | |||
| //JobName JobDuration | |||
| ListViewItem item = new ListViewItem(new string[] { Convert.ToString(row["JobName"]), Convert.ToString(row["Runtime"]) }); | |||
| listView_RunningJobs.Items.Add(item); | |||
| DataTable table = quartzScheduler.GetRunningJobs(); | |||
| foreach (DataRow row in table.Rows) | |||
| { | |||
| ListViewItem item = new ListViewItem(new string[] { Convert.ToString(row["JobName"]), Convert.ToString(row["Runtime"]) }); | |||
| listView_RunningJobs.Items.Add(item); | |||
| } | |||
| } | |||
| StripStatusLabel_Jobs_Refresh_date.Text = DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); | |||
| StripStatusLabel_Jobs_Refresh_date.Text = 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(); | |||
| } | |||
| catch (Exception ex) | |||
| { | |||
| _Log.Error("Unable to load running jobs", ex); | |||
| } | |||
| finally | |||
| { | |||
| this.Cursor = Cursors.Default; | |||
| } | |||
| } | |||
| public QuartzScheduler Scheduler { get; set; } | |||
| private void addGlobalListenerToolStripMenuItem_Click(object sender, EventArgs e) | |||
| private List<QuartzScheduler> getAllSchedulers() | |||
| { | |||
| 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) | |||
| List<QuartzScheduler> schedulers = new List<QuartzScheduler>(); | |||
| foreach (var node in jobGroupsTreeView.Nodes) | |||
| { | |||
| AddListenerForm form = new AddListenerForm(); | |||
| form.ListenerInterface = typeof(IJobListener); | |||
| form.ShowDialog(); | |||
| //JobHistoryListener listener = new JobHistoryListener(); | |||
| //listener.Name = null; | |||
| //((JobNode)selectedNode).Detail.AddJobListener(); | |||
| schedulers.Add(((SchedulerNode)node).Scheduler); | |||
| } | |||
| return schedulers; | |||
| } | |||
| private void addJobToolStripMenuItem_Click(object sender, EventArgs e) | |||
| @@ -339,11 +358,18 @@ namespace ClickForensics.Quartz.Manager | |||
| form.ShowDialog(); | |||
| if (form.JobDetail != null && form.Trigger != null) | |||
| { | |||
| Scheduler.GetScheduler().ScheduleJob(form.JobDetail, form.Trigger); | |||
| loadJobGroups(); | |||
| QuartzScheduler scheduler = getSelectedScheduler(); | |||
| scheduler.GetScheduler().ScheduleJob(form.JobDetail, form.Trigger); | |||
| loadJobGroups(scheduler); | |||
| } | |||
| } | |||
| private QuartzScheduler getSelectedScheduler() | |||
| { | |||
| TreeNode node = jobGroupsTreeView.SelectedNode; | |||
| return getScheduler(node); | |||
| } | |||
| private void btnRefreshRunningJobs_Click(object sender, EventArgs e) | |||
| { | |||
| updateRunningJobs(); | |||
| @@ -351,15 +377,21 @@ namespace ClickForensics.Quartz.Manager | |||
| private void btnRefreshJobGroups_Click(object sender, EventArgs e) | |||
| { | |||
| loadJobGroups(); | |||
| List<QuartzScheduler> schedulers = getAllSchedulers(); | |||
| foreach (var quartzScheduler in schedulers) | |||
| { | |||
| loadJobGroups(quartzScheduler); | |||
| } | |||
| } | |||
| private void btnRunJobNow_Click(object sender, EventArgs e) | |||
| { | |||
| JobNode node = (JobNode)jobGroupsTreeView.SelectedNode; | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| string job = node.Detail.Name; | |||
| string group = node.Detail.Group; | |||
| Scheduler.GetScheduler().TriggerJobWithVolatileTrigger(job, group); | |||
| scheduler.GetScheduler().TriggerJobWithVolatileTrigger(job, group); | |||
| } | |||
| private void btnDeleteJob_Click(object sender, EventArgs e) | |||
| @@ -368,45 +400,59 @@ namespace ClickForensics.Quartz.Manager | |||
| if (selectedNode is JobNode) | |||
| { | |||
| JobNode node = (JobNode)jobGroupsTreeView.SelectedNode; | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| string job = node.Detail.Name; | |||
| string group = node.Detail.Group; | |||
| Scheduler.GetScheduler().DeleteJob(job, group); | |||
| scheduler.GetScheduler().DeleteJob(job, group); | |||
| jobGroupsTreeView.SelectedNode.Remove(); | |||
| } | |||
| if (selectedNode is TriggerNode) | |||
| { | |||
| Scheduler.GetScheduler().UnscheduleJob(((TriggerNode)selectedNode).Trigger.Name, ((TriggerNode)selectedNode).Trigger.Group); | |||
| } | |||
| TriggerNode node = (TriggerNode)selectedNode; | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| //loadJobGroups(); | |||
| scheduler.GetScheduler().UnscheduleJob(node.Trigger.Name, ((TriggerNode)selectedNode).Trigger.Group); | |||
| selectedNode.Remove(); | |||
| } | |||
| } | |||
| private void btnPause_Click(object sender, EventArgs e) | |||
| { | |||
| TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| string name = node.Trigger.Name; | |||
| string group = node.Trigger.Group; | |||
| if (Scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused) | |||
| if (scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused) | |||
| { | |||
| Scheduler.GetScheduler().ResumeTrigger(name, group); | |||
| scheduler.GetScheduler().ResumeTrigger(name, group); | |||
| } | |||
| else | |||
| { | |||
| Scheduler.GetScheduler().PauseTrigger(name, group); | |||
| scheduler.GetScheduler().PauseTrigger(name, group); | |||
| } | |||
| setPauseButtonText(); | |||
| } | |||
| private QuartzScheduler getScheduler(TreeNode node) | |||
| { | |||
| if (node is SchedulerNode) | |||
| { | |||
| return ((SchedulerNode)node).Scheduler; | |||
| } | |||
| return getScheduler(node.Parent); | |||
| } | |||
| private void btnEdit_Click(object sender, EventArgs e) | |||
| { | |||
| TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; | |||
| QuartzScheduler scheduler = getScheduler(node); | |||
| 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(); | |||
| scheduler.GetScheduler().RescheduleJob(node.Trigger.Name, node.Trigger.Group, form.Trigger); | |||
| loadJobGroups(scheduler); | |||
| } | |||
| } | |||
| @@ -442,5 +488,21 @@ namespace ClickForensics.Quartz.Manager | |||
| form.Close(); | |||
| } | |||
| } | |||
| private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | |||
| private void deleteToolStripMenuItem_Click(object sender, EventArgs e) | |||
| { | |||
| QuartzScheduler scheduler = ((SchedulerNode)((TreeView)((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl).SelectedNode.Parent).Scheduler; | |||
| var node = ((TreeView)((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl).SelectedNode; | |||
| foreach (var item in node.Nodes) | |||
| { | |||
| if (item is JobNode) | |||
| { | |||
| scheduler.GetScheduler().DeleteJob(((JobNode)item).Detail.Name, ((JobNode)item).Detail.Group); | |||
| node.Nodes.Remove((JobNode)item); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -1,21 +1,24 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Windows.Forms; | |||
| namespace ClickForensics.Quartz.Manager | |||
| { | |||
| static class Program | |||
| { | |||
| /// <summary> | |||
| /// The main entry point for the application. | |||
| /// </summary> | |||
| [STAThread] | |||
| static void Main() | |||
| { | |||
| Application.EnableVisualStyles(); | |||
| Application.SetCompatibleTextRenderingDefault(false); | |||
| Application.Run(new MainForm()); | |||
| } | |||
| } | |||
| } | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.IO; | |||
| using System.Linq; | |||
| using System.Windows.Forms; | |||
| using log4net.Config; | |||
| namespace ClickForensics.Quartz.Manager | |||
| { | |||
| static class Program | |||
| { | |||
| /// <summary> | |||
| /// The main entry point for the application. | |||
| /// </summary> | |||
| [STAThread] | |||
| static void Main() | |||
| { | |||
| XmlConfigurator.Configure(new FileInfo("log4net.config")); | |||
| Application.EnableVisualStyles(); | |||
| Application.SetCompatibleTextRenderingDefault(false); | |||
| Application.Run(new MainForm()); | |||
| } | |||
| } | |||
| } | |||
| @@ -11,6 +11,8 @@ using System.Collections; | |||
| using System.Windows.Forms; | |||
| using System.IO; | |||
| using System.Xml.Linq; | |||
| using log4net; | |||
| using System.Reflection; | |||
| namespace ClickForensics.Quartz.Manager | |||
| { | |||
| @@ -25,8 +27,9 @@ namespace ClickForensics.Quartz.Manager | |||
| { | |||
| _scheduler = _schedulerFactory.GetScheduler(); | |||
| } | |||
| catch (SchedulerException) | |||
| catch (SchedulerException ex) | |||
| { | |||
| _Log.Error(string.Format("Unable to connect to scheduler {0}", Address), ex); | |||
| MessageBox.Show("Unable to connect to the specified server", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); | |||
| } | |||
| } | |||
| @@ -34,7 +37,7 @@ namespace ClickForensics.Quartz.Manager | |||
| private NameValueCollection getProperties(string address) | |||
| { | |||
| NameValueCollection properties = new NameValueCollection(); | |||
| properties["quartz.scheduler.instanceName"] = "RemoteClient"; | |||
| properties["quartz.scheduler.instanceName"] = "RemoteClient"+DateTime.Now.ToString("yyyyMMddHHmmss"); | |||
| properties["quartz.scheduler.proxy"] = "true"; | |||
| properties["quartz.threadPool.threadCount"] = "0"; | |||
| properties["quartz.scheduler.proxy.address"] = address; | |||
| @@ -137,6 +140,7 @@ namespace ClickForensics.Quartz.Manager | |||
| catch (Exception ex) | |||
| { | |||
| //TODO: Let the user know we couldn't load the running jobs. | |||
| _Log.Error("Error loading running jobs.", ex); | |||
| } | |||
| return table; | |||
| @@ -307,5 +311,6 @@ namespace ClickForensics.Quartz.Manager | |||
| ); | |||
| return simpleTrigger; | |||
| } | |||
| private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | |||
| } | |||
| } | |||
| @@ -27,7 +27,7 @@ namespace ClickForensics.Quartz.Manager | |||
| return lastConnections; | |||
| } | |||
| for (int i = 0; i < 5; i++) | |||
| for (int i = 0; i < 1; i++) | |||
| { | |||
| ConnectionInfo info = ConnectionInfo.Parse((key.GetValue(string.Format("connection{0}", i), null) as string)); | |||
| if (info != null) | |||
| @@ -1,20 +1,21 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Windows.Forms; | |||
| namespace ClickForensics.Quartz.Manager | |||
| { | |||
| public class SchedulerNode : TreeNode | |||
| { | |||
| public SchedulerNode(QuartzScheduler scheduler) | |||
| : base() | |||
| { | |||
| this.Text = scheduler.Address; | |||
| Scheduler = scheduler; | |||
| } | |||
| public QuartzScheduler Scheduler { get; private set; } | |||
| } | |||
| } | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Windows.Forms; | |||
| namespace ClickForensics.Quartz.Manager | |||
| { | |||
| public class SchedulerNode : TreeNode | |||
| { | |||
| public SchedulerNode(QuartzScheduler scheduler) | |||
| : base() | |||
| { | |||
| this.Text = scheduler.Address; | |||
| Scheduler = scheduler; | |||
| Name = this.Scheduler.Address; | |||
| } | |||
| public QuartzScheduler Scheduler { get; private set; } | |||
| } | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <log4net> | |||
| <appender name="Console" type="log4net.Appender.ConsoleAppender"> | |||
| <layout type="log4net.Layout.PatternLayout"> | |||
| <conversionPattern value="%date %5level %logger - %message%newline" /> | |||
| </layout> | |||
| </appender> | |||
| <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> | |||
| <file value="Manager.log" /> | |||
| <appendToFile value="true" /> | |||
| <maximumFileSize value="10000KB" /> | |||
| <maxSizeRollBackups value="-1" /> | |||
| <countDirection value="1"/> | |||
| <layout type="log4net.Layout.PatternLayout"> | |||
| <conversionPattern value="%date %property{pid} %level %logger - %message%newline" /> | |||
| </layout> | |||
| </appender> | |||
| <root> | |||
| <level value="INFO" /> | |||
| <appender-ref ref="Console" /> | |||
| <appender-ref ref="RollingFile" /> | |||
| </root> | |||
| </log4net> | |||
| @@ -0,0 +1,4 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <packages> | |||
| <package id="log4net" version="1.2.10" /> | |||
| </packages> | |||
| @@ -1,8 +1,8 @@ | |||
| GETTING STARTED | |||
| We don't have an installer or binary release yet, so for now you will have to download the source code, build it and run it. | |||
| Visit the downloads section to obtain the latest version of Quartz.Net Manager. You can now download a zipped version as well as an MSI installer. | |||
| CUSTOM JOBS | |||
| You must let the program know which assemblies contain your jobs. You do so by editing the JobAssemblies.txt file and adding your assemblies there. Only jobs from the assemblies listed in that file will get loaded. | |||
| You must let the program know which assemblies contain your jobs. You do so by editing the JobAssemblies.txt file and adding your assemblies there. Only jobs from the assemblies listed in that file will get loaded. Alternatively, select the Assemblies menu option from the Quartz.Net Manager menu and add the assemblies there. | |||
| LICENSE | |||
| This code is released under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html). | |||
| @@ -0,0 +1,4 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <repositories> | |||
| <repository path="..\ClickForensics.Quartz.Manager\packages.config" /> | |||
| </repositories> | |||