diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/Config.wxi b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Config.wxi new file mode 100644 index 00000000..8265cb6f --- /dev/null +++ b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Config.wxi @@ -0,0 +1,6 @@ + + + + + + diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/License.rtf b/WebsitePanel.Installer/Sources/Setup.SchedulerService/License.rtf new file mode 100644 index 00000000..8f1b4211 Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/License.rtf differ diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/Product.wxs b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Product.wxs new file mode 100644 index 00000000..f66dd59c --- /dev/null +++ b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Product.wxs @@ -0,0 +1,132 @@ + + + + + + + + + + + bannrbmp + + + + + + + + + + + + + + + + + 1 + + + 1 + CORRECTCONNECTION = "0" + CORRECTCONNECTION = "1" + + + 1 + + + + + + + + + + + + + + + + + + AUTHENTICATIONTYPE = "Windows Authentication" + NOT(AUTHENTICATIONTYPE = "Windows Authentication") + + + + + + + + + 1 + + + Connection not valid. + + + + + 1 + + + 1 + + + 1 + + + + + + + + + + + LicenseAccepted = "1" + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/Setup.SchedulerService.wixproj b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Setup.SchedulerService.wixproj new file mode 100644 index 00000000..12733ad4 --- /dev/null +++ b/WebsitePanel.Installer/Sources/Setup.SchedulerService/Setup.SchedulerService.wixproj @@ -0,0 +1,52 @@ + + + + Debug + x86 + 3.7 + {ead7c528-ea3d-40e8-9688-9f1d8dc8d758} + 2.0 + Setup.SchedulerService + Package + $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets + + + bin\ + obj\$(Configuration)\ + Debug;BUILD=debug + False + + + + + + + + + bin\$(Configuration)\ + obj\$(Configuration)\ + BUILD=release + + + + + + + + + + ..\..\..\tools\WIX\WixUIExtension.dll + WixUIExtension + + + + + \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/WebSitePanel.ico b/WebsitePanel.Installer/Sources/Setup.SchedulerService/WebSitePanel.ico new file mode 100644 index 00000000..bf9c0b86 Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/WebSitePanel.ico differ diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp b/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp new file mode 100644 index 00000000..9ac7e922 Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp differ diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp b/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp new file mode 100644 index 00000000..dbf9959b Binary files /dev/null and b/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp differ diff --git a/WebsitePanel.Installer/Sources/VersionInfo.cs b/WebsitePanel.Installer/Sources/VersionInfo.cs index 8ca7c4b0..aa59da61 100644 --- a/WebsitePanel.Installer/Sources/VersionInfo.cs +++ b/WebsitePanel.Installer/Sources/VersionInfo.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18010 +// Runtime Version:4.0.30319.18033 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln index 8253af7f..6ded8966 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 2010 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{129305D5-A9E6-4DCE-BFF6-41809E13EEEE}" ProjectSection(SolutionItems) = preProject ..\..\WebsitePanel\build.xml = ..\..\WebsitePanel\build.xml @@ -24,6 +24,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Installer.Core EndProject Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.WIX", "Setup.WIX\Setup.WIX.wixproj", "{F963A4AF-CC72-4512-B636-829345C35318}" EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.SchedulerService", "Setup.SchedulerService\Setup.SchedulerService.wixproj", "{EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.SchedulerServiceInstaller", "WebsitePanel.SchedulerServiceInstaller\WebsitePanel.SchedulerServiceInstaller.csproj", "{24A4C231-73A9-4F03-ABAD-9A8FE5324495}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -96,6 +100,26 @@ Global {F963A4AF-CC72-4512-B636-829345C35318}.Release|Mixed Platforms.Build.0 = Release|x86 {F963A4AF-CC72-4512-B636-829345C35318}.Release|x86.ActiveCfg = Release|x86 {F963A4AF-CC72-4512-B636-829345C35318}.Release|x86.Build.0 = Release|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|Any CPU.ActiveCfg = Debug|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|x86.ActiveCfg = Debug|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Debug|x86.Build.0 = Debug|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|Any CPU.ActiveCfg = Release|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|Mixed Platforms.Build.0 = Release|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|x86.ActiveCfg = Release|x86 + {EAD7C528-EA3D-40E8-9688-9F1D8DC8D758}.Release|x86.Build.0 = Release|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|Any CPU.ActiveCfg = Debug|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|x86.ActiveCfg = Debug|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Debug|x86.Build.0 = Debug|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Any CPU.ActiveCfg = Release|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.Build.0 = Release|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.ActiveCfg = Release|x86 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.config b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.config new file mode 100644 index 00000000..233c44d7 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs new file mode 100644 index 00000000..9dbf7fc3 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs @@ -0,0 +1,142 @@ +using System; +using System.Configuration.Install; +using System.Data; +using System.Data.SqlClient; +using System.IO; +using System.Linq; +using System.ServiceProcess; +using System.Text.RegularExpressions; +using Microsoft.Deployment.WindowsInstaller; + +namespace WebsitePanel.SchedulerServiceInstaller +{ + public class CustomActions + { + [CustomAction] + public static ActionResult CheckConnection(Session session) + { + string testConnectionString = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], "master") : GetConnectionString(session["SERVERNAME"], "master", session["LOGIN"], session["PASSWORD"]); + + if (CheckConnection(testConnectionString)) + { + session["CORRECTCONNECTION"] = "1"; + session["CONNECTIONSTRING"] = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], session["DATABASENAME"]) : GetConnectionString(session["SERVERNAME"], session["DATABASENAME"], session["LOGIN"], session["PASSWORD"]); + } + else + { + session["CORRECTCONNECTION"] = "0"; + } + + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult FinalizeInstall(Session session) + { + ChangeConfigString("installer.connectionstring", session["CONNECTIONSTRING"], session["INSTALLFOLDER"]); + ChangeCryptoKey(session["INSTALLFOLDER"]); + InstallService(session["INSTALLFOLDER"]); + + return ActionResult.Success; + } + + private static void InstallService(string installFolder) + { + try + { + if (!ServiceController.GetServices().Any(s => s.DisplayName.Equals("WebsitePanel Scheduler", StringComparison.CurrentCultureIgnoreCase))) + { + ManagedInstallerClass.InstallHelper(new[] {"/i", Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe")}); + } + + StartService("WebsitePanel Scheduler"); + } + catch (Exception) + { + } + } + + private static void ChangeCryptoKey(string installFolder) + { + string path = Path.Combine(installFolder.Replace("SchedulerService", "Enterprise Server"), "web.config"); + string cryptoKey = "0123456789"; + + if (File.Exists(path)) + { + using (var reader = new StreamReader(path)) + { + string content = reader.ReadToEnd(); + var pattern = new Regex(@"(?<=)"); + Match match = pattern.Match(content); + cryptoKey = match.Value; + } + } + + ChangeConfigString("installer.cryptokey", cryptoKey, installFolder); + } + + private static void ChangeConfigString(string searchString, string replaceValue, string installFolder) + { + string content; + string path = Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe.config"); + + using (var reader = new StreamReader(path)) + { + content = reader.ReadToEnd(); + } + + var re = new Regex("\\$\\{" + searchString + "\\}+", RegexOptions.IgnoreCase); + content = re.Replace(content, replaceValue); + + using (var writer = new StreamWriter(path)) + { + writer.Write(content); + } + } + + private static void StartService(string serviceName) + { + var sc = new ServiceController(serviceName); + + if (sc.Status == ServiceControllerStatus.Stopped) + { + sc.Start(); + sc.WaitForStatus(ServiceControllerStatus.Running); + } + } + + private static string GetConnectionString(string serverName, string databaseName) + { + return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName); + } + + private static string GetConnectionString(string serverName, string databaseName, string login, string password) + { + return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password); + } + + private static bool CheckConnection(string connectionString) + { + var connection = new SqlConnection(connectionString); + bool result = true; + + try + { + connection.Open(); + } + catch (Exception) + { + result = false; + } + finally + { + if (connection != null && connection.State == ConnectionState.Open) + { + connection.Close(); + } + } + + return result; + } + } +} \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/Properties/AssemblyInfo.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..222e3d9d --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WebsitePanel.SchedulerServiceInstaller")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WebsitePanel.SchedulerServiceInstaller")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("64885563-cef3-4553-9006-31282c033b3b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/WebsitePanel.SchedulerServiceInstaller.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/WebsitePanel.SchedulerServiceInstaller.csproj new file mode 100644 index 00000000..22f11548 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/WebsitePanel.SchedulerServiceInstaller.csproj @@ -0,0 +1,52 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {24A4C231-73A9-4F03-ABAD-9A8FE5324495} + Library + Properties + WebsitePanel.SchedulerServiceInstaller + WebsitePanel.SchedulerServiceInstaller + v4.0 + 512 + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets + + + true + full + false + ..\Setup.SchedulerService\bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\Setup.SchedulerService\bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs index 6952cf21..51032a44 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs @@ -28,6 +28,9 @@ using System; using System.Collections.Generic; +using System.Configuration.Install; +using System.Linq; +using System.ServiceProcess; using System.Text; using System.IO; using System.Xml; @@ -97,7 +100,7 @@ namespace WebsitePanel.Setup.Actions throw; } } - } + } public class CreateDatabaseAction : Action, IInstallAction, IUninstallAction { @@ -347,7 +350,7 @@ namespace WebsitePanel.Setup.Actions Log.WriteEnd(String.Format("Updated {0} file", vars.ConfigurationFile)); } } - + public class SaveEntServerConfigSettingsAction : Action, IInstallAction { void IInstallAction.Run(SetupVariables vars) @@ -390,7 +393,7 @@ namespace WebsitePanel.Setup.Actions new UpdateServeradminPasswAction(), new SaveAspNetDbConnectionStringAction(), new SaveComponentConfigSettingsAction(), - new SaveEntServerConfigSettingsAction() + new SaveEntServerConfigSettingsAction() }; public EntServerActionManager(SetupVariables sessionVars) : base(sessionVars) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs index 52affc1e..819105d6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs @@ -76,7 +76,7 @@ namespace WebsitePanel.Setup public const string DatabaseName = "DatabaseName"; public const string ConnectionString = "ConnectionString"; public const string InstallConnectionString = "InstallConnectionString"; - public const string Release = "Release"; + public const string Release = "Release"; } public abstract class Messages diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj index 6b9d839d..f8a058bc 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/WebsitePanel.Setup.csproj @@ -74,6 +74,7 @@ + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs index f9e34dfa..cd65881d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs @@ -27,11 +27,14 @@ // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using System; +using System.Configuration.Install; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; +using System.Linq; +using System.ServiceProcess; using System.Text; using System.Threading; using System.Windows.Forms; @@ -208,17 +211,19 @@ namespace WebsitePanel.Setup Log.WriteError("Windows service stop error", ex); } - int exitCode = Utils.RunProcess(path, "/u"); - if (exitCode == 0) - { - Log.WriteEnd("Removed Windows service"); - InstallLog.AppendLine(string.Format("- Removed \"{0}\" Windows service", serviceName)); - } - else - { - Log.WriteError(string.Format("Unable to remove \"{0}\" Windows service. Error code: {1}", serviceName, exitCode), null); - InstallLog.AppendLine(string.Format("- Failed to remove \"{0}\" Windows service", serviceName)); - } + try + { + ManagedInstallerClass.InstallHelper(new[] {"/u", path}); + } + catch(Exception) + { + Log.WriteError(string.Format("Unable to remove \"{0}\" Windows service.", serviceName), null); + InstallLog.AppendLine(string.Format("- Failed to remove \"{0}\" Windows service", serviceName)); + throw; + } + + Log.WriteEnd("Removed Windows service"); + InstallLog.AppendLine(string.Format("- Removed \"{0}\" Windows service", serviceName)); } catch (Exception ex) { @@ -268,7 +273,7 @@ namespace WebsitePanel.Setup internal List GetUninstallActions(string componentId) { - List list = new List(); + var list = new List(); InstallAction action = null; //windows service @@ -283,8 +288,7 @@ namespace WebsitePanel.Setup action.Description = "Removing Windows service..."; action.Log = string.Format("- Remove {0} Windows service", serviceName); list.Add(action); - } - + } //database bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase"); diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 844b8a6f..d4a8755c 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -450,41 +450,993 @@ INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName] VALUES (1401, 41, N'Lync2013', N'Microsoft Lync Server 2013 Multitenant Hosting Pack', N'WebsitePanel.Providers.HostedSolution.Lync2013, WebsitePanel.Providers.HostedSolution.Lync2013', N'Lync', NULL) END GO - -- add Application Pools Restart Quota INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (411, 2, 13, N'Web.AppPoolsRestart', N'Application Pools Restart', 1, 0, NULL, NULL) GO +-------------------------------- Scheduler Service------------------------------------------------------ - -IF NOT EXISTS (SELECT * FROM [dbo].[ResourceGroups] WHERE [GroupName] = 'Remote Desktop Services') -BEGIN -INSERT [dbo].[ResourceGroups] ([GroupID], [GroupName], [GroupOrder], [GroupController], [ShowGroup]) VALUES (43, N'RemoteDesktopServices', 24, N'WebsitePanel.EnterpriseServer.RemoteDesktopServicesController', 1) -END +IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = 'Schedule' + AND COLUMN_NAME = 'LastFinish') +ALTER TABLE Schedule +DROP COLUMN LastFinish GO -IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Remote Desktop Windows 2012') -BEGIN -INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES(500, 43, N'RemoteDesktop2012', N'Remote Desktop Services Windows 2012', N'WebsitePanel.Providers.RemoteDesktopServices.Windows2012, WebsitePanel.Providers.RemoteDesktopServices.Windows2012', N'RemoteDesktopServices', 1) -END -ELSE -BEGIN -UPDATE [dbo].[Providers] SET [DisableAutoDiscovery] = NULL WHERE [DisplayName] = 'Remote Desktop Windows 2012' -END +ALTER PROCEDURE [dbo].[GetSchedule] +( + @ActorID int, + @ScheduleID int +) +AS + +-- select schedule +SELECT TOP 1 + S.ScheduleID, + S.TaskID, + S.PackageID, + S.ScheduleName, + S.ScheduleTypeID, + S.Interval, + S.FromTime, + S.ToTime, + S.StartTime, + S.LastRun, + S.NextRun, + S.Enabled, + S.HistoriesNumber, + S.PriorityID, + S.MaxExecutionTime, + S.WeekMonthDay, + 1 AS StatusID +FROM Schedule AS S +WHERE + S.ScheduleID = @ScheduleID + AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1 + +-- select task +SELECT + ST.TaskID, + ST.TaskType, + ST.RoleID +FROM Schedule AS S +INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID +WHERE + S.ScheduleID = @ScheduleID + AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1 + +-- select schedule parameters +SELECT + S.ScheduleID, + STP.ParameterID, + STP.DataTypeID, + ISNULL(SP.ParameterValue, STP.DefaultValue) AS ParameterValue +FROM Schedule AS S +INNER JOIN ScheduleTaskParameters AS STP ON S.TaskID = STP.TaskID +LEFT OUTER JOIN ScheduleParameters AS SP ON STP.ParameterID = SP.ParameterID AND SP.ScheduleID = S.ScheduleID +WHERE + S.ScheduleID = @ScheduleID + AND dbo.CheckActorPackageRights(@ActorID, S.PackageID) = 1 + +RETURN GO -IF NOT EXISTS (SELECT * FROM [dbo].[ResourceGroups] WHERE [GroupName] = 'Enterprise Storage') -BEGIN -INSERT [dbo].[ResourceGroups] ([GroupID], [GroupName], [GroupOrder], [GroupController], [ShowGroup]) VALUES (44, N'EnterpriseStorage', 25, N'WebsitePanel.EnterpriseServer.EnterpriseStorageController', 1) -END +ALTER PROCEDURE [dbo].[GetScheduleInternal] +( + @ScheduleID int +) +AS + +-- select schedule +SELECT + S.ScheduleID, + S.TaskID, + ST.TaskType, + ST.RoleID, + S.PackageID, + S.ScheduleName, + S.ScheduleTypeID, + S.Interval, + S.FromTime, + S.ToTime, + S.StartTime, + S.LastRun, + S.NextRun, + S.Enabled, + 1 AS StatusID, + S.PriorityID, + S.HistoriesNumber, + S.MaxExecutionTime, + S.WeekMonthDay +FROM Schedule AS S +INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID +WHERE ScheduleID = @ScheduleID +RETURN GO -IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Enterprise Storage Windows 2012') -BEGIN -INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES(600, 44, N'EnterpriseStorage2012', N'Enterprise Storage Windows 2012', N'WebsitePanel.Providers.EnterpriseStorage.Windows2012, WebsitePanel.Providers.EnterpriseStorage.Windows2012', N'EnterpriseStorage', 1) -END -ELSE -BEGIN -UPDATE [dbo].[Providers] SET [DisableAutoDiscovery] = NULL WHERE [DisplayName] = 'Enterprise Storage Windows 2012' -END +ALTER PROCEDURE [dbo].[GetSchedules] +( + @ActorID int, + @PackageID int, + @Recursive bit +) +AS + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +DECLARE @Schedules TABLE +( + ScheduleID int +) + +INSERT INTO @Schedules (ScheduleID) +SELECT + S.ScheduleID +FROM Schedule AS S +INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID +ORDER BY S.Enabled DESC, S.NextRun + + +-- select schedules +SELECT + S.ScheduleID, + S.TaskID, + ST.TaskType, + ST.RoleID, + S.PackageID, + S.ScheduleName, + S.ScheduleTypeID, + S.Interval, + S.FromTime, + S.ToTime, + S.StartTime, + S.LastRun, + S.NextRun, + S.Enabled, + 1 AS StatusID, + S.PriorityID, + S.MaxExecutionTime, + S.WeekMonthDay, + ISNULL(0, (SELECT TOP 1 SeverityID FROM AuditLog WHERE ItemID = S.ScheduleID AND SourceName = 'SCHEDULER' ORDER BY StartDate DESC)) AS LastResult, + + U.Username, + U.FirstName, + U.LastName, + U.FullName, + U.RoleID, + U.Email +FROM @Schedules AS STEMP +INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID +INNER JOIN Packages AS P ON S.PackageID = P.PackageID +INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + +-- select schedule parameters +SELECT + S.ScheduleID, + STP.ParameterID, + STP.DataTypeID, + ISNULL(SP.ParameterValue, STP.DefaultValue) AS ParameterValue +FROM @Schedules AS STEMP +INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID +INNER JOIN ScheduleTaskParameters AS STP ON S.TaskID = STP.TaskID +LEFT OUTER JOIN ScheduleParameters AS SP ON STP.ParameterID = SP.ParameterID AND SP.ScheduleID = S.ScheduleID +RETURN GO +ALTER PROCEDURE [dbo].[GetSchedulesPaged] +( + @ActorID int, + @PackageID int, + @Recursive bit, + @FilterColumn nvarchar(50) = '', + @FilterValue nvarchar(50) = '', + @SortColumn nvarchar(50), + @StartRow int, + @MaximumRows int +) +AS +BEGIN + +-- check rights +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +DECLARE @condition nvarchar(400) +SET @condition = ' 1 = 1 ' + +IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL +AND @FilterValue <> '' AND @FilterValue IS NOT NULL +SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + '''' + +IF @SortColumn IS NULL OR @SortColumn = '' +SET @SortColumn = 'S.ScheduleName ASC' + +DECLARE @sql nvarchar(3500) + +set @sql = ' +SELECT COUNT(S.ScheduleID) FROM Schedule AS S +INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID +INNER JOIN Packages AS P ON S.PackageID = P.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID +WHERE ' + @condition + ' + +DECLARE @Schedules AS TABLE +( + ScheduleID int +); + +WITH TempSchedules AS ( + SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row, + S.ScheduleID + FROM Schedule AS S + INNER JOIN Packages AS P ON S.PackageID = P.PackageID + INNER JOIN PackagesTree(@PackageID, @Recursive) AS PT ON S.PackageID = PT.PackageID + INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID + WHERE ' + @condition + ' +) + +INSERT INTO @Schedules +SELECT ScheduleID FROM TempSchedules +WHERE TempSchedules.Row BETWEEN @StartRow and @StartRow + @MaximumRows - 1 + +SELECT + S.ScheduleID, + S.TaskID, + ST.TaskType, + ST.RoleID, + S.ScheduleName, + S.ScheduleTypeID, + S.Interval, + S.FromTime, + S.ToTime, + S.StartTime, + S.LastRun, + S.NextRun, + S.Enabled, + 1 AS StatusID, + S.PriorityID, + S.MaxExecutionTime, + S.WeekMonthDay, + ISNULL(0, (SELECT TOP 1 SeverityID FROM AuditLog WHERE ItemID = S.ScheduleID AND SourceName = ''SCHEDULER'' ORDER BY StartDate DESC)) AS LastResult, + + -- packages + P.PackageID, + P.PackageName, + + -- user + P.UserID, + U.Username, + U.FirstName, + U.LastName, + U.FullName, + U.RoleID, + U.Email +FROM @Schedules AS STEMP +INNER JOIN Schedule AS S ON STEMP.ScheduleID = S.ScheduleID +INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID +INNER JOIN Packages AS P ON S.PackageID = P.PackageID +INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID' + +exec sp_executesql @sql, N'@PackageID int, @StartRow int, @MaximumRows int, @Recursive bit', +@PackageID, @StartRow, @MaximumRows, @Recursive + +END +RETURN +GO + +ALTER PROCEDURE [dbo].[UpdateSchedule] +( + @ActorID int, + @ScheduleID int, + @TaskID nvarchar(100), + @ScheduleName nvarchar(100), + @ScheduleTypeID nvarchar(50), + @Interval int, + @FromTime datetime, + @ToTime datetime, + @StartTime datetime, + @LastRun datetime, + @NextRun datetime, + @Enabled bit, + @PriorityID nvarchar(50), + @HistoriesNumber int, + @MaxExecutionTime int, + @WeekMonthDay int, + @XmlParameters ntext +) +AS + +-- check rights +DECLARE @PackageID int +SELECT @PackageID = PackageID FROM Schedule +WHERE ScheduleID = @ScheduleID + +IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0 +RAISERROR('You are not allowed to access this package', 16, 1) + +BEGIN TRAN + +UPDATE Schedule +SET + TaskID = @TaskID, + ScheduleName = @ScheduleName, + ScheduleTypeID = @ScheduleTypeID, + Interval = @Interval, + FromTime = @FromTime, + ToTime = @ToTime, + StartTime = @StartTime, + LastRun = @LastRun, + NextRun = @NextRun, + Enabled = @Enabled, + PriorityID = @PriorityID, + HistoriesNumber = @HistoriesNumber, + MaxExecutionTime = @MaxExecutionTime, + WeekMonthDay = @WeekMonthDay +WHERE + ScheduleID = @ScheduleID + +DECLARE @idoc int +--Create an internal representation of the XML document. +EXEC sp_xml_preparedocument @idoc OUTPUT, @XmlParameters + +-- Execute a SELECT statement that uses the OPENXML rowset provider. +DELETE FROM ScheduleParameters +WHERE ScheduleID = @ScheduleID + +INSERT INTO ScheduleParameters +( + ScheduleID, + ParameterID, + ParameterValue +) +SELECT + @ScheduleID, + ParameterID, + ParameterValue +FROM OPENXML(@idoc, '/parameters/parameter',1) WITH +( + ParameterID nvarchar(50) '@id', + ParameterValue nvarchar(3000) '@value' +) as PV + +-- remove document +exec sp_xml_removedocument @idoc + +COMMIT TRAN +RETURN +GO + +UPDATE ScheduleTasks SET TaskType = RTRIM(TaskType) + '.Code' +WHERE SUBSTRING(RTRIM(TaskType), LEN(RTRIM(TaskType)) - 3, 4) <> 'Code' +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetRunningSchedules') +DROP PROCEDURE GetRunningSchedules +GO + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskStack') +DROP TABLE BackgroundTaskStack +GO + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskLogs') +DROP TABLE BackgroundTaskLogs +GO + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskParameters') +DROP TABLE BackgroundTaskParameters +GO + +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTasks') +DROP TABLE BackgroundTasks +GO + +CREATE TABLE BackgroundTasks +( + ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + Guid UNIQUEIDENTIFIER NOT NULL, + TaskID NVARCHAR(255), + ScheduleID INT NOT NULL, + PackageID INT NOT NULL, + UserID INT NOT NULL, + EffectiveUserID INT NOT NULL, + TaskName NVARCHAR(255), + ItemID INT, + ItemName NVARCHAR(255), + StartDate DATETIME NOT NULL, + FinishDate DATETIME, + IndicatorCurrent INT NOT NULL, + IndicatorMaximum INT NOT NULL, + MaximumExecutionTime INT NOT NULL, + Source NVARCHAR(MAX), + Severity INT NOT NULL, + Completed BIT, + NotifyOnComplete BIT, + Status INT NOT NULL +) +GO + +CREATE TABLE BackgroundTaskParameters +( + ParameterID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + TaskID INT NOT NULL, + Name NVARCHAR(255), + SerializerValue NTEXT, + TypeName NVARCHAR(255), + FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) +) +GO + +CREATE TABLE BackgroundTaskLogs +( + LogID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + TaskID INT NOT NULL, + Date DATETIME, + ExceptionStackTrace NTEXT, + InnerTaskStart INT, + Severity INT, + Text NTEXT, + TextIdent INT, + XmlParameters NTEXT, + FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) +) +GO + +CREATE TABLE BackgroundTaskStack +( + TaskStackID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + TaskID INT NOT NULL, + FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) +) +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTask') +DROP PROCEDURE AddBackgroundTask +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTask] +( + @BackgroundTaskID INT OUTPUT, + @Guid UNIQUEIDENTIFIER, + @TaskID NVARCHAR(255), + @ScheduleID INT, + @PackageID INT, + @UserID INT, + @EffectiveUserID INT, + @TaskName NVARCHAR(255), + @ItemID INT, + @ItemName NVARCHAR(255), + @StartDate DATETIME, + @IndicatorCurrent INT, + @IndicatorMaximum INT, + @MaximumExecutionTime INT, + @Source NVARCHAR(MAX), + @Severity INT, + @Completed BIT, + @NotifyOnComplete BIT, + @Status INT +) +AS + +INSERT INTO BackgroundTasks +( + Guid, + TaskID, + ScheduleID, + PackageID, + UserID, + EffectiveUserID, + TaskName, + ItemID, + ItemName, + StartDate, + IndicatorCurrent, + IndicatorMaximum, + MaximumExecutionTime, + Source, + Severity, + Completed, + NotifyOnComplete, + Status +) +VALUES +( + @Guid, + @TaskID, + @ScheduleID, + @PackageID, + @UserID, + @EffectiveUserID, + @TaskName, + @ItemID, + @ItemName, + @StartDate, + @IndicatorCurrent, + @IndicatorMaximum, + @MaximumExecutionTime, + @Source, + @Severity, + @Completed, + @NotifyOnComplete, + @Status +) + +SET @BackgroundTaskID = SCOPE_IDENTITY() + +RETURN +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTask') +DROP PROCEDURE GetBackgroundTask +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTask] +( + @TaskID NVARCHAR(255) +) +AS + +SELECT TOP 1 + T.ID, + T.Guid, + T.TaskID, + T.ScheduleID, + T.PackageID, + T.UserID, + T.EffectiveUserID, + T.TaskName, + T.ItemID, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.TaskID = @TaskID +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks') +DROP PROCEDURE GetBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTasks] +( + @ActorID INT +) +AS + + with GetChildUsersId(id) as ( + select UserID + from Users + where UserID = @ActorID + union all + select C.UserId + from GetChildUsersId P + inner join Users C on P.id = C.OwnerID +) + +SELECT + T.ID, + T.Guid, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +INNER JOIN (SELECT T.Guid, MIN(T.StartDate) AS Date + FROM BackgroundTasks AS T + INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID + WHERE T.UserID in (select id from GetChildUsersId) + GROUP BY T.Guid) AS TT ON TT.Guid = T.Guid AND TT.Date = T.StartDate +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetThreadBackgroundTasks') +DROP PROCEDURE GetThreadBackgroundTasks +GO + +CREATE PROCEDURE [dbo].GetThreadBackgroundTasks +( + @Guid UNIQUEIDENTIFIER +) +AS + +SELECT + T.ID, + T.Guid, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.Guid = @Guid +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask') +DROP PROCEDURE GetBackgroundTopTask +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTopTask] +( + @Guid UNIQUEIDENTIFIER +) +AS + +SELECT TOP 1 + T.ID, + T.Guid, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.Guid = @Guid +ORDER BY T.StartDate ASC +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskLog') +DROP PROCEDURE AddBackgroundTaskLog +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTaskLog] +( + @TaskID INT, + @Date DATETIME, + @ExceptionStackTrace NTEXT, + @InnerTaskStart INT, + @Severity INT, + @Text NTEXT, + @TextIdent INT, + @XmlParameters NTEXT +) +AS + +INSERT INTO BackgroundTaskLogs +( + TaskID, + Date, + ExceptionStackTrace, + InnerTaskStart, + Severity, + Text, + TextIdent, + XmlParameters +) +VALUES +( + @TaskID, + @Date, + @ExceptionStackTrace, + @InnerTaskStart, + @Severity, + @Text, + @TextIdent, + @XmlParameters +) +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskLogs') +DROP PROCEDURE GetBackgroundTaskLogs +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTaskLogs] +( + @TaskID INT, + @StartLogTime DATETIME +) +AS + +SELECT + L.LogID, + L.TaskID, + L.Date, + L.ExceptionStackTrace, + L.InnerTaskStart, + L.Severity, + L.Text, + L.XmlParameters +FROM BackgroundTaskLogs AS L +WHERE L.TaskID = @TaskID AND L.Date >= @StartLogTime +ORDER BY L.Date +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateBackgroundTask') +DROP PROCEDURE UpdateBackgroundTask +GO + +CREATE PROCEDURE [dbo].[UpdateBackgroundTask] +( + @Guid UNIQUEIDENTIFIER, + @TaskID INT, + @ScheduleID INT, + @PackageID INT, + @TaskName NVARCHAR(255), + @ItemID INT, + @ItemName NVARCHAR(255), + @FinishDate DATETIME, + @IndicatorCurrent INT, + @IndicatorMaximum INT, + @MaximumExecutionTime INT, + @Source NVARCHAR(MAX), + @Severity INT, + @Completed BIT, + @NotifyOnComplete BIT, + @Status INT +) +AS + +UPDATE BackgroundTasks +SET + Guid = @Guid, + ScheduleID = @ScheduleID, + PackageID = @PackageID, + TaskName = @TaskName, + ItemID = @ItemID, + ItemName = @ItemName, + FinishDate = @FinishDate, + IndicatorCurrent = @IndicatorCurrent, + IndicatorMaximum = @IndicatorMaximum, + MaximumExecutionTime = @MaximumExecutionTime, + Source = @Source, + Severity = @Severity, + Completed = @Completed, + NotifyOnComplete = @NotifyOnComplete, + Status = @Status +WHERE ID = @TaskID +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskParams') +DROP PROCEDURE GetBackgroundTaskParams +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTaskParams] +( + @TaskID INT +) +AS + +SELECT + P.ParameterID, + P.TaskID, + P.Name, + P.SerializerValue, + P.TypeName +FROM BackgroundTaskParameters AS P +WHERE P.TaskID = @TaskID +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskParam') +DROP PROCEDURE AddBackgroundTaskParam +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTaskParam] +( + @TaskID INT, + @Name NVARCHAR(255), + @Value NTEXT, + @TypeName NVARCHAR(255) +) +AS + +INSERT INTO BackgroundTaskParameters +( + TaskID, + Name, + SerializerValue, + TypeName +) +VALUES +( + @TaskID, + @Name, + @Value, + @TypeName +) +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskParams') +DROP PROCEDURE DeleteBackgroundTaskParams +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams] +( + @TaskID INT +) +AS + +DELETE FROM BackgroundTaskParameters +WHERE TaskID = @TaskID +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskStack') +DROP PROCEDURE AddBackgroundTaskStack +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTaskStack] +( + @TaskID INT +) +AS + +INSERT INTO BackgroundTaskStack +( + TaskID +) +VALUES +( + @TaskID +) +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTasks') +DROP PROCEDURE DeleteBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTasks] +( + @Guid UNIQUEIDENTIFIER +) +AS + +DELETE FROM BackgroundTaskStack +WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) + +DELETE FROM BackgroundTaskLogs +WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) + +DELETE FROM BackgroundTaskParameters +WHERE TaskID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) + +DELETE FROM BackgroundTasks +WHERE ID IN (SELECT ID FROM BackgroundTasks WHERE Guid = @Guid) +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTask') +DROP PROCEDURE DeleteBackgroundTask +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTask] +( + @ID INT +) +AS + +DELETE FROM BackgroundTaskStack +WHERE TaskID = @ID + +DELETE FROM BackgroundTaskLogs +WHERE TaskID = @ID + +DELETE FROM BackgroundTaskParameters +WHERE TaskID = @ID + +DELETE FROM BackgroundTasks +WHERE ID = @ID +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks') +DROP PROCEDURE GetProcessBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] +( + @Status INT +) +AS + +SELECT + T.ID, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +WHERE T.Completed = 0 AND T.Status = @Status +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetScheduleBackgroundTasks') +DROP PROCEDURE GetScheduleBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[GetScheduleBackgroundTasks] +( + @ScheduleID INT +) +AS + +SELECT + T.ID, + T.Guid, + T.TaskID, + T.ScheduleId, + T.PackageId, + T.UserId, + T.EffectiveUserId, + T.TaskName, + T.ItemId, + T.ItemName, + T.StartDate, + T.FinishDate, + T.IndicatorCurrent, + T.IndicatorMaximum, + T.MaximumExecutionTime, + T.Source, + T.Severity, + T.Completed, + T.NotifyOnComplete, + T.Status +FROM BackgroundTasks AS T +WHERE T.Guid = ( + SELECT Guid FROM BackgroundTasks + WHERE ScheduleID = @ScheduleID + AND Completed = 0 AND Status IN (1, 3)) +GO \ No newline at end of file diff --git a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj index 46b74405..32738387 100644 --- a/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj +++ b/WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/WebsitePanel.Import.Enterprise.csproj @@ -74,6 +74,9 @@ ..\..\..\Bin\WebsitePanel.EnterpriseServer.Client.dll + + ..\..\..\Bin\WebsitePanel.EnterpriseServer.Code.dll + ..\..\..\Bin\WebsitePanel.Providers.Base.dll diff --git a/WebsitePanel/Sources/VersionInfo.cs b/WebsitePanel/Sources/VersionInfo.cs index 8ca7c4b0..aa59da61 100644 --- a/WebsitePanel/Sources/VersionInfo.cs +++ b/WebsitePanel/Sources/VersionInfo.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18010 +// Runtime Version:4.0.30319.18033 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/WebsitePanel/Sources/VersionInfo.vb b/WebsitePanel/Sources/VersionInfo.vb index 556fbffa..ca84ccc9 100644 --- a/WebsitePanel/Sources/VersionInfo.vb +++ b/WebsitePanel/Sources/VersionInfo.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.18010 +' Runtime Version:4.0.30319.18033 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -15,9 +15,9 @@ Imports System Imports System.Reflection Imports System.Runtime.CompilerServices Imports System.Runtime.InteropServices - diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 8ea92110..bfe596f1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -36,162 +36,171 @@ using System.Xml.Serialization; namespace WebsitePanel.EnterpriseServer { + public class BackgroundTask { - private string taskId; - private int userId; - private int packageId; - private int effectiveUserId; - private DateTime startDate = DateTime.MinValue; - private DateTime finishDate = DateTime.MinValue; - private int maximumExecutionTime = -1; // seconds - private string source; - private string taskName; - private int scheduleId; - private string itemName; - private int itemId = 0; - private int severity = 0; /* 0 - Info, 1 - Warning, 2 - Error */ - private List logRecords = new List(); - private List lastLogRecords = new List(); - private BackgroundTaskLogRecord lastLogRecord; - private Hashtable parameters = new Hashtable(); - private int indicatorMaximum; - private int indicatorCurrent; - private bool completed; - private bool notifyOnComplete; - private Thread taskThread; + #region Fields - public System.DateTime StartDate + public List Params = new List(); + + public List Logs = new List(); + + #endregion + + #region Properties + + public int Id { get; set; } + + public Guid Guid { get; set; } + + public string TaskId { get; set; } + + public int ScheduleId { get; set; } + + public int PackageId { get; set; } + + public int UserId { get; set; } + + public int EffectiveUserId { get; set; } + + public string TaskName { get; set; } + + public int ItemId { get; set; } + + public string ItemName { get; set; } + + public DateTime StartDate { get; set; } + + public DateTime FinishDate { get; set; } + + public int IndicatorCurrent { get; set; } + + public int IndicatorMaximum { get; set; } + + public int MaximumExecutionTime { get; set; } + + public string Source { get; set; } + + public int Severity { get; set; } + + public bool Completed { get; set; } + + public bool NotifyOnComplete { get; set; } + + public BackgroundTaskStatus Status { get; set; } + + #endregion + + #region Constructors + + public BackgroundTask() { - get { return this.startDate; } - set { this.startDate = value; } + StartDate = DateTime.Now; + Severity = 0; + IndicatorCurrent = 0; + IndicatorMaximum = 0; + Status = BackgroundTaskStatus.Run; + + Completed = false; + NotifyOnComplete = false; } - public System.DateTime FinishDate + public BackgroundTask(Guid guid, String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, + int itemId, int scheduleId, int packageId, int maximumExecutionTime, List parameters) + : this() { - get { return this.finishDate; } - set { this.finishDate = value; } + Guid = guid; + TaskId = taskId; + UserId = userId; + EffectiveUserId = effectiveUserId; + Source = source; + TaskName = taskName; + ItemName = itemName; + ItemId = itemId; + ScheduleId = scheduleId; + PackageId = packageId; + MaximumExecutionTime = maximumExecutionTime; + Params = parameters; } - public string Source + #endregion + + #region Methods + + public List GetLogs() { - get { return this.source; } - set { this.source = value; } + return Logs; } - public string TaskName + public Object GetParamValue(String name) { - get { return this.taskName; } - set { this.taskName = value; } + foreach(BackgroundTaskParameter param in Params) + { + if (param.Name == name) + return param.Value; + } + + return null; } - public int ItemId + public void UpdateParamValue(String name, object value) { - get { return this.itemId; } - set { this.itemId = value; } + foreach (BackgroundTaskParameter param in Params) + { + if (param.Name == name) + { + param.Value = value; + + return; + + } + } + + Params.Add(new BackgroundTaskParameter(name, value)); } - public int PackageId + public bool ContainsParam(String name) { - get { return this.packageId; } - set { this.packageId = value; } + foreach (BackgroundTaskParameter param in Params) + { + if (param.Name == name) + return true; + } + + return false; } - public int Severity + #endregion + } + + public class BackgroundTaskParameter + { + #region Properties + + public int ParameterId { get; set; } + + public int TaskId { get; set; } + + public String Name { get; set; } + + public Object Value { get; set; } + + public String TypeName { get; set; } + + public String SerializerValue { get; set; } + + #endregion + + #region Constructors + + public BackgroundTaskParameter() { } + + public BackgroundTaskParameter(String name, Object value) { - get { return this.severity; } - set { this.severity = value; } + Name = name; + Value = value; } - [XmlIgnore] - public List LogRecords - { - get { return this.logRecords; } - set { this.logRecords = value; } - } - - public List LastLogRecords - { - get { return this.lastLogRecords; } - } - - public string ItemName - { - get { return this.itemName; } - set { this.itemName = value; } - } - - public BackgroundTaskLogRecord LastLogRecord - { - get { return this.lastLogRecord; } - set { this.lastLogRecord = value; } - } - - public string TaskId - { - get { return this.taskId; } - set { this.taskId = value; } - } - - public int UserId - { - get { return this.userId; } - set { this.userId = value; } - } - - [XmlIgnore] - public Hashtable Parameters - { - get { return this.parameters; } - } - - public int IndicatorMaximum - { - get { return this.indicatorMaximum; } - set { this.indicatorMaximum = value; } - } - - public int IndicatorCurrent - { - get { return this.indicatorCurrent; } - set { this.indicatorCurrent = value; } - } - - public bool Completed - { - get { return this.completed; } - set { this.completed = value; } - } - - public bool NotifyOnComplete - { - get { return this.notifyOnComplete; } - set { this.notifyOnComplete = value; } - } - - public int EffectiveUserId - { - get { return this.effectiveUserId; } - set { this.effectiveUserId = value; } - } - - [XmlIgnore] - public System.Threading.Thread TaskThread - { - get { return this.taskThread; } - set { this.taskThread = value; } - } - - public int ScheduleId - { - get { return this.scheduleId; } - set { this.scheduleId = value; } - } - - public int MaximumExecutionTime - { - get { return this.maximumExecutionTime; } - set { this.maximumExecutionTime = value; } - } + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs index d6ef3ab4..afccc7d8 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskLogRecord.cs @@ -34,54 +34,54 @@ namespace WebsitePanel.EnterpriseServer { public class BackgroundTaskLogRecord { - private DateTime date = DateTime.Now; - private string text; - private int severity; /* 0 - Info, 1 - Warning, 2 - Error */ - private string[] textParameters; - private int textIdent = 0; - private bool innerTaskStart; - private string exceptionStackTrace; + #region Properties - public System.DateTime Date + public int LogId { get; set; } + + public int TaskId { get; set; } + + public DateTime Date { get; set; } + + public String ExceptionStackTrace { get; set; } + + public bool InnerTaskStart { get; set; } + + public int Severity { get; set; } + + public String Text { get; set; } + + public int TextIdent { get; set; } + + public string[] TextParameters { get; set; } + + public string XmlParameters { get; set; } + + #endregion + + #region Constructors + + public BackgroundTaskLogRecord() { - get { return this.date; } - set { this.date = value; } + Date = DateTime.Now; } - public string Text + public BackgroundTaskLogRecord(int taskId, int textIdent, bool innerTaskStart, String text, string[] textParameters) + : this() { - get { return this.text; } - set { this.text = value; } + TaskId = taskId; + TextIdent = textIdent; + Text = text; + InnerTaskStart = innerTaskStart; + TextParameters = textParameters; } - public int Severity + public BackgroundTaskLogRecord(int taskId, int textIdent, bool innerTaskStart, String text, + String exceptionStackTrace, string[] textParameters) + : this(taskId, textIdent, innerTaskStart, text, textParameters) { - get { return this.severity; } - set { this.severity = value; } + ExceptionStackTrace = exceptionStackTrace; } - public string[] TextParameters - { - get { return this.textParameters; } - set { this.textParameters = value; } - } - - public int TextIdent - { - get { return this.textIdent; } - set { this.textIdent = value; } - } - - public bool InnerTaskStart - { - get { return this.innerTaskStart; } - set { this.innerTaskStart = value; } - } - - public string ExceptionStackTrace - { - get { return this.exceptionStackTrace; } - set { this.exceptionStackTrace = value; } - } + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs new file mode 100644 index 00000000..74747641 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs @@ -0,0 +1,10 @@ +namespace WebsitePanel.EnterpriseServer +{ + public enum BackgroundTaskStatus + { + Run = 1, + Abort = 2, + Starting = 3, + Stopping = 4 + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj index 2168e6e3..dde357fa 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/WebsitePanel.EnterpriseServer.Base.csproj @@ -156,6 +156,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Comments/CommentsController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Comments/CommentsController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Comments/CommentsController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Comments/CommentsController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ConfigSettings.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ConfigSettings.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ConfigSettings.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ConfigSettings.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/CryptoUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/CryptoUtils.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/CryptoUtils.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/CryptoUtils.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerIdentity.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerIdentity.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerIdentity.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerIdentity.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerPrincipal.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerPrincipal.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/EnterpriseServerPrincipal.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/EnterpriseServerPrincipal.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/FileUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/FileUtils.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/FileUtils.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/FileUtils.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/IPAddress.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/IPAddress.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/IPAddress.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Int128.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Int128.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Int128.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Int128.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/MailHelper.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/MailHelper.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/MailHelper.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/MailHelper.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs new file mode 100644 index 00000000..4359ca98 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs @@ -0,0 +1,668 @@ +// Copyright (c) 2012, Outercurve Foundation. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// - Neither the name of the Outercurve Foundation nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +using System; +using System.Reflection; +using System.Data; +using System.Collections; +using System.Collections.Generic; + +using WebsitePanel.Providers; + +namespace WebsitePanel.EnterpriseServer +{ + /// + /// Summary description for ObjectUtils. + /// + public class ObjectUtils + { + public static DT ConvertObject(ST so) + { + Dictionary sProps = GetTypePropertiesHash(typeof(ST)); + Dictionary dProps = GetTypePropertiesHash(typeof(DT)); + + DT dobj = (DT)Activator.CreateInstance(typeof(DT)); + + // copy properties + foreach (string propName in sProps.Keys) + { + if (dProps.ContainsKey(propName) && sProps[propName].Name != "Item") + { + if (sProps[propName].CanRead) + { + object val = sProps[propName].GetValue(so, null); + if (dProps[propName] != null) + { + if (val != null && dProps[propName].CanWrite) + { + dProps[propName].SetValue(dobj, val, null); + } + } + } + } + } + return dobj; + } + + private static Hashtable typeProperties = new Hashtable(); + + public static Hashtable GetObjectProperties(object obj, bool persistentOnly) + { + Hashtable hash = new Hashtable(); + + Type type = obj.GetType(); + PropertyInfo[] props = type.GetProperties(BindingFlags.Instance + | BindingFlags.Public); + foreach (PropertyInfo prop in props) + { + // check for persistent attribute + object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); + if (!persistentOnly || (persistentOnly && attrs.Length > 0) && !hash.ContainsKey(prop.Name)) + { + object val = prop.GetValue(obj, null); + string s = ""; + if (val != null) + { + if (prop.PropertyType == typeof(string[])) + s = String.Join(";", (string[])val); + else if (prop.PropertyType == typeof(int[])) + { + int[] ivals = (int[])val; + string[] svals = new string[ivals.Length]; + for (int i = 0; i < svals.Length; i++) + svals[i] = ivals[i].ToString(); + s = String.Join(";", svals); + } + else + s = val.ToString(); + } + + // add property to hash + hash.Add(prop.Name, s); + } + } + + return hash; + } + + public static void FillCollectionFromDataSet(List list, DataSet ds) + { + if (ds.Tables.Count == 0) + return; + + FillCollectionFromDataView(list, ds.Tables[0].DefaultView); + } + + public static void FillCollectionFromDataView(List list, DataView dv) + { + Type type = typeof(T); + + PropertyInfo[] props = GetTypeProperties(type); + + foreach (DataRowView dr in dv) + { + // create an instance + T obj = (T)Activator.CreateInstance(type); + list.Add(obj); + + // fill properties + for (int i = 0; i < props.Length; i++) + { + string propName = props[i].Name; + if (dv.Table.Columns[propName] == null) + continue; + + object propVal = dr[propName]; + if (propVal == DBNull.Value) + props[i].SetValue(obj, GetNull(props[i].PropertyType), null); + else + { + try + { + // try implicit type conversion + props[i].SetValue(obj, propVal, null); + } + catch + { + // convert to string and then set property value + try + { + string strVal = propVal.ToString(); + props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); + } + catch + { + // skip property init + } + } + } + } // for properties + } // for rows + } + + public static List CreateListFromDataReader(IDataReader reader) + { + List list = new List(); + FillCollectionFromDataReader(list, reader); + return list; + } + + public static List CreateListFromDataSet(DataSet ds) + { + List list = new List(); + FillCollectionFromDataSet(list, ds); + return list; + } + + public static void FillCollectionFromDataReader(List list, IDataReader reader) + { + Type type = typeof(T); + + try + { + // get type properties + PropertyInfo[] props = GetTypeProperties(type); + + // iterate through reader + while (reader.Read()) + { + T obj = (T)Activator.CreateInstance(type); + list.Add(obj); + + // set properties + for (int i = 0; i < props.Length; i++) + { + string propName = props[i].Name; + + try + { + + object propVal = reader[propName]; + if (propVal == DBNull.Value) + props[i].SetValue(obj, GetNull(props[i].PropertyType), null); + else + { + try + { + // try implicit type conversion + props[i].SetValue(obj, propVal, null); + } + catch + { + // convert to string and then set property value + try + { + string strVal = propVal.ToString(); + props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); + } + catch { } + } + } + } + catch { } // just skip + } // for properties + } + } + finally + { + reader.Close(); + } + } + + public static T FillObjectFromDataView(DataView dv) + { + Type type = typeof(T); + T obj = default(T); + + // get type properties + PropertyInfo[] props = GetTypeProperties(type); + + // iterate through reader + foreach (DataRowView dr in dv) + { + obj = (T)Activator.CreateInstance(type); + + // set properties + for (int i = 0; i < props.Length; i++) + { + string propName = props[i].Name; + + try + { + // verify if there is such a column + if (!dr.Row.Table.Columns.Contains(propName.ToLower())) + { + // if not, we move to another property + // because this one we cannot set + continue; + } + + object propVal = dr[propName]; + if (propVal == DBNull.Value) + props[i].SetValue(obj, GetNull(props[i].PropertyType), null); + else + { + try + { + string strVal = propVal.ToString(); + + //convert to DateTime + if (props[i].PropertyType.UnderlyingSystemType.FullName == typeof(DateTime).FullName) + { + DateTime date = DateTime.MinValue; + if (DateTime.TryParse(strVal, out date)) + { + props[i].SetValue(obj, date, null); + } + } + else + { + //Convert generic + props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); + } + } + catch + { + // skip property init + } + } + } + catch { } // just skip + } // for properties + } + + return obj; + } + + public static T FillObjectFromDataReader(IDataReader reader) + { + Type type = typeof(T); + + T obj = default(T); + + try + { + // get type properties + PropertyInfo[] props = GetTypeProperties(type); + + // iterate through reader + while (reader.Read()) + { + obj = (T)Activator.CreateInstance(type); + + // set properties + for (int i = 0; i < props.Length; i++) + { + string propName = props[i].Name; + + try + { + if (!IsColumnExists(propName, reader.GetSchemaTable())) + { + continue; + } + object propVal = reader[propName]; + + if (propVal == DBNull.Value) + props[i].SetValue(obj, GetNull(props[i].PropertyType), null); + else + { + try + { + //try string first + if (props[i].PropertyType.UnderlyingSystemType.FullName == typeof(String).FullName) + { + props[i].SetValue(obj, propVal.ToString(), null); + } + else + { + // then, try implicit type conversion + props[i].SetValue(obj, propVal, null); + } + } + catch + { + // convert to string and then set property value + try + { + string strVal = propVal.ToString(); + props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); + } + catch + { + // skip property init + } + } + } + } + catch { } // just skip + } // for properties + } + } + finally + { + reader.Close(); + } + + return obj; + } + + private static Hashtable propertiesCache = new Hashtable(); + + public static object CreateObjectFromDataview(Type type, DataView dv, + string nameColumn, string valueColumn, bool persistentOnly) + { + // create hash of properties from datareader + Hashtable propValues = new Hashtable(); + foreach (DataRowView dr in dv) + { + if (propValues[dr[nameColumn]] == null && !propValues.ContainsKey(dr[nameColumn])) + propValues.Add(dr[nameColumn], dr[valueColumn]); + } + + return CreateObjectFromHash(type, propValues, persistentOnly); + } + + public static object CreateObjectFromDataReader(Type type, IDataReader reader, + string nameColumn, string valueColumn, bool persistentOnly) + { + // create hash of properties from datareader + Hashtable propValues = new Hashtable(); + while (reader.Read()) + { + if (propValues[reader[nameColumn]] == null && !propValues.ContainsKey(reader[nameColumn])) + propValues.Add(reader[nameColumn], reader[valueColumn]); + } + reader.Close(); + + return CreateObjectFromHash(type, propValues, persistentOnly); + } + + public static object CreateObjectFromHash(Type type, Hashtable propValues, bool persistentOnly) + { + // create object + object obj = Activator.CreateInstance(type); + + CreateObjectFromHash(obj, propValues, persistentOnly); + + return obj; + } + + public static void CopyPersistentPropertiesFromSource(T source, T target) + where T : ServiceProviderItem + { + // + var typeSource = source.GetType(); + var typeTarget = target.GetType(); + // get all property infos + Hashtable props = null; + if (propertiesCache[typeSource.Name] != null) + { + // load properties from cache + props = (Hashtable)propertiesCache[typeSource.Name]; + } + else + { + // create properties cache + props = new Hashtable(); + // + PropertyInfo[] objProps = typeSource.GetProperties(BindingFlags.Instance + //| BindingFlags.DeclaredOnly + | BindingFlags.Public); + foreach (PropertyInfo prop in objProps) + { + // check for persistent attribute + object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); + // Persistent only + if (attrs.Length > 0 && !props.ContainsKey(prop.Name)) + { + // add property to hash + props.Add(prop.Name, prop); + } + } + + if (!propertiesCache.ContainsKey(typeSource.Name)) + { + // add to cache + propertiesCache.Add(typeSource.Name, props); + } + } + + // Copy the data + foreach (PropertyInfo propertyInfo in props.Values) + { + propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null); + } + } + + public static void CreateObjectFromHash(object obj, Hashtable propValues, bool persistentOnly) + { + Type type = obj.GetType(); + + // get all property infos + Hashtable props = null; + if (propertiesCache[type.Name] != null) + { + // load properties from cache + props = (Hashtable)propertiesCache[type.Name]; + } + else + { + // create properties cache + props = new Hashtable(); + PropertyInfo[] objProps = type.GetProperties(BindingFlags.Instance + //| BindingFlags.DeclaredOnly + | BindingFlags.Public); + foreach (PropertyInfo prop in objProps) + { + // check for persistent attribute + object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); + if (!persistentOnly || (persistentOnly && attrs.Length > 0) && !props.ContainsKey(prop.Name)) + { + // add property to hash + props.Add(prop.Name, prop); + } + } + + if (!propertiesCache.ContainsKey(type.Name)) + { + // add to cache + propertiesCache.Add(type.Name, props); + } + } + + // fill properties + foreach (string propName in propValues.Keys) + { + // try to locate specified property + if (props[propName] != null) + { + // set property + // we support: + // String + // Int32 + // Boolean + // Float + PropertyInfo prop = (PropertyInfo)props[propName]; + string val = propValues[propName].ToString(); + if (prop.PropertyType == typeof(String)) + prop.SetValue(obj, val, null); + else if (prop.PropertyType == typeof(Int32)) + prop.SetValue(obj, Int32.Parse(val), null); + else + if (prop.PropertyType == typeof(long)) + prop.SetValue(obj, long.Parse(val), null); + else + if (prop.PropertyType == typeof(Boolean)) + prop.SetValue(obj, Boolean.Parse(val), null); + else if (prop.PropertyType == typeof(Single)) + prop.SetValue(obj, Single.Parse(val), null); + else if (prop.PropertyType.IsEnum) + prop.SetValue(obj, Enum.Parse(prop.PropertyType, val, true), null); + else + if (prop.PropertyType == typeof(Guid)) + prop.SetValue(obj, new Guid(val), null); + else + if (prop.PropertyType == typeof(string[])) + { + if (val == "") + prop.SetValue(obj, new string[0], null); + else + prop.SetValue(obj, val.Split(';'), null); + } + else if (prop.PropertyType == typeof(int[])) + { + string[] svals = val.Split(';'); + int[] ivals = new int[svals.Length]; + + for (int i = 0; i < svals.Length; i++) + ivals[i] = Int32.Parse(svals[i]); + + if (val == "") + ivals = new int[0]; + + prop.SetValue(obj, ivals, null); + } + } + } + } + + private static Dictionary GetTypePropertiesHash(Type type) + { + Dictionary hash = new Dictionary(); + PropertyInfo[] props = GetTypeProperties(type); + foreach (PropertyInfo prop in props) + { + if (!hash.ContainsKey(prop.Name)) + { + hash.Add(prop.Name, prop); + } + } + return hash; + } + + private static PropertyInfo[] GetTypeProperties(Type type) + { + string typeName = type.AssemblyQualifiedName; + if (typeProperties[typeName] != null) + return (PropertyInfo[])typeProperties[typeName]; + + PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); + typeProperties[typeName] = props; + return props; + } + + public static object GetNull(Type type) + { + if (type == typeof(string)) + return null; + if (type == typeof(Int32)) + return 0; + if (type == typeof(Int64)) + return 0; + if (type == typeof(Boolean)) + return false; + if (type == typeof(Decimal)) + return 0M; + else + return null; + } + + public static object Cast(string val, Type type) + { + if (type == typeof(string)) + return val; + if (type == typeof(Int32)) + return Int32.Parse(val); + if (type == typeof(Int64)) + return Int64.Parse(val); + if (type == typeof(Boolean)) + return Boolean.Parse(val); + if (type == typeof(Decimal)) + return Decimal.Parse(val); + if (type == typeof(string[]) && val != null) + { + return val.Split(';'); + } + if (type.IsEnum) + return Enum.Parse(type, val, true); + + if (type == typeof(int[]) && val != null) + { + string[] sarr = val.Split(';'); + int[] iarr = new int[sarr.Length]; + for (int i = 0; i < sarr.Length; i++) + iarr[i] = Int32.Parse(sarr[i]); + return iarr; + } + else + return val; + } + + public static string GetTypeFullName(Type type) + { + return type.FullName + ", " + type.Assembly.GetName().Name; + } + + + #region Helper Functions + + /// + /// This function is used to determine whether IDataReader contains a Column. + /// + /// Name of the column. + /// The schema that decribes result-set contains. + /// True, when required column exists in the . Otherwise, false. + /// + /// The followin example shows how to look for the "Role" column in the . + /// + /// IDataReader reader = .... + /// if (!IsColumnExists("Role", reader.GetSchemaTable()) + /// { + /// continue; + /// } + /// + /// object roleValue = reader["Role"]; + /// + /// + static bool IsColumnExists(string columnName, DataTable schemaTable) + { + foreach (DataRow row in schemaTable.Rows) + { + if (String.Compare(row[0].ToString(), columnName, StringComparison.OrdinalIgnoreCase) == 0) + { + return true; + } + } + + return false; + } + + #endregion + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/SecurityContext.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/SecurityContext.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/SecurityContext.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/SecurityContext.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceProviderProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceProviderProxy.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceProviderProxy.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceProviderProxy.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceUsernameTokenManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceUsernameTokenManager.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ServiceUsernameTokenManager.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ServiceUsernameTokenManager.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/UsernameAssertion.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/UsernameAssertion.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/UsernameAssertion.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/UsernameAssertion.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Utils.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/Utils.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/Utils.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs similarity index 82% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 0aaf98a5..ef0f1995 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -43,9 +43,9 @@ namespace WebsitePanel.EnterpriseServer /// public static class DataProvider { - + static string EnterpriseServerRegistryPath = "SOFTWARE\\WebsitePanel\\EnterpriseServer"; - + private static string ConnectionString { get @@ -77,35 +77,35 @@ namespace WebsitePanel.EnterpriseServer { return ""; } - } + } - #region System Settings + #region System Settings - public static IDataReader GetSystemSettings(string settingsName) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "GetSystemSettings", - new SqlParameter("@SettingsName", settingsName) - ); - } + public static IDataReader GetSystemSettings(string settingsName) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetSystemSettings", + new SqlParameter("@SettingsName", settingsName) + ); + } - public static void SetSystemSettings(string settingsName, string xml) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "SetSystemSettings", - new SqlParameter("@SettingsName", settingsName), - new SqlParameter("@Xml", xml) - ); - } + public static void SetSystemSettings(string settingsName, string xml) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "SetSystemSettings", + new SqlParameter("@SettingsName", settingsName), + new SqlParameter("@Xml", xml) + ); + } - #endregion + #endregion - #region Users - public static bool CheckUserExists(string username) + #region Users + public static bool CheckUserExists(string username) { SqlParameter prmExists = new SqlParameter("@Exists", SqlDbType.Bit); prmExists.Direction = ParameterDirection.Output; @@ -1296,11 +1296,11 @@ namespace WebsitePanel.EnterpriseServer public static IDataReader GetServiceItemTypes() { - return SqlHelper.ExecuteReader ( - ConnectionString, - CommandType.StoredProcedure, - "GetServiceItemTypes" - ); + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetServiceItemTypes" + ); } #endregion @@ -1836,6 +1836,179 @@ namespace WebsitePanel.EnterpriseServer #endregion #region Scheduler + + public static IDataReader GetBackgroundTask(string taskId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTask", + new SqlParameter("@taskId", taskId)); + } + + public static IDataReader GetScheduleBackgroundTasks(int scheduleId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetScheduleBackgroundTasks", + new SqlParameter("@scheduleId", scheduleId)); + } + + public static IDataReader GetBackgroundTasks(int actorId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTasks", + new SqlParameter("@actorId", actorId)); + } + + public static IDataReader GetBackgroundTasks(Guid guid) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetThreadBackgroundTasks", + new SqlParameter("@guid", guid)); + } + + public static IDataReader GetProcessBackgroundTasks(BackgroundTaskStatus status) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetProcessBackgroundTasks", + new SqlParameter("@status", (int)status)); + } + + public static IDataReader GetBackgroundTopTask(Guid guid) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTopTask", + new SqlParameter("@guid", guid)); + } + + public static int AddBackgroundTask(Guid guid, string taskId, int scheduleId, int packageId, int userId, + int effectiveUserId, string taskName, int itemId, string itemName, DateTime startDate, + int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source, + int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status) + { + SqlParameter prmId = new SqlParameter("@BackgroundTaskID", SqlDbType.Int); + prmId.Direction = ParameterDirection.Output; + + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddBackgroundTask", + prmId, + new SqlParameter("@guid", guid), + new SqlParameter("@taskId", taskId), + new SqlParameter("@scheduleId", scheduleId), + new SqlParameter("@packageId", packageId), + new SqlParameter("@userId", userId), + new SqlParameter("@effectiveUserId", effectiveUserId), + new SqlParameter("@taskName", taskName), + new SqlParameter("@itemId", itemId), + new SqlParameter("@itemName", itemName), + new SqlParameter("@startDate", startDate), + new SqlParameter("@indicatorCurrent", indicatorCurrent), + new SqlParameter("@indicatorMaximum", indicatorMaximum), + new SqlParameter("@maximumExecutionTime", maximumExecutionTime), + new SqlParameter("@source", source), + new SqlParameter("@severity", severity), + new SqlParameter("@completed", completed), + new SqlParameter("@notifyOnComplete", notifyOnComplete), + new SqlParameter("@status", status)); + + // read identity + return Convert.ToInt32(prmId.Value); + } + + public static void AddBackgroundTaskLog(int taskId, DateTime date, string exceptionStackTrace, + bool innerTaskStart, int severity, string text, int textIdent, string xmlParameters) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddBackgroundTaskLog", + new SqlParameter("@taskId", taskId), + new SqlParameter("@date", date), + new SqlParameter("@exceptionStackTrace", exceptionStackTrace), + new SqlParameter("@innerTaskStart", innerTaskStart), + new SqlParameter("@severity", severity), + new SqlParameter("@text", text), + new SqlParameter("@textIdent", textIdent), + new SqlParameter("@xmlParameters", xmlParameters)); + } + + public static IDataReader GetBackgroundTaskLogs(int taskId, DateTime startLogTime) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTaskLogs", + new SqlParameter("@taskId", taskId), + new SqlParameter("@startLogTime", startLogTime)); + } + + public static void UpdateBackgroundTask(Guid guid, int taskId, int scheduleId, int packageId, string taskName, int itemId, + string itemName, DateTime finishDate, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, + string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "UpdateBackgroundTask", + new SqlParameter("@Guid", guid), + new SqlParameter("@taskId", taskId), + new SqlParameter("@scheduleId", scheduleId), + new SqlParameter("@packageId", packageId), + new SqlParameter("@taskName", taskName), + new SqlParameter("@itemId", itemId), + new SqlParameter("@itemName", itemName), + new SqlParameter("@finishDate", + finishDate == DateTime.MinValue + ? DBNull.Value + : (object) finishDate), + new SqlParameter("@indicatorCurrent", indicatorCurrent), + new SqlParameter("@indicatorMaximum", indicatorMaximum), + new SqlParameter("@maximumExecutionTime", maximumExecutionTime), + new SqlParameter("@source", source), + new SqlParameter("@severity", severity), + new SqlParameter("@completed", completed), + new SqlParameter("@notifyOnComplete", notifyOnComplete), + new SqlParameter("@status", (int)status)); + + } + + public static IDataReader GetBackgroundTaskParams(int taskId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTaskParams", + new SqlParameter("@taskId", taskId)); + } + + public static void AddBackgroundTaskParam(int taskId, string name, string value, string typeName) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddBackgroundTaskParam", + new SqlParameter("@taskId", taskId), + new SqlParameter("@name", name), + new SqlParameter("@value", value), + new SqlParameter("@typeName", typeName)); + } + + public static void DeleteBackgroundTaskParams(int taskId) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "DeleteBackgroundTaskParams", + new SqlParameter("@taskId", taskId)); + } + + public static void AddBackgroundTaskStack(int taskId) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddBackgroundTaskStack", + new SqlParameter("@taskId", taskId)); + } + + public static void DeleteBackgroundTasks(Guid guid) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "DeleteBackgroundTasks", + new SqlParameter("@guid", guid)); + } + + public static void DeleteBackgroundTask(int taskId) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "DeleteBackgroundTask", + new SqlParameter("@id", taskId)); + } + public static IDataReader GetScheduleTasks(int actorId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, @@ -1901,17 +2074,17 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@scheduleId", scheduleId)); } - /// - /// Loads view configuration for the task with specified id. - /// - /// Task id which points to task for which view configuration will be loaded. - /// View configuration for the task with supplied id. - public static IDataReader GetScheduleTaskViewConfigurations(string taskId) - { - return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetScheduleTaskViewConfigurations", - new SqlParameter("@taskId", taskId)); - } + /// + /// Loads view configuration for the task with specified id. + /// + /// Task id which points to task for which view configuration will be loaded. + /// View configuration for the task with supplied id. + public static IDataReader GetScheduleTaskViewConfigurations(string taskId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetScheduleTaskViewConfigurations", + new SqlParameter("@taskId", taskId)); + } public static int AddSchedule(int actorId, string taskId, int packageId, string scheduleName, string scheduleTypeId, int interval, @@ -1945,11 +2118,12 @@ namespace WebsitePanel.EnterpriseServer // read identity return Convert.ToInt32(prmId.Value); } + public static void UpdateSchedule(int actorId, int scheduleId, string taskId, string scheduleName, string scheduleTypeId, int interval, DateTime fromTime, DateTime toTime, DateTime startTime, - DateTime lastRun, DateTime nextRun, bool enabled, string priorityId, int historiesNumber, - int maxExecutionTime, int weekMonthDay, string xmlParameters) + DateTime lastRun, DateTime nextRun, bool enabled, string priorityId, + int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "UpdateSchedule", @@ -1971,6 +2145,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@weekMonthDay", weekMonthDay), new SqlParameter("@xmlParameters", xmlParameters)); } + public static void DeleteSchedule(int actorId, int scheduleId) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, @@ -2146,7 +2321,7 @@ namespace WebsitePanel.EnterpriseServer } #endregion - #region Exchange Server + #region Exchange Server public static int AddExchangeAccount(int itemId, int accountType, string accountName, @@ -2178,42 +2353,42 @@ namespace WebsitePanel.EnterpriseServer } - public static void AddExchangeAccountEmailAddress(int accountId, string emailAddress) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "AddExchangeAccountEmailAddress", - new SqlParameter("@AccountID", accountId), - new SqlParameter("@EmailAddress", emailAddress) - ); - } + public static void AddExchangeAccountEmailAddress(int accountId, string emailAddress) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "AddExchangeAccountEmailAddress", + new SqlParameter("@AccountID", accountId), + new SqlParameter("@EmailAddress", emailAddress) + ); + } - public static void AddExchangeOrganization(int itemId, string organizationId) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "AddExchangeOrganization", - new SqlParameter("@ItemID", itemId), - new SqlParameter("@OrganizationID", organizationId) - ); - } + public static void AddExchangeOrganization(int itemId, string organizationId) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "AddExchangeOrganization", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@OrganizationID", organizationId) + ); + } - public static void AddExchangeOrganizationDomain(int itemId, int domainId, bool isHost) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "AddExchangeOrganizationDomain", - new SqlParameter("@ItemID", itemId), - new SqlParameter("@DomainID", domainId), - new SqlParameter("@IsHost", isHost) - ); - } + public static void AddExchangeOrganizationDomain(int itemId, int domainId, bool isHost) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "AddExchangeOrganizationDomain", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@DomainID", domainId), + new SqlParameter("@IsHost", isHost) + ); + } public static void ChangeExchangeAcceptedDomainType(int itemId, int domainId, int domainTypeId) - { + { SqlHelper.ExecuteNonQuery( ConnectionString, CommandType.StoredProcedure, @@ -2224,134 +2399,134 @@ namespace WebsitePanel.EnterpriseServer ); } - public static IDataReader GetExchangeOrganizationStatistics(int itemId) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "GetExchangeOrganizationStatistics", - new SqlParameter("@ItemID", itemId) - ); - } + public static IDataReader GetExchangeOrganizationStatistics(int itemId) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetExchangeOrganizationStatistics", + new SqlParameter("@ItemID", itemId) + ); + } public static void DeleteUserEmailAddresses(int accountId, string primaryAddress) { SqlHelper.ExecuteNonQuery( ConnectionString, CommandType.StoredProcedure, - "DeleteUserEmailAddresses", + "DeleteUserEmailAddresses", new SqlParameter("@AccountID", accountId), new SqlParameter("@PrimaryEmailAddress", primaryAddress) ); } - + public static void DeleteExchangeAccount(int itemId, int accountId) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "DeleteExchangeAccount", - new SqlParameter("@ItemID", itemId), - new SqlParameter("@AccountID", accountId) - ); - } + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "DeleteExchangeAccount", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@AccountID", accountId) + ); + } - public static void DeleteExchangeAccountEmailAddress(int accountId, string emailAddress) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "DeleteExchangeAccountEmailAddress", - new SqlParameter("@AccountID", accountId), - new SqlParameter("@EmailAddress", emailAddress) - ); - } + public static void DeleteExchangeAccountEmailAddress(int accountId, string emailAddress) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "DeleteExchangeAccountEmailAddress", + new SqlParameter("@AccountID", accountId), + new SqlParameter("@EmailAddress", emailAddress) + ); + } - public static void DeleteExchangeOrganization(int itemId) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "DeleteExchangeOrganization", - new SqlParameter("@ItemID", itemId) - ); - } + public static void DeleteExchangeOrganization(int itemId) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "DeleteExchangeOrganization", + new SqlParameter("@ItemID", itemId) + ); + } - public static void DeleteExchangeOrganizationDomain(int itemId, int domainId) - { - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "DeleteExchangeOrganizationDomain", - new SqlParameter("@ItemId", itemId), - new SqlParameter("@DomainID", domainId) - ); - } + public static void DeleteExchangeOrganizationDomain(int itemId, int domainId) + { + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "DeleteExchangeOrganizationDomain", + new SqlParameter("@ItemId", itemId), + new SqlParameter("@DomainID", domainId) + ); + } - public static bool ExchangeAccountEmailAddressExists(string emailAddress) - { - SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); - outParam.Direction = ParameterDirection.Output; + public static bool ExchangeAccountEmailAddressExists(string emailAddress) + { + SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); + outParam.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "ExchangeAccountEmailAddressExists", - new SqlParameter("@EmailAddress", emailAddress), - outParam - ); + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "ExchangeAccountEmailAddressExists", + new SqlParameter("@EmailAddress", emailAddress), + outParam + ); - return Convert.ToBoolean(outParam.Value); - } + return Convert.ToBoolean(outParam.Value); + } public static bool ExchangeOrganizationDomainExists(int domainId) - { - SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); - outParam.Direction = ParameterDirection.Output; + { + SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); + outParam.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "ExchangeOrganizationDomainExists", - new SqlParameter("@DomainID", domainId), - outParam - ); + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "ExchangeOrganizationDomainExists", + new SqlParameter("@DomainID", domainId), + outParam + ); - return Convert.ToBoolean(outParam.Value); - } + return Convert.ToBoolean(outParam.Value); + } - public static bool ExchangeOrganizationExists(string organizationId) - { - SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); - outParam.Direction = ParameterDirection.Output; + public static bool ExchangeOrganizationExists(string organizationId) + { + SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); + outParam.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "ExchangeOrganizationExists", - new SqlParameter("@OrganizationID", organizationId), - outParam - ); + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "ExchangeOrganizationExists", + new SqlParameter("@OrganizationID", organizationId), + outParam + ); - return Convert.ToBoolean(outParam.Value); - } + return Convert.ToBoolean(outParam.Value); + } - public static bool ExchangeAccountExists(string accountName) - { - SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); - outParam.Direction = ParameterDirection.Output; + public static bool ExchangeAccountExists(string accountName) + { + SqlParameter outParam = new SqlParameter("@Exists", SqlDbType.Bit); + outParam.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery( - ConnectionString, - CommandType.StoredProcedure, - "ExchangeAccountExists", - new SqlParameter("@AccountName", accountName), - outParam - ); + SqlHelper.ExecuteNonQuery( + ConnectionString, + CommandType.StoredProcedure, + "ExchangeAccountExists", + new SqlParameter("@AccountName", accountName), + outParam + ); - return Convert.ToBoolean(outParam.Value); - } + return Convert.ToBoolean(outParam.Value); + } public static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType, string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder, @@ -2385,16 +2560,16 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@UserPrincipalName", userPrincipalName)); } - public static IDataReader GetExchangeAccount(int itemId, int accountId) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "GetExchangeAccount", - new SqlParameter("@ItemID", itemId), - new SqlParameter("@AccountID", accountId) - ); - } + public static IDataReader GetExchangeAccount(int itemId, int accountId) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetExchangeAccount", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@AccountID", accountId) + ); + } public static IDataReader GetExchangeAccountByAccountName(int itemId, string accountName) { @@ -2419,37 +2594,37 @@ namespace WebsitePanel.EnterpriseServer } - public static IDataReader GetExchangeAccountEmailAddresses(int accountId) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "GetExchangeAccountEmailAddresses", - new SqlParameter("@AccountID", accountId) - ); - } + public static IDataReader GetExchangeAccountEmailAddresses(int accountId) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetExchangeAccountEmailAddresses", + new SqlParameter("@AccountID", accountId) + ); + } + + public static IDataReader GetExchangeOrganizationDomains(int itemId) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetExchangeOrganizationDomains", + new SqlParameter("@ItemID", itemId) + ); + } - public static IDataReader GetExchangeOrganizationDomains(int itemId) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "GetExchangeOrganizationDomains", - new SqlParameter("@ItemID", itemId) - ); - } - public static IDataReader GetExchangeAccounts(int itemId, int accountType) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "GetExchangeAccounts", - new SqlParameter("@ItemID", itemId), - new SqlParameter("@AccountType", accountType) - ); - } + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetExchangeAccounts", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@AccountType", accountType) + ); + } public static IDataReader GetExchangeMailboxes(int itemId) { @@ -2461,9 +2636,9 @@ namespace WebsitePanel.EnterpriseServer ); } - public static DataSet GetExchangeAccountsPaged(int actorId, int itemId, string accountTypes, + public static DataSet GetExchangeAccountsPaged(int actorId, int itemId, string accountTypes, string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows) - { + { // check input parameters string[] types = accountTypes.Split(','); for (int i = 0; i < types.Length; i++) @@ -2480,41 +2655,41 @@ namespace WebsitePanel.EnterpriseServer string searchTypes = String.Join(",", types); - return SqlHelper.ExecuteDataset( - ConnectionString, - CommandType.StoredProcedure, - "GetExchangeAccountsPaged", - new SqlParameter("@ActorID", actorId), - new SqlParameter("@ItemID", itemId), + return SqlHelper.ExecuteDataset( + ConnectionString, + CommandType.StoredProcedure, + "GetExchangeAccountsPaged", + new SqlParameter("@ActorID", actorId), + new SqlParameter("@ItemID", itemId), new SqlParameter("@AccountTypes", searchTypes), - new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)), - new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)), - new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)), - new SqlParameter("@StartRow", startRow), - new SqlParameter("@MaximumRows", maximumRows) - ); - } + new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)), + new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)), + new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)), + new SqlParameter("@StartRow", startRow), + new SqlParameter("@MaximumRows", maximumRows) + ); + } - public static IDataReader SearchExchangeAccounts(int actorId, int itemId, bool includeMailboxes, + public static IDataReader SearchExchangeAccounts(int actorId, int itemId, bool includeMailboxes, bool includeContacts, bool includeDistributionLists, bool includeRooms, bool includeEquipment, string filterColumn, string filterValue, string sortColumn) - { - return SqlHelper.ExecuteReader( - ConnectionString, - CommandType.StoredProcedure, - "SearchExchangeAccounts", - new SqlParameter("@ActorID", actorId), - new SqlParameter("@ItemID", itemId), - new SqlParameter("@IncludeMailboxes", includeMailboxes), - new SqlParameter("@IncludeContacts", includeContacts), - new SqlParameter("@IncludeDistributionLists", includeDistributionLists), + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "SearchExchangeAccounts", + new SqlParameter("@ActorID", actorId), + new SqlParameter("@ItemID", itemId), + new SqlParameter("@IncludeMailboxes", includeMailboxes), + new SqlParameter("@IncludeContacts", includeContacts), + new SqlParameter("@IncludeDistributionLists", includeDistributionLists), new SqlParameter("@IncludeRooms", includeRooms), new SqlParameter("@IncludeEquipment", includeEquipment), - new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)), - new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)), - new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)) - ); - } + new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)), + new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)), + new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)) + ); + } public static IDataReader SearchExchangeAccount(int actorId, int accountType, string primaryEmailAddress) { @@ -2528,7 +2703,7 @@ namespace WebsitePanel.EnterpriseServer ); } - #endregion + #endregion #region Exchange Mailbox Plans public static int AddExchangeMailboxPlan(int itemID, string mailboxPlan, bool enableActiveSync, bool enableIMAP, bool enableMAPI, bool enableOWA, bool enablePOP, @@ -2562,11 +2737,11 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@ProhibitSendReceivePct", prohibitSendReceivePct), new SqlParameter("@HideFromAddressBook", hideFromAddressBook), new SqlParameter("@MailboxPlanType", mailboxPlanType), - new SqlParameter("@AllowLitigationHold",enabledLitigationHold), + new SqlParameter("@AllowLitigationHold", enabledLitigationHold), new SqlParameter("@RecoverableItemsWarningPct", recoverabelItemsWarning), - new SqlParameter("@RecoverableItemsSpace",recoverabelItemsSpace), - new SqlParameter("@LitigationHoldUrl",litigationHoldUrl), - new SqlParameter("@LitigationHoldMsg",litigationHoldMsg) + new SqlParameter("@RecoverableItemsSpace", recoverabelItemsSpace), + new SqlParameter("@LitigationHoldUrl", litigationHoldUrl), + new SqlParameter("@LitigationHoldMsg", litigationHoldMsg) ); return Convert.ToInt32(outParam.Value); @@ -2604,8 +2779,8 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@AllowLitigationHold", enabledLitigationHold), new SqlParameter("@RecoverableItemsWarningPct", recoverabelItemsWarning), new SqlParameter("@RecoverableItemsSpace", recoverabelItemsSpace), - new SqlParameter("@LitigationHoldUrl",litigationHoldUrl), - new SqlParameter("@LitigationHoldMsg",litigationHoldMsg) + new SqlParameter("@LitigationHoldUrl", litigationHoldUrl), + new SqlParameter("@LitigationHoldMsg", litigationHoldMsg) ); } @@ -2685,16 +2860,16 @@ namespace WebsitePanel.EnterpriseServer { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "DeleteOrganizationUsers", new SqlParameter("@ItemID", itemId)); } - + public static int GetItemIdByOrganizationId(string id) - { - object obj =SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetItemIdByOrganizationId", + { + object obj = SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetItemIdByOrganizationId", new SqlParameter("@OrganizationId", id)); return (obj == null || DBNull.Value == obj) ? 0 : (int)obj; - + } - + public static IDataReader GetOrganizationStatistics(int itemId) { return SqlHelper.ExecuteReader( @@ -2703,7 +2878,7 @@ namespace WebsitePanel.EnterpriseServer "GetOrganizationStatistics", new SqlParameter("@ItemID", itemId) ); - } + } public static IDataReader SearchOrganizationAccounts(int actorId, int itemId, string filterColumn, string filterValue, string sortColumn, bool includeMailboxes) @@ -2724,7 +2899,7 @@ namespace WebsitePanel.EnterpriseServer #endregion #region CRM - + public static int GetCRMUsersCount(int itemId, string name, string email) { SqlParameter[] sqlParams = new SqlParameter[] @@ -2734,19 +2909,19 @@ namespace WebsitePanel.EnterpriseServer GetFilterSqlParam("@Email", email), }; - return (int) SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetCRMUsersCount", sqlParams); + return (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetCRMUsersCount", sqlParams); } - + private static SqlParameter GetFilterSqlParam(string paramName, string value) { if (string.IsNullOrEmpty(value)) return new SqlParameter(paramName, DBNull.Value); - return new SqlParameter(paramName, value); + return new SqlParameter(paramName, value); } - public static IDataReader GetCrmUsers(int itemId, string sortColumn, string sortDirection, string name, string email, int startRow, int count ) + public static IDataReader GetCrmUsers(int itemId, string sortColumn, string sortDirection, string name, string email, int startRow, int count) { SqlParameter[] sqlParams = new SqlParameter[] { @@ -2759,7 +2934,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("Count", count) }; - + return SqlHelper.ExecuteReader( ConnectionString, CommandType.StoredProcedure, @@ -2769,7 +2944,7 @@ namespace WebsitePanel.EnterpriseServer public static IDataReader GetCRMOrganizationUsers(int itemId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, "GetCRMOrganizationUsers", - new SqlParameter[] {new SqlParameter("@ItemID", itemId)}); + new SqlParameter[] { new SqlParameter("@ItemID", itemId) }); } public static void CreateCRMUser(int itemId, Guid crmId, Guid businessUnitId) @@ -2781,7 +2956,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@CrmUserID", crmId), new SqlParameter("@BusinessUnitId", businessUnitId) }); - + } @@ -2793,14 +2968,13 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@AccountID", itemId) }); return reader; - + } public static int GetCrmUserCount(int itemId) { - return (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetOrganizationCRMUserCount", - new SqlParameter[] - { new SqlParameter("@ItemID",itemId)}); + return (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "GetOrganizationCRMUserCount", + new SqlParameter[] { new SqlParameter("@ItemID", itemId) }); } public static void DeleteCrmOrganization(int organizationId) @@ -2808,8 +2982,8 @@ namespace WebsitePanel.EnterpriseServer SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "DeleteCRMOrganization", new SqlParameter[] { new SqlParameter("@ItemID", organizationId) }); } - - #endregion + + #endregion #region VPS - Virtual Private Servers @@ -2830,8 +3004,8 @@ namespace WebsitePanel.EnterpriseServer } #endregion - public static IDataReader GetVirtualMachinesForPCPaged(int actorId, int packageId, string filterColumn, string filterValue, - string sortColumn, int startRow, int maximumRows, bool recursive) + public static IDataReader GetVirtualMachinesForPCPaged(int actorId, int packageId, string filterColumn, string filterValue, + string sortColumn, int startRow, int maximumRows, bool recursive) { IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, "GetVirtualMachinesPagedForPC", @@ -3027,7 +3201,7 @@ namespace WebsitePanel.EnterpriseServer #endregion #region BlackBerry - + public static void AddBlackBerryUser(int accountId) { SqlHelper.ExecuteNonQuery(ConnectionString, @@ -3038,8 +3212,8 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@AccountID", accountId) }); } - - + + public static bool CheckBlackBerryUserExists(int accountId) { int res = (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "CheckBlackBerryUserExists", @@ -3091,7 +3265,7 @@ namespace WebsitePanel.EnterpriseServer { new SqlParameter("@AccountID", accountId) }); - + } #endregion @@ -3178,142 +3352,142 @@ namespace WebsitePanel.EnterpriseServer #endregion - #region SSL - public static int AddSSLRequest(int actorId, int packageId, int siteID, int userID, string friendlyname, string hostname, string csr, int csrLength, string distinguishedName, bool isRenewal, int previousID) - { - SqlParameter prmId = new SqlParameter("@SSLID", SqlDbType.Int); - prmId.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "AddSSLRequest", prmId, - new SqlParameter("@ActorId", actorId), - new SqlParameter("@PackageId", packageId), - new SqlParameter("@UserID", userID), - new SqlParameter("@WebSiteID", siteID), - new SqlParameter("@FriendlyName", friendlyname), - new SqlParameter("@HostName", hostname), - new SqlParameter("@CSR", csr), - new SqlParameter("@CSRLength", csrLength), - new SqlParameter("@DistinguishedName", distinguishedName), - new SqlParameter("@IsRenewal", isRenewal), - new SqlParameter("@PreviousId", previousID) - ); - return Convert.ToInt32(prmId.Value); + #region SSL + public static int AddSSLRequest(int actorId, int packageId, int siteID, int userID, string friendlyname, string hostname, string csr, int csrLength, string distinguishedName, bool isRenewal, int previousID) + { + SqlParameter prmId = new SqlParameter("@SSLID", SqlDbType.Int); + prmId.Direction = ParameterDirection.Output; + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddSSLRequest", prmId, + new SqlParameter("@ActorId", actorId), + new SqlParameter("@PackageId", packageId), + new SqlParameter("@UserID", userID), + new SqlParameter("@WebSiteID", siteID), + new SqlParameter("@FriendlyName", friendlyname), + new SqlParameter("@HostName", hostname), + new SqlParameter("@CSR", csr), + new SqlParameter("@CSRLength", csrLength), + new SqlParameter("@DistinguishedName", distinguishedName), + new SqlParameter("@IsRenewal", isRenewal), + new SqlParameter("@PreviousId", previousID) + ); + return Convert.ToInt32(prmId.Value); - } + } - public static void CompleteSSLRequest(int actorId, int packageId, int id, string certificate, string distinguishedName, string serialNumber, byte[] hash, DateTime validFrom, DateTime expiryDate) - { - SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "CompleteSSLRequest", - new SqlParameter("@ActorID", actorId), - new SqlParameter("@PackageID", packageId), - new SqlParameter("@ID", id), - new SqlParameter("@DistinguishedName", distinguishedName), - new SqlParameter("@Certificate", certificate), - new SqlParameter("@SerialNumber", serialNumber), - new SqlParameter("@Hash", Convert.ToBase64String(hash)), - new SqlParameter("@ValidFrom", validFrom), - new SqlParameter("@ExpiryDate", expiryDate)); + public static void CompleteSSLRequest(int actorId, int packageId, int id, string certificate, string distinguishedName, string serialNumber, byte[] hash, DateTime validFrom, DateTime expiryDate) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "CompleteSSLRequest", + new SqlParameter("@ActorID", actorId), + new SqlParameter("@PackageID", packageId), + new SqlParameter("@ID", id), + new SqlParameter("@DistinguishedName", distinguishedName), + new SqlParameter("@Certificate", certificate), + new SqlParameter("@SerialNumber", serialNumber), + new SqlParameter("@Hash", Convert.ToBase64String(hash)), + new SqlParameter("@ValidFrom", validFrom), + new SqlParameter("@ExpiryDate", expiryDate)); - } + } - public static void AddPFX(int actorId, int packageId, int siteID, int userID, string hostname, string friendlyName, string distinguishedName, int csrLength, string serialNumber, DateTime validFrom, DateTime expiryDate) - { - SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "AddPFX", - new SqlParameter("@ActorId", actorId), - new SqlParameter("@PackageId", packageId), - new SqlParameter("@UserID", userID), - new SqlParameter("@WebSiteID", siteID), - new SqlParameter("@FriendlyName", friendlyName), - new SqlParameter("@HostName", hostname), - new SqlParameter("@CSRLength", csrLength), - new SqlParameter("@DistinguishedName", distinguishedName), - new SqlParameter("@SerialNumber", serialNumber), - new SqlParameter("@ValidFrom", validFrom), - new SqlParameter("@ExpiryDate", expiryDate)); + public static void AddPFX(int actorId, int packageId, int siteID, int userID, string hostname, string friendlyName, string distinguishedName, int csrLength, string serialNumber, DateTime validFrom, DateTime expiryDate) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddPFX", + new SqlParameter("@ActorId", actorId), + new SqlParameter("@PackageId", packageId), + new SqlParameter("@UserID", userID), + new SqlParameter("@WebSiteID", siteID), + new SqlParameter("@FriendlyName", friendlyName), + new SqlParameter("@HostName", hostname), + new SqlParameter("@CSRLength", csrLength), + new SqlParameter("@DistinguishedName", distinguishedName), + new SqlParameter("@SerialNumber", serialNumber), + new SqlParameter("@ValidFrom", validFrom), + new SqlParameter("@ExpiryDate", expiryDate)); - } + } - public static DataSet GetSSL(int actorId, int packageId, int id) - { - return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetSSL", - new SqlParameter("@SSLID", id)); + public static DataSet GetSSL(int actorId, int packageId, int id) + { + return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetSSL", + new SqlParameter("@SSLID", id)); - } + } - public static DataSet GetCertificatesForSite(int actorId, int packageId, int siteId) - { - return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetCertificatesForSite", - new SqlParameter("@ActorId", actorId), - new SqlParameter("@PackageId", packageId), - new SqlParameter("@websiteid", siteId)); + public static DataSet GetCertificatesForSite(int actorId, int packageId, int siteId) + { + return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetCertificatesForSite", + new SqlParameter("@ActorId", actorId), + new SqlParameter("@PackageId", packageId), + new SqlParameter("@websiteid", siteId)); - } + } - public static DataSet GetPendingCertificates(int actorId, int packageId, int id, bool recursive) - { - return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetPendingSSLForWebsite", - new SqlParameter("@ActorId", actorId), - new SqlParameter("@PackageId", packageId), - new SqlParameter("@websiteid", id), - new SqlParameter("@Recursive", recursive)); + public static DataSet GetPendingCertificates(int actorId, int packageId, int id, bool recursive) + { + return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetPendingSSLForWebsite", + new SqlParameter("@ActorId", actorId), + new SqlParameter("@PackageId", packageId), + new SqlParameter("@websiteid", id), + new SqlParameter("@Recursive", recursive)); - } + } - public static IDataReader GetSSLCertificateByID(int actorId, int id) - { - return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetSSLCertificateByID", - new SqlParameter("@ActorId", actorId), - new SqlParameter("@ID", id)); - } + public static IDataReader GetSSLCertificateByID(int actorId, int id) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetSSLCertificateByID", + new SqlParameter("@ActorId", actorId), + new SqlParameter("@ID", id)); + } - public static int CheckSSL(int siteID, bool renewal) - { - SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Int); - prmId.Direction = ParameterDirection.Output; + public static int CheckSSL(int siteID, bool renewal) + { + SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Int); + prmId.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "CheckSSL", - prmId, - new SqlParameter("@siteID", siteID), - new SqlParameter("@Renewal", renewal)); + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "CheckSSL", + prmId, + new SqlParameter("@siteID", siteID), + new SqlParameter("@Renewal", renewal)); - return Convert.ToInt32(prmId.Value); - } + return Convert.ToInt32(prmId.Value); + } - public static IDataReader GetSiteCert(int actorId, int siteID) - { - return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetSSLCertificateByID", - new SqlParameter("@ActorId", actorId), - new SqlParameter("@ID", siteID)); - } + public static IDataReader GetSiteCert(int actorId, int siteID) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetSSLCertificateByID", + new SqlParameter("@ActorId", actorId), + new SqlParameter("@ID", siteID)); + } - public static void DeleteCertificate(int actorId, int packageId, int id) - { - SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "DeleteCertificate", - new SqlParameter("@ActorID", actorId), - new SqlParameter("@PackageID", packageId), - new SqlParameter("@id", id)); - } + public static void DeleteCertificate(int actorId, int packageId, int id) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "DeleteCertificate", + new SqlParameter("@ActorID", actorId), + new SqlParameter("@PackageID", packageId), + new SqlParameter("@id", id)); + } - public static bool CheckSSLExistsForWebsite(int siteId) - { - SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Bit); - prmId.Direction = ParameterDirection.Output; - SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "CheckSSLExistsForWebsite", prmId, - new SqlParameter("@siteID", siteId), - new SqlParameter("@SerialNumber", "")); - return Convert.ToBoolean(prmId.Value); - } - #endregion + public static bool CheckSSLExistsForWebsite(int siteId) + { + SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Bit); + prmId.Direction = ParameterDirection.Output; + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "CheckSSLExistsForWebsite", prmId, + new SqlParameter("@siteID", siteId), + new SqlParameter("@SerialNumber", "")); + return Convert.ToBoolean(prmId.Value); + } + #endregion #region Lync @@ -3470,7 +3644,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@IsDefault", lyncUserPlan.IsDefault) ); } - + public static void DeleteLyncUserPlan(int lyncUserPlanId) { SqlHelper.ExecuteNonQuery( @@ -3588,11 +3762,11 @@ namespace WebsitePanel.EnterpriseServer FROM Providers WHERE ProviderName = @ProviderName", new SqlParameter("@ProviderName", providerName)); - + reader.Read(); - providerId = (int) reader["ProviderID"]; - groupId = (int) reader["GroupID"]; + providerId = (int)reader["ProviderID"]; + groupId = (int)reader["GroupID"]; } @@ -3663,7 +3837,7 @@ namespace WebsitePanel.EnterpriseServer GetHeliconZooProviderAndGroup("HeliconZoo", out providerId, out groupId); - IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text, + IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.Text, @"SELECT HostingPlanQuotas.QuotaID, Quotas.QuotaName, Quotas.QuotaDescription FROM HostingPlanQuotas INNER JOIN Packages ON HostingPlanQuotas.PlanID = Packages.PlanID diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/EcommerceProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/EcommerceProvider.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/EcommerceProvider.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/EcommerceProvider.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/SQLHelper.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/SQLHelper.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/SQLHelper.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/SQLHelper.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs index 26a3fac9..99e2d55d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs @@ -200,8 +200,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SQL_DATABASE", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("SQL_DATABASE", "UPDATE", origItem.Name, item.Id); + TaskManager.WriteParameter("Provider", origItem.GroupName); try @@ -237,9 +237,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MSSQL_DATABASES_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("SQL_DATABASE", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; - TaskManager.WriteParameter("Provider", origItem.GroupName); + TaskManager.StartTask("SQL_DATABASE", "DELETE", origItem.Name, itemId, new BackgroundTaskParameter("Provider", origItem.GroupName)); try { @@ -305,8 +303,7 @@ namespace WebsitePanel.EnterpriseServer return null; // place log record - TaskManager.StartTask("SQL_DATABASE", "BACKUP", item.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SQL_DATABASE", "BACKUP", item.Name, itemId); try { @@ -398,8 +395,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SQL_DATABASE", "RESTORE", item.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SQL_DATABASE", "RESTORE", item.Name, itemId); try { @@ -468,8 +464,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MSSQL_DATABASES_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("SQL_DATABASE", "TRUNCATE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SQL_DATABASE", "TRUNCATE", origItem.Name, itemId); try { @@ -701,8 +696,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SQL_USER", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("SQL_USER", "UPDATE", origItem.Name, item.Id); try { @@ -746,8 +740,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MSSQL_USERS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("SQL_USER", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SQL_USER", "DELETE", origItem.Name, itemId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs index de9aa5fd..10d4bbea 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs @@ -214,12 +214,10 @@ namespace WebsitePanel.EnterpriseServer // if (zoneItem != null) { - TaskManager.StartTask("DNS_ZONE", "DELETE", zoneItem.Name); + TaskManager.StartTask("DNS_ZONE", "DELETE", zoneItem.Name, zoneItemId); // try { - // - TaskManager.ItemId = zoneItemId; // delete DNS zone DNSServer dns = new DNSServer(); ServiceProviderProxy.Init(dns, zoneItem.ServiceId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/CategoryController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/CategoryController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/CategoryController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/CategoryController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs index 05920e1a..1fcab30c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs @@ -84,8 +84,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.ContractSystem // result.Succeed = true; result.SetProperty("ContractId", contractId); + // Add contract object - ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = GetContract(contractId); + ES.TaskManager.UpdateParam(SystemTaskParams.PARAM_CONTRACT, GetContract(contractId)); + // return result; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Helpers.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Helpers.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Helpers.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Helpers.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs similarity index 94% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs index bd06bd04..65ccd06e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs @@ -224,10 +224,15 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer InvoiceController.UpdateInvoice(invoice.InvoiceId, invoice.InvoiceNumber, invoice.DueDate, invoice.Total, invoice.SubTotal, invoice.TaxationId, invoice.TaxAmount, invoice.Currency); // - ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = contract; - ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE] = invoice; - ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE_LINES] = invoiceLines; - ES.TaskManager.TaskParameters[SystemTaskParams.PARAM_EXTRA_ARGS] = extraArgs; + + Hashtable parameters = new Hashtable(); + + parameters.Add(SystemTaskParams.PARAM_CONTRACT, contract); + parameters.Add(SystemTaskParams.PARAM_INVOICE, invoice); + parameters.Add(SystemTaskParams.PARAM_INVOICE_LINES, invoiceLines); + parameters.Add(SystemTaskParams.PARAM_EXTRA_ARGS, extraArgs); + + TaskManager.UpdateParams(parameters); // return result; } @@ -248,7 +253,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer invoiceNumber, dueDate, total, subTotal, taxationId, taxAmount, currency); } - internal static Invoice GetCustomerInvoiceInternally(int invoiceId) + public static Invoice GetCustomerInvoiceInternally(int invoiceId) { return ES.ObjectUtils.FillObjectFromDataReader( EcommerceProvider.GetCustomerInvoice(ES.SecurityContext.User.UserId, invoiceId)); @@ -260,7 +265,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer EcommerceProvider.GetCustomerInvoiceItems(ES.SecurityContext.User.UserId, invoiceId)); } - internal static string GetCustomerInvoiceFormattedInternally(int invoiceId, string cultureName) + public static string GetCustomerInvoiceFormattedInternally(int invoiceId, string cultureName) { Invoice invoice = GetCustomerInvoiceInternally(invoiceId); // diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/MiscController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/MiscController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/MiscController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/MiscController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/PaymentGatewayController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/PaymentGatewayController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/PaymentGatewayController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/PaymentGatewayController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/DomainNameController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/DomainNameController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/DomainNameController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/DomainNameController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingAddonController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingAddonController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingAddonController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingAddonController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs index 196c6f88..dca4232f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs @@ -162,7 +162,8 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer TaskManager.WriteParameter(USERNAME_PARAM, context.ConsumerInfo[ContractAccount.USERNAME]); TaskManager.WriteParameter(SVC_PARAM, context.ServiceInfo.ServiceName); TaskManager.WriteParameter(SVC_ID_PARAM, context.ServiceInfo.ServiceId); - TaskManager.TaskParameters[SystemTaskParams.PARAM_SEND_EMAIL] = context.SendEmail; + + TaskManager.UpdateParam(SystemTaskParams.PARAM_SEND_EMAIL, context.SendEmail); // 0. Do security checks if (!CheckOperationClientPermissions(result)) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/IServiceProvisioning.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/IServiceProvisioning.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/IServiceProvisioning.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/IServiceProvisioning.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ProvisioningContext.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ProvisioningContext.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ProvisioningContext.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ProvisioningContext.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs similarity index 92% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs index 50673c48..1988b103 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs @@ -235,10 +235,13 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer protected void SetOutboundParameters(ProvisioningContext context) { // set task outbound parameters - TaskManager.TaskParameters[SystemTaskParams.PARAM_SERVICE] = context.ServiceInfo; - TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = context.ContractInfo; - TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT_ACCOUNT] = context.ConsumerInfo; - TaskManager.TaskParameters[SystemTaskParams.PARAM_SEND_EMAIL] = context.SendEmail; + Hashtable parameters = new Hashtable(); + parameters.Add(SystemTaskParams.PARAM_SERVICE, context.ServiceInfo); + parameters.Add(SystemTaskParams.PARAM_CONTRACT, context.ContractInfo); + parameters.Add(SystemTaskParams.PARAM_CONTRACT_ACCOUNT, context.ConsumerInfo); + parameters.Add(SystemTaskParams.PARAM_SEND_EMAIL, context.SendEmail); + + TaskManager.UpdateParams(parameters); } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ServiceHandlers/ServiceHandlerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorefrontController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorefrontController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorefrontController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorefrontController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs index 737fdb5c..6ea4ddc6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs @@ -763,7 +763,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer return EcommerceProvider.DeleteTaxation(SecurityContext.User.UserId, userId, taxationId); } - internal static void SetPaymentProfile(string contractId, CheckoutDetails newProfile) + public static void SetPaymentProfile(string contractId, CheckoutDetails newProfile) { try { @@ -864,7 +864,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer return details; } - internal static bool PaymentProfileExists(string contractId) + public static bool PaymentProfileExists(string contractId) { return EcommerceProvider.PaymentProfileExists(SecurityContext.User.UserId, contractId); } @@ -1145,10 +1145,15 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer // int resultCode = EcommerceProvider.UpdateCustomerPayment(SecurityContext.User.UserId, paymentId, invoiceId, transactionId, total, currency, methodName, pluginId, (int)status); + // - TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = ContractSystem.ContractController.GetContract(contractId); - TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE] = InvoiceController.GetCustomerInvoiceInternally(invoiceId); - TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(paymentId); + Hashtable parameters = new Hashtable(); + parameters[SystemTaskParams.PARAM_CONTRACT] = ContractSystem.ContractController.GetContract(contractId); + parameters[SystemTaskParams.PARAM_INVOICE] = InvoiceController.GetCustomerInvoiceInternally(invoiceId); + parameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(paymentId); + + TaskManager.UpdateParams(parameters); + // return resultCode; } @@ -1209,9 +1214,12 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer // TRACE TaskManager.WriteParameter("PaymentID", resultCode); // - TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT] = contract; - TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE] = invoice; - TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(resultCode); + Hashtable parameters = new Hashtable(); + parameters[SystemTaskParams.PARAM_CONTRACT] = contract; + parameters[SystemTaskParams.PARAM_INVOICE] = invoice; + parameters[SystemTaskParams.PARAM_PAYMENT] = GetCustomerPayment(resultCode); + + TaskManager.UpdateParams(parameters); // return resultCode; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/SystemPluginController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/SystemPluginController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/SystemPluginController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/SystemPluginController.cs index c9f01256..e93e8cf4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/SystemPluginController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/SystemPluginController.cs @@ -252,7 +252,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer EcommerceProvider.GetSupportedPluginById(pluginId)); } - internal static CheckoutFormParams GetCheckoutFormParams(string contractId, int invoiceId, + public static CheckoutFormParams GetCheckoutFormParams(string contractId, int invoiceId, string methodName, KeyValueBunch options) { Contract contractInfo = ContractSystem.ContractController.GetContract(contractId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs similarity index 81% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs index d13af554..114c09e6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs @@ -45,9 +45,11 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers /// public override void OnComplete() { - if (!TaskManager.HasErrors) + BackgroundTask topTask = TaskManager.TopTask; + + if (!TaskManager.HasErrors(topTask)) { - switch (TaskManager.TaskName) + switch (topTask.TaskName) { case SystemTasks.SVC_SUSPEND: case SystemTasks.SVC_CANCEL: @@ -72,7 +74,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // send an e-mail notification try { - bool sendNotification = (bool)TaskManager.TaskParameters[SystemTaskParams.PARAM_SEND_EMAIL]; + BackgroundTask topTask = TaskManager.TopTask; + + bool sendNotification = Utils.ParseBool(topTask.GetParamValue(SystemTaskParams.PARAM_SEND_EMAIL), false); + // Ensure notification is required if (!sendNotification) { @@ -80,7 +85,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers return; } - Service service = (Service)TaskManager.TaskParameters[SystemTaskParams.PARAM_SERVICE]; + Service service = (Service)topTask.GetParamValue(SystemTaskParams.PARAM_SERVICE); int smtpResult = 0; switch (service.Status) { @@ -112,9 +117,11 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // try { + BackgroundTask topTask = TaskManager.TopTask; + // Read task parameters - Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE]; - CustomerPayment payment = (CustomerPayment)TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT]; + Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); + CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT); // if (payment.Status == TransactionStatus.Approved) { @@ -139,11 +146,13 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // try { + BackgroundTask topTask = TaskManager.TopTask; + // Read task parameters - Contract contract = (Contract)TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT]; - Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE]; - List invoiceLines = (List)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE_LINES]; - KeyValueBunch extraArgs = (KeyValueBunch)TaskManager.TaskParameters[SystemTaskParams.PARAM_EXTRA_ARGS]; + Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); + Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); + List invoiceLines = (List)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE_LINES); + KeyValueBunch extraArgs = (KeyValueBunch)topTask.GetParamValue(SystemTaskParams.PARAM_EXTRA_ARGS); // modify invoice direct url if (extraArgs != null && !String.IsNullOrEmpty(extraArgs["InvoiceDirectURL"])) extraArgs["InvoiceDirectURL"] += "&InvoiceId=" + invoice.InvoiceId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs similarity index 82% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs index 1ce637c4..b7b8efec 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs @@ -44,9 +44,11 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers public override void OnComplete() { - if (!TaskManager.HasErrors) + BackgroundTask topTask = TaskManager.TopTask; + + if (!TaskManager.HasErrors(topTask)) { - switch (TaskManager.TaskName) + switch (topTask.TaskName) { case SystemTasks.TASK_ADD_INVOICE: RegisterInvoiceActivationTrigger(); @@ -65,7 +67,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterInvoiceActivationTrigger() { // Read contract invoice - Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE]; + Invoice invoice = (Invoice)TaskManager.TopTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); // TriggerSystem.TriggerController.AddSystemTrigger(invoice.InvoiceId.ToString(), ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger)); @@ -73,10 +75,12 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterContractActivationTrigger() { + BackgroundTask topTask = TaskManager.TopTask; + // Ensure the contract has been registered successfully - if (TaskManager.TaskParameters.ContainsKey(SystemTaskParams.PARAM_CONTRACT)) + if (topTask.ContainsParam(SystemTaskParams.PARAM_CONTRACT)) { - Contract contract = (Contract)TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT]; + Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); // if (contract.Status == ContractStatus.Pending) { @@ -88,8 +92,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void ActivatePaymentSystemTriggers() { - CustomerPayment payment = (CustomerPayment)TaskManager.TaskParameters[SystemTaskParams.PARAM_PAYMENT]; - Contract contract = (Contract)TaskManager.TaskParameters[SystemTaskParams.PARAM_CONTRACT]; + BackgroundTask topTask = TaskManager.TopTask; + + CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT); + Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); // Run activate contract trigger if the transaction was approved if (payment.Status == TransactionStatus.Approved) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/CommonTrigger.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/CommonTrigger.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/CommonTrigger.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/CommonTrigger.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/TriggerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/TriggerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TriggerSystem/TriggerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TriggerSystem/TriggerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs similarity index 94% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs index d034cabb..e296c57e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs @@ -171,8 +171,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_ORG_STATS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_ORG_STATS", itemId); try { @@ -260,8 +259,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "CALCULATE_DISKSPACE"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "CALCULATE_DISKSPACE", itemId); try { @@ -348,8 +346,7 @@ namespace WebsitePanel.EnterpriseServer private static int ExtendToExchangeOrganization(ref Organization org) { // place log record - TaskManager.StartTask("EXCHANGE", "CREATE_ORG", org.Name); - TaskManager.TaskParameters["Organization ID"] = org.OrganizationId; + TaskManager.StartTask("EXCHANGE", "CREATE_ORG", org.Name, new BackgroundTaskParameter("Organization ID", org.OrganizationId)); try { @@ -575,8 +572,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_ORG"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_ORG", itemId); try { @@ -613,8 +609,7 @@ namespace WebsitePanel.EnterpriseServer public static Organization GetOrganizationStorageLimits(int itemId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_ORG_LIMITS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_ORG_LIMITS", itemId); try { @@ -638,8 +633,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_ORG_LIMITS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_ORG_LIMITS", itemId); try { @@ -724,8 +718,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOXES_STATS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOXES_STATS", itemId); try { @@ -753,8 +746,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeMailboxStatistics GetMailboxStatistics(int itemId, int accountId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_STATS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_STATS", itemId); try { @@ -818,8 +810,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_FOLDERS_STATS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_FOLDERS_STATS", itemId); try { @@ -865,8 +856,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_ACTIVESYNC_POLICY"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_ACTIVESYNC_POLICY", itemId); try { @@ -917,8 +907,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_ACTIVESYNC_POLICY"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_ACTIVESYNC_POLICY", itemId); try { @@ -1171,8 +1160,7 @@ namespace WebsitePanel.EnterpriseServer public static bool CheckAccountCredentials(int itemId, string email, string password) { // place log record - TaskManager.StartTask("EXCHANGE", "AUTHENTICATE", email); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "AUTHENTICATE", email, itemId); try { @@ -1244,7 +1232,7 @@ namespace WebsitePanel.EnterpriseServer int counter = 0; bool bFound = false; - //if (!AccountExists(accountName)) return accountName; + if (!AccountExists(accountName)) return accountName; do { @@ -1396,9 +1384,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "ADD_DOMAIN"); - TaskManager.TaskParameters["Domain ID"] = domainId; - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "ADD_DOMAIN", itemId, new BackgroundTaskParameter("Domain ID", domainId)); try { @@ -1469,10 +1455,12 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "CHANGE_DOMAIN_TYPE"); - TaskManager.TaskParameters["Domain ID"] = domainId; - TaskManager.TaskParameters["Domain Type"] = domainType.ToString(); - TaskManager.ItemId = itemId; + + List parameters = new List(); + parameters.Add(new BackgroundTaskParameter("Domain ID", domainId)); + parameters.Add(new BackgroundTaskParameter("Domain Type", domainType.ToString())); + + TaskManager.StartTask("EXCHANGE", "CHANGE_DOMAIN_TYPE", itemId, parameters); try { @@ -1527,9 +1515,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_DOMAIN"); - TaskManager.TaskParameters["Domain ID"] = domainId; - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_DOMAIN", itemId, new BackgroundTaskParameter("Domain ID", domainId)); try { @@ -1632,8 +1618,8 @@ namespace WebsitePanel.EnterpriseServer // place log record - TaskManager.StartTask("EXCHANGE", "CREATE_MAILBOX"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "CREATE_MAILBOX", itemId); + bool userCreated = false; Organization org = null; try @@ -1824,8 +1810,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DISABLE_MAILBOX"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DISABLE_MAILBOX", itemId); try { @@ -1873,8 +1858,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_MAILBOX"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_MAILBOX", itemId); try { @@ -1953,8 +1937,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_GENERAL", itemId); try { @@ -1989,8 +1972,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL", itemId); try { @@ -2036,8 +2018,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeEmailAddress[] GetMailboxEmailAddresses(int itemId, int accountId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_ADDRESSES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_ADDRESSES", itemId); try { @@ -2060,8 +2041,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "ADD_MAILBOX_ADDRESS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "ADD_MAILBOX_ADDRESS", itemId); try { @@ -2123,8 +2103,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_MAILBOX_ADDRESS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_MAILBOX_ADDRESS", itemId); try { @@ -2183,8 +2162,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_MAILBOX_ADDRESSES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_MAILBOX_ADDRESSES", itemId); try { @@ -2238,8 +2216,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_MAILFLOW", itemId); try { @@ -2278,8 +2255,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_MAILFLOW", itemId); try { @@ -2331,8 +2307,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_ADVANCED"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_ADVANCED", itemId); try { @@ -2368,8 +2343,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL", itemId); try { @@ -2539,8 +2513,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeMailbox GetMailboxPermissions(int itemId, int accountId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_PERMISSIONS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_PERMISSIONS", itemId); try { @@ -2576,8 +2549,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_MAILBOX_PERMISSIONS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_MAILBOX_PERMISSIONS", itemId); try { @@ -2625,8 +2597,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_MAILBOXPLAN"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_MAILBOXPLAN", itemId); try { @@ -2736,8 +2707,7 @@ namespace WebsitePanel.EnterpriseServer public static List GetExchangeMailboxPlans(int itemId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLANS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLANS", itemId); try { @@ -2819,8 +2789,7 @@ namespace WebsitePanel.EnterpriseServer { // place log record - TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLAN"); - TaskManager.ItemId = mailboxPlanId; + TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLAN", mailboxPlanId); try { @@ -2840,8 +2809,7 @@ namespace WebsitePanel.EnterpriseServer public static int AddExchangeMailboxPlan(int itemID, ExchangeMailboxPlan mailboxPlan) { // place log record - TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_MAILBOXPLAN"); - TaskManager.ItemId = itemID; + TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_MAILBOXPLAN", itemID); try { @@ -2910,8 +2878,7 @@ namespace WebsitePanel.EnterpriseServer public static int UpdateExchangeMailboxPlan(int itemID, ExchangeMailboxPlan mailboxPlan) { // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_MAILBOXPLAN"); - TaskManager.ItemId = itemID; + TaskManager.StartTask("EXCHANGE", "UPDATE_EXCHANGE_MAILBOXPLAN", itemID); try { @@ -2983,8 +2950,7 @@ namespace WebsitePanel.EnterpriseServer public static int DeleteExchangeMailboxPlan(int itemID, int mailboxPlanId) { - TaskManager.StartTask("EXCHANGE", "DELETE_EXCHANGE_MAILBOXPLAN"); - TaskManager.ItemId = itemID; + TaskManager.StartTask("EXCHANGE", "DELETE_EXCHANGE_MAILBOXPLAN", itemID); try { @@ -3005,8 +2971,7 @@ namespace WebsitePanel.EnterpriseServer public static void SetOrganizationDefaultExchangeMailboxPlan(int itemId, int mailboxPlanId) { - TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_MAILBOXPLAN"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_MAILBOXPLAN", itemId); try { @@ -3046,8 +3011,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_EXCHANGE_CONTACTS_QUOTA_LIMIT; // place log record - TaskManager.StartTask("EXCHANGE", "CREATE_CONTACT"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "CREATE_CONTACT", itemId); try { @@ -3114,10 +3078,9 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_CONTACT"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_CONTACT", itemId); - try + try { // load organization Organization org = GetOrganization(itemId); @@ -3170,8 +3133,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_CONTACT_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_CONTACT_GENERAL", itemId); try { @@ -3211,8 +3173,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_CONTACT_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_CONTACT_GENERAL", itemId); try { @@ -3292,8 +3253,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_CONTACT_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_CONTACT_MAILFLOW", itemId); try { @@ -3331,8 +3291,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_CONTACT_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_CONTACT_MAILFLOW", itemId); try { @@ -3384,8 +3343,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_EXCHANGE_DLISTS_QUOTA_LIMIT; // place log record - TaskManager.StartTask("EXCHANGE", "CREATE_DISTR_LIST"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "CREATE_DISTR_LIST", itemId); try { @@ -3465,8 +3423,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_DISTR_LIST"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_DISTR_LIST", itemId); try { @@ -3520,8 +3477,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_GENERAL", itemId); try { @@ -3558,8 +3514,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_DISTR_LIST_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_DISTR_LIST_GENERAL", itemId); try { @@ -3621,8 +3576,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_MAILFLOW", itemId); try { @@ -3660,8 +3614,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_DISTR_LIST_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_DISTR_LIST_MAILFLOW", itemId); try { @@ -3707,8 +3660,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeEmailAddress[] GetDistributionListEmailAddresses(int itemId, int accountId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_ADDRESSES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_DISTR_LIST_ADDRESSES", itemId); try { @@ -3731,8 +3683,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "ADD_DISTR_LIST_ADDRESS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "ADD_DISTR_LIST_ADDRESS", itemId); try { @@ -3786,8 +3737,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_DISTR_LIST_ADDRESS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_DISTR_LIST_ADDRESS", itemId); try { @@ -3839,8 +3789,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_DISTR_LIST_ADDRESSES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_DISTR_LIST_ADDRESSES", itemId); try { @@ -4020,8 +3969,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_EXCHANGE_PFOLDERS_QUOTA_LIMIT; // place log record - TaskManager.StartTask("EXCHANGE", "CREATE_PUBLIC_FOLDER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "CREATE_PUBLIC_FOLDER", itemId); try { @@ -4128,8 +4076,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_PUBLIC_FOLDER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_PUBLIC_FOLDER", itemId); try { @@ -4178,8 +4125,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "ENABLE_MAIL_PUBLIC_FOLDER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "ENABLE_MAIL_PUBLIC_FOLDER", itemId); try { @@ -4245,8 +4191,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DISABLE_MAIL_PUBLIC_FOLDER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DISABLE_MAIL_PUBLIC_FOLDER", itemId); try { @@ -4318,8 +4263,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_GENERAL", itemId); try { @@ -4357,8 +4301,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_PUBLIC_FOLDER_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_PUBLIC_FOLDER_GENERAL", itemId); try { @@ -4431,8 +4374,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_MAILFLOW", itemId); try { @@ -4470,8 +4412,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "UPDATE_PUBLIC_FOLDER_MAILFLOW"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "UPDATE_PUBLIC_FOLDER_MAILFLOW", itemId); try { @@ -4511,8 +4452,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeEmailAddress[] GetPublicFolderEmailAddresses(int itemId, int accountId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_ADDRESSES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_PUBLIC_FOLDER_ADDRESSES", itemId); try { @@ -4535,8 +4475,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "ADD_PUBLIC_FOLDER_ADDRESS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "ADD_PUBLIC_FOLDER_ADDRESS", itemId); try { @@ -4587,8 +4526,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_PUBLIC_FOLDER_ADDRESS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "SET_PRIMARY_PUBLIC_FOLDER_ADDRESS", itemId); try { @@ -4636,8 +4574,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("EXCHANGE", "DELETE_PUBLIC_FOLDER_ADDRESSES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "DELETE_PUBLIC_FOLDER_ADDRESSES", itemId); try { @@ -4817,8 +4754,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeMobileDevice[] GetMobileDevices(int itemId, int accountId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_MOBILE_DEVICES"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MOBILE_DEVICES", itemId); try { @@ -4848,8 +4784,7 @@ namespace WebsitePanel.EnterpriseServer public static ExchangeMobileDevice GetMobileDevice(int itemId, string deviceId) { // place log record - TaskManager.StartTask("EXCHANGE", "GET_MOBILE_DEVICE"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "GET_MOBILE_DEVICE", itemId); try { @@ -4876,8 +4811,7 @@ namespace WebsitePanel.EnterpriseServer public static void WipeDataFromDevice(int itemId, string deviceId) { // place log record - TaskManager.StartTask("EXCHANGE", "WIPE_DATA_FROM_DEVICE"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "WIPE_DATA_FROM_DEVICE", itemId); try { @@ -4904,8 +4838,7 @@ namespace WebsitePanel.EnterpriseServer public static void CancelRemoteWipeRequest(int itemId, string deviceId) { // place log record - TaskManager.StartTask("EXCHANGE", "CANCEL_REMOTE_WIPE_REQUEST"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "CANCEL_REMOTE_WIPE_REQUEST", itemId); try { @@ -4932,8 +4865,7 @@ namespace WebsitePanel.EnterpriseServer public static void RemoveDevice(int itemId, string deviceId) { // place log record - TaskManager.StartTask("EXCHANGE", "REMOVE_DEVICE"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("EXCHANGE", "REMOVE_DEVICE", itemId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs similarity index 94% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs index e9dc8e48..74dd8d78 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs @@ -169,8 +169,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path, packageId); try { @@ -204,8 +203,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "UPDATE_BINARY_CONTENT", path, packageId); try { @@ -260,8 +258,8 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("FILES", "DELETE_FILES"); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "DELETE_FILES", packageId); + if (files != null) { foreach (string file in files) @@ -302,8 +300,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "CREATE_FILE", path); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "CREATE_FILE", path, packageId); try { @@ -356,8 +353,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "CREATE_FOLDER", path); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "CREATE_FOLDER", path, packageId); try { @@ -396,8 +392,7 @@ namespace WebsitePanel.EnterpriseServer if (!DirectoryExists(packageId, destFolder)) return BusinessErrorCodes.ERROR_FILE_DEST_FOLDER_NONEXISTENT; // place log record - TaskManager.StartTask("FILES", "COPY_FILES"); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "COPY_FILES", packageId); TaskManager.WriteParameter("Destination folder", destFolder); if (files != null) { @@ -455,8 +450,8 @@ namespace WebsitePanel.EnterpriseServer if (!DirectoryExists(packageId, destFolder)) return BusinessErrorCodes.ERROR_FILE_DEST_FOLDER_NONEXISTENT; // place log record - TaskManager.StartTask("FILES", "MOVE_FILES"); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "MOVE_FILES", packageId); + TaskManager.WriteParameter("Destination folder", destFolder); if (files != null) { @@ -514,8 +509,8 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("FILES", "RENAME_FILE", oldPath); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "RENAME_FILE", oldPath, packageId); + TaskManager.WriteParameter("New name", newPath); try @@ -551,8 +546,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return null; // place log record - TaskManager.StartTask("FILES", "UNZIP_FILES"); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "UNZIP_FILES", packageId); + if (files != null) { foreach (string file in files) @@ -596,8 +591,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "ZIP_FILES", archivePath); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "ZIP_FILES", archivePath, packageId); + if (files != null) { foreach (string file in files) @@ -647,8 +642,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "ZIP_FILES", archivePath); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "ZIP_FILES", archivePath, packageId); + if (files != null) { foreach (string file in files) @@ -706,8 +701,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "CREATE_ACCESS_DATABASE", dbPath); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "CREATE_ACCESS_DATABASE", dbPath, packageId); try { @@ -737,8 +731,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("SPACE", "CALCULATE_DISKSPACE"); - TaskManager.ItemId = packageId; + TaskManager.StartTask("SPACE", "CALCULATE_DISKSPACE", packageId); try { @@ -813,8 +806,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("FILES", "SET_PERMISSIONS", path); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "SET_PERMISSIONS", path, packageId); try { @@ -925,8 +917,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "SET_QUOTA_ON_FOLDER", path); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "SET_QUOTA_ON_FOLDER", path, packageId); try { @@ -1046,8 +1037,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FILES", "DELETE_DIRECTORY_RECURSIVE", rootPath); - TaskManager.ItemId = packageId; + TaskManager.StartTask("FILES", "DELETE_DIRECTORY_RECURSIVE", rootPath, packageId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs index 4c174bf0..25541268 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs @@ -215,8 +215,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("FTP_ACCOUNT", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("FTP_ACCOUNT", "UPDATE", origItem.Name, item.Id); + TaskManager.WriteParameter("Folder", item.Folder); TaskManager.WriteParameter("CanRead", item.CanRead); TaskManager.WriteParameter("CanWrite", item.CanWrite); @@ -279,8 +279,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_FTP_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("FTP_ACCOUNT", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("FTP_ACCOUNT", "DELETE", origItem.Name, itemId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HeliconZoo/HeliconZooController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HeliconZoo/HeliconZooController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HeliconZoo/HeliconZooController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HeliconZoo/HeliconZooController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/BlackBerryController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/BlackBerryController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/BlackBerryController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/BlackBerryController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/CRMController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/CRMController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs index a72d5b59..e78b8a10 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs @@ -419,8 +419,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("LYNC", "DELETE_ORG"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("LYNC", "DELETE_ORG", itemId); try { @@ -622,8 +621,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution public static List GetLyncUserPlans(int itemId) { // place log record - TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLANS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLANS", itemId); try { @@ -705,8 +703,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution { // place log record - TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLAN"); - TaskManager.ItemId = lyncUserPlanId; + TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLAN", lyncUserPlanId); try { @@ -729,8 +726,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN"); - TaskManager.ItemId = itemID; + TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN", itemID); try { @@ -770,8 +766,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN"); - TaskManager.ItemId = itemID; + TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN", itemID); try { @@ -809,8 +804,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("LYNC", "DELETE_LYNC_LYNCPLAN"); - TaskManager.ItemId = itemID; + TaskManager.StartTask("LYNC", "DELETE_LYNC_LYNCPLAN", itemID); try { @@ -834,8 +828,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("LYNC", "SET_LYNC_LYNCUSERPLAN"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("LYNC", "SET_LYNC_LYNCUSERPLAN", itemId); try { @@ -861,8 +854,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution public static LyncFederationDomain[] GetFederationDomains(int itemId) { // place log record - TaskManager.StartTask("LYNC", "GET_LYNC_FEDERATIONDOMAINS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("LYNC", "GET_LYNC_FEDERATIONDOMAINS", itemId); LyncFederationDomain[] lyncFederationDomains = null; @@ -889,10 +881,11 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution public static LyncUserResult AddFederationDomain(int itemId, string domainName, string proxyFqdn) { - LyncUserResult res = TaskManager.StartResultTask("LYNC", "ADD_LYNC_FEDERATIONDOMAIN"); - TaskManager.ItemId = itemId; - TaskManager.TaskParameters["domainName"] = domainName; - TaskManager.TaskParameters["proxyFqdn"] = proxyFqdn; + List parameters = new List(); + parameters.Add(new BackgroundTaskParameter("domainName", domainName)); + parameters.Add(new BackgroundTaskParameter("proxyFqdn", proxyFqdn)); + + LyncUserResult res = TaskManager.StartResultTask("LYNC", "ADD_LYNC_FEDERATIONDOMAIN", itemId, parameters); int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); @@ -966,9 +959,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution public static LyncUserResult RemoveFederationDomain(int itemId, string domainName) { - LyncUserResult res = TaskManager.StartResultTask("LYNC", "REMOVE_LYNC_FEDERATIONDOMAIN"); - TaskManager.ItemId = itemId; - TaskManager.TaskParameters["domainName"] = domainName; + LyncUserResult res = TaskManager.StartResultTask("LYNC", "REMOVE_LYNC_FEDERATIONDOMAIN", itemId, new BackgroundTaskParameter("domainName", domainName)); int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncControllerAsync.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncControllerAsync.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncControllerAsync.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncControllerAsync.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OCSController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OCSController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OCSController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OCSController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index e8eb4767..95d5da6f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs @@ -291,9 +291,11 @@ namespace WebsitePanel.EnterpriseServer return errorCode; // place log record - TaskManager.StartTask("ORGANIZATION", "CREATE_ORG", organizationName); - TaskManager.TaskParameters["Organization ID"] = organizationId; - TaskManager.TaskParameters["DomainName"] = domainName; + List parameters = new List(); + parameters.Add(new BackgroundTaskParameter("Organization ID", organizationId)); + parameters.Add(new BackgroundTaskParameter("DomainName", domainName)); + + TaskManager.StartTask("ORGANIZATION", "CREATE_ORG", organizationName, parameters); try { @@ -411,9 +413,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("ORGANIZATION", "DELETE_DOMAIN"); - TaskManager.TaskParameters["Domain ID"] = domainId; - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "DELETE_DOMAIN", itemId, new BackgroundTaskParameter("Domain ID", domainId)); try { @@ -586,8 +586,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("ORGANIZATION", "DELETE_ORG"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "DELETE_ORG", itemId); try { @@ -869,8 +868,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("ORGANIZATION", "GET_ORG_STATS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "GET_ORG_STATS", itemId); try { @@ -1022,8 +1020,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("ORGANIZATION", "CHANGE_DOMAIN_TYPE", domainId); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "CHANGE_DOMAIN_TYPE", domainId, itemId); try { @@ -1060,8 +1057,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_EXCHANGE_DOMAINS_QUOTA_LIMIT; // place log record - TaskManager.StartTask("ORGANIZATION", "ADD_DOMAIN", domainName); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "ADD_DOMAIN", domainName, itemId); try { @@ -1291,8 +1287,8 @@ namespace WebsitePanel.EnterpriseServer // place log record - TaskManager.StartTask("ORGANIZATION", "CREATE_USER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "CREATE_USER", itemId); + TaskManager.Write("Organization ID :" + itemId); TaskManager.Write("name :" + name); TaskManager.Write("domain :" + domain); @@ -1414,8 +1410,8 @@ namespace WebsitePanel.EnterpriseServer // place log record - TaskManager.StartTask("ORGANIZATION", "IMPORT_USER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "IMPORT_USER", itemId); + TaskManager.Write("Organization ID :" + itemId); TaskManager.Write("account :" + accountName); TaskManager.Write("name :" + name); @@ -1572,8 +1568,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("ORGANIZATION", "DELETE_USER"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "DELETE_USER", itemId); try { @@ -1676,8 +1671,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // place log record - TaskManager.StartTask("ORGANIZATION", "GET_USER_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "GET_USER_GENERAL", itemId); OrganizationUser account = null; Organization org = null; @@ -1700,8 +1694,8 @@ namespace WebsitePanel.EnterpriseServer // get mailbox settings Organizations orgProxy = GetOrganizationProxy(org.ServiceId); string accountName = GetAccountName(account.AccountName); - - + + OrganizationUser retUser = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId); retUser.AccountId = accountId; retUser.AccountName = account.AccountName; @@ -1712,13 +1706,10 @@ namespace WebsitePanel.EnterpriseServer retUser.IsLyncUser = DataProvider.CheckLyncUserExists(accountId); retUser.IsBlackBerryUser = BlackBerryController.CheckBlackBerryUserExists(accountId); retUser.SubscriberNumber = account.SubscriberNumber; - + return retUser; } - catch (Exception ex) - { - //throw TaskManager.WriteError(ex); - } + catch { } finally { TaskManager.CompleteTask(); @@ -1740,8 +1731,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("ORGANIZATION", "UPDATE_USER_GENERAL"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "UPDATE_USER_GENERAL", itemId); try { @@ -1832,8 +1822,7 @@ namespace WebsitePanel.EnterpriseServer // place log record - TaskManager.StartTask("ORGANIZATION", "SET_USER_USERPRINCIPALNAME"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "SET_USER_USERPRINCIPALNAME", itemId); try { @@ -1931,8 +1920,7 @@ namespace WebsitePanel.EnterpriseServer if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("ORGANIZATION", "SET_USER_PASSWORD"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "SET_USER_PASSWORD", itemId); try { @@ -2048,8 +2036,7 @@ namespace WebsitePanel.EnterpriseServer public static int GetAccountIdByUserPrincipalName(int itemId, string userPrincipalName) { // place log record - TaskManager.StartTask("ORGANIZATION", "GET_ACCOUNT_BYUPN"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ORGANIZATION", "GET_ACCOUNT_BYUPN", itemId); int accounId = -1; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/ReportController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs index ec012ecf..0b1a62e1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs @@ -92,10 +92,7 @@ namespace WebsitePanel.EnterpriseServer DataProvider.AddAuditLogRecord(recordId, severityId, userId, username, packageId, itemId, itemName, startDate, finishDate, sourceName, taskName, executionLog); } - catch - { - // skip error - } + catch { } } private static DateTime GetStartDate(DateTime d) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs similarity index 94% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs index a911b077..d7923702 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs @@ -191,8 +191,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_ACCOUNT_MAX_MAILBOX_SIZE_LIMIT; // place log record - TaskManager.StartTask("MAIL_ACCOUNT", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("MAIL_ACCOUNT", "UPDATE", origItem.Name, item.Id); try { @@ -245,8 +244,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_ACCOUNTS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("MAIL_ACCOUNT", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("MAIL_ACCOUNT", "DELETE", origItem.Name, itemId); try { @@ -402,7 +400,7 @@ namespace WebsitePanel.EnterpriseServer item.ServiceId = serviceId; int itemId = PackageController.AddPackageItem(item); - TaskManager.ItemId = itemId; + TaskManager.ItemId = itemId; return itemId; } @@ -432,8 +430,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("MAIL_FORWARDING", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("MAIL_FORWARDING", "UPDATE", origItem.Name, item.Id); try { @@ -477,8 +474,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_FORWARDINGS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("MAIL_FORWARDING", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("MAIL_FORWARDING", "DELETE", origItem.Name, itemId); try { @@ -638,8 +634,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_GROUPS_RECIPIENTS_LIMIT; // place log record - TaskManager.StartTask("MAIL_GROUP", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("MAIL_GROUP", "UPDATE", origItem.Name, item.Id); try { @@ -679,8 +674,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_GROUPS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("MAIL_GROUP", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("MAIL_GROUP", "DELETE", origItem.Name, itemId); try { @@ -889,8 +883,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_LISTS_RECIPIENTS_LIMIT; // place log record - TaskManager.StartTask("MAIL_LIST", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("MAIL_LIST", "UPDATE", origItem.Name, item.Id); try { @@ -938,8 +931,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_LISTS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("MAIL_LIST", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("MAIL_LIST", "DELETE", origItem.Name, itemId); try { @@ -1073,7 +1065,8 @@ namespace WebsitePanel.EnterpriseServer } TaskManager.ItemId = itemId; - return itemId; + + return itemId; } catch (Exception ex) { @@ -1101,8 +1094,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("MAIL_DOMAIN", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("MAIL_DOMAIN", "UPDATE", origItem.Name, item.Id); // get service MailServer mail = new MailServer(); @@ -1148,8 +1140,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_MAIL_DOMAIN_IS_NOT_EMPTY; // mail domain is not empty // place log record - TaskManager.StartTask("MAIL_DOMAIN", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("MAIL_DOMAIN", "DELETE", origItem.Name, itemId); try { @@ -1222,10 +1213,9 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("MAIL_DOMAIN", "ADD_POINTER", mailDomain.Name); - TaskManager.ItemId = itemId; - TaskManager.TaskParameters["Domain ID"] = domain.DomainId; - TaskManager.WriteParameter("Domain pointer", domain.DomainName); + TaskManager.StartTask("MAIL_DOMAIN", "ADD_POINTER", mailDomain.Name, itemId, new BackgroundTaskParameter("Domain ID", domain.DomainId)); + + TaskManager.WriteParameter("Domain pointer", domain.DomainName); try { @@ -1277,10 +1267,12 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_DOMAIN_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("MAIL_DOMAIN", "DELETE_POINTER", mailDomain.Name); - TaskManager.ItemId = itemId; - TaskManager.TaskParameters["Domain ID"] = domain.DomainId; - TaskManager.WriteParameter("Domain pointer", domain.DomainName); + + List parameters = new List(); + parameters.Add(new BackgroundTaskParameter("Domain ID", domain.DomainId)); + parameters.Add(new BackgroundTaskParameter("Domain pointer", domain.DomainName)); + + TaskManager.StartTask("MAIL_DOMAIN", "DELETE_POINTER", mailDomain.Name, itemId, parameters); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/QuotaLimit.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/QuotaLimit.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/QuotaLimit.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/QuotaLimit.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs index 238ec360..10a79b04 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs @@ -191,8 +191,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("ODBC_DSN", "UPDATE", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("ODBC_DSN", "UPDATE", origItem.Name, item.Id); try { @@ -265,8 +264,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_OS_DSN_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("ODBC_DSN", "DELETE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("ODBC_DSN", "DELETE", origItem.Name, itemId); try { @@ -316,8 +314,7 @@ namespace WebsitePanel.EnterpriseServer ServerInfo server = ServerController.GetServerById(serverId); // place log record - TaskManager.StartTask("SERVER", "RESET_TERMINAL_SESSION", sessionId); - TaskManager.ItemId = serverId; + TaskManager.StartTask("SERVER", "RESET_TERMINAL_SESSION", sessionId, serverId); try { @@ -352,8 +349,7 @@ namespace WebsitePanel.EnterpriseServer ServerInfo server = ServerController.GetServerById(serverId); // place log record - TaskManager.StartTask("SERVER", "TERMINATE_SYSTEM_PROCESS", pid); - TaskManager.ItemId = serverId; + TaskManager.StartTask("SERVER", "TERMINATE_SYSTEM_PROCESS", pid, serverId); try { @@ -388,8 +384,7 @@ namespace WebsitePanel.EnterpriseServer ServerInfo server = ServerController.GetServerById(serverId); // place log record - TaskManager.StartTask("SERVER", "CHANGE_WINDOWS_SERVICE_STATUS", id); - TaskManager.ItemId = serverId; + TaskManager.StartTask("SERVER", "CHANGE_WINDOWS_SERVICE_STATUS", id, serverId); TaskManager.WriteParameter("New Status", status); try @@ -555,8 +550,7 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("SERVER", "CLEAR_EVENT_LOG", logName); - TaskManager.ItemId = serverId; + TaskManager.StartTask("SERVER", "CLEAR_EVENT_LOG", logName, serverId); try { @@ -587,8 +581,7 @@ namespace WebsitePanel.EnterpriseServer ServerInfo server = ServerController.GetServerById(serverId); // place log record - TaskManager.StartTask("SERVER", "REBOOT"); - TaskManager.ItemId = serverId; + TaskManager.StartTask("SERVER", "REBOOT", serverId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageAsyncWorker.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageAsyncWorker.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageAsyncWorker.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 3363a13f..b8532151 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -617,8 +617,12 @@ namespace WebsitePanel.EnterpriseServer } } - TaskManager.ItemId = result.Result; - TaskManager.TaskParameters["SendLetter"] = sendLetter; + BackgroundTask topTask = TaskManager.TopTask; + + topTask.ItemId = userId; + topTask.UpdateParamValue("SendLetter", sendLetter); + + TaskController.UpdateTaskWithParams(topTask); return result; } @@ -718,10 +722,14 @@ namespace WebsitePanel.EnterpriseServer if (homeId < 0) result.Result = homeId; - TaskManager.ItemId = result.Result; - TaskManager.TaskParameters["Signup"] = signup; - TaskManager.TaskParameters["UserId"] = userId; - TaskManager.TaskParameters["SendLetter"] = sendLetter; + BackgroundTask topTask = TaskManager.TopTask; + + topTask.ItemId = userId; + topTask.UpdateParamValue("Signup", signup); + topTask.UpdateParamValue("UserId", userId); + topTask.UpdateParamValue("SendLetter", sendLetter); + + TaskController.UpdateTaskWithParams(topTask); } finally { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/ServiceItemsPaged.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/ServiceItemsPaged.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/ServiceItemsPaged.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/ServiceItemsPaged.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3fd65c77 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WebsitePanel.EnterpriseServer.Code")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OM-3")] +[assembly: AssemblyProduct("WebsitePanel.EnterpriseServer.Code")] +[assembly: AssemblyCopyright("Copyright © OM-3 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e5f16c8f-9560-459d-88d4-9c6ee9b71283")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupAsyncWorker.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupAsyncWorker.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupAsyncWorker.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs index a580954a..23d8864c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs @@ -31,6 +31,7 @@ using System.IO; using System.Data; using System.Text; using System.Collections.Generic; +using System.Threading; using System.Xml; using System.Security.Cryptography; using System.Security.Cryptography.Xml; @@ -116,10 +117,9 @@ namespace WebsitePanel.EnterpriseServer { try { - TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName); - TaskManager.ItemId = SecurityContext.User.UserId; + TaskManager.StartTask(taskId, "BACKUP", "BACKUP", backupFileName, SecurityContext.User.UserId); - // get the list of items to backup + // get the list of items to backup TaskManager.Write("Calculate items to backup"); List items = GetBackupItems(userId, packageId, serviceId, serverId); @@ -210,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer // increment progress TaskManager.IndicatorCurrent += 1; - } + } } } catch (Exception ex) @@ -343,7 +343,11 @@ namespace WebsitePanel.EnterpriseServer } } - TaskManager.IndicatorCurrent = TaskManager.IndicatorMaximum; + BackgroundTask topTask = TaskManager.TopTask; + + topTask.IndicatorCurrent = topTask.IndicatorMaximum; + + TaskController.UpdateTask(topTask); } catch (Exception ex) { @@ -490,8 +494,7 @@ namespace WebsitePanel.EnterpriseServer string backupFileName = (storePackageId > 0) ? Path.GetFileName(storePackageBackupPath) : Path.GetFileName(storeServerBackupPath); - TaskManager.StartTask(taskId, "BACKUP", "RESTORE", backupFileName); - TaskManager.ItemId = SecurityContext.User.UserId; + TaskManager.StartTask(taskId, "BACKUP", "RESTORE", backupFileName, SecurityContext.User.UserId); // create temp folder string tempFolder = GetTempBackupFolder(); @@ -804,8 +807,7 @@ namespace WebsitePanel.EnterpriseServer return true; } catch - { - // + { // return false; } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IBackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IBackupController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IBackupController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IBackupController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IImportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IImportController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/IImportController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/IImportController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportAsyncWorker.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportAsyncWorker.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportAsyncWorker.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs index fef786d4..aaa74100 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs @@ -171,8 +171,7 @@ namespace WebsitePanel.EnterpriseServer { PackageInfo package = PackageController.GetPackage(packageId); - TaskManager.StartTask(taskId, "IMPORT", "IMPORT", package.PackageName); - TaskManager.ItemId = packageId; + TaskManager.StartTask(taskId, "IMPORT", "IMPORT", package.PackageName, packageId); TaskManager.IndicatorMaximum = items.Length; TaskManager.IndicatorCurrent = 0; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ActivatePaidInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ActivatePaidInvoicesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ActivatePaidInvoicesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ActivatePaidInvoicesTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs similarity index 86% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs index fd545c4e..9a871c66 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs @@ -46,11 +46,13 @@ namespace WebsitePanel.EnterpriseServer // - BACKUP_NAME // - ZIP_BACKUP - string databaseGroup = (string)TaskManager.TaskParameters["DATABASE_GROUP"]; - string databaseName = (string)TaskManager.TaskParameters["DATABASE_NAME"]; - string backupFolder = (string)TaskManager.TaskParameters["BACKUP_FOLDER"]; - string backupName = (string)TaskManager.TaskParameters["BACKUP_NAME"]; - string strZipBackup = (string)TaskManager.TaskParameters["ZIP_BACKUP"]; + BackgroundTask topTask = TaskManager.TopTask; + + string databaseGroup = (string)topTask.GetParamValue("DATABASE_GROUP"); + string databaseName = (string)topTask.GetParamValue("DATABASE_NAME"); + string backupFolder = (string)topTask.GetParamValue("BACKUP_FOLDER"); + string backupName = (string)topTask.GetParamValue("BACKUP_NAME"); + string strZipBackup = (string)topTask.GetParamValue("ZIP_BACKUP"); // check input parameters if (String.IsNullOrEmpty(databaseName)) @@ -77,7 +79,7 @@ namespace WebsitePanel.EnterpriseServer } // try to find database - SqlDatabase item = (SqlDatabase)PackageController.GetPackageItemByName(TaskManager.PackageId, databaseGroup, + SqlDatabase item = (SqlDatabase)PackageController.GetPackageItemByName(topTask.PackageId, databaseGroup, databaseName, typeof(SqlDatabase)); if (item == null) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs similarity index 81% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs index 8d04180d..92a30c81 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs @@ -29,6 +29,7 @@ using System; using System.Data; using System.Configuration; +using System.Threading; using System.Web; using System.Web.Security; using System.Web.UI; @@ -48,18 +49,22 @@ namespace WebsitePanel.EnterpriseServer /// public override void DoWork() { + string backupFileName; int storePackageId; string storePackageFolder; string storeServerFolder; bool deleteTempBackup; + + BackgroundTask topTask = TaskManager.TopTask; + try { - backupFileName = (string)TaskManager.TaskParameters["BACKUP_FILE_NAME"]; - storePackageId = Convert.ToInt32(TaskManager.TaskParameters["STORE_PACKAGE_ID"]); - storePackageFolder = (string)TaskManager.TaskParameters["STORE_PACKAGE_FOLDER"]; - storeServerFolder = (string)TaskManager.TaskParameters["STORE_SERVER_FOLDER"]; - deleteTempBackup = Convert.ToBoolean(TaskManager.TaskParameters["DELETE_TEMP_BACKUP"]); + backupFileName = (string)topTask.GetParamValue("BACKUP_FILE_NAME"); + storePackageId = Convert.ToInt32(topTask.GetParamValue("STORE_PACKAGE_ID")); + storePackageFolder = (string)topTask.GetParamValue("STORE_PACKAGE_FOLDER"); + storeServerFolder = (string)topTask.GetParamValue("STORE_SERVER_FOLDER"); + deleteTempBackup = Convert.ToBoolean(topTask.GetParamValue("DELETE_TEMP_BACKUP")); } catch(Exception ex) { @@ -69,7 +74,7 @@ namespace WebsitePanel.EnterpriseServer try { - PackageInfo package = PackageController.GetPackage(TaskManager.PackageId); + PackageInfo package = PackageController.GetPackage(topTask.PackageId); // We do not take into account service id as long as scheduled tasks run against packages. BackupController.Backup(false, "BackupTask", package.UserId, package.PackageId, 0, 0, backupFileName, storePackageId, storePackageFolder, storeServerFolder, deleteTempBackup); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs index 1a8909a9..b6e477cc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs @@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { // get all space organizations recursively - List items = ExchangeServerController.GetExchangeOrganizations(TaskManager.PackageId, true); + List items = ExchangeServerController.GetExchangeOrganizations(TaskManager.TopTask.PackageId, true); foreach (Organization item in items) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs index ccb91d16..995415f9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.EnterpriseServer public void CalculateBandwidth() { // get all owned packages - List packages = PackageController.GetPackagePackages(TaskManager.PackageId, true); + List packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true); TaskManager.Write("Packages to calculate: " + packages.Count.ToString()); foreach (PackageInfo package in packages) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs index 7a744cf9..200648cc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs @@ -52,7 +52,7 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { // get all owned packages - List packages = PackageController.GetPackagePackages(TaskManager.PackageId, true); + List packages = PackageController.GetPackagePackages(TaskManager.TopTask.PackageId, true); TaskManager.Write("Packages to calculate: " + packages.Count.ToString()); foreach (PackageInfo package in packages) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CancelOverdueInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CancelOverdueInvoicesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CancelOverdueInvoicesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CancelOverdueInvoicesTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs similarity index 84% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs index c16812d9..574e3d26 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs @@ -57,17 +57,19 @@ namespace WebsitePanel.EnterpriseServer // - MAIL_SUBJECT // - MAIL_BODY - // get input parameters - string url = (string)TaskManager.TaskParameters["URL"]; - string username = (string)TaskManager.TaskParameters["USERNAME"]; - string password = (string)TaskManager.TaskParameters["PASSWORD"]; - string strResponseStatus = (string)TaskManager.TaskParameters["RESPONSE_STATUS"]; - string responseContains = (string)TaskManager.TaskParameters["RESPONSE_CONTAIN"]; - string responseNotContains = (string)TaskManager.TaskParameters["RESPONSE_DOESNT_CONTAIN"]; + BackgroundTask topTask = TaskManager.TopTask; - bool useResponseStatus = Convert.ToBoolean(TaskManager.TaskParameters["USE_RESPONSE_STATUS"]); - bool useResponseContains = Convert.ToBoolean(TaskManager.TaskParameters["USE_RESPONSE_CONTAIN"]); - bool useResponseDoesntContain = Convert.ToBoolean(TaskManager.TaskParameters["USE_RESPONSE_DOESNT_CONTAIN"]); + // get input parameters + string url = (string)topTask.GetParamValue("URL"); + string username = (string)topTask.GetParamValue("USERNAME"); + string password = (string)topTask.GetParamValue("PASSWORD"); + string strResponseStatus = (string)topTask.GetParamValue("RESPONSE_STATUS"); + string responseContains = (string)topTask.GetParamValue("RESPONSE_CONTAIN"); + string responseNotContains = (string)topTask.GetParamValue("RESPONSE_DOESNT_CONTAIN"); + + bool useResponseStatus = Convert.ToBoolean(topTask.GetParamValue("USE_RESPONSE_STATUS")); + bool useResponseContains = Convert.ToBoolean(topTask.GetParamValue("USE_RESPONSE_CONTAIN")); + bool useResponseDoesntContain = Convert.ToBoolean(topTask.GetParamValue("USE_RESPONSE_DOESNT_CONTAIN")); // check input parameters if (String.IsNullOrEmpty(url)) @@ -126,11 +128,13 @@ namespace WebsitePanel.EnterpriseServer private void SendMailMessage(string url, string message, string content) { + BackgroundTask topTask = TaskManager.TopTask; + // input parameters - string mailFrom = (string)TaskManager.TaskParameters["MAIL_FROM"]; - string mailTo = (string)TaskManager.TaskParameters["MAIL_TO"]; - string mailSubject = (string)TaskManager.TaskParameters["MAIL_SUBJECT"]; - string mailBody = (string)TaskManager.TaskParameters["MAIL_BODY"]; + string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); + string mailTo = (string)topTask.GetParamValue("MAIL_TO"); + string mailSubject = (string)topTask.GetParamValue("MAIL_SUBJECT"); + string mailBody = (string)topTask.GetParamValue("MAIL_BODY"); if (String.IsNullOrEmpty(mailTo)) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs similarity index 83% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs index b069aa07..1738f145 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs @@ -46,12 +46,14 @@ namespace WebsitePanel.EnterpriseServer // - FTP_PASSWORD // - FTP_FOLDER + BackgroundTask topTask = TaskManager.TopTask; + // get input parameters - string filePath = (string)TaskManager.TaskParameters["FILE_PATH"]; - string ftpServer = (string)TaskManager.TaskParameters["FTP_SERVER"]; - string ftpUsername = (string)TaskManager.TaskParameters["FTP_USERNAME"]; - string ftpPassword = (string)TaskManager.TaskParameters["FTP_PASSWORD"]; - string ftpFolder = (string)TaskManager.TaskParameters["FTP_FOLDER"]; + string filePath = (string)topTask.GetParamValue("FILE_PATH"); + string ftpServer = (string)topTask.GetParamValue("FTP_SERVER"); + string ftpUsername = (string)topTask.GetParamValue("FTP_USERNAME"); + string ftpPassword = (string)topTask.GetParamValue("FTP_PASSWORD"); + string ftpFolder = (string)topTask.GetParamValue("FTP_FOLDER"); // check input parameters if (String.IsNullOrEmpty(filePath)) @@ -100,7 +102,7 @@ namespace WebsitePanel.EnterpriseServer // file to send writer.WriteLine("binary"); - writer.WriteLine("put " + FilesController.GetFullPackagePath(TaskManager.PackageId, filePath)); + writer.WriteLine("put " + FilesController.GetFullPackagePath(topTask.PackageId, filePath)); // bye writer.WriteLine("bye"); @@ -109,14 +111,14 @@ namespace WebsitePanel.EnterpriseServer // create temp file in user space string cmdPath = Utils.GetRandomString(10) + ".txt"; - string fullCmdPath = FilesController.GetFullPackagePath(TaskManager.PackageId, cmdPath); + string fullCmdPath = FilesController.GetFullPackagePath(topTask.PackageId, cmdPath); // upload batch - FilesController.UpdateFileBinaryContent(TaskManager.PackageId, cmdPath, Encoding.UTF8.GetBytes(cmdBatch)); + FilesController.UpdateFileBinaryContent(topTask.PackageId, cmdPath, Encoding.UTF8.GetBytes(cmdBatch)); // execute system command // load OS service - int serviceId = PackageController.GetPackageServiceId(TaskManager.PackageId, ResourceGroups.Os); + int serviceId = PackageController.GetPackageServiceId(topTask.PackageId, ResourceGroups.Os); // load service ServiceInfo service = ServerController.GetServiceInfo(serviceId); @@ -128,7 +130,7 @@ namespace WebsitePanel.EnterpriseServer TaskManager.Write(winServer.ExecuteSystemCommand("ftp.exe", "-s:" + fullCmdPath)); // delete batch file - FilesController.DeleteFiles(TaskManager.PackageId, new string[] { cmdPath }); + FilesController.DeleteFiles(topTask.PackageId, new string[] { cmdPath }); } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/GenerateInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/GenerateInvoicesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/GenerateInvoicesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/GenerateInvoicesTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs similarity index 87% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs index b82436df..fedeb3e8 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs @@ -51,16 +51,18 @@ namespace WebsitePanel.EnterpriseServer { try { - bool isExchange = Utils.ParseBool(TaskManager.TaskParameters[EXCHANGE_REPORT], false); - bool isSharePoint = Utils.ParseBool(TaskManager.TaskParameters[SHAREPOINT_REPORT], false); - bool isLync = Utils.ParseBool(TaskManager.TaskParameters[LYNC_REPORT], false); - bool isCRM = Utils.ParseBool(TaskManager.TaskParameters[CRM_REPORT], false); - bool isOrganization = Utils.ParseBool(TaskManager.TaskParameters[ORGANIZATION_REPORT], false); + BackgroundTask topTask = TaskManager.TopTask; - string email = TaskManager.TaskParameters[EMAIL].ToString(); + bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false); + bool isSharePoint = Utils.ParseBool(topTask.GetParamValue(SHAREPOINT_REPORT), false); + bool isLync = Utils.ParseBool(topTask.GetParamValue(LYNC_REPORT), false); + bool isCRM = Utils.ParseBool(topTask.GetParamValue(CRM_REPORT), false); + bool isOrganization = Utils.ParseBool(topTask.GetParamValue(ORGANIZATION_REPORT), false); + + string email = topTask.GetParamValue(EMAIL).ToString(); - UserInfo user = PackageController.GetPackageOwner(TaskManager.PackageId); + UserInfo user = PackageController.GetPackageOwner(topTask.PackageId); EnterpriseSolutionStatisticsReport report = ReportController.GetEnterpriseSolutionStatisticsReport(user.UserId, isExchange, isSharePoint, isCRM, isOrganization, isLync); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs similarity index 86% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs index 5aae6dff..b38e5f38 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs @@ -44,25 +44,27 @@ namespace WebsitePanel.EnterpriseServer // - DISKSPACE_OVERUSED // - BANDWIDTH_OVERUSED + BackgroundTask topTask = TaskManager.TopTask; + // get the list of all packages - List packages = PackageController.GetPackagePackages(TaskManager.PackageId, false); + List packages = PackageController.GetPackagePackages(topTask.PackageId, false); TaskManager.Write("Packages to verify: " + packages.Count.ToString()); - bool checkMSSQL = (String.Compare((string)TaskManager.TaskParameters["MSSQL_OVERUSED"], "true", true) == 0); - bool checkMySQL = (String.Compare((string)TaskManager.TaskParameters["MYSQL_OVERUSED"], "true", true) == 0); + bool checkMSSQL = (String.Compare((string)topTask.GetParamValue("MSSQL_OVERUSED"), "true", true) == 0); + bool checkMySQL = (String.Compare((string)topTask.GetParamValue("MYSQL_OVERUSED"), "true", true) == 0); - bool sendWarningEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_WARNING_EMAIL"]); - bool sendOverusedEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_OVERUSED_EMAIL"]); - int warningUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["WARNING_USAGE_THRESHOLD"]); - int overusedUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["OVERUSED_USAGE_THRESHOLD"]); - string warningMailFrom = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_FROM"]); - string warningMailBcc = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BCC"]); - string warningMailSubject = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_SUBJECT"]); - string warningMailBody = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BODY"]); - string overusedMailFrom = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_FROM"]); - string overusedMailBcc = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_BCC"]); - string overusedMailSubject = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_SUBJECT"]); - string overusedMailBody = Convert.ToString(TaskManager.TaskParameters["OVERUSED_MAIL_BODY"]); + bool sendWarningEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_WARNING_EMAIL")); + bool sendOverusedEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_OVERUSED_EMAIL")); + int warningUsageThreshold = Convert.ToInt32(topTask.GetParamValue("WARNING_USAGE_THRESHOLD")); + int overusedUsageThreshold = Convert.ToInt32(topTask.GetParamValue("OVERUSED_USAGE_THRESHOLD")); + string warningMailFrom = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_FROM")); + string warningMailBcc = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BCC")); + string warningMailSubject = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_SUBJECT")); + string warningMailBody = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BODY")); + string overusedMailFrom = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_FROM")); + string overusedMailBcc = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_BCC")); + string overusedMailSubject = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_SUBJECT")); + string overusedMailBody = Convert.ToString(topTask.GetParamValue("OVERUSED_MAIL_BODY")); int overusedPackages = 0; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunPaymentQueueTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunPaymentQueueTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunPaymentQueueTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunPaymentQueueTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs similarity index 88% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs index 3dba9938..e05bf145 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs @@ -42,10 +42,12 @@ namespace WebsitePanel.EnterpriseServer // - SERVER_NAME // - EXECUTABLE_PATH + BackgroundTask topTask = TaskManager.TopTask; + // get input parameters - string serverName = (string)TaskManager.TaskParameters["SERVER_NAME"]; - string execPath = (string)TaskManager.TaskParameters["EXECUTABLE_PATH"]; - string execParams = (string)TaskManager.TaskParameters["EXECUTABLE_PARAMS"]; + string serverName = (string)topTask.GetParamValue("SERVER_NAME"); + string execPath = (string)topTask.GetParamValue("EXECUTABLE_PATH"); + string execParams = (string)topTask.GetParamValue("EXECUTABLE_PARAMS"); if (execParams == null) execParams = ""; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs similarity index 86% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs index 57e722ea..b7a0308f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs @@ -42,11 +42,13 @@ namespace WebsitePanel.EnterpriseServer // - MAIL_SUBJECT // - MAIL_BODY + BackgroundTask topTask = TaskManager.TopTask; + // get input parameters - string mailFrom = (string)TaskManager.TaskParameters["MAIL_FROM"]; - string mailTo = (string)TaskManager.TaskParameters["MAIL_TO"]; - string mailSubject = (string)TaskManager.TaskParameters["MAIL_SUBJECT"]; - string mailBody = (string)TaskManager.TaskParameters["MAIL_BODY"]; + string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); + string mailTo = (string)topTask.GetParamValue("MAIL_TO"); + string mailSubject = (string)topTask.GetParamValue("MAIL_SUBJECT"); + string mailBody = (string)topTask.GetParamValue("MAIL_BODY"); // check input parameters if (String.IsNullOrEmpty(mailFrom)) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverdueInvoicesTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs similarity index 83% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs index 5fa58ce9..e7201be1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs @@ -43,27 +43,29 @@ namespace WebsitePanel.EnterpriseServer // - DISKSPACE_OVERUSED // - BANDWIDTH_OVERUSED + BackgroundTask topTask = TaskManager.TopTask; + // get the list of all packages - List packages = PackageController.GetPackagePackages(TaskManager.PackageId, false); + List packages = PackageController.GetPackagePackages(topTask.PackageId, false); TaskManager.Write("Packages to verify: " + packages.Count.ToString()); - bool checkDiskspace = (String.Compare((string)TaskManager.TaskParameters["DISKSPACE_OVERUSED"], "true", true) == 0); - bool checkBandwidth = (String.Compare((string)TaskManager.TaskParameters["BANDWIDTH_OVERUSED"], "true", true) == 0); + bool checkDiskspace = (String.Compare((string)topTask.GetParamValue("DISKSPACE_OVERUSED"), "true", true) == 0); + bool checkBandwidth = (String.Compare((string)topTask.GetParamValue("BANDWIDTH_OVERUSED"), "true", true) == 0); - bool suspendOverused = Convert.ToBoolean(TaskManager.TaskParameters["SUSPEND_OVERUSED"]); + bool suspendOverused = Convert.ToBoolean(topTask.GetParamValue("SUSPEND_OVERUSED")); - bool sendWarningEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_WARNING_EMAIL"]); - bool sendSuspensionEmail = Convert.ToBoolean(TaskManager.TaskParameters["SEND_SUSPENSION_EMAIL"]); - int warningUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["WARNING_USAGE_THRESHOLD"]); - int suspensionUsageThreshold = Convert.ToInt32(TaskManager.TaskParameters["SUSPENSION_USAGE_THRESHOLD"]); - string warningMailFrom = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_FROM"]); - string warningMailBcc = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BCC"]); - string warningMailSubject = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_SUBJECT"]); - string warningMailBody = Convert.ToString(TaskManager.TaskParameters["WARNING_MAIL_BODY"]); - string suspensionMailFrom = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_FROM"]); - string suspensionMailBcc = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_BCC"]); - string suspensionMailSubject = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_SUBJECT"]); - string suspensionMailBody = Convert.ToString(TaskManager.TaskParameters["SUSPENSION_MAIL_BODY"]); + bool sendWarningEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_WARNING_EMAIL")); + bool sendSuspensionEmail = Convert.ToBoolean(topTask.GetParamValue("SEND_SUSPENSION_EMAIL")); + int warningUsageThreshold = Convert.ToInt32(topTask.GetParamValue("WARNING_USAGE_THRESHOLD")); + int suspensionUsageThreshold = Convert.ToInt32(topTask.GetParamValue("SUSPENSION_USAGE_THRESHOLD")); + string warningMailFrom = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_FROM")); + string warningMailBcc = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BCC")); + string warningMailSubject = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_SUBJECT")); + string warningMailBody = Convert.ToString(topTask.GetParamValue("WARNING_MAIL_BODY")); + string suspensionMailFrom = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_FROM")); + string suspensionMailBcc = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_BCC")); + string suspensionMailSubject = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_SUBJECT")); + string suspensionMailBody = Convert.ToString(topTask.GetParamValue("SUSPENSION_MAIL_BODY")); int suspendedPackages = 0; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs similarity index 88% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs index 5f93c1ac..20247fee 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs @@ -40,9 +40,11 @@ namespace WebsitePanel.EnterpriseServer // - FOLDER // - ZIP_FILE + BackgroundTask topTask = TaskManager.TopTask; + // get input parameters - string filesList = (string)TaskManager.TaskParameters["FOLDER"]; - string zipFile = (string)TaskManager.TaskParameters["ZIP_FILE"]; + string filesList = (string)topTask.GetParamValue("FOLDER"); + string zipFile = (string)topTask.GetParamValue("ZIP_FILE"); // check input parameters if (String.IsNullOrEmpty(filesList)) @@ -68,7 +70,7 @@ namespace WebsitePanel.EnterpriseServer zipFile = Utils.ReplaceStringVariable(zipFile, "time", time); // zip files and folders - FilesController.ZipFiles(TaskManager.PackageId, new string[] { filesList }, zipFile); + FilesController.ZipFiles(topTask.PackageId, new string[] { filesList }, zipFile); } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs similarity index 71% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index 268391b7..34b9ffbf 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -28,6 +28,7 @@ using System; using System.IO; +using System.ServiceProcess; using System.Threading; using System.Collections; using System.Diagnostics; @@ -43,77 +44,91 @@ namespace WebsitePanel.EnterpriseServer { public static SchedulerJob nextSchedule = null; - // main timer and put it to sleep - static Timer scheduleTimer = new Timer(new TimerCallback(RunNextSchedule), - null, - Timeout.Infinite, - Timeout.Infinite); - public static void Start() - { - // schedule tasks + { ScheduleTasks(); } public static bool IsScheduleActive(int scheduleId) { Dictionary scheduledTasks = TaskManager.GetScheduledTasks(); + return scheduledTasks.ContainsKey(scheduleId); } - public static void StartSchedule(SchedulerJob schedule) - { - Dictionary scheduledTasks = TaskManager.GetScheduledTasks(); - if (scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId)) - return; - - // run schedule - RunSchedule(schedule, false); - } - - public static void StopSchedule(SchedulerJob schedule) - { - Dictionary scheduledTasks = TaskManager.GetScheduledTasks(); - if (!scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId)) - return; - - BackgroundTask activeTask = scheduledTasks[schedule.ScheduleInfo.ScheduleId]; - TaskManager.StopTask(activeTask.TaskId); - } - public static void ScheduleTasks() { + RunManualTasks(); + nextSchedule = SchedulerController.GetNextSchedule(); - // set timer if (nextSchedule != null) { if (nextSchedule.ScheduleInfo.NextRun <= DateTime.Now) { - // this will put the timer to sleep - scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite); - - System.Threading.Thread.Sleep(1000); - - // run immediately RunNextSchedule(null); } - else - { - // set timer - TimeSpan ts = nextSchedule.ScheduleInfo.NextRun.Subtract(DateTime.Now); - if (ts < TimeSpan.Zero) - ts = TimeSpan.Zero; // cannot be negative ! + } + } - // invoke after the timespan - scheduleTimer.Change((long)ts.TotalMilliseconds, Timeout.Infinite); + private static void RunManualTasks() + { + var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); + + foreach (var task in tasks) + { + TaskManager.StopTask(task.TaskId); + } + + tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); + + foreach (var task in tasks) + { + var taskThread = new Thread(() => RunBackgroundTask(task)) { Priority = ThreadPriority.Highest }; + taskThread.Start(); + TaskManager.AddTaskThread(task.Id, taskThread); + } + } + + private static void RunBackgroundTask(BackgroundTask backgroundTask) + { + UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId); + + SecurityContext.SetThreadPrincipal(user.UserId); + + var schedule = SchedulerController.GetScheduleComplete(backgroundTask.ScheduleId); + + backgroundTask.Guid = TaskManager.Guid; + backgroundTask.Status = BackgroundTaskStatus.Run; + + + TaskController.UpdateTask(backgroundTask); + + try + { + var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); + + objTask.DoWork(); + } + catch (Exception ex) + { + TaskManager.WriteError(ex, "Error executing scheduled task"); + } + finally + { + try + { + TaskManager.CompleteTask(); + } + catch (Exception) + { } } } // call back for the timer function static void RunNextSchedule(object obj) // obj ignored - { + { if (nextSchedule == null) return; @@ -125,8 +140,6 @@ namespace WebsitePanel.EnterpriseServer static void RunSchedule(SchedulerJob schedule, bool changeNextRun) { - - try { // update next run (if required) @@ -162,6 +175,8 @@ namespace WebsitePanel.EnterpriseServer counter++; } + if (counter == MAX_RETRY_COUNT) + return; // skip execution if the current task is still running scheduledTasks = TaskManager.GetScheduledTasks(); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs similarity index 84% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 0fc85004..be434a2e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -31,6 +31,7 @@ using System.Data; using System.Collections.Generic; using System.Text; using System.Xml; +using System.Linq; using WebsitePanel.EnterpriseServer.Base.Scheduling; namespace WebsitePanel.EnterpriseServer @@ -151,30 +152,74 @@ namespace WebsitePanel.EnterpriseServer { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; + + if (accountCheck < 0) + return accountCheck; SchedulerJob schedule = GetScheduleComplete(scheduleId); if (schedule == null) return 0; - Scheduler.StartSchedule(schedule); + if (TaskController.GetScheduleTasks(scheduleId).Any(x => x.Status == BackgroundTaskStatus.Run + || x.Status == BackgroundTaskStatus.Starting)) + return 0; + + var parameters = schedule.ScheduleInfo.Parameters.Select( + prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); + + var userInfo = PackageController.GetPackageOwner(schedule.ScheduleInfo.PackageId); + + var backgroundTask = new BackgroundTask( + Guid.NewGuid(), + Guid.NewGuid().ToString("N"), + userInfo.OwnerId == 0 ? userInfo.UserId : userInfo.OwnerId, + userInfo.UserId, + "SCHEDULER", + "RUN_SCHEDULE", + schedule.ScheduleInfo.ScheduleName, + schedule.ScheduleInfo.ScheduleId, + schedule.ScheduleInfo.ScheduleId, + schedule.ScheduleInfo.PackageId, + schedule.ScheduleInfo.MaxExecutionTime, parameters) + { + Status = BackgroundTaskStatus.Starting + }; + + TaskController.AddTask(backgroundTask); + + // update next run (if required) + CalculateNextStartTime(schedule.ScheduleInfo); + + // disable run once task + if (schedule.ScheduleInfo.ScheduleType == ScheduleType.OneTime) + schedule.ScheduleInfo.Enabled = false; + + schedule.ScheduleInfo.LastRun = DateTime.Now; + UpdateSchedule(schedule.ScheduleInfo); return 0; - } + } public static int StopSchedule(int scheduleId) { - // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - if (accountCheck < 0) return accountCheck; + if (accountCheck < 0) + return accountCheck; + SchedulerJob schedule = GetScheduleComplete(scheduleId); if (schedule == null) return 0; - Scheduler.StopSchedule(schedule); - + foreach (BackgroundTask task in TaskController.GetScheduleTasks(scheduleId)) + { + task.Status = BackgroundTaskStatus.Stopping; + + TaskController.UpdateTask(task); + } + return 0; + } public static void CalculateNextStartTime(ScheduleInfo schedule) @@ -275,7 +320,7 @@ namespace WebsitePanel.EnterpriseServer schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters); // re-schedule tasks - Scheduler.ScheduleTasks(); + //Scheduler.ScheduleTasks(); return scheduleId; } @@ -301,7 +346,7 @@ namespace WebsitePanel.EnterpriseServer schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters); // re-schedule tasks - Scheduler.ScheduleTasks(); + //Scheduler.ScheduleTasks(); return 0; } @@ -336,7 +381,7 @@ namespace WebsitePanel.EnterpriseServer DataProvider.DeleteSchedule(SecurityContext.User.UserId, scheduleId); // re-schedule tasks - Scheduler.ScheduleTasks(); + //Scheduler.ScheduleTasks(); return 0; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs similarity index 87% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index c29be3fd..7b9d2efd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -66,7 +66,6 @@ namespace WebsitePanel.EnterpriseServer { // create worker Thread worker = new Thread(new ThreadStart(RunSchedule)); - // set worker priority switch (scheduleInfo.Priority) { @@ -89,15 +88,15 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = PackageController.GetPackageOwner(scheduleInfo.PackageId); SecurityContext.SetThreadPrincipal(user.UserId); - TaskManager.StartTask("SCHEDULER", "RUN_SCHEDULE", scheduleInfo.ScheduleName); - TaskManager.PackageId = scheduleInfo.PackageId; - TaskManager.ItemId = scheduleInfo.ScheduleId; - TaskManager.ScheduleId = scheduleInfo.ScheduleId; - TaskManager.MaximumExecutionTime = scheduleInfo.MaxExecutionTime; - - // set task parameters + List parameters = new List(); foreach (ScheduleTaskParameterInfo prm in scheduleInfo.Parameters) - TaskManager.TaskParameters[prm.ParameterId] = prm.ParameterValue; + { + parameters.Add(new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)); + } + + TaskManager.StartTask("SCHEDULER", "RUN_SCHEDULE", scheduleInfo.ScheduleName, scheduleInfo.ScheduleId, + scheduleInfo.ScheduleId, scheduleInfo.PackageId, scheduleInfo.MaxExecutionTime, + parameters); // run task try @@ -109,7 +108,8 @@ namespace WebsitePanel.EnterpriseServer objTask.DoWork(); else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", - task.TaskType)); + task.TaskType)); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs index b1cd15f0..61e838a6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs @@ -265,6 +265,7 @@ namespace WebsitePanel.EnterpriseServer } TaskManager.ItemId = serverId; + TaskManager.CompleteTask(); return serverId; @@ -277,12 +278,10 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsAdmin); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("SERVER", "UPDATE"); - TaskManager.ItemId = server.ServerId; - // get original server ServerInfo origServer = GetServerByIdInternal(server.ServerId); - TaskManager.ItemName = origServer.ServerName; + + TaskManager.StartTask("SERVER", "UPDATE", origServer.ServerName, server.ServerId); // preserve passwords server.Password = origServer.Password; @@ -313,12 +312,10 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsAdmin); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("SERVER", "UPDATE_PASSWORD"); - TaskManager.ItemId = serverId; - // get original server ServerInfo server = GetServerByIdInternal(serverId); - TaskManager.ItemName = server.ServerName; + + TaskManager.StartTask("SERVER", "UPDATE_PASSWORD", server.ServerName, serverId); // set password server.Password = password; @@ -341,12 +338,10 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsAdmin); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("SERVER", "UPDATE_AD_PASSWORD"); - TaskManager.ItemId = serverId; - // get original server ServerInfo server = GetServerByIdInternal(serverId); - TaskManager.ItemName = server.ServerName; + + TaskManager.StartTask("SERVER", "UPDATE_AD_PASSWORD", server.ServerName, serverId); // set password server.ADPassword = adPassword; @@ -369,12 +364,10 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsAdmin); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("SERVER", "DELETE"); - TaskManager.ItemId = serverId; - // get original server ServerInfo server = GetServerByIdInternal(serverId); - TaskManager.ItemName = server.ServerName; + + TaskManager.StartTask("SERVER", "DELETE", server.ServerName, serverId); try { @@ -427,10 +420,9 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("VIRTUAL_SERVER", "ADD_SERVICES"); ServerInfo server = GetServerByIdInternal(serverId); - TaskManager.ItemId = serverId; - TaskManager.ItemName = server.ServerName; + + TaskManager.StartTask("VIRTUAL_SERVER", "ADD_SERVICES", server.ServerName, serverId); // build XML string xml = BuildXmlFromArray(ids, "services", "service"); @@ -450,10 +442,9 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("VIRTUAL_SERVER", "DELETE_SERVICES"); ServerInfo server = GetServerByIdInternal(serverId); - TaskManager.ItemId = serverId; - TaskManager.ItemName = server.ServerName; + + TaskManager.StartTask("VIRTUAL_SERVER", "DELETE_SERVICES", server.ServerName, serverId); // build XML string xml = BuildXmlFromArray(ids, "services", "service"); @@ -585,9 +576,8 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsActive); if (accountCheck < 0) return accountCheck; - TaskManager.StartTask("SERVER", "ADD_SERVICE"); - TaskManager.ItemId = service.ServerId; - TaskManager.ItemName = GetServerByIdInternal(service.ServerId).ServerName; + TaskManager.StartTask("SERVER", "ADD_SERVICE", GetServerByIdInternal(service.ServerId).ServerName, service.ServerId); + TaskManager.WriteParameter("Service name", service.ServiceName); TaskManager.WriteParameter("Provider", service.ProviderId); @@ -641,9 +631,8 @@ namespace WebsitePanel.EnterpriseServer // load original service ServiceInfo origService = GetServiceInfo(service.ServiceId); - TaskManager.StartTask("SERVER", "UPDATE_SERVICE"); - TaskManager.ItemId = origService.ServerId; - TaskManager.ItemName = GetServerByIdInternal(origService.ServerId).ServerName; + TaskManager.StartTask("SERVER", "UPDATE_SERVICE", GetServerByIdInternal(origService.ServerId).ServerName, origService.ServerId); + TaskManager.WriteParameter("New service name", service.ServiceName); DataProvider.UpdateService(service.ServiceId, service.ServiceName, @@ -663,9 +652,8 @@ namespace WebsitePanel.EnterpriseServer ServiceInfo service = GetServiceInfoAdmin(serviceId); - TaskManager.StartTask("SERVER", "DELETE_SERVICE"); - TaskManager.ItemId = service.ServerId; - TaskManager.ItemName = GetServerByIdInternal(service.ServerId).ServerName; + TaskManager.StartTask("SERVER", "DELETE_SERVICE", GetServerByIdInternal(service.ServerId).ServerName, service.ServerId); + TaskManager.WriteParameter("Service name", service.ServiceName); try @@ -926,8 +914,8 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "ADD"); - TaskManager.ItemName = externalIP; + res = TaskManager.StartResultTask("IP_ADDRESS", "ADD", externalIP); + TaskManager.WriteParameter("IP Address", externalIP); TaskManager.WriteParameter("NAT Address", internalIP); @@ -961,8 +949,8 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("IP_ADDRESS", "ADD_RANGE"); - TaskManager.ItemName = externalIP; + res = TaskManager.StartResultTask("IP_ADDRESS", "ADD_RANGE", externalIP); + TaskManager.WriteParameter("IP Address", externalIP); TaskManager.WriteParameter("End IP Address", endIP); TaskManager.WriteParameter("NAT Address", internalIP); @@ -1251,8 +1239,7 @@ namespace WebsitePanel.EnterpriseServer if (addressesNumber > maxAvailableIPs) addressesNumber = maxAvailableIPs; - res = TaskManager.StartResultTask("IP_ADDRESS", "ALLOCATE_PACKAGE_IP"); - TaskManager.PackageId = packageId; + res = TaskManager.StartResultTask("IP_ADDRESS", "ALLOCATE_PACKAGE_IP", packageId); try { @@ -1337,8 +1324,8 @@ namespace WebsitePanel.EnterpriseServer return res; #endregion - res = TaskManager.StartResultTask("IP_ADDRESS", "DEALLOCATE_PACKAGE_IP"); - TaskManager.PackageId = packageId; + res = TaskManager.StartResultTask("IP_ADDRESS", "DEALLOCATE_PACKAGE_IP", packageId); + try { foreach (int id in addressId) @@ -1876,11 +1863,7 @@ namespace WebsitePanel.EnterpriseServer */ // place log record - TaskManager.StartTask("DOMAIN", "ADD", domainName); - TaskManager.PackageId = packageId; - TaskManager.TaskParameters["CreateZone"] = createDnsZone; - - + TaskManager.StartTask("DOMAIN", "ADD", domainName, 0, packageId, new BackgroundTaskParameter("CreateZone", createDnsZone)); // create DNS zone int zoneItemId = 0; @@ -1911,6 +1894,7 @@ namespace WebsitePanel.EnterpriseServer packageId, zoneItemId, domainName, allowSubDomains, 0, 0, isSubDomain, isInstantAlias, isDomainPointer); TaskManager.ItemId = itemId; + TaskManager.CompleteTask(); return itemId; @@ -2041,8 +2025,7 @@ namespace WebsitePanel.EnterpriseServer // place log record DomainInfo origDomain = GetDomain(domain.DomainId); - TaskManager.StartTask("DOMAIN", "UPDATE", origDomain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "UPDATE", origDomain.DomainName, domain.DomainId); try { @@ -2074,8 +2057,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("DOMAIN", "DETACH", domain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "DETACH", domain.DomainName, domain.DomainId); try { @@ -2143,8 +2125,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("DOMAIN", "DELETE", domain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "DELETE", domain.DomainName, domain.DomainId); try { @@ -2223,8 +2204,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("DOMAIN", "DISABLE_DNS", domain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "DISABLE_DNS", domain.DomainName, domain.DomainId); try { @@ -2270,8 +2250,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("DOMAIN", "ENABLE_DNS", domain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "ENABLE_DNS", domain.DomainName, domain.DomainId); try { @@ -2475,8 +2454,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_INSTANT_ALIAS_IS_NOT_CONFIGURED; // place log record - TaskManager.StartTask("DOMAIN", "CREATE_INSTANT_ALIAS", domain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "CREATE_INSTANT_ALIAS", domain.DomainName, domain.DomainId); try { @@ -2560,8 +2538,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("DOMAIN", "DELETE_INSTANT_ALIAS", domain.DomainName); - TaskManager.ItemId = domain.DomainId; + TaskManager.StartTask("DOMAIN", "DELETE_INSTANT_ALIAS", domain.DomainName, domain.DomainId); try { @@ -2695,8 +2672,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("DNS_ZONE", "ADD_RECORD", domain.DomainName); - TaskManager.ItemId = domain.ZoneItemId; + TaskManager.StartTask("DNS_ZONE", "ADD_RECORD", domain.DomainName, domain.ZoneItemId); try { @@ -2736,8 +2712,7 @@ namespace WebsitePanel.EnterpriseServer { // place log record DomainInfo domain = GetDomain(domainId); - TaskManager.StartTask("DNS_ZONE", "UPDATE_RECORD", domain.DomainName); - TaskManager.ItemId = domain.ZoneItemId; + TaskManager.StartTask("DNS_ZONE", "UPDATE_RECORD", domain.DomainName, domain.ZoneItemId); try { @@ -2783,8 +2758,7 @@ namespace WebsitePanel.EnterpriseServer try { // place log record - TaskManager.StartTask("DNS_ZONE", "DELETE_RECORD", domain.DomainName); - TaskManager.ItemId = domain.ZoneItemId; + TaskManager.StartTask("DNS_ZONE", "DELETE_RECORD", domain.DomainName, domain.ZoneItemId); DNSServer dns = new DNSServer(); ServiceProviderProxy.Init(dns, zoneItem.ServiceId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs index eebff84b..886936a1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs @@ -341,6 +341,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint } TaskManager.ItemId = itemId; + return itemId; } catch (Exception ex) @@ -380,8 +381,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint string siteName = origItem.Name.Replace(String.Format("{0}://", rootWebApplicationUri.Scheme), String.Empty); // Log operation. - TaskManager.StartTask("HOSTEDSHAREPOINT", "DELETE_SITE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("HOSTEDSHAREPOINT", "DELETE_SITE", origItem.Name, itemId); try { @@ -459,8 +459,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint } // Log operation. - TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name, itemId); try { @@ -550,8 +549,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint } // Log operation. - TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("HOSTEDSHAREPOINT", "BACKUP_SITE_COLLECTION", origItem.Name, itemId); try { @@ -850,8 +848,7 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint if (accountCheck < 0) return accountCheck; // place log record - TaskManager.StartTask("HOSTED_SHAREPOINT", "SET_ORG_LIMITS"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("HOSTED_SHAREPOINT", "SET_ORG_LIMITS", itemId); try { @@ -923,8 +920,8 @@ namespace WebsitePanel.EnterpriseServer.Code.SharePoint } // place log record - TaskManager.StartTask("HOSTED_SHAREPOINT", "CALCULATE_DISK_SPACE"); - TaskManager.ItemId = itemId; + TaskManager.StartTask("HOSTED_SHAREPOINT", "CALCULATE_DISK_SPACE", itemId); + try { Organization org = (Organization)PackageController.GetPackageItem(itemId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs index 63382be7..f516bfa6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs @@ -268,8 +268,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_SHAREPOINT_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("SHAREPOINT", "DELETE_SITE", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "DELETE_SITE", origItem.Name, itemId); try { @@ -340,8 +339,7 @@ namespace WebsitePanel.EnterpriseServer return null; // place log record - TaskManager.StartTask("SHAREPOINT", "BACKUP_SITE", item.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "BACKUP_SITE", item.Name, itemId); try { @@ -432,8 +430,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SHAREPOINT", "RESTORE_SITE", item.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "RESTORE_SITE", item.Name, itemId); try { @@ -520,8 +517,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SHAREPOINT", "INSTALL_WEBPARTS", item.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "INSTALL_WEBPARTS", item.Name, itemId); + TaskManager.WriteParameter("Package file", packageFile); try @@ -592,8 +589,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SHAREPOINT", "UNINSTALL_WEBPARTS", item.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "UNINSTALL_WEBPARTS", item.Name, itemId); + TaskManager.WriteParameter("Package name", packageName); try @@ -736,8 +733,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SHAREPOINT", "UPDATE_USER", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("SHAREPOINT", "UPDATE_USER", origItem.Name, item.Id); try { @@ -785,8 +781,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_SHAREPOINT_USERS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("SHAREPOINT", "DELETE_USER", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "DELETE_USER", origItem.Name, itemId); try { @@ -925,8 +920,7 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("SHAREPOINT", "UPDATE_GROUP", origItem.Name); - TaskManager.ItemId = item.Id; + TaskManager.StartTask("SHAREPOINT", "UPDATE_GROUP", origItem.Name, item.Id); try { @@ -962,8 +956,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_SHAREPOINT_GROUPS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("SHAREPOINT", "DELETE_GROUP", origItem.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("SHAREPOINT", "DELETE_GROUP", origItem.Name, itemId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs index 1f060c99..29b33e14 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs @@ -226,8 +226,7 @@ namespace WebsitePanel.EnterpriseServer item.SiteId = origItem.SiteId; // place log record - TaskManager.StartTask("STATS_SITE", "UPDATE", origItem.Name); - TaskManager.ItemId = origItem.Id; + TaskManager.StartTask("STATS_SITE", "UPDATE", origItem.Name, origItem.Id); try { @@ -263,8 +262,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_STATS_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("STATS_SITE", "DELETE", origItem.Name); - TaskManager.ItemId = origItem.Id; + TaskManager.StartTask("STATS_SITE", "DELETE", origItem.Name, itemId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/System/SystemController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/System/SystemController.cs similarity index 94% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/System/SystemController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/System/SystemController.cs index 322e30d6..3f010eec 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/System/SystemController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/System/SystemController.cs @@ -119,7 +119,7 @@ namespace WebsitePanel.EnterpriseServer return 0; } - internal static bool GetSystemSetupMode() + public static bool GetSystemSetupMode() { var scpaSystemSettings = GetSystemSettings(SystemSettings.SETUP_SETTINGS); // Flag either not found or empty @@ -131,7 +131,7 @@ namespace WebsitePanel.EnterpriseServer return true; } - internal static int SetupControlPanelAccounts(string passwordA, string passwordB, string ip) + public static int SetupControlPanelAccounts(string passwordA, string passwordB, string ip) { try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs similarity index 76% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs index 67d246b2..e36eacb6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs @@ -40,23 +40,25 @@ namespace WebsitePanel.EnterpriseServer.Tasks public override void OnComplete() { - if (!TaskManager.HasErrors) + BackgroundTask topTask = TaskManager.TopTask; + + if (!TaskManager.HasErrors(topTask)) { // Send user add notification - if (TaskManager.TaskSource == "USER" && - TaskManager.TaskName == "ADD" && TaskManager.ItemId > 0) + if (topTask.Source == "USER" && + topTask.TaskName == "ADD" && topTask.ItemId > 0) { SendAddUserNotification(); } // Send hosting package add notification - if (TaskManager.TaskSource == "HOSTING_SPACE" - && TaskManager.TaskName == "ADD" && TaskManager.ItemId > 0) + if (topTask.Source == "HOSTING_SPACE" + && topTask.TaskName == "ADD" && topTask.ItemId > 0) { SendAddPackageNotification(); } // Send hosting package add notification - if (TaskManager.TaskSource == "HOSTING_SPACE_WR" - && TaskManager.TaskName == "ADD" && TaskManager.ItemId > 0) + if (topTask.Source == "HOSTING_SPACE_WR" + && topTask.TaskName == "ADD" && topTask.ItemId > 0) { SendAddPackageWithResourcesNotification(); } @@ -76,10 +78,13 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - bool sendLetter = (bool)TaskManager.TaskParameters["SendLetter"]; + BackgroundTask topTask = TaskManager.TopTask; + + bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); + if (sendLetter) { - int sendResult = PackageController.SendPackageSummaryLetter(TaskManager.ItemId, null, null, true); + int sendResult = PackageController.SendPackageSummaryLetter(topTask.ItemId, null, null, true); CheckSmtpResult(sendResult); } } @@ -93,9 +98,12 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - int userId = (int)TaskManager.TaskParameters["UserId"]; - bool sendLetter = (bool)TaskManager.TaskParameters["SendLetter"]; - bool signup = (bool)TaskManager.TaskParameters["Signup"]; + BackgroundTask topTask = TaskManager.TopTask; + + int userId = Utils.ParseInt(topTask.GetParamValue("UserId").ToString(), 0); + bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); + bool signup = Utils.ParseBool(topTask.GetParamValue("Signup"), false); + // send space letter if enabled UserSettings settings = UserController.GetUserSettings(userId, UserSettings.PACKAGE_SUMMARY_LETTER); if (sendLetter @@ -103,7 +111,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks && Utils.ParseBool(settings["EnableLetter"], false)) { // send letter - int smtpResult = PackageController.SendPackageSummaryLetter(TaskManager.ItemId, null, null, signup); + int smtpResult = PackageController.SendPackageSummaryLetter(topTask.ItemId, null, null, signup); CheckSmtpResult(smtpResult); } } @@ -117,8 +125,11 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - bool sendLetter = (bool)TaskManager.TaskParameters["SendLetter"]; - int userId = TaskManager.ItemId; + BackgroundTask topTask = TaskManager.TopTask; + + bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); + + int userId = topTask.ItemId; // send account letter if enabled UserSettings settings = UserController.GetUserSettings(userId, UserSettings.ACCOUNT_SUMMARY_LETTER); if (sendLetter diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs new file mode 100644 index 00000000..b6207b84 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +namespace WebsitePanel.EnterpriseServer +{ + public class TaskController + { + public static BackgroundTask GetTask(string taskId) + { + BackgroundTask task = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetBackgroundTask(taskId)); + + if (task == null) + { + return null; + } + + task.Params = GetTaskParams(task.Id); + + return task; + } + + public static List GetScheduleTasks(int scheduleId) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetScheduleBackgroundTasks(scheduleId)); + } + + public static List GetTasks() + { + var user = SecurityContext.User; + + return GetTasks(user.IsPeer ? user.OwnerId : user.UserId); + } + + public static List GetTasks(int actorId) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTasks(actorId)); + } + + public static List GetTasks(Guid guid) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTasks(guid)); + } + + public static List GetProcessTasks(BackgroundTaskStatus status) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetProcessBackgroundTasks(status)); + } + + public static BackgroundTask GetTopTask(Guid guid) + { + BackgroundTask task = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetBackgroundTopTask(guid)); + + if (task == null) + { + return null; + } + + task.Params = GetTaskParams(task.Id); + + return task; + } + + public static int AddTask(BackgroundTask task) + { + int taskId = DataProvider.AddBackgroundTask(task.Guid, task.TaskId, task.ScheduleId, task.PackageId, task.UserId, + task.EffectiveUserId, task.TaskName, task.ItemId, task.ItemName, + task.StartDate, task.IndicatorCurrent, task.IndicatorMaximum, + task.MaximumExecutionTime, task.Source, task.Severity, task.Completed, + task.NotifyOnComplete, task.Status); + + AddTaskParams(taskId, task.Params); + + DataProvider.AddBackgroundTaskStack(taskId); + + return taskId; + } + + public static void UpdateTaskWithParams(BackgroundTask task) + { + if (UpdateTask(task)) + { + UpdateBackgroundTaskParams(task); + } + } + + public static bool UpdateTask(BackgroundTask task) + { + if (task.Status == BackgroundTaskStatus.Abort) + { + DeleteBackgroundTasks(task.Guid); + + return false; + } + + if (task.Completed) + { + DeleteBackgroundTask(task.Id); + + return false; + } + + DataProvider.UpdateBackgroundTask(task.Guid, task.Id, task.ScheduleId, task.PackageId, task.TaskName, task.ItemId, + task.ItemName, task.FinishDate, task.IndicatorCurrent, + task.IndicatorMaximum, task.MaximumExecutionTime, task.Source, + task.Severity, task.Completed, task.NotifyOnComplete, task.Status); + + return true; + } + + public static void UpdateBackgroundTaskParams(BackgroundTask task) + { + DataProvider.DeleteBackgroundTaskParams(task.Id); + + AddTaskParams(task.Id, task.Params); + } + + public static void DeleteBackgroundTasks(Guid guid) + { + DataProvider.DeleteBackgroundTasks(guid); + } + + public static void DeleteBackgroundTask(int id) + { + DataProvider.DeleteBackgroundTask(id); + } + + public static void AddTaskParams(int taskId, List parameters) + { + foreach (BackgroundTaskParameter param in SerializeParams(parameters)) + { + DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue, param.TypeName); + } + } + + public static List GetTaskParams(int taskId) + { + List parameters = ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTaskParams(taskId)); + + return DeserializeParams(parameters); + } + + public static void AddLog(BackgroundTaskLogRecord log) + { + DataProvider.AddBackgroundTaskLog(log.TaskId, log.Date, log.ExceptionStackTrace, log.InnerTaskStart, + log.Severity, log.Text, log.TextIdent, BuildParametersXml(log.TextParameters)); + } + + public static List GetLogs(BackgroundTask task, DateTime startLogTime) + { + if (startLogTime <= task.StartDate) + { + startLogTime = task.StartDate; + } + + List logs = ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTaskLogs(task.Id, startLogTime)); + + foreach (BackgroundTaskLogRecord log in logs) + { + log.TextParameters = ReBuildParametersXml(log.XmlParameters); + } + + return logs; + } + + private static List SerializeParams(List parameters) + { + foreach (BackgroundTaskParameter param in parameters) + { + var type = param.Value.GetType(); + param.TypeName = type.FullName; + + XmlSerializer serializer = new XmlSerializer(type); + MemoryStream ms = new MemoryStream(); + serializer.Serialize(ms, param.Value); + + ms.Position = 0; + StreamReader sr = new StreamReader(ms); + + param.SerializerValue = sr.ReadToEnd(); + } + + return parameters; + } + + private static List DeserializeParams(List parameters) + { + foreach (BackgroundTaskParameter param in parameters) + { + XmlSerializer deserializer = new XmlSerializer(Type.GetType(param.TypeName)); + StringReader sr = new StringReader(param.SerializerValue); + + param.Value = deserializer.Deserialize(sr); + } + + return parameters; + } + + private static string BuildParametersXml(string[] parameters) + { + XmlDocument xmlDoc = new XmlDocument(); + XmlElement nodeProps = xmlDoc.CreateElement("parameters"); + + if (parameters != null) + { + foreach (string parameter in parameters) + { + XmlElement nodeProp = xmlDoc.CreateElement("parameter"); + nodeProp.SetAttribute("value", parameter); + nodeProps.AppendChild(nodeProp); + } + } + return nodeProps.OuterXml; + } + + private static string[] ReBuildParametersXml(string parameters) + { + var textParameters = new List(); + + var xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(parameters); + + if (xmlDoc != null) + { + textParameters.AddRange(from XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter") select xmlParameter.Attributes.GetNamedItem("value").Value); + } + + return textParameters.ToArray(); + } + } +} + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskEventHandler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskEventHandler.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskEventHandler.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskEventHandler.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs new file mode 100644 index 00000000..0e8ebe0b --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -0,0 +1,857 @@ +// Copyright (c) 2012, Outercurve Foundation. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// - Neither the name of the Outercurve Foundation nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Threading; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.Caching; +using System.Xml; +using System.Reflection; +using WebsitePanel.Providers.Common; +using System.Diagnostics; +using System.Linq; + +namespace WebsitePanel.EnterpriseServer +{ + public class TaskManager + { + private static Hashtable eventHandlers = null; + //using id instead of guid + private static ConcurrentDictionary _taskThreadsDictionary = new ConcurrentDictionary(); + + // purge timer, used for killing old tasks from the hash + static Timer purgeTimer = new Timer(new TimerCallback(PurgeCompletedTasks), + null, + 60000, // start from 1 minute + 60000); // invoke each minute + + public static Guid Guid + { + get + { + Guid? guid = (Guid?)Thread.GetData(Thread.GetNamedDataSlot("BackgroundTaskGuid")); + if (!guid.HasValue) + { + guid = Guid.NewGuid(); + Thread.SetData(Thread.GetNamedDataSlot("BackgroundTaskGuid"), guid.Value); + } + + return guid.Value; + } + } + + public static void StartTask(string source, string taskName) + { + StartTask(source, taskName, 0); + } + + public static void StartTask(string source, string taskName, int itemId) + { + StartTask(source, taskName, 0, new List()); + } + + public static void StartTask(string source, string taskName, int itemId, BackgroundTaskParameter parameter) + { + StartTask(source, taskName, null, itemId, parameter); + } + + public static void StartTask(string source, string taskName, int itemId, List parameters) + { + StartTask(source, taskName, null, itemId, parameters); + } + + public static void StartTask(string source, string taskName, object itemName) + { + StartTask(source, taskName, itemName, 0); + } + + public static void StartTask(string source, string taskName, object itemName, int itemId) + { + StartTask(source, taskName, itemName, itemId, new List()); + } + + public static void StartTask(string source, string taskName, object itemName, BackgroundTaskParameter parameter) + { + StartTask(source, taskName, itemName, 0, parameter); + } + + public static void StartTask(string source, string taskName, object itemName, List parameters) + { + StartTask(source, taskName, itemName, 0, parameters); + } + + public static void StartTask(string source, string taskName, object itemName, int itemId, BackgroundTaskParameter parameter) + { + StartTask(source, taskName, itemName, itemId, 0, parameter); + } + + public static void StartTask(string source, string taskName, object itemName, int itemId, List parameters) + { + StartTask(source, taskName, itemName, itemId, 0, 0, -1, parameters); + } + + public static void StartTask(string source, string taskName, object itemName, int itemId, int packageId, BackgroundTaskParameter parameter) + { + List parameters = new List(); + if (parameter != null) + { + parameters.Add(parameter); + } + + StartTask(source, taskName, itemName, itemId, 0, packageId, -1, parameters); + } + + public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId) + { + StartTask(taskId, source, taskName, itemName, itemId, 0, 0, -1, new List()); + } + + public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, int packageId) + { + StartTask(taskId, source, taskName, itemName, itemId, 0, packageId, -1, new List()); + } + + public static void StartTask(string source, string taskName, object itemName, int itemId, + int scheduleId, int packageId, int maximumExecutionTime, List parameters) + { + StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, parameters); + } + + public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, + int scheduleId, int packageId, int maximumExecutionTime, List parameters) + { + if (String.IsNullOrEmpty(taskId)) + { + taskId = Guid.NewGuid().ToString("N"); + } + + var user = SecurityContext.User; + + int userId = user.OwnerId == 0 + ? user.UserId + : user.OwnerId; + + int effectiveUserId = user.UserId; + + String itemNameStr = itemName != null + ? itemName.ToString() + : String.Empty; + BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, + itemId, scheduleId, packageId, maximumExecutionTime, parameters); + + + List tasks = TaskController.GetTasks(Guid); + + if (tasks.Count > 0) + { + BackgroundTask rootTask = tasks[0]; + + BackgroundTaskLogRecord log = new BackgroundTaskLogRecord( + rootTask.Id, + tasks.Count - 1, + true, + String.Format("{0}_{1}", source, taskName), + new string[] { itemNameStr }); + + + TaskController.AddLog(log); + } + + // call event handler + CallTaskEventHandler(task, false); + + AddTaskThread(TaskController.AddTask(task), Thread.CurrentThread); + } + + public static void WriteParameter(string parameterName, object parameterValue) + { + string val = parameterValue != null ? parameterValue.ToString() : ""; + WriteLogRecord(Guid, 0, parameterName + ": " + val, null, null); + } + + public static void Write(string text, params string[] textParameters) + { + // INFO + WriteLogRecord(Guid, 0, text, null, textParameters); + } + + public static void WriteWarning(string text, params string[] textParameters) + { + WriteWarning(Guid, text, textParameters); + } + + public static void WriteWarning(Guid guid, string text, params string[] textParameters) + { + // WARNING + WriteLogRecord(guid, 1, text, null, textParameters); + } + + public static Exception WriteError(Exception ex) + { + // ERROR + WriteLogRecord(Guid, 2, ex.Message, ex.StackTrace); + + return new Exception((TopTask != null) + ? String.Format("Error executing '{0}' task on '{1}' {2}", + TopTask.TaskName, TopTask.ItemName, TopTask.Source) + : String.Format("Error executing task"), ex); + } + + public static void WriteError(Exception ex, string text, params string[] textParameters) + { + // ERROR + string[] prms = new string[] { ex.Message }; + if (textParameters != null && textParameters.Length > 0) + { + prms = new string[textParameters.Length + 1]; + Array.Copy(textParameters, 0, prms, 1, textParameters.Length); + prms[0] = ex.Message; + } + + WriteLogRecord(Guid, 2, text, ex.Message + "\n" + ex.StackTrace, prms); + } + + public static void WriteError(string text, params string[] textParameters) + { + // ERROR + WriteLogRecord(Guid, 2, text, null, textParameters); + } + + private static void WriteLogRecord(Guid guid, int severity, string text, string stackTrace, params string[] textParameters) + { + List tasks = TaskController.GetTasks(guid); + + if (tasks.Count > 0) + { + BackgroundTask rootTask = tasks[0]; + + BackgroundTaskLogRecord log = new BackgroundTaskLogRecord( + rootTask.Id, + tasks.Count - 1, + false, + text, + stackTrace, + textParameters); + + TaskController.AddLog(log); + + if (severity > rootTask.Severity) + { + rootTask.Severity = severity; + + TaskController.UpdateTask(rootTask); + } + } + } + + public static void CompleteTask() + { + List tasks = TaskController.GetTasks(Guid); + + if (tasks.Count == 0) + return; + + BackgroundTask topTask = tasks[tasks.Count - 1]; + + // call event handler + CallTaskEventHandler(topTask, true); + + // finish task + topTask.FinishDate = DateTime.Now; + topTask.Completed = true; + + // write task execution result to database + if (tasks.Count == 1) // single task + { + // write to database + AddAuditLog(topTask); + } + + TaskController.UpdateTask(topTask); + StopProcess(topTask); + } + + public static void UpdateParam(String name, Object value) + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + return; + + topTask.UpdateParamValue(name, value); + + TaskController.UpdateTaskWithParams(topTask); + } + + public static int ItemId + { + set + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + return; + + topTask.ItemId = value; + + TaskController.UpdateTask(topTask); + } + } + + public static String ItemName + { + set + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + return; + + topTask.ItemName = value; + + TaskController.UpdateTask(topTask); + } + } + + public static void UpdateParams(Hashtable parameters) + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + return; + + foreach (string key in parameters.Keys) + { + topTask.UpdateParamValue(key, parameters[key]); + } + + TaskController.UpdateTaskWithParams(topTask); + } + + static string FormatExecutionLog(BackgroundTask task) + { + StringWriter sw = new StringWriter(); + XmlWriter writer = new XmlTextWriter(sw); + + writer.WriteStartElement("log"); + + // parameters + writer.WriteStartElement("parameters"); + foreach (BackgroundTaskParameter param in task.Params) + { + writer.WriteStartElement("parameter"); + writer.WriteAttributeString("name", param.Name); + writer.WriteString(param.Value.ToString()); + + writer.WriteEndElement(); + } + writer.WriteEndElement(); // parameters + + // records + writer.WriteStartElement("records"); + foreach (BackgroundTaskLogRecord record in task.Logs) + { + writer.WriteStartElement("record"); + writer.WriteAttributeString("severity", record.Severity.ToString()); + writer.WriteAttributeString("date", record.Date.ToString(System.Globalization.CultureInfo.InvariantCulture)); + writer.WriteAttributeString("ident", record.TextIdent.ToString()); + + // text + writer.WriteElementString("text", record.Text); + + // text parameters + if (record.TextParameters != null && record.TextParameters.Length > 0) + { + writer.WriteStartElement("textParameters"); + foreach (string prm in record.TextParameters) + { + writer.WriteElementString("value", prm); + } + writer.WriteEndElement(); // textParameters + } + + // stack trace + writer.WriteElementString("stackTrace", record.ExceptionStackTrace); + writer.WriteEndElement(); + } + writer.WriteEndElement(); + writer.WriteEndElement(); + + return sw.ToString(); + } + + static void PurgeCompletedTasks(object obj) + { + List tasks = TaskController.GetTasks(Guid); + + foreach (BackgroundTask task in tasks) + { + if (task.MaximumExecutionTime != -1 + && ((TimeSpan)(DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) + { + task.Status = BackgroundTaskStatus.Stopping; + + TaskController.UpdateTask(task); + } + } + } + + public static int IndicatorMaximum + { + set + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + + topTask.IndicatorMaximum = value; + + TaskController.UpdateTask(topTask); + } + } + + public static int IndicatorCurrent + { + get + { + return TopTask.IndicatorCurrent; + } + set + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + + topTask.IndicatorCurrent = value; + + TaskController.UpdateTask(topTask); + } + } + + public static int MaximumExecutionTime + { + get + { + return TopTask.MaximumExecutionTime; + } + set + { + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + + topTask.MaximumExecutionTime = value; + + TaskController.UpdateTask(topTask); + } + } + + public static bool HasErrors(BackgroundTask task) + { + return task.Severity == 2; + } + + public static BackgroundTask TopTask + { + get { return TaskController.GetTopTask(Guid); } + } + + public static BackgroundTask GetTask(string taskId) + { + BackgroundTask task = TaskController.GetTask(taskId); + + if (task == null) + return null; + + return task; + } + + public static BackgroundTask GetTaskWithLogRecords(string taskId, DateTime startLogTime) + { + BackgroundTask task = GetTask(taskId); + + if (task == null) + return null; + + task.Logs = TaskController.GetLogs(task, startLogTime); + + return task; + } + + public static Dictionary GetScheduledTasks() + { + Dictionary scheduledTasks = new Dictionary(); + try + { + foreach (BackgroundTask task in TaskController.GetTasks()) + { + if (task.ScheduleId > 0 + && !task.Completed + && (task.Status == BackgroundTaskStatus.Run || task.Status == BackgroundTaskStatus.Starting) + && !scheduledTasks.ContainsKey(task.ScheduleId)) + scheduledTasks.Add(task.ScheduleId, task); + } + } + catch { } + + return scheduledTasks; + } + + public static void SetTaskNotifyOnComplete(string taskId) + { + BackgroundTask task = GetTask(taskId); + + if (task == null) + return; + + task.NotifyOnComplete = true; + } + + internal static void AddTaskThread(int taskId, Thread taskThread) + { + if (_taskThreadsDictionary.ContainsKey(taskId)) + _taskThreadsDictionary[taskId] = taskThread; + else + _taskThreadsDictionary.AddOrUpdate(taskId, taskThread, (key, oldValue) => taskThread); + } + + public static void StopTask(string taskId) + { + BackgroundTask task = GetTask(taskId); + + if (task == null) + { + return; + } + + task.Status = BackgroundTaskStatus.Abort; + + StopProcess(task); + + if (!HasErrors(task)) + { + task.Severity = 1; + } + + task.FinishDate = DateTime.Now; + + WriteWarning(task.Guid, "Task aborted by user"); + + AddAuditLog(task); + + TaskController.UpdateTask(task); + } + + private static void StopProcess(BackgroundTask task) + { + if (_taskThreadsDictionary.ContainsKey(task.Id)) + { + if (_taskThreadsDictionary[task.Id] != null) + if (_taskThreadsDictionary[task.Id].IsAlive) + { + if (!task.Completed) + _taskThreadsDictionary[task.Id].Abort(); + _taskThreadsDictionary[task.Id] = null; + } + Thread deleted; + _taskThreadsDictionary.TryRemove(task.Id, out deleted); + } + } + + private static void AddAuditLog(BackgroundTask task) + { + task.Logs = TaskController.GetLogs(task, task.StartDate); + + string executionLog = FormatExecutionLog(task); + + UserInfo user = UserController.GetUserInternally(task.EffectiveUserId); + string username = user != null ? user.Username : null; + + AuditLog.AddAuditLogRecord(task.TaskId, task.Severity, task.EffectiveUserId, + username, task.PackageId, task.ItemId, + task.ItemName, task.StartDate, task.FinishDate, task.Source, + task.TaskName, executionLog); + } + + public static List GetUserTasks(int userId) + { + List list = new List(); + + // try to get user first + UserInfo user = UserController.GetUser(userId); + if (user == null) + return list; // prohibited user + + // get user tasks + foreach (BackgroundTask task in TaskController.GetTasks(user.IsPeer ? user.OwnerId : user.UserId)) + { + if (task.UserId == userId && !task.Completed + && task.Status == BackgroundTaskStatus.Run) + { + list.Add(task); + } + } + return list; + } + + public static List GetUserCompletedTasks(int userId) + { + return new List(); + } + + public static int GetTasksNumber() + { + return TaskController.GetTasks().Count; + } + + #region Private Helpers + + private static void CallTaskEventHandler(BackgroundTask task, bool onComplete) + { + string[] taskHandlers = GetTaskEventHandlers(task.Source, task.TaskName); + if (taskHandlers != null) + { + foreach (string taskHandler in taskHandlers) + { + try + { + Type handlerType = Type.GetType(taskHandler); + TaskEventHandler handler = (TaskEventHandler)Activator.CreateInstance(handlerType); + + if (handler != null) + { + if (onComplete) + handler.OnComplete(); + else + handler.OnStart(); + } + } + catch (Exception ex) + { + WriteError(ex, "Error executing task event handler: {0}", ex.Message); + } + } + } + } + + private static string[] GetTaskEventHandlers(string source, string taskName) + { + // load configuration + string appRoot = AppDomain.CurrentDomain.BaseDirectory; + string path = Path.Combine(appRoot, "TaskEventHandlers.config"); + + if (eventHandlers == null) + { + eventHandlers = Hashtable.Synchronized(new Hashtable()); + + // load from XML + if (File.Exists(path)) + { + List xmlConfigs = new List(); + xmlConfigs.Add(new XmlDocument()); + xmlConfigs[0].Load(path); + // Lookup for external references first + XmlNodeList xmlReferences = xmlConfigs[0].SelectNodes("//reference"); + foreach (XmlElement xmlReference in xmlReferences) + { + string referencePath = Path.Combine(appRoot, xmlReference.GetAttribute("src")); + if (File.Exists(referencePath)) + { + XmlDocument xmldoc = new XmlDocument(); + xmldoc.Load(referencePath); + xmlConfigs.Add(xmldoc); + } + } + + // parse XML + foreach (XmlDocument xml in xmlConfigs) + { + XmlNodeList xmlHandlers = xml.SelectNodes("//handler"); + foreach (XmlNode xmlHandler in xmlHandlers) + { + string keyName = xmlHandler.ParentNode.Attributes["source"].Value + + xmlHandler.ParentNode.Attributes["name"].Value; + + // get handlers collection + List taskHandlers = (List)eventHandlers[keyName]; + if (taskHandlers == null) + { + taskHandlers = new List(); + eventHandlers[keyName] = taskHandlers; + } + + string handlerType = xmlHandler.Attributes["type"].Value; + taskHandlers.Add(handlerType); + } + } + } + } + + string fullTaskName = source + taskName; + List handlersList = (List)eventHandlers[fullTaskName]; + return handlersList == null ? null : handlersList.ToArray(); + } + + #endregion + + + #region ResultTasks + + public static void CompleteResultTask(ResultObject res, string errorCode, Exception ex, string errorMessage) + { + if (res != null) + { + res.IsSuccess = false; + + if (!string.IsNullOrEmpty(errorCode)) + res.ErrorCodes.Add(errorCode); + } + + if (ex != null) + TaskManager.WriteError(ex); + + if (!string.IsNullOrEmpty(errorMessage)) + TaskManager.WriteError(errorMessage); + + //LogRecord. + CompleteTask(); + + + } + + public static void CompleteResultTask(ResultObject res, string errorCode, Exception ex) + { + CompleteResultTask(res, errorCode, ex, null); + } + + public static void CompleteResultTask(ResultObject res, string errorCode) + { + CompleteResultTask(res, errorCode, null, null); + } + + public static void CompleteResultTask(ResultObject res) + { + CompleteResultTask(res, null); + } + + public static void CompleteResultTask() + { + CompleteResultTask(null); + } + + public static T StartResultTask(string source, string taskName) where T : ResultObject, new() + { + StartTask(source, taskName); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, object itemName) where T : ResultObject, new() + { + StartTask(source, taskName, itemName); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, object itemName, int packageId) where T : ResultObject, new() + { + StartTask(source, taskName, itemName, 0, packageId, null); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, int packageId) where T : ResultObject, new() + { + StartTask(source, taskName, null, 0, packageId, null); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, int itemId, BackgroundTaskParameter parameter) where T : ResultObject, new() + { + StartTask(source, taskName, itemId, parameter); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, int itemId, List parameters) where T : ResultObject, new() + { + StartTask(source, taskName, itemId, parameters); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, int itemId, object itemName, int packageId) where T : ResultObject, new() + { + StartTask(source, taskName, itemName, itemId, packageId, null); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, Guid taskId, object itemName, int packageId) where T : ResultObject, new() + { + StartTask(taskId.ToString(), source, taskName, itemName, 0, packageId); + T res = new T(); + res.IsSuccess = true; + return res; + } + + public static T StartResultTask(string source, string taskName, Guid taskId, int itemId, object itemName, int packageId) where T : ResultObject, new() + { + StartTask(taskId.ToString(), source, taskName, itemName, itemId, packageId); + T res = new T(); + res.IsSuccess = true; + return res; + } + + #endregion + + } +} + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserAsyncWorker.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserAsyncWorker.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserAsyncWorker.cs index d5a66597..33cac57d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserAsyncWorker.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserAsyncWorker.cs @@ -103,8 +103,7 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = UserController.GetUserInternally(userId); // place log record - TaskManager.StartTask(taskId, "USER", "DELETE", user.Username); - TaskManager.ItemId = userId; + TaskManager.StartTask(taskId, "USER", "DELETE", user.Username, userId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs similarity index 94% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs index ff333445..4f51e249 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs @@ -448,8 +448,12 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_USER_ALREADY_EXISTS; } - TaskManager.ItemId = userId; - TaskManager.TaskParameters["SendLetter"] = sendLetter; + BackgroundTask topTask = TaskManager.TopTask; + + topTask.ItemId = userId; + topTask.UpdateParamValue("SendLetter", sendLetter); + + TaskController.UpdateTaskWithParams(topTask); return userId; } @@ -518,8 +522,7 @@ namespace WebsitePanel.EnterpriseServer try { // start task - TaskManager.StartTask(taskId, "USER", "UPDATE", user.Username); - TaskManager.ItemId = user.UserId; + TaskManager.StartTask(taskId, "USER", "UPDATE", user.Username, user.UserId); // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); @@ -637,10 +640,9 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = GetUserInternally(userId); // place log record - TaskManager.StartTask("USER", "CHANGE_PASSWORD", user.Username); - TaskManager.ItemId = user.UserId; + TaskManager.StartTask("USER", "CHANGE_PASSWORD", user.Username, user.UserId); - try + try { DataProvider.ChangeUserPassword(SecurityContext.User.UserId, userId, @@ -675,8 +677,7 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = GetUserInternally(userId); // place log record - TaskManager.StartTask(taskId, "USER", "CHANGE_STATUS", user.Username); - TaskManager.ItemId = user.UserId; + TaskManager.StartTask(taskId, "USER", "CHANGE_STATUS", user.Username, user.UserId); // update user packages List packages = new List(); @@ -796,8 +797,7 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = GetUserInternally(settings.UserId); // place log record - TaskManager.StartTask("USER", "UPDATE_SETTINGS", user.Username); - TaskManager.ItemId = user.UserId; + TaskManager.StartTask("USER", "UPDATE_SETTINGS", user.Username, user.UserId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Virtualization/CreateServerAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/CreateServerAsyncWorker.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Virtualization/CreateServerAsyncWorker.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/CreateServerAsyncWorker.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Virtualization/VirtualizationServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Virtualization/VirtualizationServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs index ee986ab1..b6dec6b3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Virtualization/VirtualizationServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs @@ -583,9 +583,7 @@ namespace WebsitePanel.EnterpriseServer string summaryLetterEmail) { // start task - TaskManager.StartTask(taskId, "VPS", "CREATE", vm.Name); - TaskManager.ItemId = vm.Id; - TaskManager.PackageId = vm.PackageId; + TaskManager.StartTask(taskId, "VPS", "CREATE", vm.Name, vm.Id, vm.PackageId); try { @@ -1647,12 +1645,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "UPDATE_HOSTNAME"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "UPDATE_HOSTNAME", vm.Id, vm.Name, vm.PackageId); try { @@ -1767,9 +1760,13 @@ namespace WebsitePanel.EnterpriseServer return res; } - TaskManager.ItemId = machine.Id; - TaskManager.ItemName = machine.Name; - TaskManager.PackageId = machine.PackageId; + BackgroundTask topTask = TaskManager.TopTask; + topTask.ItemId = machine.Id; + topTask.ItemName = machine.Name; + topTask.PackageId = machine.PackageId; + + TaskController.UpdateTask(topTask); + TaskManager.WriteParameter("New state", state); // load proxy @@ -1881,12 +1878,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "CHANGE_ADMIN_PASSWORD"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "CHANGE_ADMIN_PASSWORD", vm.Id, vm.Name, vm.PackageId); try { @@ -1983,12 +1975,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "UPDATE_CONFIGURATION"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "UPDATE_CONFIGURATION", vm.Id, vm.Name, vm.PackageId); try { @@ -2185,12 +2172,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "INSERT_DVD_DISK"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "INSERT_DVD_DISK", vm.Id, vm.Name, vm.PackageId); try { @@ -2246,12 +2228,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "EJECT_DVD_DISK"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "EJECT_DVD_DISK", vm.Id, vm.Name, vm.PackageId); try { @@ -2326,12 +2303,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "TAKE_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "TAKE_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2401,12 +2373,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "APPLY_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "APPLY_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2472,12 +2439,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "RENAME_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "RENAME_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2526,12 +2488,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2587,12 +2544,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT_SUBTREE"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT_SUBTREE", vm.Id, vm.Name, vm.PackageId); try { @@ -2776,12 +2728,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "ADD_EXTERNAL_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "ADD_EXTERNAL_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -2841,12 +2788,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_EXTERNAL_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_EXTERNAL_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -2893,12 +2835,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_EXTERNAL_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_EXTERNAL_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3025,12 +2962,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "ADD_PRIVATE_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "ADD_PRIVATE_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3148,12 +3080,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_PRIVATE_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_PRIVATE_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3200,12 +3127,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_PRIVATE_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_PRIVATE_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3368,12 +3290,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE", vm.Id, vm.Name, vm.PackageId); try { @@ -3538,11 +3455,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "SEND_SUMMARY_LETTER"); - - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "SEND_SUMMARY_LETTER", vm.Id, vm.Name, vm.PackageId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/CreateAsyncVMfromVM.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/CreateAsyncVMfromVM.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/CreateAsyncVMfromVM.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/CreateAsyncVMfromVM.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/CreateServerAsyncWorkerForPrivateCloud.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/CreateServerAsyncWorkerForPrivateCloud.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/CreateServerAsyncWorkerForPrivateCloud.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/CreateServerAsyncWorkerForPrivateCloud.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs similarity index 95% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs index d1df6e1e..7ec47d27 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs @@ -276,9 +276,7 @@ namespace WebsitePanel.EnterpriseServer Guid taksId = Guid.NewGuid(); - res = TaskManager.StartResultTask("VPSForPC", "CREATE", taksId); - TaskManager.ItemName = vmName; - TaskManager.PackageId = packageId; + res = TaskManager.StartResultTask("VPSForPC", "CREATE", taksId, vmName, packageId); string templateName = vmTemplate.Name; @@ -344,9 +342,7 @@ namespace WebsitePanel.EnterpriseServer IntResult res = new IntResult(); //Create Task - res = TaskManager.StartResultTask("VPSForPC", "CREATE"); - TaskManager.PackageId = packageId; - TaskManager.ItemName = vmName; + res = TaskManager.StartResultTask("VPSForPC", "CREATE", vmName, packageId); // meta item VMInfo vmInfo = null; @@ -515,6 +511,7 @@ namespace WebsitePanel.EnterpriseServer { vmInfo.VmId = PackageController.AddPackageItem(vmInfo); vmInfo.Id = vmInfo.VmId; + TaskManager.ItemId = vmInfo.VmId; } catch (Exception ex) @@ -568,10 +565,7 @@ namespace WebsitePanel.EnterpriseServer { Guid taksId = Guid.NewGuid(); - ResultObject taskInfo = TaskManager.StartResultTask("VPSForPC", "CREATE", taksId); - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + ResultObject taskInfo = TaskManager.StartResultTask("VPSForPC", "CREATE", taksId, vm.Id, vm.Name, vm.PackageId); vm.CurrentTaskId = taksId.ToString("N"); @@ -1674,12 +1668,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "UPDATE_HOSTNAME"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "UPDATE_HOSTNAME", vm.Id, vm.Name, vm.PackageId); try { @@ -1814,9 +1803,13 @@ namespace WebsitePanel.EnterpriseServer return res; } - TaskManager.ItemId = machine.Id; - TaskManager.ItemName = machine.Name; - TaskManager.PackageId = machine.PackageId; + BackgroundTask topTask = TaskManager.TopTask; + topTask.ItemId = machine.Id; + topTask.ItemName = machine.Name; + topTask.PackageId = machine.PackageId; + + TaskController.UpdateTask(topTask); + TaskManager.WriteParameter("New state", state); // load proxy @@ -1927,12 +1920,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "CHANGE_ADMIN_PASSWORD"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "CHANGE_ADMIN_PASSWORD", vm.Id, vm.Name, vm.PackageId); try { @@ -2029,12 +2017,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "UPDATE_CONFIGURATION"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "UPDATE_CONFIGURATION", vm.Id, vm.Name, vm.PackageId); try { @@ -2222,12 +2205,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "INSERT_DVD_DISK"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "INSERT_DVD_DISK", vm.Id, vm.Name, vm.PackageId); try { @@ -2283,12 +2261,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "EJECT_DVD_DISK"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "EJECT_DVD_DISK", vm.Id, vm.Name, vm.PackageId); try { @@ -2363,12 +2336,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "TAKE_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "TAKE_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2438,12 +2406,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "APPLY_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "APPLY_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2514,12 +2477,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "RENAME_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "RENAME_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2568,12 +2526,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT", vm.Id, vm.Name, vm.PackageId); try { @@ -2629,12 +2582,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT_SUBTREE"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_SNAPSHOT_SUBTREE", vm.Id, vm.Name, vm.PackageId); try { @@ -2825,12 +2773,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "ADD_EXTERNAL_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "ADD_EXTERNAL_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -2890,12 +2833,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_EXTERNAL_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_EXTERNAL_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -2942,12 +2880,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_EXTERNAL_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_EXTERNAL_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3062,12 +2995,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "ADD_PRIVATE_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "ADD_PRIVATE_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3182,12 +3110,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_PRIVATE_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "SET_PRIMARY_PRIVATE_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3234,12 +3157,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "DELETE_PRIVATE_IP"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "DELETE_PRIVATE_IP", vm.Id, vm.Name, vm.PackageId); try { @@ -3384,12 +3302,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPSForPC", "DELETE"); - - // log item info - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPSForPC", "DELETE", vm.Id, vm.Name, vm.PackageId); try { @@ -3547,11 +3460,7 @@ namespace WebsitePanel.EnterpriseServer #endregion // start task - res = TaskManager.StartResultTask("VPS", "SEND_SUMMARY_LETTER"); - - TaskManager.ItemId = vm.Id; - TaskManager.ItemName = vm.Name; - TaskManager.PackageId = vm.PackageId; + res = TaskManager.StartResultTask("VPS", "SEND_SUMMARY_LETTER", vm.Id, vm.Name, vm.PackageId); try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebAppGallery/WebAppGalleryController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebAppGallery/WebAppGalleryController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebAppGallery/WebAppGalleryController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebAppGallery/WebAppGalleryController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs index c57912a5..24f91021 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs @@ -496,8 +496,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE", siteItem.Name); - TaskManager.ItemId = site.Id; + TaskManager.StartTask("WEB_SITE", "UPDATE", siteItem.Name, site.Id); try { @@ -559,8 +558,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("WEB_SITE", "CHANGE_STATE", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "CHANGE_STATE", siteItem.Name, siteItemId); + TaskManager.WriteParameter("New state", state); try @@ -582,7 +581,6 @@ namespace WebsitePanel.EnterpriseServer TaskManager.CompleteTask(); } } - // AppPool public static int ChangeAppPoolState(int siteItemId, AppPoolState state) { @@ -664,8 +662,6 @@ namespace WebsitePanel.EnterpriseServer return state; } - - public static int DeleteWebSite(int siteItemId, bool deleteWebsiteDirectory) { // check account @@ -678,8 +674,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE", siteItem.Name, siteItemId); // delete web site try @@ -793,8 +788,7 @@ namespace WebsitePanel.EnterpriseServer } // place log record - TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name, siteItemId); try { @@ -969,8 +963,7 @@ namespace WebsitePanel.EnterpriseServer // place log record - TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name, siteItemId); try { @@ -1306,8 +1299,8 @@ namespace WebsitePanel.EnterpriseServer IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); // place log record - TaskManager.StartTask("WEB_SITE", "ADD_POINTER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "ADD_POINTER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Domain pointer", domain.DomainName); TaskManager.WriteParameter("Host name", hostName); TaskManager.WriteParameter("updateWebSite", updateWebSite.ToString()); @@ -1508,8 +1501,8 @@ namespace WebsitePanel.EnterpriseServer IPAddressInfo ip = ServerController.GetIPAddress(siteItem.SiteIPAddressId); // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_POINTER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Domain pointer", domain.DomainName); TaskManager.WriteParameter("updateWebSite", updateWebSite.ToString()); @@ -1670,8 +1663,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("WEB_SITE", "ADD_VDIR", vdirName); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "ADD_VDIR", vdirName, siteItemId); + TaskManager.WriteParameter("Web site", siteItem.Name); try @@ -1724,8 +1717,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_VDIR", vdir.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_VDIR", vdir.Name, siteItemId); + TaskManager.WriteParameter("Web site", siteItem.Name); try @@ -1763,8 +1756,8 @@ namespace WebsitePanel.EnterpriseServer // place log record // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_VDIR", vdirName); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_VDIR", vdirName, siteItemId); + TaskManager.WriteParameter("Web site", siteItem.Name); try @@ -1804,8 +1797,8 @@ namespace WebsitePanel.EnterpriseServer if (packageCheck < 0) return packageCheck; // place log record - TaskManager.StartTask("WEB_SITE", "INSTALL_FP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "INSTALL_FP", siteItem.Name, siteItemId); + TaskManager.WriteParameter("FrontPage username", username); try @@ -1857,8 +1850,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UNINSTALL_FP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UNINSTALL_FP", siteItem.Name, siteItemId); + TaskManager.WriteParameter("FrontPage username", siteItem.FrontPageAccount); try @@ -1898,8 +1891,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "CHANGE_FP_PASSWORD", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "CHANGE_FP_PASSWORD", siteItem.Name, siteItemId); + TaskManager.WriteParameter("FrontPage username", siteItem.FrontPageAccount); try @@ -1941,8 +1934,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "INSTALL_SECURED_FOLDERS", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "INSTALL_SECURED_FOLDERS", siteItem.Name, siteItemId); try { @@ -1975,8 +1967,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UNINSTALL_SECURED_FOLDERS", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UNINSTALL_SECURED_FOLDERS", siteItem.Name, siteItemId); try { @@ -2030,8 +2021,8 @@ namespace WebsitePanel.EnterpriseServer folder.Path = FilesController.CorrectRelativePath(folder.Path); // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_SECURED_FOLDER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_SECURED_FOLDER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Folder", folder.Path); try @@ -2060,8 +2051,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_SECURED_FOLDER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_SECURED_FOLDER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Folder", folderPath); try @@ -2116,8 +2107,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_SECURED_USER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_SECURED_USER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("User", user.Name); try @@ -2146,8 +2137,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_SECURED_USER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_SECURED_USER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("User", userName); try @@ -2202,8 +2193,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_SECURED_GROUP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_SECURED_GROUP", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Group", group.Name); try @@ -2232,8 +2223,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_SECURED_GROUP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_SECURED_GROUP", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Group", groupName); try @@ -2397,9 +2388,12 @@ namespace WebsitePanel.EnterpriseServer dir.Name = sslDomain + "/" + vdirName; dir.PackageId = packageId; dir.ServiceId = serviceId; - TaskManager.ItemId = PackageController.AddPackageItem(dir); - return TaskManager.ItemId; + int itemId = PackageController.AddPackageItem(dir); + + TaskManager.ItemId = itemId; + + return itemId; } catch (Exception ex) { @@ -2423,8 +2417,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_SSL_FOLDER", origVdir.Name); - TaskManager.ItemId = vdir.Id; + TaskManager.StartTask("WEB_SITE", "UPDATE_SSL_FOLDER", origVdir.Name, vdir.Id); try { @@ -2471,8 +2464,7 @@ namespace WebsitePanel.EnterpriseServer return 0; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_SSL_FOLDER", origVdir.Name); - TaskManager.ItemId = itemId; + TaskManager.StartTask("WEB_SITE", "DELETE_SSL_FOLDER", origVdir.Name, itemId); try { @@ -2975,8 +2967,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "ENABLE_HELICON_APE", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "ENABLE_HELICON_APE", siteItem.Name, siteItemId); try { @@ -3010,8 +3001,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DISABLE_HELICON_APE", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DISABLE_HELICON_APE", siteItem.Name, siteItemId); try { @@ -3153,8 +3143,8 @@ namespace WebsitePanel.EnterpriseServer folder.Path = FilesController.CorrectRelativePath(folder.Path); // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_HELICON_APE_FOLDER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_HELICON_APE_FOLDER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Folder", folder.Path); try @@ -3209,8 +3199,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_HELICON_APE_FOLDER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_HELICON_APE_FOLDER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Folder", folderPath); try @@ -3266,8 +3256,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_HELICON_APE_USER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_HELICON_APE_USER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("User", user.Name); try @@ -3296,8 +3286,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_HELICON_APE_USER", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_HELICON_APE_USER", siteItem.Name, siteItemId); + TaskManager.WriteParameter("User", userName); try @@ -3352,8 +3342,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "UPDATE_HELICON_APE_GROUP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "UPDATE_HELICON_APE_GROUP", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Group", group.Name); try @@ -3382,8 +3372,8 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; // place log record - TaskManager.StartTask("WEB_SITE", "DELETE_HELICON_APE_GROUP", siteItem.Name); - TaskManager.ItemId = siteItemId; + TaskManager.StartTask("WEB_SITE", "DELETE_HELICON_APE_GROUP", siteItem.Name, siteItemId); + TaskManager.WriteParameter("Group", groupName); try diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj new file mode 100644 index 00000000..1923fd2e --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj @@ -0,0 +1,196 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {60E39314-659C-4FAD-AB91-D0D08E223578} + Library + Properties + WebsitePanel.EnterpriseServer.Code + WebsitePanel.EnterpriseServer.Code + v4.0 + 512 + + + true + full + false + ..\..\Bin\ + DEBUG;TRACE + prompt + 4 + AnyCPU + + + pdbonly + true + ..\..\Bin\ + TRACE + prompt + 4 + + + + ..\..\Lib\Ionic.Zip.Reduced.dll + + + ..\..\Bin\Microsoft.Web.Services3.dll + + + + + + + + + + + + + + + + False + ..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll + + + ..\..\Bin\WebsitePanel.Providers.Base.dll + + + ..\..\Bin\WebsitePanel.Server.Client.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {53D22D35-4013-415F-BA09-F67A0DBBB0C1} + WebsitePanel.Common.Utils + + + {387FA0EF-3927-45FF-8F8F-BCCD735540C6} + WebsitePanel.Templates + + + {7112B144-C5EE-43C2-9441-569D75D13CB9} + WebsitePanel.Whois + + + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/UserCreationWizard.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/UserCreationWizard.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/UserCreationWizard.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/UserCreationWizard.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/WebApplicationsInstaller.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs similarity index 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/WebApplicationsInstaller.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs index 8ae1f11b..aa40c3dd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/WebApplicationsInstaller.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs @@ -91,17 +91,21 @@ namespace WebsitePanel.EnterpriseServer public int InstallWebApplication(InstallationInfo inst) { // place log record - TaskManager.StartTask("APP_INSTALLER", "INSTALL_APPLICATION"); + TaskManager.StartTask("APP_INSTALLER", "INSTALL_APPLICATION", inst.PackageId); + TaskManager.WriteParameter("Virtual directory", inst.VirtualDir); TaskManager.WriteParameter("Database group", inst.DatabaseGroup); - TaskManager.ItemId = inst.PackageId; - + try { // get application info app = GetApplication(inst.PackageId, inst.ApplicationId); - TaskManager.ItemName = app.Name; + BackgroundTask topTask = TaskManager.TopTask; + + topTask.ItemName = app.Name; + + TaskController.UpdateTask(topTask); // check web site for existance WebSite webSite = WebServerController.GetWebSite(inst.WebSiteId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln index 36ca6285..5996e6ba 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2010 +# Visual Studio 2012 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C57D3F9F-7BA0-4D38-A159-B6EDA5C19B13}" ProjectSection(SolutionItems) = preProject ..\..\LICENSE.txt = ..\..\LICENSE.txt @@ -10,6 +10,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.EnterpriseServer", "WebsitePanel.EnterpriseServer\WebsitePanel.EnterpriseServer.csproj", "{59C7623A-5181-48A5-880A-C9B82B48F589}" + ProjectSection(ProjectDependencies) = postProject + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775} = {C09CE910-F16B-48A1-B2CC-C99B8C1CF775} + {60E39314-659C-4FAD-AB91-D0D08E223578} = {60E39314-659C-4FAD-AB91-D0D08E223578} + {4B344644-A570-477E-ADCC-F2B267D6C038} = {4B344644-A570-477E-ADCC-F2B267D6C038} + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.EnterpriseServer.Base", "WebsitePanel.EnterpriseServer.Base\WebsitePanel.EnterpriseServer.Base.csproj", "{C09CE910-F16B-48A1-B2CC-C99B8C1CF775}" EndProject @@ -21,12 +26,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Plugins.Author EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Plugins.PayPalPro", "WebsitePanel.Gateways.PayPal\WebsitePanel.Plugins.PayPalPro.csproj", "{D695D58C-99F7-409E-B3D8-C1B97A8E748A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Products.DomainName", "WebsitePanel.Products.DomainName\WebsitePanel.Products.DomainName.csproj", "{FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Products.HostingAddon", "WebsitePanel.Products.HostingAddon\WebsitePanel.Products.HostingAddon.csproj", "{338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Products.HostingPlan", "WebsitePanel.Products.HostingPlan\WebsitePanel.Products.HostingPlan.csproj", "{65FEDD1B-379C-413D-84D8-20E6C29C645D}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Plugins.Enom", "WebsitePanel.Registrars.Enom\WebsitePanel.Plugins.Enom.csproj", "{39A6F585-4A27-4AAA-A43F-858FC32ADF98}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Common.Utils", "WebsitePanel.Common.Utils\WebsitePanel.Common.Utils.csproj", "{53D22D35-4013-415F-BA09-F67A0DBBB0C1}" @@ -41,70 +40,173 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Plugins.PayPal EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Templates", "WebsitePanel.Templates\WebsitePanel.Templates.csproj", "{387FA0EF-3927-45FF-8F8F-BCCD735540C6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.EnterpriseServer.Code", "WebsitePanel.EnterpriseServer.Code\WebsitePanel.EnterpriseServer.Code.csproj", "{60E39314-659C-4FAD-AB91-D0D08E223578}" + ProjectSection(ProjectDependencies) = postProject + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775} = {C09CE910-F16B-48A1-B2CC-C99B8C1CF775} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.SchedulerService", "WebsitePanel.SchedulerService\WebsitePanel.SchedulerService.csproj", "{5B823520-0450-44A9-AC86-9658B41DFA7C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {59C7623A-5181-48A5-880A-C9B82B48F589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {59C7623A-5181-48A5-880A-C9B82B48F589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59C7623A-5181-48A5-880A-C9B82B48F589}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {59C7623A-5181-48A5-880A-C9B82B48F589}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {59C7623A-5181-48A5-880A-C9B82B48F589}.Debug|x86.ActiveCfg = Debug|Any CPU {59C7623A-5181-48A5-880A-C9B82B48F589}.Release|Any CPU.ActiveCfg = Release|Any CPU {59C7623A-5181-48A5-880A-C9B82B48F589}.Release|Any CPU.Build.0 = Release|Any CPU + {59C7623A-5181-48A5-880A-C9B82B48F589}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {59C7623A-5181-48A5-880A-C9B82B48F589}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {59C7623A-5181-48A5-880A-C9B82B48F589}.Release|x86.ActiveCfg = Release|Any CPU {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Debug|x86.ActiveCfg = Debug|Any CPU {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Release|Any CPU.ActiveCfg = Release|Any CPU {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Release|Any CPU.Build.0 = Release|Any CPU + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C09CE910-F16B-48A1-B2CC-C99B8C1CF775}.Release|x86.ActiveCfg = Release|Any CPU {4B344644-A570-477E-ADCC-F2B267D6C038}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B344644-A570-477E-ADCC-F2B267D6C038}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B344644-A570-477E-ADCC-F2B267D6C038}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4B344644-A570-477E-ADCC-F2B267D6C038}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4B344644-A570-477E-ADCC-F2B267D6C038}.Debug|x86.ActiveCfg = Debug|Any CPU {4B344644-A570-477E-ADCC-F2B267D6C038}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B344644-A570-477E-ADCC-F2B267D6C038}.Release|Any CPU.Build.0 = Release|Any CPU + {4B344644-A570-477E-ADCC-F2B267D6C038}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4B344644-A570-477E-ADCC-F2B267D6C038}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4B344644-A570-477E-ADCC-F2B267D6C038}.Release|x86.ActiveCfg = Release|Any CPU {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Debug|x86.ActiveCfg = Debug|Any CPU {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Release|Any CPU.ActiveCfg = Release|Any CPU {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Release|Any CPU.Build.0 = Release|Any CPU + {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1222B073-8757-4163-9D1A-1A1EAE697DD3}.Release|x86.ActiveCfg = Release|Any CPU {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Debug|x86.ActiveCfg = Debug|Any CPU {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Release|Any CPU.Build.0 = Release|Any CPU + {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DB852295-2A86-44AB-8CF8-A73FEAF15368}.Release|x86.ActiveCfg = Release|Any CPU {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Debug|x86.ActiveCfg = Debug|Any CPU {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Release|Any CPU.ActiveCfg = Release|Any CPU {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Release|Any CPU.Build.0 = Release|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D695D58C-99F7-409E-B3D8-C1B97A8E748A}.Release|x86.ActiveCfg = Release|Any CPU {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Debug|x86.ActiveCfg = Debug|Any CPU {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Release|Any CPU.ActiveCfg = Release|Any CPU {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Release|Any CPU.Build.0 = Release|Any CPU + {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {39A6F585-4A27-4AAA-A43F-858FC32ADF98}.Release|x86.ActiveCfg = Release|Any CPU {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Debug|x86.ActiveCfg = Debug|Any CPU {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Release|Any CPU.Build.0 = Release|Any CPU + {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {53D22D35-4013-415F-BA09-F67A0DBBB0C1}.Release|x86.ActiveCfg = Release|Any CPU {01D3213A-B615-47D2-99F0-005CF05CE920}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01D3213A-B615-47D2-99F0-005CF05CE920}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01D3213A-B615-47D2-99F0-005CF05CE920}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {01D3213A-B615-47D2-99F0-005CF05CE920}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {01D3213A-B615-47D2-99F0-005CF05CE920}.Debug|x86.ActiveCfg = Debug|Any CPU {01D3213A-B615-47D2-99F0-005CF05CE920}.Release|Any CPU.ActiveCfg = Release|Any CPU {01D3213A-B615-47D2-99F0-005CF05CE920}.Release|Any CPU.Build.0 = Release|Any CPU + {01D3213A-B615-47D2-99F0-005CF05CE920}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {01D3213A-B615-47D2-99F0-005CF05CE920}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {01D3213A-B615-47D2-99F0-005CF05CE920}.Release|x86.ActiveCfg = Release|Any CPU {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Debug|x86.ActiveCfg = Debug|Any CPU {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Release|Any CPU.ActiveCfg = Release|Any CPU {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Release|Any CPU.Build.0 = Release|Any CPU + {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1FED69FB-68EB-46A8-9B9C-B08760AD4514}.Release|x86.ActiveCfg = Release|Any CPU {7112B144-C5EE-43C2-9441-569D75D13CB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7112B144-C5EE-43C2-9441-569D75D13CB9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7112B144-C5EE-43C2-9441-569D75D13CB9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7112B144-C5EE-43C2-9441-569D75D13CB9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7112B144-C5EE-43C2-9441-569D75D13CB9}.Debug|x86.ActiveCfg = Debug|Any CPU {7112B144-C5EE-43C2-9441-569D75D13CB9}.Release|Any CPU.ActiveCfg = Release|Any CPU {7112B144-C5EE-43C2-9441-569D75D13CB9}.Release|Any CPU.Build.0 = Release|Any CPU + {7112B144-C5EE-43C2-9441-569D75D13CB9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7112B144-C5EE-43C2-9441-569D75D13CB9}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7112B144-C5EE-43C2-9441-569D75D13CB9}.Release|x86.ActiveCfg = Release|Any CPU {9247B024-F931-4506-8ECD-27E862C0EA1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9247B024-F931-4506-8ECD-27E862C0EA1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9247B024-F931-4506-8ECD-27E862C0EA1D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9247B024-F931-4506-8ECD-27E862C0EA1D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9247B024-F931-4506-8ECD-27E862C0EA1D}.Debug|x86.ActiveCfg = Debug|Any CPU {9247B024-F931-4506-8ECD-27E862C0EA1D}.Release|Any CPU.ActiveCfg = Release|Any CPU {9247B024-F931-4506-8ECD-27E862C0EA1D}.Release|Any CPU.Build.0 = Release|Any CPU + {9247B024-F931-4506-8ECD-27E862C0EA1D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9247B024-F931-4506-8ECD-27E862C0EA1D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9247B024-F931-4506-8ECD-27E862C0EA1D}.Release|x86.ActiveCfg = Release|Any CPU {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Debug|x86.ActiveCfg = Debug|Any CPU {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Release|Any CPU.ActiveCfg = Release|Any CPU {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Release|Any CPU.Build.0 = Release|Any CPU + {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {387FA0EF-3927-45FF-8F8F-BCCD735540C6}.Release|x86.ActiveCfg = Release|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Debug|x86.ActiveCfg = Debug|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Release|Any CPU.Build.0 = Release|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {60E39314-659C-4FAD-AB91-D0D08E223578}.Release|x86.ActiveCfg = Release|Any CPU + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|Any CPU.ActiveCfg = Debug|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|x86.ActiveCfg = Debug|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|x86.Build.0 = Debug|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|Any CPU.ActiveCfg = Release|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|x86.ActiveCfg = Release|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ObjectUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ObjectUtils.cs deleted file mode 100644 index 1a705eac..00000000 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ObjectUtils.cs +++ /dev/null @@ -1,659 +0,0 @@ -// Copyright (c) 2012, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -using System; -using System.Reflection; -using System.Data; -using System.Collections; -using System.Collections.Generic; - -using WebsitePanel.Providers; - -namespace WebsitePanel.EnterpriseServer -{ - /// - /// Summary description for ObjectUtils. - /// - public class ObjectUtils - { - public static DT ConvertObject(ST so) - { - Dictionary sProps = GetTypePropertiesHash(typeof(ST)); - Dictionary dProps = GetTypePropertiesHash(typeof(DT)); - - DT dobj = (DT)Activator.CreateInstance(typeof(DT)); - - // copy properties - foreach (string propName in sProps.Keys) - { - if (dProps.ContainsKey(propName) && sProps[propName].Name != "Item") - { - if (sProps[propName].CanRead) - { - object val = sProps[propName].GetValue(so, null); - if (dProps[propName] != null) - { - if (val != null && dProps[propName].CanWrite) - { - dProps[propName].SetValue(dobj, val, null); - } - } - } - } - } - return dobj; - } - - private static Hashtable typeProperties = new Hashtable(); - - public static Hashtable GetObjectProperties(object obj, bool persistentOnly) - { - Hashtable hash = new Hashtable(); - - Type type = obj.GetType(); - PropertyInfo[] props = type.GetProperties(BindingFlags.Instance - | BindingFlags.Public); - foreach (PropertyInfo prop in props) - { - // check for persistent attribute - object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); - if (!persistentOnly || (persistentOnly && attrs.Length > 0)) - { - object val = prop.GetValue(obj, null); - string s = ""; - if (val != null) - { - if (prop.PropertyType == typeof(string[])) - s = String.Join(";", (string[])val); - else if (prop.PropertyType == typeof(int[])) - { - int[] ivals = (int[])val; - string[] svals = new string[ivals.Length]; - for (int i = 0; i < svals.Length; i++) - svals[i] = ivals[i].ToString(); - s = String.Join(";", svals); - } - else - s = val.ToString(); - } - - // add property to hash - hash.Add(prop.Name, s); - } - } - - return hash; - } - - public static void FillCollectionFromDataSet(List list, DataSet ds) - { - if(ds.Tables.Count == 0) - return; - - FillCollectionFromDataView(list, ds.Tables[0].DefaultView); - } - - public static void FillCollectionFromDataView(List list, DataView dv) - { - Type type = typeof(T); - - PropertyInfo[] props = GetTypeProperties(type); - - foreach(DataRowView dr in dv) - { - // create an instance - T obj = (T)Activator.CreateInstance(type); - list.Add(obj); - - // fill properties - for(int i = 0; i < props.Length; i++) - { - string propName = props[i].Name; - if(dv.Table.Columns[propName] == null) - continue; - - object propVal = dr[propName]; - if(propVal == DBNull.Value) - props[i].SetValue(obj, GetNull(props[i].PropertyType), null); - else - { - try - { - // try implicit type conversion - props[i].SetValue(obj, propVal, null); - } - catch - { - // convert to string and then set property value - try - { - string strVal = propVal.ToString(); - props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); - } - catch - { - // skip property init - } - } - } - } // for properties - } // for rows - } - - public static List CreateListFromDataReader(IDataReader reader) - { - List list = new List(); - FillCollectionFromDataReader(list, reader); - return list; - } - - public static List CreateListFromDataSet(DataSet ds) - { - List list = new List(); - FillCollectionFromDataSet(list, ds); - return list; - } - - public static void FillCollectionFromDataReader(List list, IDataReader reader) - { - Type type = typeof(T); - - try - { - // get type properties - PropertyInfo[] props = GetTypeProperties(type); - - // iterate through reader - while(reader.Read()) - { - T obj = (T)Activator.CreateInstance(type); - list.Add(obj); - - // set properties - for(int i = 0; i < props.Length; i++) - { - string propName = props[i].Name; - - try - { - - object propVal = reader[propName]; - if(propVal == DBNull.Value) - props[i].SetValue(obj, GetNull(props[i].PropertyType), null); - else - { - try - { - // try implicit type conversion - props[i].SetValue(obj, propVal, null); - } - catch - { - // convert to string and then set property value - try - { - string strVal = propVal.ToString(); - props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); - } - catch - { - // skip property init - } - } - } - } - catch{} // just skip - } // for properties - } - } - finally - { - reader.Close(); - } - } - - public static T FillObjectFromDataView(DataView dv) - { - Type type = typeof(T); - T obj = default(T); - - // get type properties - PropertyInfo[] props = GetTypeProperties(type); - - // iterate through reader - foreach(DataRowView dr in dv) - { - obj = (T)Activator.CreateInstance(type); - - // set properties - for(int i = 0; i < props.Length; i++) - { - string propName = props[i].Name; - - try - { - // verify if there is such a column - if (!dr.Row.Table.Columns.Contains(propName.ToLower())) - { - // if not, we move to another property - // because this one we cannot set - continue; - } - - object propVal = dr[propName]; - if(propVal == DBNull.Value) - props[i].SetValue(obj, GetNull(props[i].PropertyType), null); - else - { - try - { - string strVal = propVal.ToString(); - - //convert to DateTime - if (props[i].PropertyType.UnderlyingSystemType.FullName == typeof(DateTime).FullName) - { - DateTime date = DateTime.MinValue; - if (DateTime.TryParse(strVal, out date)) - { - props[i].SetValue(obj, date, null); - } - } - else - { - //Convert generic - props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); - } - } - catch - { - // skip property init - } - } - } - catch{} // just skip - } // for properties - } - - return obj; - } - - public static T FillObjectFromDataReader(IDataReader reader) - { - Type type = typeof(T); - - T obj = default(T); - - try - { - // get type properties - PropertyInfo[] props = GetTypeProperties(type); - - // iterate through reader - while(reader.Read()) - { - obj = (T)Activator.CreateInstance(type); - - // set properties - for(int i = 0; i < props.Length; i++) - { - string propName = props[i].Name; - - try - { - if (!IsColumnExists(propName, reader.GetSchemaTable())) - { - continue; - } - object propVal = reader[propName]; - - if(propVal == DBNull.Value) - props[i].SetValue(obj, GetNull(props[i].PropertyType), null); - else - { - try - { - //try string first - if (props[i].PropertyType.UnderlyingSystemType.FullName == typeof(String).FullName) - { - props[i].SetValue(obj, propVal.ToString(), null); - } - else - { - // then, try implicit type conversion - props[i].SetValue(obj, propVal, null); - } - } - catch - { - // convert to string and then set property value - try - { - string strVal = propVal.ToString(); - props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); - } - catch - { - // skip property init - } - } - } - } - catch{} // just skip - } // for properties - } - } - finally - { - reader.Close(); - } - - return obj; - } - - private static Hashtable propertiesCache = new Hashtable(); - - public static object CreateObjectFromDataview(Type type, DataView dv, - string nameColumn, string valueColumn, bool persistentOnly) - { - // create hash of properties from datareader - Hashtable propValues = new Hashtable(); - foreach (DataRowView dr in dv) - { - if (propValues[dr[nameColumn]] == null && !propValues.ContainsKey(dr[nameColumn])) - propValues.Add(dr[nameColumn], dr[valueColumn]); - } - - return CreateObjectFromHash(type, propValues, persistentOnly); - } - - public static object CreateObjectFromDataReader(Type type, IDataReader reader, - string nameColumn, string valueColumn, bool persistentOnly) - { - // create hash of properties from datareader - Hashtable propValues = new Hashtable(); - while (reader.Read()) - { - if (propValues[reader[nameColumn]] == null) - propValues.Add(reader[nameColumn], reader[valueColumn]); - } - reader.Close(); - - return CreateObjectFromHash(type, propValues, persistentOnly); - } - - public static object CreateObjectFromHash(Type type, Hashtable propValues, bool persistentOnly) - { - // create object - object obj = Activator.CreateInstance(type); - - CreateObjectFromHash(obj, propValues, persistentOnly); - - return obj; - } - - public static void CopyPersistentPropertiesFromSource(T source, T target) - where T : ServiceProviderItem - { - // - var typeSource = source.GetType(); - var typeTarget = target.GetType(); - // get all property infos - Hashtable props = null; - if (propertiesCache[typeSource.Name] != null) - { - // load properties from cache - props = (Hashtable)propertiesCache[typeSource.Name]; - } - else - { - // create properties cache - props = new Hashtable(); - // - PropertyInfo[] objProps = typeSource.GetProperties(BindingFlags.Instance - //| BindingFlags.DeclaredOnly - | BindingFlags.Public); - foreach (PropertyInfo prop in objProps) - { - // check for persistent attribute - object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); - // Persistent only - if (attrs.Length > 0) - { - // add property to hash - props.Add(prop.Name, prop); - } - } - // add to cache - propertiesCache.Add(typeSource.Name, props); - } - - // Copy the data - foreach (PropertyInfo propertyInfo in props.Values) - { - propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null); - } - } - - public static void CreateObjectFromHash(object obj, Hashtable propValues, bool persistentOnly) - { - Type type = obj.GetType(); - - // get all property infos - Hashtable props = null; - if (propertiesCache[type.Name] != null) - { - // load properties from cache - props = (Hashtable)propertiesCache[type.Name]; - } - else - { - // create properties cache - props = new Hashtable(); - PropertyInfo[] objProps = type.GetProperties(BindingFlags.Instance - //| BindingFlags.DeclaredOnly - | BindingFlags.Public); - foreach (PropertyInfo prop in objProps) - { - // check for persistent attribute - object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); - if (!persistentOnly || (persistentOnly && attrs.Length > 0) && !props.ContainsKey(prop.Name)) - { - // add property to hash - props.Add(prop.Name, prop); - } - } - - // add to cache - propertiesCache.Add(type.Name, props); - } - - // fill properties - foreach (string propName in propValues.Keys) - { - // try to locate specified property - if (props[propName] != null) - { - // set property - // we support: - // String - // Int32 - // Boolean - // Float - PropertyInfo prop = (PropertyInfo)props[propName]; - string val = propValues[propName].ToString(); - if (prop.PropertyType == typeof(String)) - prop.SetValue(obj, val, null); - else if (prop.PropertyType == typeof(Int32)) - prop.SetValue(obj, Int32.Parse(val), null); - else - if (prop.PropertyType == typeof(long)) - prop.SetValue(obj, long.Parse(val), null); - else - if (prop.PropertyType == typeof(Boolean)) - prop.SetValue(obj, Boolean.Parse(val), null); - else if (prop.PropertyType == typeof(Single)) - prop.SetValue(obj, Single.Parse(val), null); - else if (prop.PropertyType.IsEnum) - prop.SetValue(obj, Enum.Parse(prop.PropertyType, val, true), null); - else - if (prop.PropertyType == typeof(Guid)) - prop.SetValue(obj, new Guid(val), null); - else - if (prop.PropertyType == typeof(string[])) - { - if (val == "") - prop.SetValue(obj, new string[0], null); - else - prop.SetValue(obj, val.Split(';'), null); - } - else if (prop.PropertyType == typeof(int[])) - { - string[] svals = val.Split(';'); - int[] ivals = new int[svals.Length]; - - for (int i = 0; i < svals.Length; i++) - ivals[i] = Int32.Parse(svals[i]); - - if (val == "") - ivals = new int[0]; - - prop.SetValue(obj, ivals, null); - } - } - } - } - - private static Dictionary GetTypePropertiesHash(Type type) - { - Dictionary hash = new Dictionary(); - PropertyInfo[] props = GetTypeProperties(type); - foreach (PropertyInfo prop in props) - hash.Add(prop.Name, prop); - return hash; - } - - private static PropertyInfo[] GetTypeProperties(Type type) - { - string typeName = type.AssemblyQualifiedName; - if(typeProperties[typeName] != null) - return (PropertyInfo[])typeProperties[typeName]; - - PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); - typeProperties[typeName] = props; - return props; - } - - public static object GetNull(Type type) - { - if(type == typeof(string)) - return null; - if(type == typeof(Int32)) - return 0; - if(type == typeof(Int64)) - return 0; - if(type == typeof(Boolean)) - return false; - if(type == typeof(Decimal)) - return 0M; - else - return null; - } - - public static object Cast(string val, Type type) - { - if(type == typeof(string)) - return val; - if(type == typeof(Int32)) - return Int32.Parse(val); - if(type == typeof(Int64)) - return Int64.Parse(val); - if(type == typeof(Boolean)) - return Boolean.Parse(val); - if(type == typeof(Decimal)) - return Decimal.Parse(val); - if(type == typeof(string[]) && val != null) - { - return val.Split(';'); - } - if (type.IsEnum) - return Enum.Parse(type, val, true); - - if (type == typeof(int[]) && val != null) - { - string[] sarr = val.Split(';'); - int[] iarr = new int[sarr.Length]; - for (int i = 0; i < sarr.Length; i++) - iarr[i] = Int32.Parse(sarr[i]); - return iarr; - } - else - return val; - } - - public static string GetTypeFullName(Type type) - { - return type.FullName + ", " + type.Assembly.GetName().Name; - } - - - #region Helper Functions - - /// - /// This function is used to determine whether IDataReader contains a Column. - /// - /// Name of the column. - /// The schema that decribes result-set contains. - /// True, when required column exists in the . Otherwise, false. - /// - /// The followin example shows how to look for the "Role" column in the . - /// - /// IDataReader reader = .... - /// if (!IsColumnExists("Role", reader.GetSchemaTable()) - /// { - /// continue; - /// } - /// - /// object roleValue = reader["Role"]; - /// - /// - static bool IsColumnExists(string columnName, DataTable schemaTable) - { - foreach (DataRow row in schemaTable.Rows) - { - if (String.Compare(row[0].ToString(), columnName, StringComparison.OrdinalIgnoreCase) == 0) - { - return true; - } - } - - return false; - } - - #endregion - } -} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs deleted file mode 100644 index f69cb478..00000000 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs +++ /dev/null @@ -1,649 +0,0 @@ -// Copyright (c) 2012, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -using System; -using System.IO; -using System.Threading; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Web; -using System.Web.Caching; -using System.Xml; -using System.Reflection; -using WebsitePanel.Providers.Common; - -namespace WebsitePanel.EnterpriseServer -{ - public class TaskManager - { - private static Hashtable tasks = Hashtable.Synchronized(new Hashtable()); - private static Hashtable eventHandlers = null; - - // purge timer, used for killing old tasks from the hash - static Timer purgeTimer = new Timer(new TimerCallback(PurgeCompletedTasks), - null, - 60000, // start from 1 minute - 60000); // invoke each minute - - private static BackgroundTask RootTask - { - get { return TasksStack.Count > 0 ? TasksStack[0] : null; } - } - - private static BackgroundTask TopTask - { - get { return TasksStack.Count > 0 ? TasksStack[TasksStack.Count - 1] : null; } - } - - private static List TasksStack - { - get - { - List stack = (List)Thread.GetData(Thread.GetNamedDataSlot("BackgroundTasksStack")); - if (stack == null) - { - stack = new List(); - Thread.SetData(Thread.GetNamedDataSlot("BackgroundTasksStack"), stack); - } - return stack; - } - } - - public static void StartTask(string source, string taskName) - { - StartTask(null, source, taskName, null); - } - - public static void StartTask(string source, string taskName, object itemName) - { - StartTask(null, source, taskName, itemName); - } - - public static void StartTask(string taskId, string source, string taskName, object itemName) - { - // create new task object - BackgroundTask task = new BackgroundTask(); - task.TaskId = String.IsNullOrEmpty(taskId) ? Guid.NewGuid().ToString("N") : taskId; - task.UserId = SecurityContext.User.UserId; - task.EffectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : task.UserId; - task.StartDate = DateTime.Now; - task.Source = source; - task.TaskName = taskName; - task.ItemName = itemName != null ? itemName.ToString() : ""; - task.Severity = 0; //info - task.TaskThread = Thread.CurrentThread; - - // new "parent" task? - if (TasksStack.Count == 0) - { - // register task globally - tasks[task.TaskId] = task; - } - else - { - // child task - // add log record to the root task - BackgroundTaskLogRecord logRecord = new BackgroundTaskLogRecord(); - logRecord.InnerTaskStart = true; - logRecord.Text = source + "_" + taskName; - logRecord.TextParameters = new string[] { itemName != null ? itemName.ToString() : "" }; - logRecord.TextIdent = TasksStack.Count - 1; - RootTask.LogRecords.Add(logRecord); - - // change log records destination - // for nested task - task.LogRecords = RootTask.LogRecords; - } - - // call event handler - CallTaskEventHandler(task, false); - - // push task on the stack - TasksStack.Add(task); - } - - public static void WriteParameter(string parameterName, object parameterValue) - { - string val = parameterValue != null ? parameterValue.ToString() : ""; - WriteLogRecord(0, parameterName + ": " + val, null, null); - } - - public static void Write(string text, params string[] textParameters) - { - // INFO - WriteLogRecord(0, text, null, textParameters); - } - - public static void WriteWarning(string text, params string[] textParameters) - { - // WARNING - WriteLogRecord(1, text, null, textParameters); - } - - public static Exception WriteError(Exception ex) - { - // ERROR - WriteLogRecord(2, ex.Message, ex.StackTrace); - return new Exception((TopTask != null) ? String.Format("Error executing '{0}' task on '{1}' {2}", - TopTask.TaskName, TopTask.ItemName, TopTask.Source) : String.Format("Error executing task"), ex); - } - - public static void WriteError(Exception ex, string text, params string[] textParameters) - { - // ERROR - string[] prms = new string[] { ex.Message }; - if (textParameters != null && textParameters.Length > 0) - { - prms = new string[textParameters.Length + 1]; - Array.Copy(textParameters, 0, prms, 1, textParameters.Length); - prms[0] = ex.Message; - } - - WriteLogRecord(2, text, ex.Message + "\n" + ex.StackTrace, prms); - } - - public static void WriteError(string text, params string[] textParameters) - { - // ERROR - WriteLogRecord(2, text, null, textParameters); - } - - private static void WriteLogRecord(int severity, string text, string stackTrace, params string[] textParameters) - { - BackgroundTaskLogRecord logRecord = new BackgroundTaskLogRecord(); - logRecord.Severity = severity; - logRecord.Text = text; - logRecord.TextParameters = textParameters; - logRecord.TextIdent = TasksStack.Count - 1; - logRecord.ExceptionStackTrace = stackTrace; - if (RootTask != null) - { - RootTask.LogRecords.Add(logRecord); - RootTask.LastLogRecord = logRecord; - - // change entire task severity - if (severity > RootTask.Severity) - RootTask.Severity = severity; - } - } - - public static void CompleteTask() - { - if (TasksStack.Count == 0) - return; - - // call event handler - CallTaskEventHandler(TopTask, true); - - // finish task - TopTask.FinishDate = DateTime.Now; - TopTask.Completed = true; - - // write task execution result to database - if (TasksStack.Count == 1) // single task - { - // unregister task globally - // tasks.Remove(TopTask.TaskId); - - // write to database - string itemName = TopTask.ItemName != null ? TopTask.ItemName.ToString() : null; - string executionLog = FormatExecutionLog(TopTask); - UserInfo user = UserController.GetUserInternally(TopTask.UserId); - string username = user != null ? user.Username : null; - - AuditLog.AddAuditLogRecord(TopTask.TaskId, TopTask.Severity, TopTask.UserId, - username, TopTask.PackageId, TopTask.ItemId, - itemName, TopTask.StartDate, TopTask.FinishDate, TopTask.Source, - TopTask.TaskName, executionLog); - } - - // remove task from the stack - TasksStack.RemoveAt(TasksStack.Count - 1); - } - - static string FormatExecutionLog(BackgroundTask task) - { - StringWriter sw = new StringWriter(); - XmlWriter writer = new XmlTextWriter(sw); - - writer.WriteStartElement("log"); - - // parameters - writer.WriteStartElement("parameters"); - foreach (string name in task.Parameters.Keys) - { - string val = task.Parameters[name] != null ? task.Parameters[name].ToString() : ""; - writer.WriteStartElement("parameter"); - writer.WriteAttributeString("name", name); - writer.WriteString(val); - writer.WriteEndElement(); - } - writer.WriteEndElement(); // parameters - - // records - writer.WriteStartElement("records"); - foreach (BackgroundTaskLogRecord record in task.LogRecords) - { - writer.WriteStartElement("record"); - writer.WriteAttributeString("severity", record.Severity.ToString()); - writer.WriteAttributeString("date", record.Date.ToString(System.Globalization.CultureInfo.InvariantCulture)); - writer.WriteAttributeString("ident", record.TextIdent.ToString()); - - // text - writer.WriteElementString("text", record.Text); - - // text parameters - if (record.TextParameters != null && record.TextParameters.Length > 0) - { - writer.WriteStartElement("textParameters"); - foreach (string prm in record.TextParameters) - { - writer.WriteElementString("value", prm); - } - writer.WriteEndElement(); // textParameters - } - - // stack trace - writer.WriteElementString("stackTrace", record.ExceptionStackTrace); - writer.WriteEndElement(); - } - writer.WriteEndElement(); - writer.WriteEndElement(); - - return sw.ToString(); - } - - static void PurgeCompletedTasks(object obj) - { - // remove completed tasks - List completedTasks = new List(); - foreach (BackgroundTask task in tasks.Values) - { - if (task.MaximumExecutionTime != -1 - && ((TimeSpan)(DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) - { - // terminate task - try - { - task.TaskThread.Abort(); - } - catch - { - // nope - } - - // add to the list - completedTasks.Add(task.TaskId); - } - - if ((task.FinishDate != DateTime.MinValue - && ((TimeSpan)(DateTime.Now - task.FinishDate)).TotalMinutes > 2)) - { - // add to the list - completedTasks.Add(task.TaskId); - } - } - - // remove tasks - foreach (string taskId in completedTasks) - tasks.Remove(taskId); - } - - public static int PackageId - { - get { return TopTask.PackageId; } - set { TopTask.PackageId = value; } - } - - public static int ItemId - { - get { return TopTask.ItemId; } - set { TopTask.ItemId = value; } - } - - public static string ItemName - { - get { return TopTask.ItemName; } - set { TopTask.ItemName = value; } - } - - public static string TaskName - { - get { return TopTask.TaskName; } - } - - public static string TaskSource - { - get { return TopTask.Source; } - } - - public static int IndicatorMaximum - { - get { return TopTask.IndicatorMaximum; } - set { TopTask.IndicatorMaximum = value; } - } - - public static int IndicatorCurrent - { - get { return TopTask.IndicatorCurrent; } - set { TopTask.IndicatorCurrent = value; } - } - - public static int MaximumExecutionTime - { - get { return TopTask.MaximumExecutionTime; } - set { TopTask.MaximumExecutionTime = value; } - } - - public static int ScheduleId - { - get { return TopTask.ScheduleId; } - set { TopTask.ScheduleId = value; } - } - - public static bool HasErrors - { - get { return (TopTask.Severity == 2); } - } - - public static BackgroundTask GetTask(string taskId) - { - BackgroundTask task = (BackgroundTask)tasks[taskId]; - if (task == null) - return null; - - task.LastLogRecords.Clear(); - return task; - } - - public static BackgroundTask GetTaskWithLogRecords(string taskId, DateTime startLogTime) - { - BackgroundTask task = GetTask(taskId); - if (task == null) - return null; - - // fill log records - foreach (BackgroundTaskLogRecord record in task.LogRecords) - { - if (record.Date >= startLogTime) - task.LastLogRecords.Add(record); - } - - return task; - } - - public static Dictionary GetScheduledTasks() - { - Dictionary scheduledTasks = new Dictionary(); - try - { - foreach (BackgroundTask task in tasks.Values) - { - if (task.ScheduleId > 0 - && !task.Completed - && !scheduledTasks.ContainsKey(task.ScheduleId)) - scheduledTasks.Add(task.ScheduleId, task); - } - } - catch (Exception) - { - } - return scheduledTasks; - } - - public static void SetTaskNotifyOnComplete(string taskId) - { - BackgroundTask task = (BackgroundTask)tasks[taskId]; - if (task == null) - return; - - task.NotifyOnComplete = true; - } - - public static void StopTask(string taskId) - { - BackgroundTask task = (BackgroundTask)tasks[taskId]; - if (task == null) - return; - - try - { - task.TaskThread.Abort(); - } - catch - { - // nope - } - - // remove it from stack - tasks.Remove(taskId); - } - - public static Hashtable TaskParameters - { - get { return TopTask.Parameters; } - } - - internal static int GetTasksNumber() - { - return tasks.Count; - } - - internal static List GetUserTasks(int userId) - { - List list = new List(); - - // try to get user first - UserInfo user = UserController.GetUser(userId); - if (user == null) - return list; // prohibited user - - // get user tasks - foreach (BackgroundTask task in tasks.Values) - { - if(task.EffectiveUserId == userId && !task.Completed) - list.Add(task); - } - return list; - } - - internal static List GetUserCompletedTasks(int userId) - { - // get user tasks - List list = GetUserTasks(userId); - - // extract completed only - List completedTasks = new List(); - foreach (BackgroundTask task in list) - { - if (task.Completed && task.NotifyOnComplete) - { - // add to the list - completedTasks.Add(task); - - // remove from hash - tasks.Remove(task.TaskId); - } - } - return completedTasks; - } - - #region Private Helpers - private static void CallTaskEventHandler(BackgroundTask task, bool onComplete) - { - string[] taskHandlers = GetTaskEventHandlers(task.Source, task.TaskName); - if (taskHandlers != null) - { - foreach(string taskHandler in taskHandlers) - { - try - { - Type handlerType = Type.GetType(taskHandler); - TaskEventHandler handler = (TaskEventHandler)Activator.CreateInstance(handlerType); - - if (handler != null) - { - if (onComplete) - handler.OnComplete(); - else - handler.OnStart(); - } - } - catch (Exception ex) - { - WriteError(ex, "Error executing task event handler: {0}", ex.Message); - } - } - } - } - - private static string[] GetTaskEventHandlers(string source, string taskName) - { - // load configuration - string appRoot = AppDomain.CurrentDomain.BaseDirectory; - string path = Path.Combine(appRoot, "TaskEventHandlers.config"); - - if (eventHandlers == null) - { - eventHandlers = Hashtable.Synchronized(new Hashtable()); - - // load from XML - if (File.Exists(path)) - { - List xmlConfigs = new List(); - xmlConfigs.Add(new XmlDocument()); - xmlConfigs[0].Load(path); - // Lookup for external references first - XmlNodeList xmlReferences = xmlConfigs[0].SelectNodes("//reference"); - foreach (XmlElement xmlReference in xmlReferences) - { - string referencePath = Path.Combine(appRoot, xmlReference.GetAttribute("src")); - if (File.Exists(referencePath)) - { - XmlDocument xmldoc = new XmlDocument(); - xmldoc.Load(referencePath); - xmlConfigs.Add(xmldoc); - } - } - - // parse XML - foreach (XmlDocument xml in xmlConfigs) - { - XmlNodeList xmlHandlers = xml.SelectNodes("//handler"); - foreach (XmlNode xmlHandler in xmlHandlers) - { - string keyName = xmlHandler.ParentNode.Attributes["source"].Value - + xmlHandler.ParentNode.Attributes["name"].Value; - - // get handlers collection - List taskHandlers = (List)eventHandlers[keyName]; - if (taskHandlers == null) - { - taskHandlers = new List(); - eventHandlers[keyName] = taskHandlers; - } - - string handlerType = xmlHandler.Attributes["type"].Value; - taskHandlers.Add(handlerType); - } - } - } - } - - string fullTaskName = source + taskName; - List handlersList = (List)eventHandlers[fullTaskName]; - return handlersList == null ? null : handlersList.ToArray(); - } - #endregion - - - #region ResultTasks - - public static void CompleteResultTask(ResultObject res, string errorCode, Exception ex, string errorMessage) - { - if (res != null) - { - res.IsSuccess = false; - - if (!string.IsNullOrEmpty(errorCode)) - res.ErrorCodes.Add(errorCode); - } - - if (ex != null) - TaskManager.WriteError(ex); - - if (!string.IsNullOrEmpty(errorMessage)) - TaskManager.WriteError(errorMessage); - - //LogRecord. - CompleteTask(); - - - } - - public static void CompleteResultTask(ResultObject res, string errorCode, Exception ex) - { - CompleteResultTask(res, errorCode, ex, null); - } - - public static void CompleteResultTask(ResultObject res, string errorCode) - { - CompleteResultTask(res, errorCode, null, null); - } - - public static void CompleteResultTask(ResultObject res) - { - CompleteResultTask(res, null); - } - - public static void CompleteResultTask() - { - CompleteResultTask(null); - } - - public static T StartResultTask(string source, string taskName, Guid taskId) where T : ResultObject, new() - { - StartTask(taskId.ToString(), source, taskName, null); - T res = new T(); - res.IsSuccess = true; - return res; - } - - public static T StartResultTask(string source, string taskName) where T : ResultObject, new() - { - StartTask(source, taskName); - T res = new T(); - res.IsSuccess = true; - return res; - } - - - #endregion - } -} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Global.asax.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Global.asax.cs index 64282fa2..f864aaf3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Global.asax.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Global.asax.cs @@ -46,12 +46,6 @@ namespace WebsitePanel.EnterpriseServer protected void Application_Start(object sender, EventArgs e) { - if (ConfigurationManager.AppSettings["WebsitePanel.DistableScheduler"] != null) - if (Boolean.Parse(ConfigurationManager.AppSettings["WebsitePanel.DistableScheduler"]) == false) - { - if (Scheduler.nextSchedule == null) - Scheduler.Start(); - } } protected void Application_End(object sender, EventArgs e) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config index d5f08cc5..7a73a914 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Web.config @@ -5,7 +5,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj index ab3618a1..e8c208dc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj @@ -47,14 +47,8 @@ 618 - - False - ..\..\Lib\Ionic.Zip.Reduced.dll - - - False - ..\..\Lib\Microsoft.Web.Services3.dll - True + + ..\..\Bin\Microsoft.Web.Services3.dll @@ -73,8 +67,13 @@ - - False + + ..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll + + + ..\..\Bin\WebsitePanel.EnterpriseServer.Code.dll + + ..\..\Bin\WebsitePanel.Providers.Base.dll @@ -124,132 +123,7 @@ VersionInfo.cs - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - Code - - - - - - - Code - - - Code - - - - - - - - - - - - - - - - - - - - - - - Code - - - - Code - - - Code - - - - Code - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - esEnterpriseStorage.asmx Component @@ -406,24 +280,6 @@ - - - {53D22D35-4013-415F-BA09-F67A0DBBB0C1} - WebsitePanel.Common.Utils - - - {C09CE910-F16B-48A1-B2CC-C99B8C1CF775} - WebsitePanel.EnterpriseServer.Base - - - {387FA0EF-3927-45FF-8F8F-BCCD735540C6} - WebsitePanel.Templates - - - {7112B144-C5EE-43C2-9441-569D75D13CB9} - WebsitePanel.Whois - - @@ -435,7 +291,6 @@ - 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WsePolicyCache.Config b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WsePolicyCache.Config index 9e3b5477..a57b49a4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WsePolicyCache.Config +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WsePolicyCache.Config @@ -1,6 +1,6 @@ - + diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/Program.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/Program.cs new file mode 100644 index 00000000..7c991ea1 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.ServiceProcess; +using System.Text; + +namespace WebsitePanel.SchedulerService +{ + static class Program + { + /// + /// The main entry point for the application. + /// + static void Main() + { + ServiceBase[] ServicesToRun; + ServicesToRun = new ServiceBase[] + { + new SchedulerService() + }; + ServiceBase.Run(ServicesToRun); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/Properties/AssemblyInfo.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7f591157 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WebsitePanel.SchedulerService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("OM-3")] +[assembly: AssemblyProduct("WebsitePanel.SchedulerService")] +[assembly: AssemblyCopyright("Copyright © OM-3 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f552691a-f316-4030-aa74-25cb23ad1791")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.Designer.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.Designer.cs new file mode 100644 index 00000000..edc238f6 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.Designer.cs @@ -0,0 +1,37 @@ +namespace WebsitePanel.SchedulerService +{ + partial class SchedulerService + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.ServiceName = "WebsitePanel.SchedulerService"; + } + + #endregion + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs new file mode 100644 index 00000000..d5407d1c --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs @@ -0,0 +1,42 @@ +using System.ServiceProcess; +using System.Threading; +using WebsitePanel.EnterpriseServer; + +namespace WebsitePanel.SchedulerService +{ + public partial class SchedulerService : ServiceBase + { + private Timer _Timer; + private static bool _isRuninng; + #region Construcor + + public SchedulerService() + { + InitializeComponent(); + + _Timer = new Timer(Process, null, 5000, 5000); + _isRuninng = false; + } + + #endregion + + #region Methods + + protected override void OnStart(string[] args) + { + } + + protected static void Process(object callback) + { + //check running service + if (_isRuninng) + return; + + _isRuninng = true; + Scheduler.Start(); + _isRuninng = false; + } + + #endregion + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs new file mode 100644 index 00000000..3bbafcff --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs @@ -0,0 +1,28 @@ +using System.ComponentModel; +using System.Configuration.Install; +using System.ServiceProcess; + +namespace WebsitePanel.SchedulerService +{ + [RunInstaller(true)] + public class SchedulerServiceInstaller : Installer + { + #region Constructor + + public SchedulerServiceInstaller() + { + var processInstaller = new ServiceProcessInstaller(); + var serviceInstaller = new ServiceInstaller(); + + processInstaller.Account = ServiceAccount.LocalSystem; + serviceInstaller.DisplayName = "WebsitePanel Scheduler"; + serviceInstaller.StartType = ServiceStartMode.Automatic; + serviceInstaller.ServiceName = "WebsitePanel Scheduler"; + + Installers.Add(processInstaller); + Installers.Add(serviceInstaller); + } + + #endregion + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj new file mode 100644 index 00000000..a1501bfa --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj @@ -0,0 +1,96 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {5B823520-0450-44A9-AC86-9658B41DFA7C} + WinExe + Properties + WebsitePanel.SchedulerService + WebsitePanel.SchedulerService + v4.0 + + + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\ + DEBUG;TRACE + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + bin\ + TRACE + true + pdbonly + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + + + + + + + + + + + + + + + Component + + + SchedulerService.cs + + + Component + + + + + {60E39314-659C-4FAD-AB91-D0D08E223578} + WebsitePanel.EnterpriseServer.Code + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config b/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config new file mode 100644 index 00000000..f4df3fb3 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx index 7e6c19f5..9c718a88 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx @@ -5,6 +5,8 @@ <%@ Register Src="UserControls/Quota.ascx" TagName="Quota" TagPrefix="uc4" %> <%@ Import Namespace="WebsitePanel.Portal" %> + +
@@ -15,6 +17,12 @@
+ + + + + + - \ No newline at end of file + + + + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx.designer.cs index 93e0d3c0..f7cffb9e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Schedules.ascx.designer.cs @@ -1,31 +1,3 @@ -// Copyright (c) 2012, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - //------------------------------------------------------------------------------ // // This code was generated by a tool. @@ -40,6 +12,15 @@ namespace WebsitePanel.Portal { public partial class Schedules { + /// + /// tasksTimer control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.Timer tasksTimer; + /// /// btnAddItem control. /// @@ -67,6 +48,15 @@ namespace WebsitePanel.Portal { /// protected global::WebsitePanel.Portal.SearchBox searchBox; + /// + /// schedulesUpdatePanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UpdatePanel schedulesUpdatePanel; + /// /// gvSchedules control. /// diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Scripts/AjaxUtils.js b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Scripts/AjaxUtils.js index f54b1aec..182477c9 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Scripts/AjaxUtils.js +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Scripts/AjaxUtils.js @@ -134,45 +134,47 @@ function ReloadProgressImage() function GetTaskProgress() { - requestSimpleService = WebsitePanel.Portal.TaskManager.GetTask( + requestSimpleService = WebsitePanel.Portal.TaskManager.GetTaskWithLogRecords( _taskId, //params + new Date(1, 2, 3, 4), OnGetTaskProgressComplete, //Complete event OnGetTaskProgressTimeout //Timeout event ); } -function OnGetTaskProgressComplete(task) +function OnGetTaskProgressComplete(task) { - if(task.LastLogRecord != null) - { - $get('objProgressDialogStep').innerHTML = task.LastLogRecord.Text; - } - - // set progress indicator - if(task.IndicatorMaximum > 0) - $get("objProgressDialogProgressBar").style.width = task.IndicatorCurrent / task.IndicatorMaximum * 100 + "%"; - - if(task.Completed) - { - // switch buttons + if (task == null || task.Completed) { + // switch buttons $get("objProgressDialogCommandButtons").style.display = "none"; $get("objProgressDialogCloseButton").style.display = "block"; - + // stop timer StopTimer(); - + // hide image indicator $get("imgAjaxIndicator").style.display = "none"; - + // show success message $get('objProgressDialogStep').innerHTML = _completeMessage; - } - else - { - $find('ModalPopupProperties')._layout(); - //alert(result); - window.setTimeout(GetTaskProgress, 1000); + + $get("objProgressDialogProgressBar").style.width = 100 + "%"; + + return; } + + if (task.Logs != null) { + $get('objProgressDialogStep').innerHTML = task.Logs.length > 0 ? task.Logs[task.Logs.length - 1].Text : ""; + } + + // set progress indicator + if (task.IndicatorMaximum > 0) + $get("objProgressDialogProgressBar").style.width = task.IndicatorCurrent / task.IndicatorMaximum * 100 + "%"; + + + $find('ModalPopupProperties')._layout(); + //alert(result); + window.setTimeout(GetTaskProgress, 1000); } function OnGetTaskProgressTimeout(result) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.designer.cs index 4bc94460..b4454382 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.designer.cs @@ -1,19 +1,51 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:2.0.50727.42 // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // //------------------------------------------------------------------------------ namespace WebsitePanel.Portal { + public partial class Tasks { - protected System.Web.UI.Timer tasksTimer; - protected System.Web.UI.UpdatePanel tasksUpdatePanel; - protected System.Web.UI.WebControls.GridView gvTasks; - protected System.Web.UI.WebControls.ObjectDataSource odsTasks; + + /// + /// tasksTimer control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.Timer tasksTimer; + + /// + /// tasksUpdatePanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.UpdatePanel tasksUpdatePanel; + + /// + /// gvTasks control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.GridView gvTasks; + + /// + /// odsTasks control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsTasks; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index 7f3ee84a..35287472 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs @@ -63,7 +63,7 @@ namespace WebsitePanel.Portal litTitle.Text = String.Format("{0} "{1}"", GetAuditLogTaskName(task.Source, task.TaskName), task.ItemName); - litStep.Text = LocalizeActivityText(task.LastLogRecord.Text); + litStep.Text = LocalizeActivityText(task.GetLogs().Count > 0 ? task.GetLogs()[0].Text : String.Empty); litStartTime.Text = task.StartDate.ToString(); // progress @@ -77,18 +77,19 @@ namespace WebsitePanel.Portal // execution log StringBuilder log = new StringBuilder(); - task.LastLogRecords.Reverse(); - if (task.LastLogRecords.Count > 0) - ViewState["lastLogDate"] = task.LastLogRecords[0].Date.AddTicks(1); + if (task.GetLogs().Count > 0) + ViewState["lastLogDate"] = task.GetLogs()[0].Date.AddTicks(1); - foreach (BackgroundTaskLogRecord logRecord in task.LastLogRecords) + + + foreach (BackgroundTaskLogRecord logRecord in task.GetLogs()) { log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] "); log.Append(GetLogLineIdent(logRecord.TextIdent)); log.Append(LocalizeActivityText(logRecord.Text)); log.Append("
"); } - litLog.Text = log.ToString() + litLog.Text; + litLog.Text = log.ToString();//+ litLog.Text; if(task.Completed) btnStop.Visible = false; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs index 19e861d7..30b8f974 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPS/UserControls/ServerTabs.ascx.cs @@ -176,7 +176,7 @@ namespace WebsitePanel.Portal.VPS.UserControls litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString(); // bind records - repRecords.DataSource = task.LastLogRecords; + repRecords.DataSource = task.GetLogs(); repRecords.DataBind(); } @@ -213,7 +213,7 @@ namespace WebsitePanel.Portal.VPS.UserControls // gauge gauge.Visible = false; - if (e.Item.ItemIndex == task.LastLogRecords.Count - 1) + if (e.Item.ItemIndex == task.GetLogs().Count - 1) { gauge.Visible = true; gauge.Total = task.IndicatorMaximum; diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs index 4b265375..14cc380e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/VPSForPC/UserControls/ServerTabs.ascx.cs @@ -183,7 +183,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls litElapsed.Text = new TimeSpan(d.Hours, d.Minutes, d.Seconds).ToString(); // bind records - repRecords.DataSource = task.LastLogRecords; + repRecords.DataSource = task.GetLogs(); repRecords.DataBind(); } @@ -228,7 +228,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls // gauge gauge.Visible = false; - if (e.Item.ItemIndex == task.LastLogRecords.Count - 1) + if (e.Item.ItemIndex == task.GetLogs().Count - 1) { gauge.Visible = true; gauge.Total = task.IndicatorMaximum; diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 9178c818..82ecea07 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -29,20 +29,22 @@ $(TrunkFolder)\Sources\WebsitePanel.WebPortal $(TrunkFolder)\Sources\WebsitePanel.Server $(TrunkFolder)\Sources\WebsitePanel.EnterpriseServer + $(TrunkFolder)\Sources\WebsitePanel.SchedulerService $(TrunkFolder)\Sources\Tools\WebsitePanel.Import.CsvBulk\bin\$(BuildConfiguration) $(RootFolder)\WebsitePanel.HyperV.Utils\Sources\WebsitePanel.HyperV.Utils\bin\$(BuildConfiguration) - $(RootFolder)\WebsitePanel.VmConfig\Sources\WebsitePanel.VmConfig\bin\$(BuildConfiguration) - $(TrunkFolder)\Sources\Tools\WebsitePanel.Import.Enterprise\bin\$(BuildConfiguration) + $(RootFolder)\WebsitePanel.VmConfig\Sources\WebsitePanel.VmConfig\bin\$(BuildConfiguration) + $(TrunkFolder)\Sources\Tools\WebsitePanel.Import.Enterprise\bin\$(BuildConfiguration) $(TrunkFolder)\Sources\Tools\WebsitePanel.AWStats.Viewer $(TrunkFolder)\Sources\Tools\WSPTransportAgent $(BuildFolder)\Server $(BuildFolder)\EnterpriseServer + $(BuildFolder)\SchedulerService $(BuildFolder)\Portal $(BuildFolder)\Import.CsvBulk $(BuildFolder)\HyperVUtils $(BuildFolder)\VMConfig - $(BuildFolder)\Import.Enterprise + $(BuildFolder)\Import.Enterprise $(BuildFolder)\AWStats.Viewer $(BuildFolder)\WSPTransportAgent $(BuildFolder)\LocalizationToolkit @@ -58,11 +60,11 @@
- - - - http://www.websitepanel.net/files/$(Version)/WebsitePanelInstaller-$(Version)-webpi.msi - + + + + http://www.websitepanel.net/files/$(Version)/WebsitePanelInstaller-$(Version)-webpi.msi + @@ -84,17 +86,18 @@ - + + - - + + @@ -104,9 +107,10 @@ + - - + + @@ -160,7 +164,25 @@ - + + + + + + + + + + + + + + + + + + + @@ -179,7 +201,7 @@ - + @@ -303,6 +325,17 @@ TaskParameter="TargetOutputs" ItemName="WebsitePanelInstallerMsi" /> + + + + + + + + + @@ -315,14 +348,15 @@ $(DeployFolder)\Install $(InstallFolder)\Server $(InstallFolder)\EnterpriseServer + $(InstallFolder)\SchedulerServive $(InstallFolder)\Portal $(InstallFolder)\StandaloneServerSetup $(DeployFolder)\Tools $(ToolsFolder)\Import.CsvBulk - $(ToolsFolder)\HyperVUtils - $(ToolsFolder)\VMconfig + $(ToolsFolder)\HyperVUtils + $(ToolsFolder)\VMconfig $(ToolsFolder)\Import.Enterprise $(ToolsFolder)\AWStats.Viewer $(ToolsFolder)\WSPTransportAgent @@ -361,8 +395,8 @@ - - + +