From 5e414136b255b74b53822a5206c9135299268f1a Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 30 Apr 2013 10:47:34 +0300 Subject: [PATCH 01/24] move the scheduler to a windows service --- .../Comments/CommentsController.cs | 0 .../Common/ConfigSettings.cs | 0 .../Common/CryptoUtils.cs | 0 .../Common/EnterpriseServerIdentity.cs | 0 .../Common/EnterpriseServerPrincipal.cs | 0 .../Common/FileUtils.cs | 0 .../Common/IPAddress.cs | 0 .../Common/Int128.cs | 0 .../Common/MailHelper.cs | 0 .../Common/ObjectUtils.cs | 0 .../Common/SecurityContext.cs | 0 .../Common/ServiceProviderProxy.cs | 0 .../Common/ServiceUsernameTokenManager.cs | 0 .../Common/UsernameAssertion.cs | 0 .../Common/Utils.cs | 0 .../Data/DataProvider.cs | 0 .../Data/EcommerceProvider.cs | 0 .../Data/SQLHelper.cs | 0 .../DatabaseServerController.cs | 0 .../DnsServers/DnsServerController.cs | 0 .../Ecommerce/CategoryController.cs | 0 .../ContractSystem/ContractController.cs | 0 .../Ecommerce/Helpers.cs | 0 .../Ecommerce/InvoiceController.cs | 4 +- .../Ecommerce/MiscController.cs | 0 .../Ecommerce/PaymentGatewayController.cs | 0 .../Provisioning/DomainNameController.cs | 0 .../Provisioning/HostingAddonController.cs | 0 .../Provisioning/HostingPackageController.cs | 0 .../Provisioning/IServiceProvisioning.cs | 0 .../Provisioning/ProvisioningContext.cs | 0 .../Provisioning/ServiceProvisioningBase.cs | 0 .../Ecommerce/ServiceController.cs | 0 .../ServiceHandlerController.cs | 0 .../Ecommerce/StorefrontController.cs | 0 .../Ecommerce/StorehouseController.cs | 4 +- .../Ecommerce/SystemPluginController.cs | 2 +- .../SendEmailNotification.cs | 0 .../TaskEventHandlers/SystemTriggersAgent.cs | 0 .../Ecommerce/TriggerSystem/CommonTrigger.cs | 0 .../TriggerSystem/TriggerController.cs | 0 .../ExchangeServerController.cs | 0 .../Files/FilesController.cs | 0 .../FtpServers/FtpServerController.cs | 0 .../HeliconZoo/HeliconZooController.cs | 0 .../HostedSolution/BlackBerryController.cs | 0 .../HostedSolution/CRMController.cs | 0 .../HostedSolution/LyncController.cs | 0 .../HostedSolution/LyncControllerAsync.cs | 0 .../HostedSolution/OCSController.cs | 0 .../HostedSolution/OrganizationController.cs | 0 .../HostedSolution/ReportController.cs | 0 .../Log/AuditLog.cs | 0 .../MailServers/MailServerController.cs | 0 .../MailServers/QuotaLimit.cs | 0 .../OperatingSystemController.cs | 0 .../Packages/PackageAsyncWorker.cs | 0 .../Packages/PackageController.cs | 0 .../Packages/ServiceItemsPaged.cs | 0 .../Properties/AssemblyInfo.cs | 36 ++++ .../Provisioning/BackupAsyncWorker.cs | 0 .../Provisioning/BackupController.cs | 0 .../Provisioning/IBackupController.cs | 0 .../Provisioning/IImportController.cs | 0 .../Provisioning/ImportAsyncWorker.cs | 0 .../Provisioning/ImportController.cs | 0 .../ActivatePaidInvoicesTask.cs | 0 .../SchedulerTasks/BackupDatabaseTask.cs | 0 .../SchedulerTasks/BackupTask.cs | 0 .../CalculateExchangeDiskspaceTask.cs | 0 .../CalculatePackagesBandwidthTask.cs | 0 .../CalculatePackagesDiskspaceTask.cs | 0 .../CancelOverdueInvoicesTask.cs | 0 .../SchedulerTasks/CheckWebSiteTask.cs | 0 .../SchedulerTasks/FTPFilesTask.cs | 0 .../SchedulerTasks/GenerateInvoicesTask.cs | 0 .../SchedulerTasks/HostedSolutionReport.cs | 0 .../NotifyOverusedDatabasesTask.cs | 0 .../SchedulerTasks/RunPaymentQueueTask.cs | 0 .../SchedulerTasks/RunSystemCommandTask.cs | 0 .../SendMailNotificationTask.cs | 0 .../SuspendOverdueInvoicesTask.cs | 0 .../SuspendOverusedPackagesTask.cs | 0 .../SchedulerTasks/ZipFilesTask.cs | 0 .../Scheduling/Scheduler.cs | 0 .../Scheduling/SchedulerController.cs | 0 .../Scheduling/SchedulerJob.cs | 0 .../Servers/ServerController.cs | 0 .../HostedSharePointServerController.cs | 0 .../SharePoint/SharePointServerController.cs | 0 .../StatisticsServerController.cs | 0 .../System/SystemController.cs | 4 +- .../Tasks/SendEmailNotification.cs | 0 .../Tasks/TaskEventHandler.cs | 0 .../Tasks/TaskManager.cs | 6 +- .../Users/UserAsyncWorker.cs | 0 .../Users/UserController.cs | 0 .../Virtualization/CreateServerAsyncWorker.cs | 0 .../VirtualizationServerController.cs | 0 .../CreateAsyncVMfromVM.cs | 0 .../CreateServerAsyncWorkerForPrivateCloud.cs | 0 ...lizationServerControllerForPrivateCloud.cs | 0 .../WebAppGallery/WebAppGalleryController.cs | 0 .../WebServers/WebServerController.cs | 0 .../WebsitePanel.EnterpriseServer.Code.csproj | 194 ++++++++++++++++++ .../Wizards/UserCreationWizard.cs | 0 .../Wizards/WebApplicationsInstaller.cs | 0 .../Sources/WebsitePanel.EnterpriseServer.sln | 124 +++++++++++ .../Global.asax.cs | 6 - .../WebsitePanel.EnterpriseServer.csproj | 159 +------------- .../WebsitePanel.SchedulerService/Program.cs | 24 +++ .../Properties/AssemblyInfo.cs | 36 ++++ .../SchedulerService.Designer.cs | 37 ++++ .../SchedulerService.cs | 47 +++++ .../WebsitePanel.SchedulerService.csproj | 70 +++++++ 115 files changed, 587 insertions(+), 166 deletions(-) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Comments/CommentsController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/ConfigSettings.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/CryptoUtils.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/EnterpriseServerIdentity.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/EnterpriseServerPrincipal.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/FileUtils.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/IPAddress.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/Int128.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/MailHelper.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/ObjectUtils.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/SecurityContext.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/ServiceProviderProxy.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/ServiceUsernameTokenManager.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/UsernameAssertion.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Common/Utils.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Data/DataProvider.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Data/EcommerceProvider.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Data/SQLHelper.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/DatabaseServers/DatabaseServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/DnsServers/DnsServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/CategoryController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/ContractSystem/ContractController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Helpers.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/InvoiceController.cs (96%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/MiscController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/PaymentGatewayController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Provisioning/DomainNameController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Provisioning/HostingAddonController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Provisioning/HostingPackageController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Provisioning/IServiceProvisioning.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Provisioning/ProvisioningContext.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/Provisioning/ServiceProvisioningBase.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/ServiceController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/ServiceHandlers/ServiceHandlerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/StorefrontController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/StorehouseController.cs (97%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/SystemPluginController.cs (96%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/TaskEventHandlers/SendEmailNotification.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/TriggerSystem/CommonTrigger.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Ecommerce/TriggerSystem/TriggerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/ExchangeServer/ExchangeServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Files/FilesController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/FtpServers/FtpServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HeliconZoo/HeliconZooController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/BlackBerryController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/CRMController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/LyncController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/LyncControllerAsync.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/OCSController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/OrganizationController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/HostedSolution/ReportController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Log/AuditLog.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/MailServers/MailServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/MailServers/QuotaLimit.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/OperatingSystems/OperatingSystemController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Packages/PackageAsyncWorker.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Packages/PackageController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Packages/ServiceItemsPaged.cs (100%) create mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Properties/AssemblyInfo.cs rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Provisioning/BackupAsyncWorker.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Provisioning/BackupController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Provisioning/IBackupController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Provisioning/IImportController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Provisioning/ImportAsyncWorker.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Provisioning/ImportController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/ActivatePaidInvoicesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/BackupDatabaseTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/BackupTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/CalculateExchangeDiskspaceTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/CalculatePackagesBandwidthTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/CalculatePackagesDiskspaceTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/CancelOverdueInvoicesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/CheckWebSiteTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/FTPFilesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/GenerateInvoicesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/HostedSolutionReport.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/NotifyOverusedDatabasesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/RunPaymentQueueTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/RunSystemCommandTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/SendMailNotificationTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/SuspendOverdueInvoicesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/SuspendOverusedPackagesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SchedulerTasks/ZipFilesTask.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Scheduling/Scheduler.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Scheduling/SchedulerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Scheduling/SchedulerJob.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Servers/ServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SharePoint/HostedSharePointServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/SharePoint/SharePointServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/StatisticsServers/StatisticsServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/System/SystemController.cs (94%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Tasks/SendEmailNotification.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Tasks/TaskEventHandler.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Tasks/TaskManager.cs (96%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Users/UserAsyncWorker.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Users/UserController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Virtualization/CreateServerAsyncWorker.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Virtualization/VirtualizationServerController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/VirtualizationForPrivateCloud/CreateAsyncVMfromVM.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/VirtualizationForPrivateCloud/CreateServerAsyncWorkerForPrivateCloud.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/WebAppGallery/WebAppGalleryController.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/WebServers/WebServerController.cs (100%) create mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Wizards/UserCreationWizard.cs (100%) rename WebsitePanel/Sources/{WebsitePanel.EnterpriseServer/Code => WebsitePanel.EnterpriseServer.Code}/Wizards/WebApplicationsInstaller.cs (100%) create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/Program.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/Properties/AssemblyInfo.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.Designer.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj 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 similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Common/ObjectUtils.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Data/DataProvider.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DatabaseServers/DatabaseServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/DnsServers/DnsServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DnsServers/DnsServerController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/ContractSystem/ContractController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/ContractSystem/ContractController.cs 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 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs index bd06bd04..8b666d2a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/InvoiceController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs @@ -248,7 +248,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 +260,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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/HostingPackageController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/ServiceProvisioningBase.cs 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 97% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/StorehouseController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs index 737fdb5c..f5efbdc9 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); } 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Files/FilesController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Files/FilesController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/FtpServers/FtpServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/FtpServers/FtpServerController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Log/AuditLog.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/MailServers/MailServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/OperatingSystems/OperatingSystemController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/OperatingSystems/OperatingSystemController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Packages/PackageController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/BackupController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Provisioning/ImportController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupDatabaseTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/BackupTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/CheckWebSiteTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/FTPFilesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/HostedSolutionReport.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/RunSystemCommandTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SendMailNotificationTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/SuspendOverusedPackagesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SchedulerTasks/ZipFilesTask.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/Scheduler.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Scheduling/SchedulerJob.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Servers/ServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/HostedSharePointServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/HostedSharePointServerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/SharePoint/SharePointServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SharePoint/SharePointServerController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/StatisticsServers/StatisticsServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/StatisticsServers/StatisticsServerController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/SendEmailNotification.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs 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 similarity index 96% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index f69cb478..946cd169 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -450,12 +450,12 @@ namespace WebsitePanel.EnterpriseServer get { return TopTask.Parameters; } } - internal static int GetTasksNumber() + public static int GetTasksNumber() { return tasks.Count; } - internal static List GetUserTasks(int userId) + public static List GetUserTasks(int userId) { List list = new List(); @@ -473,7 +473,7 @@ namespace WebsitePanel.EnterpriseServer return list; } - internal static List GetUserCompletedTasks(int userId) + public static List GetUserCompletedTasks(int userId) { // get user tasks List list = GetUserTasks(userId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserAsyncWorker.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserAsyncWorker.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserAsyncWorker.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserAsyncWorker.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs similarity index 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Users/UserController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Virtualization/VirtualizationServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs 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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs 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..dc0532b3 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj @@ -0,0 +1,194 @@ + + + + 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\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\Lib\Ionic.Zip.Reduced.dll + + + ..\..\Bin\Microsoft.Web.Services3.dll + + + + + + + + + + + + + + + ..\..\Bin\WebsitePanel.Common.Utils.dll + + + ..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll + + + ..\..\Bin\WebsitePanel.EnterpriseServer.Client.dll + + + ..\..\Bin\WebsitePanel.Providers.Base.dll + + + ..\..\Bin\WebsitePanel.Server.Client.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {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 100% rename from WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/Wizards/WebApplicationsInstaller.cs rename to WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln index 36ca6285..62776c21 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln @@ -41,70 +41,194 @@ 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}" +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 + {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 {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|x86.ActiveCfg = Debug|Any CPU {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|x86.ActiveCfg = Release|Any CPU {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|x86.ActiveCfg = Debug|Any CPU {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|x86.ActiveCfg = Release|Any CPU {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|x86.ActiveCfg = Debug|Any CPU {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {65FEDD1B-379C-413D-84D8-20E6C29C645D}.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|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {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|x86 + {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|Mixed Platforms.Build.0 = Release|x86 + {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/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/WebsitePanel.EnterpriseServer.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj index 98a5db62..9bd21981 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,10 @@ - - False + + ..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll + + ..\..\Bin\WebsitePanel.Providers.Base.dll @@ -122,131 +118,6 @@ VersionInfo.cs - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - Code - - - - - - - Code - - - Code - - - - - - - - - - - - - - - - - - - - - - - Code - - - - Code - - - Code - - - - Code - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - esHeliconZoo.asmx Component @@ -396,21 +267,9 @@ - - {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 + + {60E39314-659C-4FAD-AB91-D0D08E223578} + WebsitePanel.EnterpriseServer.Code 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..fb71ca52 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Linq; +using System.ServiceProcess; +using System.Text; +using System.Timers; + +namespace WebsitePanel.SchedulerService +{ + public partial class SchedulerService : ServiceBase + { + #region Properties + + public Timer _Timer { get; protected set; } + + #endregion + + #region Construcor + + public SchedulerService() + { + InitializeComponent(); + } + + #endregion + + #region Methods + + protected override void OnStart(string[] args) + { + } + + protected override void OnStop() + { + _Timer.Dispose(); + } + + protected void Porcess(object state) + { + } + + #endregion + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj new file mode 100644 index 00000000..9a22ddd0 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj @@ -0,0 +1,70 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {5B823520-0450-44A9-AC86-9658B41DFA7C} + WinExe + Properties + WebsitePanel.SchedulerService + WebsitePanel.SchedulerService + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + Component + + + SchedulerService.cs + + + + + {60E39314-659C-4FAD-AB91-D0D08E223578} + WebsitePanel.EnterpriseServer.Code + + + + + \ No newline at end of file From ce95326f7d50cfd61709425fa03708f652f27751 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 3 May 2013 17:29:25 +0300 Subject: [PATCH 02/24] Scheduler moved into windows service. --- .../Actions/EntServerActionManager.cs | 100 +++++++++++++++++- .../WebsitePanel.Setup/Common/Global.cs | 2 + .../WebsitePanel.Setup.csproj | 1 + .../Wizard/UninstallPage.cs | 35 +++--- .../WebsitePanel.Import.Enterprise.csproj | 3 + .../WebsitePanel.EnterpriseServer.Code.csproj | 5 +- .../Sources/WebsitePanel.EnterpriseServer.sln | 48 +++------ .../WebsitePanel.EnterpriseServer/Web.config | 4 +- .../WebsitePanel.EnterpriseServer.csproj | 10 +- .../WsePolicyCache.Config | 2 +- .../SchedulerService.cs | 29 +---- .../SchedulerServiceInstaller.cs | 28 +++++ .../WebsitePanel.SchedulerService.csproj | 28 ++++- .../WebsitePanel.SchedulerService/app.config | 9 ++ WebsitePanel/build.xml | 1 + 15 files changed, 219 insertions(+), 86 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs index 6952cf21..10dc21e2 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; @@ -99,6 +102,74 @@ namespace WebsitePanel.Setup.Actions } } + public class InstallSchedulerServiceAction : Action, IInstallAction, IUninstallAction + { + public const string LogStartInstallMessage = "Installing Scheduler Windows Service..."; + public const string LogStartUninstallMessage = "Uninstalling Scheduler Windows Service..."; + + void IInstallAction.Run(SetupVariables vars) + { + try + { + + Begin(LogStartInstallMessage); + + Log.WriteStart(LogStartInstallMessage); + Log.WriteInfo(String.Format("Scheduler Service Name: \"{0}\"", Global.Parameters.SchedulerServiceName)); + + if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) + { + Log.WriteEnd("Scheduler Service Already Installed."); + InstallLog.AppendLine(String.Format("- Scheduler Service \"{0}\" Already Installed.", Global.Parameters.SchedulerServiceName)); + return; + } + + ManagedInstallerClass.InstallHelper(new[] {"/i", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName)}); + Utils.StartService(Global.Parameters.SchedulerServiceName); + } + catch (Exception ex) + { + UninstallService(vars); + + if (Utils.IsThreadAbortException(ex)) + { + return; + } + + Log.WriteError("Installing scheduler service error.", ex); + throw; + } + } + + void IUninstallAction.Run(SetupVariables vars) + { + try + { + Log.WriteStart(LogStartUninstallMessage); + UninstallService(vars); + Log.WriteEnd("Scheduler Service Uninstalled."); + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + { + return; + } + + Log.WriteError("Uninstalling scheduler service error.", ex); + throw; + } + } + + private void UninstallService(SetupVariables vars) + { + if (ServiceController.GetServices().Any(s => s.ServiceName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) + { + ManagedInstallerClass.InstallHelper(new[] { "/u", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) }); + } + } + } + public class CreateDatabaseAction : Action, IInstallAction, IUninstallAction { public const string LogStartInstallMessage = "Creating SQL Server database..."; @@ -348,6 +419,31 @@ namespace WebsitePanel.Setup.Actions } } + public class SaveSchedulerServiceConnectionStringAction : Action, IInstallAction + { + void IInstallAction.Run(SetupVariables vars) + { + Log.WriteStart(string.Format("Updating {0}.config file (connection string)", Global.Parameters.SchedulerServiceFileName)); + var file = Path.Combine(vars.InstallationFolder, "bin", string.Format("{0}.config", Global.Parameters.SchedulerServiceFileName)); + string content; + + using (var reader = new StreamReader(file)) + { + content = reader.ReadToEnd(); + } + + vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword); + content = Utils.ReplaceScriptVariable(content, "installer.connectionstring", vars.ConnectionString); + + using (var writer = new StreamWriter(file)) + { + writer.Write(content); + } + + Log.WriteEnd(string.Format("Updated {0}.config file (connection string)", Global.Parameters.SchedulerServiceFileName)); + } + } + public class SaveEntServerConfigSettingsAction : Action, IInstallAction { void IInstallAction.Run(SetupVariables vars) @@ -390,7 +486,9 @@ namespace WebsitePanel.Setup.Actions new UpdateServeradminPasswAction(), new SaveAspNetDbConnectionStringAction(), new SaveComponentConfigSettingsAction(), - new SaveEntServerConfigSettingsAction() + new SaveEntServerConfigSettingsAction(), + new SaveSchedulerServiceConnectionStringAction(), + new InstallSchedulerServiceAction() }; 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..8eda1436 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs @@ -77,6 +77,8 @@ namespace WebsitePanel.Setup public const string ConnectionString = "ConnectionString"; public const string InstallConnectionString = "InstallConnectionString"; public const string Release = "Release"; + public const string SchedulerServiceFileName = "WebsitePanel.SchedulerService.exe"; + public const string SchedulerServiceName = "WebsitePanel Scheduler"; } 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..19cecdb9 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 @@ -285,6 +290,12 @@ namespace WebsitePanel.Setup list.Add(action); } + if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) + { + action = new InstallAction(ActionTypes.UnregisterWindowsService) {Path = Path.Combine(installFolder, "bin", Global.Parameters.SchedulerServiceFileName), Name = Global.Parameters.SchedulerServiceName, Description = "Removing Windows service..."}; + action.Log = string.Format("- Remove {0} Windows service", action.Name); + list.Add(action); + } //database bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase"); 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/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj index dc0532b3..49de1bd3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj @@ -17,7 +17,7 @@ true full false - bin\Debug\ + ..\..\Bin\ DEBUG;TRACE prompt 4 @@ -52,7 +52,8 @@ ..\..\Bin\WebsitePanel.Common.Utils.dll - + + False ..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.sln index 62776c21..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}" @@ -42,6 +41,9 @@ 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 @@ -115,30 +117,6 @@ Global {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 - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {FFE9BFD3-AAB8-4703-AF8F-A41F0D878DB8}.Release|x86.ActiveCfg = Release|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Debug|x86.ActiveCfg = Debug|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {338F816B-BEB4-4F18-9EA1-2EFD35DBA65B}.Release|x86.ActiveCfg = Release|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Debug|x86.ActiveCfg = Debug|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {65FEDD1B-379C-413D-84D8-20E6C29C645D}.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 @@ -220,13 +198,13 @@ Global {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|x86 - {5B823520-0450-44A9-AC86-9658B41DFA7C}.Debug|Mixed Platforms.Build.0 = 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|x86 - {5B823520-0450-44A9-AC86-9658B41DFA7C}.Release|Mixed Platforms.Build.0 = 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 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 9bd21981..605e542d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/WebsitePanel.EnterpriseServer.csproj @@ -70,6 +70,9 @@ ..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll + + ..\..\Bin\WebsitePanel.EnterpriseServer.Code.dll + ..\..\Bin\WebsitePanel.Providers.Base.dll @@ -266,12 +269,6 @@ - - - {60E39314-659C-4FAD-AB91-D0D08E223578} - WebsitePanel.EnterpriseServer.Code - - @@ -283,7 +280,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/SchedulerService.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs index fb71ca52..be2e8579 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs @@ -1,23 +1,10 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; -using System.Linq; -using System.ServiceProcess; -using System.Text; -using System.Timers; +using System.ServiceProcess; +using WebsitePanel.EnterpriseServer; namespace WebsitePanel.SchedulerService { public partial class SchedulerService : ServiceBase { - #region Properties - - public Timer _Timer { get; protected set; } - - #endregion - #region Construcor public SchedulerService() @@ -31,17 +18,9 @@ namespace WebsitePanel.SchedulerService protected override void OnStart(string[] args) { - } - - protected override void OnStop() - { - _Timer.Dispose(); - } - - protected void Porcess(object state) - { + Scheduler.Start(); } #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..6d321a24 --- /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 = "WebsitePanlel 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 index 9a22ddd0..475ed6fe 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj @@ -11,7 +11,8 @@ WebsitePanel.SchedulerService WebsitePanel.SchedulerService v4.0 - Client + + 512 @@ -33,8 +34,27 @@ prompt 4 + + true + ..\WebsitePanel.EnterpriseServer\bin\ + DEBUG;TRACE + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + ..\WebsitePanel.EnterpriseServer\bin\ + TRACE + true + pdbonly + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + @@ -52,6 +72,9 @@ SchedulerService.cs + + Component + @@ -59,6 +82,9 @@ WebsitePanel.EnterpriseServer.Code + + + + \ 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 0000000000000000000000000000000000000000..bf9c0b86135d355e2a1a0fe36d07d7b8829b89f8 GIT binary patch literal 15086 zcmd5@2Y6LQ7QPUqD0Kl9L}?#>C`u6pELo}|D^&$yzfV}j1v>)zu~H?pzIJJ;NgcKmN~O$ z$q#eil}%s2Q7X2~8X>-m76|(k#P4#fQl(1r!k?Tprn~r#Xzvt@|J`09R`^KQu3dEhy^Qh(zTaAYlg~f@TynFoO6Y>o;ydz5RmakI zI?2AEnR52G{c`$Xh)n7`wa- z!>0nEYIgpI@5n=5mdR~=eV%E8{4N0JCs*W5b}4z)@Q!Wp0hR-6O?-#+E1(xp6DZN1 z((-=#=_h0I*yE2sF226L!ZM%~pl{>G_#h56 zYSbu~@_Y8|SqtT+T)A>3dFj%n;*MNYUre{wty{~21q&oGF)9OzKE>*El;O_v^UpsomoH!D*xir5`J2|knS8Xn2Ka&wA3j`gD{XeA z5Bmb+n>s}F@84hbgERT)r%7zLCuM7$9)0vtxpYa*SM9zZEC%wFT^%-JY2ncm2=bmK(nZ*sC@l> zzL@%7IlV7f7GX_ajP>3VU|okd&6oA-)+qUuwRi7ch*tjWn}LCWDxZF7eEbR!YSpSr);HgLL;14+-x)JzsJxmrYf658KJz_K@LezgDgTh|pD9GmDpiy$)Ba{aev>0dj^yd_HxYJ`b2U{?9oQzZ82_HY zsmKt?N==aOzyDszrYz1!px%H1pXp@Vwr$lrtWA<|_Ot{}=q>c?UHSa(=Ch7v?>{RE z@yDf8r;bVn=irQt4Ekx>SNEgOM7=owu3x`SQqKJ@q2G>@_5b~+tergYmi1Wjb_e+_ z%wP8Gj*uGWK9qhxC=B5I%QdJs*B{*no&WAl{UrZdj%24N%jMW(5-_^!O?BWt?NIPy zSu^=nS@oaZNC(QVJHC^gtgAA3@L<)xM;>`Zu+BrIyl={;{3^hag$oxd9@^oE5hElo zFAv#*^|Anaq)_P4&7}@OlU|nO3$apIkS|$jS0pXrtYoEMQO{GSPF4NN{+&5I7`{Qmi!Z*Ybl_Y(Wy%!$d`KNGo{EyNg&#}c#Qw7Uqb{;yY!6xY z`CvJ)ey*e^o~NoMh(5*Lci*k*?AEOteV`05^|bmQ+W$uWn1qA`Y15{S;^$ZyIdY_M z+>kgX`AsM*;mj|RXgdMBPEu`D43qUqBHsM zk*h(5KlTyVXrt_}3Kc4dx3{-!+qO;8($Xvvod2X9?cBLj=*Q8PSqEiDL`0z53qywt z8KQh(XY#>oKsWl|zVsD)_3EX{vkvwJZ3lfNCr_TV+Xl7ZniUrpr@k$1Sob%}vCr9V z$PRh-*=I}jzbT&tADR2SPhbz1=g*%n^v95G2W^9EC1Xj9$<(P+$KF=WM_p-aXa_rO zHric>b!&3fe*L~yty%`gLmTKFNq>z#Q@eKU>^gwY>2K=F@y#)YvN5Yxt?GihD(ZT5 zYL(BuAfKH9Yx7;uzdx`VK2uC&WMm#~deWpxGG@#ewf~r6vfBKD<6bw8}~c+-+#YUt5!|8-VywL-+lL~aXx(ba24la84F#+ z?=OLdZYcpK@D_tR>olPJ0PatQ4I8HPWtC+C+rzS~gFb~xNl3>7h}M-(;Bi}j z@IC-+22}is^Auy+Wzn}ZUhW-Ory1L#n1eu@(prG`Zs`xc4nQ0r;o;%(+H0?QOmD|F zAk+P(dXM2K*OSkPDGFmLCKVzb?yL>SFI9iM?+U;) zGlY90uI--Gv$VP>>(fs^wT_E79otZv{&?38NTu#$$Br#Gy&c=cy|g*D`5pRO+u%xn z#3RpcwXnK&hpOZnC9GP(s+IY{B{KQiobCVhEM&M(Ovh|ph1K5`oQ^+@kK}dd6px~ zmM#0s>8{&A-Awulsa1da;DO_CZq&JZ2Z!nX2^ry7`?ECN?+fCLxm&BbpBb6&x zw(CV5P1=H#`g2bfO@Ef>&02rP+qi$vxO7JL2YoFE5lbmg><^qKDe=)tRUQALZuDDC z-<#u@`-Vn9PEb&gU3c<*_`&;#zZA%!wbMO%X5j9*1J4%1X1|5lZkEiSH&?}Lbl-mW z9gn3IaUa)(zdritBfI|GbL`!-Thgywlz?}iav585H`aNpe12~~DM_~Da_Qp5VsRAi zflT6Fl#ni6y4dySSq4IO>TX5+k?j%}6@F)Mc!y-BC8_va-MV${`Y~Q((j24<`MXi0 zM)vpI|NUv_Ev8_%lcFNU%DGV6566H>E08LG#~NGX9`>(B*13`UX_M9>UC-aNdELH# zeO^M046$XL4eeg}h3s8D?T%pgs;}g?P(R7Z$x$&|tsiwYiSd~d`uBOMmlWjX%C4p3 z)H&s?j=$S2$GK|j)K?IvPE&C~7y7SeTdelO@sXEzO^$4wBYqz|C;lIJ-w{yu9=}g; zKANS@-L?J}`(a#cKJ|a_!3XX3!|`$LTCSwy?i|mmm4h~j|7Znvs zQ6a#zJYmYD6334pFSZxt*^No;dwz_}HEV9%0bo0Z;hqO6<@_m$`eB(I+x~sI;%G>K zT#5fh>A-V%p7-efUAdAWS4EuYc_(oneWC{*c)-rn05--kkQfswzHj5cga^({%Q_#$ z9=L7;Jaf^y)AmjOjc0v~#nK1$0gCz0w4qHK*GmD;4G+SHE353=;b&j1n>+yL-6`_> z$>YU*AB+FYjR18gS^w<>L`h2^SxG-q;UPFU$UA0A6eTneOD??1dLzuzxFl1Ku6hl%1Z0JIiOKFh5VC z!&cbu%$BvU11I!T>$$VDYxd9is8A&`9OspH-F25;AI6N${bL*$=tNlc{|5_kkF5Kj zX}x;&)cEH+D`ll7%9dFp%lr*^XTTPHy>D&DBGg@=h!s<0&&n_5m+(NzO#DNM;W?jU zyp_6{M4#EJJAZQ=?{*eHxxQ~sH;dj#lF!GMsSW-gddrF38*Wr!{>q21!f$FN#<{I? z4(|z=@pU$^22f0Y^fjNofg;9=cm`|z4jebm&Z&6^{O8RJO1;NT`{Et#bGVc34)G2X zZCA_Zcd*2--Y|77p}(0wi!vPJhwKa9{llG<5-RX+R3i3CM?;p&_QjvzZpaW>^Vuu1 z72|zh;B+~2WGC)EB$X)VEMwfbamD5vhxj4)?6^^_`r4KLRlu{4b+aGHs=+qUmQI{F z!Pg~-K6g$=in^E2ah{o)AbHroxn!D(_sLj=4Y1$!#c!wjqYU#O1Y$YX zoyE`V*RQY6(!t{q!dbj9-eI+OszIN|oNstn;3?{+3C}L|ClB7Y1Z*tNKHzs`wg&HD z@J=>m)4#eE;@yvq9Xl3_@34N#;+cu5dj{(6hWuiLyi)ZiGkDkrbr!(!;5eqq!gg>? z=bc#ke7w`)tUbIlbm77U*}i?dx;w-E*7s0Yj|Ru8C0?H5On2}W)17T`MR@lRup3Zw zfWGg2) zh;uO45o??mY$e)Kmb@N4dZ;?h`5j`^{lj~2qLbVD>v~XcS0J1MXq)s!xGq@zR(JJg ztdeC}hiT`mHVPP|<&~C#ugv=E`cSqHKqsXDQ2s3AkDMpVU?9^4aS=QUaIJg>pzq=deQu|Y zhR}g~(RYEl0OK0#OavjNBTK)FHpn@_LpuAQ9t^+&^YRcc6Y<%G%SB9m41+s2{8N8$ z#|Sr?3S@hUtKC9HC nuZ{U=hiacr(N5iN-4D87bU)eq4HfWavY>$K*Bh6#RKNcpd{Dd; literal 0 HcmV?d00001 diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp b/WebsitePanel.Installer/Sources/Setup.SchedulerService/bannrbmp.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9ac7e922473bee7e8169543747e72dd7a373f782 GIT binary patch literal 85896 zcmeI*c}!H-0tRrvH5L_@hqMn#Q2UDsklxD-pYDwINMFeG0KG z^5nTuED^!947O6!*c3{I0NPQgRLfRu1VlC$tct>5KRE5}Ak5*;fJ60slVO~>=iGZP zze_%@mvhej*XyB6935I8bMf^uzUuMO2md-cjK-^j!%~zFf61Zkt8D>Zp722d3Q&Lo z&$9q?{CPfl+;<94fC5jRFvs~*KmiI+;Q1C{jz8bWk9$u63Q&MK&YuAaP=EqGBaoAm z6B84&e*OBnbLYCdyN?+&X2ggQ!-o$aJ$m%y$&)=jJy)z)5gs0%mX`MD(W9PevTZBO z@gBtFrYJxG6$MI4N_OqqwP3-5Kf8}~{qM|~Gq-NtYBU;q#EUuJBaGY#1t_4Rz}2f) zH*elNXwaaple@DTPEJlZL(k66?xr1cyqkbrodOh4QQ+RadqF`#&d$!A<+F9m`u6SX z@9$q#Rb{gybKGV+u1En2C@O&K;In4UvM#N=sy%Vy#N^~;+d!G)wz+XF3Q#~%fn&#x z4IVtWt5~+B9G6*wgM)2gWsci`##Jal0YwF(qM~d`XlvHlvSmwibF)>x%yFx@SeXJ8 zP*)&2I@+2*w!Lm(V4zjX%yFx@SeXJ8P*fl>G11Xc%wT1EK_P6>Cy} z0*VS06co6)xad#e?$_+or%y^sicW6kxK1cmqW}dI6~Nd_jL+PoYHAiOS|r+Cx^!tvON)G0nd5RF zmQsKM>I&4>){Y!GQsik|T%0{2FzJeD7q5AFdGe;2<8mLCQh);L3Sj7_2vavVH%zEv zX9(?-eA~8d@}`;NavzpbfCB0Y`1<;a9N)WlFBGbO$v37RHlBXw&x(RfGT%G1-+B}aleF2P|D1t_4dfWcr889IIXbSTu77sqb$vO|cYi6a|5%Z%Tk(Z!1w zi+$L)Z=d8yFvlf0ETRAf)D_sXXOGBGKR-VxR9?wW{di+)#3uVZOR~R2qlXS168o@x z`EtpTV2(?0SVRE|s4K8?Y6o-Hyo zGqd%tj=l20oj(T*7=YctZJH%Jz#Nz0u!sT_P*-5Wgb4^x%yHOd_w8qAbmPX2Awz~> zH(Xs^C9N>WB{(di00q<)5X13t^UT7+pH0n8xu1QU@o9+Np5Mm@->IoUmlaF{fE>rG z*{L7y+ARCt>j2B$0ax{q5uWd70~7! z&&bGt!jE6a+U=qW8oFSJYH2Z*mX=@?5`LGsySqz{1an-1!y*b$KwW_i8#c6^jyvq% zzrVK>va+(oK6rU~N%ny`F2P|D1t_4dKzMk#$j~KAmh_fFSXh|YhqY_hO7?*{F2P|D z1t_4dz?m~=M21e9GzqtM>lKKF3m1xgIB?*AWCxhz5*!v$fCB0Y+`4sZ+_-UwQFK|! z$;ko4&lx8%DF3U-fM@%R2)OjsVKj$Z5sA(!PEJl3*eN*@%y9`0izq+=r3F^6UM)_C zw{PDLh_WBPwojLpOJDvE&Be#Zi`MZMSCh#kITFlq2@Z=WKmnx%v>CuL45zlX#?;*W z?ZJ1Sb(F^i`ZUy4BDl21mLCS@xZH=O6rg~*0vJw-iA}^wG5+KTh{uihbCV;F zz4On*Z+d+a_>Yqx`Sy6M7iSvKP-<$bXczOVl$Mstj{$RB?!!_FP(W#cg9i_aJjF({Rfi{Eb7)Lt*VTU*h1|E>*Dp76nI$3OT_$6o+PHhEt@`ze}u`0$~(x3_3FARwU2 z1Hc^bl86;3Kmm0H8X6kJgjq<{b?er3gecBE(=n0dORnX8cdzb7X2PEM_x^q4O>dmq z$G!E++5f*^Rb&*~*SZ@H95@hD9(HW>sU^(ur$G3T0u-P?JAtI6Bynntej|yAiS5ep zp``_hEDvt;(%j^~Mio71sIM`XDv=|f=q%D`cVUA01SVRE| zP@q)+LxDuFy12Mpym;{`lopdID=Ex8tS!CIHSEV|`=?en|A>idr%ah5+L|$A2Ik2! zFSYcZIc`aY%PBws3j85(^X5&A1`_d#%PfV3g&k>1e>j`GYn7!0Pxef9=|}&MN9%hSC2REGj0a6*(Rq9j$leKkK!Q;^%_`6rcbF zbPAk1ch3CWdFrlBR6VlYRb>gNAznWMa6b}e0;E6zOJQG=C~yp zE~fwmC?FF!apHv5iABqFoT{UfB5pmAo}P{#ia)hI^78T!@kfsy_4D(?2{`WEtkuVx zQKLphL_~CFYFy^H>^QNE0u-QtMBw)A+c7aQQ>RWf&t>!Xh-^F@9UaXVYVTcLU3c!> zSzcZ)X+lpCb6k%S>rj9K6tF0OvHK}0DQniO(MIrVN!{ri^mSRbY*}1f9J-}j+^97L z%yDb9SeF76pnzoobUwjdgm94r_x8lBvu6io9DlKn cC%+pCP(VF_JoUb1e#aD`00mws0rYPC9ie2i0ssI2 literal 0 HcmV?d00001 diff --git a/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp b/WebsitePanel.Installer/Sources/Setup.SchedulerService/dlgbmp.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dbf9959b83dee182fc1e997ef440e82402f818c5 GIT binary patch literal 461816 zcmeI52YeL87spi)Q4j<~P$_~62!a$T0#XzdMMOa0j|EYXB1KesvjHjsR;2ePHS`(+ zB!qY_c`P9rVZ{>{HNG~Ki)2v?Q9oL9Qbg;Sk?XM|8`Pf&z?R1(Tfxy z1th6}ogwb#bng4*3){4M+D`PM+o%*Ej!UxrQlUrzMgco>{NT<_177L#zylAc@IwE$ zlLEwXYVf3hWEHR{$FH3J_kZud_sGK!+X-EC8=eBhamlt}Di|qXH;%hqJG*SbyeFDJ z&SML0+D`%EI5l=sK(Y$hjpMsE|JJ)__xtZhzbn0}K>^~pWZN(mj1=&3xnj~RXZ>x* zGavnLT%$)DRs+E3mI?)k-PBGx9Uw<$P)N%EeDT*`g*;jJ^YLoEkeRAXx=` zT^)IL)z?*@iDEsvH(%}F_kjl}VZ28Ch!Dpm+lHxNq=4UTN4}Y6x?a$8J5|K@ak>2U zoEgoUHmwm1qc1`6acb(MfP@v`L)_rD>s3Fart8HY+V#)NJzgSbyypCZkUuWrR!l{c zy8`}h*9_uY(^c1hm_EK^^ybu$CpBpBNX?-beG}ri+?zU;U&0E2<7V4!M}L*+!X1M- zxBmHSrw-3i!g!7P@gR;%xD`{;k=wNZg#qGTH!p44u=bfYt!br*n)b^<9G7q_rlQGRfk2NN z8g}P;pfJ-$yaMHL#y^@ku5R7BmQW0V^@-y~qo?%n?#)WWwvOQdYue6#4hc4_YEu zr9$#Ij0|65J~BMhfbK_HlRMVfx5RM?w_+-q+!YA+ylKdSJZ~~481znx$hak*IL>{n zaic}^zra+te2(jG3n9B6tm|Vs_-+jAf|*`p3C?~o;<((KI+b6-3WRt$^DWrxra@zg z?{OnopTS%I^Vc;NPKkvSml4B;Ts(1*4Y+Il)ulOqk2cwL5+Vg+U8+ncj!U=|Q_P+ z@;R=xZ5->CGQAc$>BMolH+3q%gcS($xut8NJ}w%jpghZZ^v+W!U{zA-8N>vt`Q0g_r1k8hVMK( zd1zPfUfnHm#_QLwkFdtJ%$(HWAHnIOAPj=y+h;Um+eh zG=uMW%a~@*sxh*29y))6PjhaYk8*C?5Yuhyq}vDR#BsSdbt=Dv6^IUSheZXr=`nw| zD1FBF-w|WEdC6hmD}5|kM!C_W4X1zlQNZnMKz69tO{IC>3{@Eq?&gu5Pjhyg<2ZkV z<2ZlA%1p0r51lwJ;Z{sVleq$kF@bmZ79HrW#}uqr5?@93NdMcgK#%Kdzgyb4aU)Bd zaSZ%9u>J3FZLhpEhbvKw^Rg?(Hwu|k%y;G`7qG^TDXsk+PqzWbq%ru z@rKE6)M3|;bt^EP7fja(ywpgb6UQaojHzfcSKz+55HFQ^#szz5S#0nf&Xic^`S0ig z-M{^>r=Dzy0Jmt4cka|-`=9F~eQ!nZ&BrA|VY+13fV&piO~+xZ$#lI=x(3j7W(5%E zp<5+@P8^qcQ>WrfSb_WEL%j5vXMBi;#Rhw5n8Jm}WFvEDPPHU5j%g7;{b-`s&5Kcf zu92Mi-U8NHQ^Vab*>$5aS`l`Yx2_voXRvNEwUHl5$2J#i;WqRF9qEi3OxJYM^#I+* z@fPB^gqtxHP38)CB!u}WEz~k0QOAd$n^y+SjGyZJ5wp;&P7mZ$4 zKUZB-lO2c`Om;1-YlYWUOvk8H2J5^`7}HGG0=fyN3yZqg4d}#inKyMRzJwJBN(%Q& z4EN6~xQZK$1e0YKM7a{<#XniX#$j!U>1Q_*CuKx|TkA7_aX zzG@5iN#rcdClMCv&9_@uPNRoYG{oV>BjtS4hBZ+Ex506>1-Qj1j1P2fTbJx=pIysg z*TTA1$EhN)ZopMH!E~(-QY|N)<2birDbTGHZy}D$ys1<1C9Hs3a+E(~kqV3OPmb{C zu&&$)_f6s(!*p-hk-b}A?A%E-$LrRqGxE*XoiCq^4Z6cK_t+r!*g!WJOLMKi9MHK9 zgJc(gb*&snepFo*e&NSn7$;pTo^FKc9LKp06F|2(fNtD9CyqssErR2i?Kg9E}nq*9Utt$Hx<@B;)3qP1-Wyk z!n)F17f5#fSl8#O8)CW;C!G&;Z1b6JJnCXkpcBU>+>EJcGFPBiT1*gQ(Se+$MhB=Z zDgX|c78|T# zEY@R!Qey(u#`)|~49$_#^3A-N4I7BhR6)Aozk9ZzZ!;kbnJ}IjrbTuQZ(SGbYM))# zVb{XC6`5|XlP(bG#%QiNq(~d+0)j2XaS1nLDw@m{*qR;}qO{oHbk1Ue(p8og69{9N zuA;f8%jKbi28edXAAIn^_ePDt0u+FFVmQ-fni%TEHw~{O|X)M`Urfbri zVS04no~?g&>hPRsj<Bg63X{z&d9tvd1Gt9_SVqa62}@Rc-#Ru_}x4 zcjeiw7=Om1{Wx=p_EVUzOEhE7tVQ`a^DWZ*CT9^|H#iITy1|&|byyf{9!_B%PNA&b zaSFL}jWKt|g54b%b7L%sv8%Aa+pJv)ynQ8rXa262IrF=9i8Ei9i+uBOxyYFF1=hTs zFR1P2d2f|@-8`>hH_m(M7;#*}&6tWNa|NbnB!n?$h~|8zGZB~|*wO`GHh;XCXpVR7 z^1``e`;sDj)W$MB%sYu^V0wJ8`{m6G_b(c;=d0K3XY+^d(Pz8o54D@^`f`ZXjW{mz zrcT9|vI1EN;jqkvFr~$ZWim_;Ra#s~24~=SOi;Mr?KfT@g6wZ`9DlHG-A_N97!%;0 z65*R1;R93C9NXdEoFxR`@xOX#&sRgYPVYr#xdOy-DK}#(o6Hr+N{nDpu1j+@&{ZhM zaG|ru_CMS18F3KDS#4T9{pYW%QzHEsQ=yy%y7F(hcd~-!vHs52cCOqy{bkD$Mpu9W z#BrIobSl1-7061C%1Vk<8kn9Kk(n5-G{#S7Oc{HL3&D(9KdfBbtZ7rx93M2WpX1r1 zN{%aNo*e0`VG1W5C=Ycxb@aRO+h+783R^`1;<%KXF_lf`3NRe!j0L)a=4znxP#ziN z@&0?Gu=0aAj@PO4z|5(WqXXSiqx@1M)ds9O<-mGMq%UWY9+%JmF_-vj zMFoiCQf|gnHkm7slM=18x#@& z0mr9K{vg2J2^`mhau(>!cu~Kka4+WrYq!tpOYpU#0>p7CH)ATB%oWH@ja8Zg=tgMn z=XQPMh~eTmj!+C7`OSa)f(aB^jvGOFr03-`8)jG$VRR`dKpdBOOQ+&XS%KWNIHj>b zH$?NKNXPRh+O}?m6*Wb4a)RUCUVOpn{PFadK*kg1{d*SZQ2 z$EDniscbS=ATKQ*W|HO^3E^A*+5m`)>*T~)A50vJ*`1UeSD+j;R{-5VEm~GN_A z-`m$Rm^l;`95;+|mxDj;nLmWEYjp*P<5F(MR5qC_ke`{PG!@YG_~xmx`*&@5tZ`#; z9LI_iQ$G4%RG>RJ&YA(Q+&?kI?es67(O7(|LmU?*j?28IQ}Ly&KtX0QYigS7_~zLu zG2g9RA`ap>t7+3F>sGId3-QW`Q*vDGnDb)gX;FTm&L zkd@4sQJTku`hEPtM9~~?{q$33j~z&f3Scqecg`zw)gATiMh5=fH*Gm zmQKZ&vI2!!DKI@WSA|&+I=|&~X~gi?#c>=NhcEYdDa89$W_)O7TnNk%%2UF)`rr65Sd4<< zxKWhH`#T@|Zo;-1G~u{S*3BS}%ew%{ji+^#BrIobSl1-6)4WlD9TM|OaXMhW6nle^3oGOo&1qF zh~uo6y1s~sS=goHjCkcK;okmN_TSj^J!sCel}@`fZRbiSm0jDp!aUot{F;5uamRAC zZC~bS(zY#gRM^#ROLgta)}=gKa%Jn1%Ud+;(&oi{ySRDr#m$Qt`-d^&xRjeQl}+Xf z6z63EE{~hdn*Fw;}Y)ULL8TQOQ+&X zS%KpGEC%HYnrl1eilDjcjjID*=_iikNLHEr!9;cjb7`QQ{TVP#a}eJ+%|UhpG*<)N zFwNtGl{AkF5=wL8xRjeQl}+Xfl;meKC^t-Vhhv9d>h_{IjyG)BVClm7++q~wq1^D; zeP(_{l}nBdJA36?9=&O%8wa|I=D@m{?)e?FXiglLc}u6_OId-Ef^48%gXWrHmMxq9 zeD>M);yB*A)zg3cx|UfePPML(BvCHZNf!omEt;Eh&-KteHc(Hbg*YzdW=v(1xdNpH zISk7AG}jEXe7|aWizl8C$MJ42c0ROcn{wGt9h57><;G*>wZtpuJLx7obmKHP9B(l* zbnd1_bK6<|27K)IUcT$m*m1XU7?-31KGh2ARxjK5T$ZRnbY%!45 z!qA*JF7uX7#h0=IrA2v+>7zLu^R%ScR|oVL&GAnse~=m*nwt{CE#J(<%Gq#vVuXB9 zZgclsGqXi6&57euZpKtLnJZ9Mln>LQITtYx@bP@HOBc}`|N6_>%*vlwjKVCG!#CGE zotBMa5(=p$&>901e zTZ`lPGi}=(+_RloC5}+8fE&L(=Jem{7CESduXfjvezVgx{2IV?5 zXC3pOR{!wSQ%{QHc=wmOo;h(C%TVZ|Tp2D;jyB!xDfL*nc|g~6&(*#;FSErE&57eO zZ|YQh2`ixBxB-+SXufd4*Ug(Z7sv5IuMTj$cqSj~3K7Z$_~TkYH|Cy;qB(I~!p)e9 zCUXU{DoTrCj90FY=F_K5ZPKKPIF7&b_K4dzuQKZj5z5WyIEQtEKsS@-#BrH7bt=Au z709h9V>qs+xn_)I(!>dk8#NNg@&8SD-}lZftl+GLa%H$&k-=hx0830DGrcWq(E(PQ zW+z036l5_Rw;IZ^ zUbEgILYzyE4TV?E%x%k=kx6ciEINUYYM58fejjl(CyqHO+Yu z^PW9=Jow;);{5UDOBSXl#juOR5z4LplVC2*iQ_VF>QsCQE3lB^IBR^zT!r#ZojN}7 zzysnqzUGH-b2E|(u|8Z@ioLyZ-9WkVr6+2kS8lFvP8^qTGp3@+T!HD86=jU^P|kPE z+q7vT4&pd#!!K*GcC&KfWrO=!U}Ayswme$xhl-Uc7C>O(LyxG z|N4CcI8G?HdPK$01&!03I4X-HOe&|bD;dO#~O>~`1Z|zGYdD@G?erD zJoT*YX(Yg6ONZJJnnmn4M04V}%$qtDU&0DZuc~A?u0eBNjOCF>L?#`A{(E+AE6&X@ zj`9%alQ;MN;IwlEYu9$JxVB@t%9dT*zRXc+OC7gq*wt-Il(u#8RlT-l(N#^mvSpzl z+q~dP?YGOD7ibxAT*A$miY9XfwlW-NjqjMNP+qTIJ<E}GOe-FFJrxBDp?_a%R_AB-QnauA(9G7x4rn1RgfxCCB zjG)|-yu*FFca|3B8b|r}#!(*We&N{n6J<_V`xKuzF7uX7 z#h0=IEXNI@yjRbjqSujFwPIOLW?ETsz7dqi2e>%=^oe~yCiA-x$EDniscbS=fa5s3 zp^mXA^2!Gf9xQrYw{O0lpPCfUaNID;Q=|OOuAeS*!rG_!#BrIobSl1-6}WegiL3C9 zkMeikd8a{x2I5jyW_&&^CNiwNxWEX?b5r9k{x#1&Ad~rBh~rXj##A<$E5LA^H6G15 zlz;HS2aOwxoPzwr4<-c%_?4Fw8bf(r7EO6*pC1_FxXfER6<^8ledaNH=$T@U|iACSrXF2r#uH)ATB%oWh!xDLvfELrlz6Hkca_|PGP zU2a}4FD){Ta<8*nx6kS;bI97E_{4FUw{$ALloinCxF*Wit^4Kar=J$b@t!?(3OjvYJNwrwkp;=m%IwtvwGp|)_u{u*G! zaho?Kx&bLrZ3?J3t{3IuVPW06bra3;C5sn<<0es#xwJ|Oa(L5}XBFjT7BLGnXB6e6 z7v`iDW~UWorxs+T6l5mnXC^V0k(8H_n3tZAmlmI!7Kc1^SWaqePD)Hpa&&fb6k|zI zSxJ#ui4lw?gyRQ;vG}lz_)x~;LKuq;PLB;@EQYbPm_Wv&1C$o!pQbR3S5jJ}U#iMd zB7HS1!Y9R$g?pz|w-Lvyt%=c%NdcQHz~i_s%JcGaF{D#8$3OpkT0vfpAe6H+BNpUv z^ObW8dloZ5PgemwwGcGVN(RuCOwUNn2hG#tl|W~h9-9lAr$jTxGCe6W8^!=V96(nx zJw7xO78e4`hzn*cmN6C91Jh#^79EhTu(W7@rK#W!#H;zvf`oH%atrbIU&1*%N}eH`bbeC^t`EnBt}$MNpnyE{0XsH`Xxgz_TZ%!mk= z>qU8vr~r#PV$MWYgrHm*U18$p5{a%5$E&T0(Tzy~n=4>|;~dI&@813V^UsUpc-uB@ zwr<(XaGXWCqR&%Lw`XyIat;=|qg>VbsTnJmVxXKjZu6!@Hy{P7Qvt&$2hA^Dyx5~h z4{;oS^wCGZ`}W(aigGQKGnt55dF2+PT$RV7+3krwPp;cj(<^8CJQdxZS}2!lpC@s= zI-3~Xn-s8z0)|oU>*F(M&>(RfzyJRGr%jy-j@u9Aiu4tY3>F2)l^HBDMmcfZ9_@(k zK?+o}0tQf?m6~eK7 zq9V0i<&tyBhyqb=P9|cl>+>XzS9ANK+mixzQa~Td?^ab!pFUkQ$9wkddB^>BRVCw+ z8}Z5op*%kuV}&#_Sd^oLQVpU!O_f*9MOUnsRIWz3DtDzOXOt7i?bL|qHl#rHE1(bM zzx@33Lk~S94&~23_uRn)`x%b&QLdGVsEC#GQLeFs5Z@~|g7T~sZitYESI!Rj?23TUGI@}*0C`}P&baV*pP$>hmQ zP=$5Lt%!1P+%lA_reV=YD%V1}&C^%xHCUfGUL#r-eF;*)1`6C~@R~f7`}z7}!DVqA zN6JdSzI{`Y67N=4Xh&Cc#|Ie?uqa$|4X<3mar3-#1j@Nsxh>OIYT7tY;<&*_ojxE1 zq^y7nL~-M~Q&~x|c_=ruu&2JcwAdm0x^rn6Oe#-_F`bDhE`6n@ z_IVP=rQB4hZ1PsXus_b~qCh!PR?yWcn&Xc@{`jW9|1QYO1;+)U+|&|6N|#)B0v3Iv z_PIV!-K28s&WTvV(^rV&@^0x=dMPVlisLA|0_7)9oM_Udi8z#FROif@Gjg)CSdLdC z%9-hHHIvHCM!D_!JZ&5(Cyq%f&@>SLcHdJ~*I%|G3zgyH%AU zQO+A5R92L4>G&YynTXYxzG6$16UPNT>U0n(Pzx0h#_|9D3k?aGG-;AJe;j8uZQAte zmCKbCyj9IsQS&TqeM%+AVWIBpHETzk|$JI>SMq;fvW^-QECZ1JF)87L=? z3w+e+FjAn_DG(s=8&_3T9XN2{fd?Ky9-#=Dd%X&MxVxZ~Y);bVX}bPcEa}tl3v;Ri7tuT==6-N0I`yOMza(ziwPy+?X+A>ej6* zj^hm)G&p$hKzVtYO;B!bQaQ(Q-Sia$L-zHr&TJ;it1(bc92fqm(~+b=?NVU6@UNSh znYn7!DsdcV(LZ<2oaE#rhT}S3x$dZaOsInC15?7iQ^LKHSqt+@4)aV7^I$C0BPsL_ zVRAnJ94jSfsGQ^PGJP~3&BaRDy)agi4pmr&+RruE}EiFBI^eEhF z5&k%P%COg8cXxMJa-2iCVsMZ;sa!Du3)T<9!k7mZzqNf<-|aK|Y@gLnpY>%vB@?Cq zaa{PLPDhdgwMzjr;wty<-3t#7@7ArGxUNp1yj81K4h{}#jvGR`Vy1FT6?=I3=xsB4 zZ=K$Y%yI>Yp9Qt%8mu1!|W9X2excu#%FJjT<*MZ{A#VXl3}YVOa3<-d(&D zQF6{D*FkxHM&ixAKOme!6t;>2#PQnIGU?lr0>TwABd&srR#a5DxVUua&_OiEk-4~c z?_O}+B+5$*a{?R>5y!0paq`E7HwikD6p*+A2$ARHR zSzd}Xl|A!^S_@<{zYh815^tPTJW{|c1=g%t)1pNS(JnbwUUs{Eo8`E1ue>lP&EcoX z+h$T%rxkj7iQ{HHmw2>!K8r16{xJN{Px>#u{wlkly~gd(b3VdtgMvdxE`+@-UuKZwTr#3!s3(TMA6Wdhm(jpZ3x9`* z;}UO^R6J6^Tm>+U=ht6<1&&3d9E1BYqzF;+d-s@Ja?bPy$}xAJ) zA*bU>0qHB?JZa7>u?i5!&3(e@cv3+63Y3+V?b@}g zQKLqpQH~R5&6=5z5U=F8QLh|1h?qe9-xco>%Ec)_9G8BZq!N+>A{6lV_kZ=(S4B@_ z3yyc{)Cr@C)Eqa8@`}>pQ0J5T7rrSDWHLXCI4y3vDSECIa2%_B z&Y%BfR#v87l&kwZxlF{0a=%M^4lR90=1>+~ANRf%?dtuk1rK2bl(JY!1$3;BhbP6dT3k9;Xv!_g%B6?*Bxa18R zHe9@TaY;$BStt*_eiSG-3uH1sm^dzr21$h^1w<%-l_hrU*wM6UQxI9)3%-26e*JFV zxS_#uqk;0fRh5`R3yUT@{Pc;;=`6hX#BmXiH=RNX$U*@O2uesuc;k&XEQyjo_Sj=f zmo6TDIi*bs;a70t5#VulPz3w zOlEuf)G0()v{A0&xS{kFa2!@uSzef(66AE`@;~2TxX``@!*|Vnb^ENoCK-ogc7Hh- zY3av*oOFHHsxa3xMLFrkxf$VZXN8<@^7=L80OGjl$D2+h1>~Xt5)jc{X^BgYS+}N5 zo0bqC{~wkC<%d?VEg0pXIVNMthz|{MK6!Kh>Qg^YIk0F1ylfD8`^-KXrocCnUe2ta z?)vYqk?t3=lOjqAvP<%_i}SOJ^DP`kXi}m!?SNBn3n(kd>8%z=$Or zhfCh7RjUL0_m`HGh(kF8aacupCA|8gJm5G#GbtlBI3eIx`0X=+PKW(2?e)31%kT2O zpzB8>-Onck-pY&%$xDkb$Vw^7%_z;!=5stZIokciACg%elsGQ>*`^ao0l6pu7aAk% zUwGjK3sF9C;>4KfXmH#-l&b>e9LgD*SClbUURqgNTviCIXBOqA7iFgvB5abEiD}KT z*icz4&$fi) zIJa4|X1{IRSXfYC9OXv(Jhf2{j>F1IU=?M>n4|?(URqRMQmEuOALT5^Rne9Fj6_7t zch2r_Awz4z>BMnMo^3jp6p)Jo$R)=J`{$l}&O(&;@82Ieh{ic?vd>c)VBuVHO_Vbn zH;!^elpMj9#9%jROtMHEmrFaOa*_fTDv*|zHh=znOV$a(Zvf`PUAS;zL4Lkylxw@> zY;;9|a>gZBc;!ltb6$B7FTlc!t{?()efPIJzIdf3_|%qs2jaMe&o-S-3dlu)^78Tv z7cL-!uuh#imU!iu&-Tc_|K6>tG8^T_1La(Fg^%*$0^@=5_yCuaYd*4sp*7)L;<#KI zA(fL9uv~%k^mHVySTb`KegNv#t2bf7gz&I1Yoc6ipu8|A?be}Rw$1EQ6L2j0I}pb$ zf41ogq<~x$sI07XbacdQw8$g0#3e@#;)eC>IgZ0IHpvIG z(3)@}aa=AfkjhC4SVe)t!a~e@W#N)g9zTjG-ATtrub0s}#6TLsEB(-5@- z<-9b+ti*_$`+g9|(3)@-aa=~tkBUkPSVaK@K{jmI(6VJqOE`|mOp_)}e*EEw%!~|{ z<3^$@dc1N&eV!r$<%%@Kq|iIZzMD`Jpe*7$5XY_ZVADlN0eLA95D+kOP%d!1eqykD zty>zDIBwHNoi0uaRHFj64I6gb)zx5hg@5GF1mslaUs1n$%SN;YmL`89bM5}YXa#j zSdqC_%!WuDx6h+acOeDruYjF6j)J+my1w?>YnHp@K>2_H1J0f~V@XE2iRg;vY>4`E zS5(mzq_23N-@zo6Pw!QejW}-q)4xj@#{Vq8pI{qyVSDMsCXv8>y+O z^XAQK*s!7HD91%U|NL`qB~NXR^Kw^&L|2rHdFl<6W1$J&S`&J6SFqMZaZWlW(mML> z_!^6H^2hD)gwriZfof4;tDW!a?d|>c+izRA$^`o}fWblN^UO$3=e%+amz;-kk+~~E zqAMzwyf`-li#TJ{{)yEeZJ*V*2GX23Zs$jxZbu5(O@Ur^yAyk(va+(hd-p#7{PUK( z9~a>)@W2g>s@5@LL=Ic{IN zqh>hf#PMo==;`*PfbOr{$X^5sr2JzMm!n`YN zbOjuTA;yvx9pG_l)5$d-Rl8$O9G6}rq7sn;)vrKeV&eSy^B;ZmQLCUFUiq7EzIpM& z1vbE9I#6y_bjAD*PnP3_*{OwDDN&wR9JehwynOVwnZ2tE=*02rf8yyIkOGoaz|YTb z)TmJy*JBlw<2tySsA!0?Mym zxq=B;G&s&18Kh1_)Qql}n0Ljp=n8}K%;cPu=#+3TOq6(L{pUNr=w~;elRs{i$CWNZ z3XlT&6+obT`SRt>nl-Z)%HfqGz{0N1YzXBRMOO?A*4IrZ=Q=zQU12#6l;>wAC@5&!v}xAr^ThALLk~TKZck*epxaXe z<>I0%+%le`(#iQza+c%y8HxGn33=)9sS&=xH;=m<{OR<%srwhcX*-}3$F23O(sf7y zQox`B9v&Wuhk(D<^2#yJ2+4@Yj~&a;&ohB?Govfo3r%pj4=aOUETL$H+vAHQRh@N8+XTQsPukBcVV)cjc(2?H) zrf;8xNczi`kexVg#RruxMGBAt#uPYl;zZZ3U9B=?pQSnS%DZ>(jyYH~P;Oy##Tp%+ zh>{yZIilytY)Ov^jJk6XPC8=fr+)tQz~Z+tXUn!3FSDk=I>^qNktHmY#}LPjJ$CdN zDL@KXQ2{JBv2*9nXPYNT&+sArtt%@F64-siU8I=l|y7o?&e|8dfxW$*4=@W$>h zhhT<9%$Ezqvp)N_8NIiE(QoIRfpF&!EE@6eiZR4-D?X)kDN=wGFrh$hZtl8u>sqyH zWg)(`PH)+=<-&yvA|k?dQEoE2qE08bS%;^7lqW@ICq}?9@m5wscxFOaTC{(1m?v^w zFnLRq$E66j^Wm;%LR}m}Zk`CfaV+@y(ctSxU_r1OM}u!31NuWt)R}aJ zb;*?@gR)ZC97N-x6{T0MKsn2C7Uh}op^U|aWW)tC78{%%8^l;lAY;)1tbzE9MJbIq zZrw+eu0{%w0;Uy+j*iB1KUPP1{rdICjva&97ISj48OL0Oa&4C!F&0Iir#8w}(G}ee zPyNd=8z13mw8K-)aUROylIwC@iE@_XDwHcZu0lC+-1IX?N00)ffYlWU3k$=F6F|8Y zyFKC2<7xv34*chzf0C1vjGapas2&!i$|ctht)xV&QLYND zh<3?|<5qt@>4KyHDPURwcEyP~bLKQ}-rTw<2hA~M?xIBtfDt~X3`ZVP_7u>Dbgj6H60}9W|uJ&4#~}&y(diALYdbW_Nh% zb;&WpQ!%^~BRtj76(dn{Q!Y7i+(r*4U6vFe1c&bAyiur7f=OAKCP&Pv37DUO3<7PZ+bSNo63fN8o z#LCg_`P5TS>1DCyJA3r#@xu>4z%ef=DQ0Lcti#g^If!~)a@CA0@W+k0ps zLu#^1&Ws6ShXo06$%*5(dnW11qyQ;kwgTvj#Awe|t5!Yz^wU-(IR8?hdF$4#$B!R> z`0$~e>@0@nR&mJ-vWxSx3@ya0H7~h#4x(ZbL^edupK(Q?OHLd&`#GZ%NC8s7)(T)X zI83MY{PWNA`D@*6IOd%@cV4hyfs@m<^0HE!kJL96C1-j&*$z)t;)-yWoH%al2a>K& z3XlR~6v)ob-nnxpVj$MVx7O8=xBlwDfg3k$2o4G?DJs;TgUHQ;XlSH9H%#A3E;%!E zmTD426E3-8<}Bj4m?wrRdcvuG{gX`xFlWL|Rp zQF5J0$+af4C63$SIiy>V0;GUN3RF~71O){xU%tG3`}Wplx9-*8^&`!^XV0EX7B6yg zyjob0$IPFl7^cs0+3f^w-KCQ5EN0g*Uv(c?uYlLDlG-4sYjNZ7h{Yu~VA^ zJs}LGtnkg}&713R@_1B47(8+HB#2g;aU~biX2EzP_032? zRP=Td$L;X!(Je@UYEeLf9A|a(_xJzu%P+B5M4dWybjfR@J)JsrnlWSgp#%HFLxVEX zQnW)W#^)u^NoQ8?%uX#d%Ow{)OrJPjEe(urN($IP0m*V4+9f9^|MABkFTeaUhV$46 z+?PmK9TTLJfXMcC636Y(oah#$K(#0!eU7uTB98?i8#QVa*s7Pg zHrTe zWB1OjZntiP2KuDLMHXbIGFdBzqU34uTmqtc-A>)X-H{X1N>C5Zaug`(Cx;7qs@WCG4U;1S7N9%rGbI##-SfFoGOn7=?bWUo# zSuVMDZ>Q$iPU5&7niJiE6sQ&jKX}6VwTaS_6Uvxa7p~YH46}Q&PYV3doe>tg^+$#Q^~U zYu2pk(xnTB)N0>=d)}~N!^aC)49M^@7A@;;DP-|k9vE`N0YvqH|v+x-){cn*Zn*GIeB=` zrBg?4UOs*2#wCCE>*2n)<3qhuqXWnvw@ZVfn~(z4pa5}PL-YWDf2`j&WXO=mAAejN zWUKM4#*G@aZQbgnu3cX3-|y`=hfN&!-e;31&7C=Q$=7qgTeg5Wu2IwUh7^#H0>p8h z%Di{a)5BxQk|jNQ^gtJ=J*U~S>2CmWT&JdK2Pq&C1&HH16?yL-(picM3mvasojZ4K z$BrG*@n}=R+UMfLah;l`9i)In6d;c4t4IaP%Subr)6&kLJ2!v+eEZMMVs*F^$Mw}T z?IQ)Gpa5}PUo9#)4zCUg!=1&QPOYMS0R<%+?B2S4@HQy7G4Eza8dI>d1UHBGxofm*Ksaolhf8bCQ{UR71;>FKd<-MTl1 z4{y<;1%_YRn!=V}pEz!~rs)$>pmr-j95-BlhB*$DGj{iGd|cf2?b|UH6w`}iX7dLg zc%a65=)`fuHBFz80<~KK;<(ZJGllZ1%1UG?W@lwxxpH~MiWP%ief8moAGX|gw#5~Q z<3?+mJ|qQdu>!<#qm^fh<8aAYtEebXO-=Ff@!7d!$K=VAd-mv2)3VNq<3?+mJ|qQd zu>!<#Qsc~Dhc)}I|6M@$x zj+?4!`kWM~tqKswP1T&a9EW4B;`rUlimJ+TSaek6i4(_u{Nej|MvlbLP|QP%IScLF zBT5`MRnzo2DNtJ#AdU;DIUSU%opHU<6&}ZxD6c55swl6lD9g%7yWwx-ayy?XW7L>GZ>wdli$;{s}$4j~00X0pBkOH+*0phr@YSTfvhD)v$BG(sMVL1+$ zyt2HsvaAGFQC3`#o1K&x7Zx1o>U?AO&TWeqelv0W`+fTKZrZe|KspOQj5sc=rs*hB zp!O+192Zt+Ivf||l2=y1AJ+=4FdSE)92~DGWvslksJx`Gytp7KKHA^M)5-DDkwg2} z{P5kUQzpOt)(9-o*`{^thaRdY9NBu0B#sNKX*!A&sC^0$$A#6Ixf~bZk~17vpq%4) zS#f?@QGRJrUTI-&X+cgxO!ytwn`a!3ZQt_ukKeAG`sw5mZww#Mzu!w;U&L~q=qxoW zqmei+tfuKGQlR!JKpYobXF4diN@#`ek24(SP+pKzQjiTR&d(~&%Ph{#D9TNbiwL>x ze9ht5;Vpmv{@seDv!+iQ``)O5{a@+Q`GtkW z(hGCa3bRuSvr-DOk_$4EbJG)&qC>siZd^I%aA@!Lzc&8z!^)*!&7Jkx9X(?B zYXe^CixoRNJohYdTyRa(fuuk!Q-C;bPKD{9+?Y$w8xW+GwZipwnhdR|Ij(Za8IyPs}o|mRTd1`EKN{kxi#BpPZ5 z#}&Pu=<3uBk+Uv2;wr>(GwYHLCj}&;0CC*RiZqMkwhOHo2$6FrSI1RUA##e3n_1Iz zI4MwT6d;b9Syeh57am$+=gh*uPUYB6-oQ?NXoc~|+3Z8Dlog%Oidi9Y;<%YLO^1^L zwMGHrxcOD3gL2cM6#)Y~m8pk{ft~t8D>@wKvJZuX$cf|T*EF3$3e*k-h~wthlUW=$ z5?bL8&^J1;lb^LBIz&z!H@~Lo3{s$WC_o%Hzn*kBt`S-hJ7<=5XvJjqp@9&&GK-v_ zdZ-AI6UWW3X*z=xs2vIr$IY)N;~d9~vkOH+s0phr*deT98 zb%w|@nF0DHL*&G9Q8i5`kpi_q0phr*N-~S%)(w#xm}rH`B3F#g=TZ-~Ms*U$Mb$K& zL<-ab1&HIKDoKaq_70KjOqit}pl@JwK5<-BP18xFKrK*!I4-u5bWkoZv|>hx++;{_*cuYcaXrfe>6>UpJsJqhO0aX0vlH0rWRVLT z4MZFlThnwNDNxfDFoWY|Wo28pZtdNhSv^wkt68&VLx&DMcI;S9FSJ#@pIIE&4UzLl zbsAXa&5Y4N0=hbh<5sD5x(F#y0~HX;aW^-&zJ2@ZUHDOV=bLZ785R~+150boucX6q z3q#~)%tbD$tCKix&Dy7HkpeYI0YMz!v15l>OF@F{PdxF&#fukfQb}#_U35@xZit*& zPy%LTq7@?{asyqRh9*8Fj@#e~pi7bhH9`T?9N)HWo36(#WDn3U1mzVK6^4{B@)1rc zC@9Fz&PKFH>-4IsDxAo^v_9hAmY0{~+>(+KZV$VGbG7yq78d5_=4$Q4VL3TDdDyRs za&Ww=s!~aF!=r(6vNN-@GPnt|%1eu}pai?7L`h-3={4RIA@cmJl%$yO zN)X4jDv{oj0+La{1jldQyjj0~eIeA=drYH7je>)N4T%*O7uUak|IVE|FIccZ>llFY zv(G-mMlfpP3g2+@kdw>eT}W_Tdy)mz&`DKb!vQ-1&ta+qaf;vtecg&VXx<8q_Assdb{76`spXnKHI)ty$2tzU%ykw4wELnfBN{pNLfjU4DQ$GLA^#WS>PV{`<1>^L+{`%`L_B!Ywko;`cA zAO^v)=jE4Qo;Y#hfB^%rU9Vof^XJdwT>Kv3?cu|R+1ufV1aBXC29D4FavrvqEnUKQ$wLGEu@mS|Pl?BbSr^Zp!Z!A_Y29kn$hXFf z9@V{DSLQp^tCyA-6&>n#|NZx4o8ve)8i+W~Jw>!Z3P?-=V;tYOaU*y!VZwxO#lD6O z8-^?V`|rPcRRap~X_F>R@E49h|Cl33j$kL~iNAB^%;7#-xpF1;bno6BpyzfXJaXZ} z1-*_xoOk%waG!D3m@#8;%7zUa;F5FaZr{Eg9|7pt^WJ;!VVljj!4C$09>BzN=g#3H z+ya4=cJ12XfMv^;m6nz&uW;{PLVW!3W5>#{=ia>`Lx$i0lvgju@ymfvXU>?xrXCg* z<}Y2c7<=$Ked;7QzG&e$*#36aN>_^4&emWY$E-vMlW`st^!|N8ao{Db-12#W^> z2BxK@@poRnd>KTB-yItp%ioV}#CCAO_U+qa8=%KF%W*jG@Ur3g=I7_Lr<^@|7N2(O z)=lFIn(=WBj_ZV0UVH5|T;a5XgEED@l37q<@ZdqrP9?_|VA~MKkwt#w(0&}y^~Em5 zd6{}Au#E^Nj%(Bpy&(nUpnyS+A3uH^$k?!9eOg?2(53DE7q*#eI4eIpgC(+;mzS2B zSFT*a^#MMx6&nbTa0e6>6~PmS6AH+_`|i8=6fq5a8W0eGZG6NXsk`yhPd@?K_~k%P zCiiJpRu+CvaIT}HBexS9iHV7bjbQ)a!GrOZ?~k(_$IlGM@ilAK;K-#*m-4RwADnM2 z$MKH|y0y#c^-W*(E!PoP_@nU2j>ZGiM2l_9N~A z&zJ3}#9QR5<0AyPvAuTfT5Kcgjcpef=2G}4!sgAJkwwFQ?cBK&!D}4z-FM&Nm@Zwq z@Hr0m9Q}&efBW`r9D|p;yZf|h(;j{FQS8JI1MY~O>~99&AAkJu$GLAcckWyqJa+6@ zgksdU-ntcU_UzuBlAO%NRnXU}m*X+fQ5`xk5uPrcJI|OteaYfQh^su?zCHGsM9bKB(2C1>%(5q9YPPi-r*}#2#d_4blM~@!GS#YiaWkh(s{`zb7B8bw!zlPV( z9&DWB^X4&~kcM6enuFtP$0<68k%xm6mvLjqu3NV*F(KhD#&ar$bfzRHtysSN#V%d& z6N1i3yzs9FT+X+I%Zpl4Qj9n_eiita!e~$Mi}Q959y|yPAsWse18U=~gM$O!BCLTh{eura zh%CUEm>BHGuZy3bA9^*p*U6J7u^&FTZWJEjasw2+C9uUY*gzn?QS$RD_W>ZvE;k1txl{3GV`sh|4X zarJh0@q)Rzc)B@H96uKOH~g{|DJvYuxvow&^^iEu)-wGi1*E5dL5`zW5E*`%De*UU zEWWyBkvMbSy*wo$wqwVRY>*}`O-%)f;I5{pr?a0T zlz~qXbOxr;=LzQ&809X74YmgodE(dxtQIK^y+2~J0@2%BVrlyJNS#Q9fX zxA`2$*FZlferdRb$ZOZG;Y9XJ^3Q$y?YFW2=#eAfcx6Qe1_G6qmJ}Bk6&4nRhlPDH zYZg954!)0%59^Y%9Ot?^aX}n#;rv;S}=&plUKn0x-T1GWba zctsf>&rN4T^I&@vk=MvdiFgP=->_jr1hrWxBPhYCjNmvRh2b{X!)~KH5nY$; z0l+<+eH_5%eJ@$E1lw@-;RWM`5C^gw5m(`^hA~GtVD;+N+#YXlZ#J~TavUAJ_z1nP zEXVQh066vdhWN|Ig8uyTPwrg&QvmmZzt4{CMD`(~D9YeC@>LWmE2G|d2X{n&Z)9Y| zlqsM1_;>^2EXVJ--$s5qewm^o!#R%Q;E^NWPKb-fXrO|e%+c?T!k)2X-UG+;GE=*D zeGzZh|MC;l&#B<}p?$mHu(xc{A~h}oA#&n4S39&p3dlqOgB-^o8VpfEd^|rrJ})g! zxq7de8~CSvYDy9~#kt;)6^Yo0IRJnBJZ=n<1fJ0S$a0oH!V^&xeAJ;s2NtFXwc{Z`BfcyyEE z7<@@=@7lEs1A-7b$2SBYF>VOIL-;+2jEqFu40}6x`sfE{kH=w0kRY!}TtVg{xQxD5 zHOlYaJ#^?0F5A8POKd@~J#fH)Pp3?I|NU_|7;h&}{+OL*g&hYpVZwN@xKX1=N4)uF zr;Z(Q0RC;{eBBWoM`*>>*{ON+$FZ|tpWc%{`e4{=ObiO&VegJDn7}rY%R6LhEuN`0 z)#!Zk$N7%|ZIc30Qota`flE+~>jM;B=3BRJ0W`oXcLg@%5I++9sZrR0Kj?L2heUE? z<#86`AqbD)%YcJ;3p8U~KE|>mSOJ$AK^x>6a@i>?#{pUHcDfsIz~OphWF~%K5X;8F zYzzlItBBiR;167Qq|gA4b?Ve%gF?6+8_dD@BODJ09Ooj(1_PZOuU=&#j=$(pKw+m% zo66_-rAwEv6F&xJWumS6Ffc~n$J67@ zH{WR3u)(7Z8@}>NzjLP@N-+z$g5wy{8Q|kN`Qr~;w0HvF0r`|e2M;>yaFm^8g*dKT z-L!`kkh}s0IgZ>u&PJH)%R&wmO3J3WrV5fSq=^}8Y zRXdpfBaQ*Iq5BbCnixzESDODR{A+v}OrpZyiFsGx+QUib?_@dt>8GFack10n;9GZ^ zEzW;u^T)ZKSgkAIrv>L?qAq5?!V_ozhK7WkIDR}OC7I9hl`B@@%lGKfy%OORbaEnf zytE`MBRxAaqpY-;n=K1_D@uzC^KzI8Y)gv~AJ0rnNl!`CKMQ$&R(4tv=E+J+h%Usc zK-sCpajiO{x1@l46fnqfjFExEh*cws3i2+ln=B$kes=AoveFW`(uh%TTn2V~^ymSu zA$-AC8GV?nGmDSVC&~W^+q-w~#(vB&rL|x8t#FR(o_p`!J+4<19LF7zb*`1uqI(vf z!r3?y zo<5RZkc-0o0vS79<&q=&5ZN_j$Bu!G9{n!&%k;+Z;ROZxYK|*X56$3saXvq;!p?fA zk+P!0@%;1zijNzsGWv`ZkdOk#IF48c98z@j<>X|uMb1fz+%tbD2W$R@>yh;c5ybmD z2VFZH=i`X&=%`5a*TEm>yR=B(M$j2SaNS&Q1g7yX0C=zbIj}gXK~>P7AD`hq;%^|K z1;G%^K+E4LWE+zKu#Pj632yF7#c|}1BQC_faKS!(`e0_R(vlJe;;PX=8mWhTf1J0# z8<%&eUZ_(QAJ@Zi)q=}Re7t^r^pP?g*BlB&{ha33DjiP>)D{JdaU5m9WUz2=(VNG) zrCD)7r+)f`Pw?Ge4)#2=1;GSAZy?ODhb zqdGM>u9z)Lxhjw@$GM5f+0crS1(&l@kgpOQ>W@junQ#zsTu(jGE>b|63Yg$H3O#%F zY~UF4SS4c$5ycCO-Xw>*2VULpdtpb!?K6d0%Ke-|04@?da27I2xSdkoP;s1#m8(PK zTB}J2=D48{Ir3Ft#ratpaTP^ZCpey$p6GP>oYSSVEXTRf3Wju&KQ84bkjf@+1x#}s zJ(Fy5H!=m;vGPU~LzEeFNU@78V1hs+M@s4=BOF)FUTZL}!ujK>g*t^UxXey@s2b9V zu1;{gATt@O0_A5UYH=JxI*H?wdgQ1uqySF=(;R0H#@amycEiQSIP!h__GwK-1=b^| z{rBI0vm+icSO)pvyt_z!Qvk;iV9_5Rw;sot)I;L9)SopfA1R=#fKZO(Ow133JP?eI z0nPD3_!|Qnk(_~aK#X2tcOo)7fBt+iA!gmLR*UvnmE-J!%ZB1A7}CjvR`M0071hvu zbqaZ=!X+nvycRt?^i@d#ixn_~Qrz&%|=vjG;gVhIHy(rIYFEROB6U`6|@UDYPo-I8vY%DnJ~!Mx_zQt)U`a zgA^bI#3?`=7pI%%S=GmJy{j#gKdxCl^o|sexB|p+D^;)&lxqzIQcQV>hze_%{g6N9 zA(B;{_m1;;h$90G1^QX!Z<&X2Ht|fomN;OKCAq8rU0>p7ERh6|kt~*s$ zaREE!p}?tYIgT?aE4-!MXk5OPYML%X3e-3Sh~rkO65_a(grv)m0;GVs3J}N5Rm{Ng zw&!>mLgYrKAXhCVLH@Xb8lv5#fMgXQj$5f}E#WvfRThFOhT|&4aVu37U4|5pngYae zE7fSVb6m9~5c%U)s!_TODNt(^AdXw9s_et@qCAcH4z;ErS1bvn!EttJx71h~mv5zN zrpu55HBkZLxRq+f2*-slC80O2Qc|d1qLVmorRt)~kOERtfH-cY+O!eJON+|QT%uEt zKb{sx{ + + + + + + + + + + + + + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs new file mode 100644 index 00000000..d1eb0ec4 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs @@ -0,0 +1,122 @@ +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) + { + ChangeConnectionString(session["CONNECTIONSTRING"], 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 ChangeConnectionString(string connectionString, 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("\\$\\{" + "installer.connectionstring" + "\\}+", RegexOptions.IgnoreCase); + content = re.Replace(content, connectionString); + + 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 10dc21e2..51032a44 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs @@ -100,75 +100,7 @@ namespace WebsitePanel.Setup.Actions throw; } } - } - - public class InstallSchedulerServiceAction : Action, IInstallAction, IUninstallAction - { - public const string LogStartInstallMessage = "Installing Scheduler Windows Service..."; - public const string LogStartUninstallMessage = "Uninstalling Scheduler Windows Service..."; - - void IInstallAction.Run(SetupVariables vars) - { - try - { - - Begin(LogStartInstallMessage); - - Log.WriteStart(LogStartInstallMessage); - Log.WriteInfo(String.Format("Scheduler Service Name: \"{0}\"", Global.Parameters.SchedulerServiceName)); - - if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) - { - Log.WriteEnd("Scheduler Service Already Installed."); - InstallLog.AppendLine(String.Format("- Scheduler Service \"{0}\" Already Installed.", Global.Parameters.SchedulerServiceName)); - return; - } - - ManagedInstallerClass.InstallHelper(new[] {"/i", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName)}); - Utils.StartService(Global.Parameters.SchedulerServiceName); - } - catch (Exception ex) - { - UninstallService(vars); - - if (Utils.IsThreadAbortException(ex)) - { - return; - } - - Log.WriteError("Installing scheduler service error.", ex); - throw; - } - } - - void IUninstallAction.Run(SetupVariables vars) - { - try - { - Log.WriteStart(LogStartUninstallMessage); - UninstallService(vars); - Log.WriteEnd("Scheduler Service Uninstalled."); - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - { - return; - } - - Log.WriteError("Uninstalling scheduler service error.", ex); - throw; - } - } - - private void UninstallService(SetupVariables vars) - { - if (ServiceController.GetServices().Any(s => s.ServiceName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) - { - ManagedInstallerClass.InstallHelper(new[] { "/u", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) }); - } - } - } + } public class CreateDatabaseAction : Action, IInstallAction, IUninstallAction { @@ -418,32 +350,7 @@ namespace WebsitePanel.Setup.Actions Log.WriteEnd(String.Format("Updated {0} file", vars.ConfigurationFile)); } } - - public class SaveSchedulerServiceConnectionStringAction : Action, IInstallAction - { - void IInstallAction.Run(SetupVariables vars) - { - Log.WriteStart(string.Format("Updating {0}.config file (connection string)", Global.Parameters.SchedulerServiceFileName)); - var file = Path.Combine(vars.InstallationFolder, "bin", string.Format("{0}.config", Global.Parameters.SchedulerServiceFileName)); - string content; - - using (var reader = new StreamReader(file)) - { - content = reader.ReadToEnd(); - } - - vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword); - content = Utils.ReplaceScriptVariable(content, "installer.connectionstring", vars.ConnectionString); - - using (var writer = new StreamWriter(file)) - { - writer.Write(content); - } - - Log.WriteEnd(string.Format("Updated {0}.config file (connection string)", Global.Parameters.SchedulerServiceFileName)); - } - } - + public class SaveEntServerConfigSettingsAction : Action, IInstallAction { void IInstallAction.Run(SetupVariables vars) @@ -486,9 +393,7 @@ namespace WebsitePanel.Setup.Actions new UpdateServeradminPasswAction(), new SaveAspNetDbConnectionStringAction(), new SaveComponentConfigSettingsAction(), - new SaveEntServerConfigSettingsAction(), - new SaveSchedulerServiceConnectionStringAction(), - new InstallSchedulerServiceAction() + 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 8eda1436..819105d6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs @@ -76,9 +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 SchedulerServiceFileName = "WebsitePanel.SchedulerService.exe"; - public const string SchedulerServiceName = "WebsitePanel Scheduler"; + public const string Release = "Release"; } public abstract class Messages diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs index 19cecdb9..cd65881d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs @@ -288,14 +288,7 @@ namespace WebsitePanel.Setup action.Description = "Removing Windows service..."; action.Log = string.Format("- Remove {0} Windows service", serviceName); list.Add(action); - } - - if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase))) - { - action = new InstallAction(ActionTypes.UnregisterWindowsService) {Path = Path.Combine(installFolder, "bin", Global.Parameters.SchedulerServiceFileName), Name = Global.Parameters.SchedulerServiceName, Description = "Removing Windows service..."}; - action.Log = string.Format("- Remove {0} Windows service", action.Name); - list.Add(action); - } + } //database bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase"); diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj index 475ed6fe..a1501bfa 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/WebsitePanel.SchedulerService.csproj @@ -36,7 +36,7 @@ true - ..\WebsitePanel.EnterpriseServer\bin\ + bin\ DEBUG;TRACE full AnyCPU @@ -44,7 +44,7 @@ MinimumRecommendedRules.ruleset - ..\WebsitePanel.EnterpriseServer\bin\ + bin\ TRACE true pdbonly diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 576353df..23b5e96e 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -19,30 +19,32 @@ $(TrunkFolder)\Tools\Diff.exe - "$(RootFolder)\tools\sqlcmd\sqlcmd.exe" -S (local)\SQLEXPRESS -E + "$(RootFolder)\tools\sqlcmd\sqlcmd.exe" -S FEDOSEVICHV -E "$(RootFolder)\tools\webdeploy\msdeploy.exe" "$(RootFolder)\tools\7-Zip\7z.exe" WebsitePanel_build - server=(local)\SQLEXPRESS;database=$(DataBaseName);Integrated Security=true; + server=FEDOSEVICHV;database=$(DataBaseName);Integrated Security=true; $(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 @@ + - - + + @@ -159,6 +163,24 @@ + + + + + + + + + + + + + + + + + + @@ -303,6 +325,14 @@ TaskParameter="TargetOutputs" ItemName="WebsitePanelInstallerMsi" /> + + + + + + @@ -315,14 +345,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,9 +392,8 @@ - - - + + From 59b097b10bb6993f4753de6f480d63fee46d868a Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 15 May 2013 20:43:41 +0300 Subject: [PATCH 04/24] fixed status running task & remove re-start scheduling from controller(add field lastfinish - update sql) --- WebsitePanel/Database/update_db.sql | 360 ++++++++++++++++++ .../Scheduling/ScheduleInfo.cs | 7 + .../Data/DataProvider.cs | 7 +- .../Scheduling/Scheduler.cs | 10 +- .../Scheduling/SchedulerController.cs | 8 +- .../Tasks/TaskManager.cs | 8 + 6 files changed, 389 insertions(+), 11 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index c5a40d7f..3f5e42bb 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -449,4 +449,364 @@ BEGIN INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) 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 + +-- Scheduler Service +ALTER TABLE Schedule +ADD LastFinish DATETIME NULL +GO + +UPDATE Schedule SET LastFinish = LastRun +GO + +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.LastFinish, + 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 + +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.LastFinish, + 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 + +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.LastFinish, + 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.LastFinish, + 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, + @LastFinish 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, + LastFinish = @LastFinish, + 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 \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs index 4a8d0a54..f618286d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs @@ -45,6 +45,7 @@ namespace WebsitePanel.EnterpriseServer private DateTime toTime; private DateTime startTime; private DateTime lastRun; + private DateTime lastFinish; private DateTime nextRun; private bool enabled; private string statusId; @@ -121,6 +122,12 @@ namespace WebsitePanel.EnterpriseServer set { this.lastRun = value; } } + public System.DateTime LastFinish + { + get { return this.lastFinish; } + set { this.lastFinish = value; } + } + public System.DateTime NextRun { get { return this.nextRun; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 0aaf98a5..08efc8c9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1945,11 +1945,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 lastFinish, DateTime nextRun, bool enabled, string priorityId, + int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "UpdateSchedule", @@ -1963,6 +1964,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@toTime", toTime), new SqlParameter("@startTime", startTime), new SqlParameter("@lastRun", (lastRun == DateTime.MinValue) ? DBNull.Value : (object)lastRun), + new SqlParameter("@lastFinish", (lastFinish == DateTime.MinValue) ? DBNull.Value : (object)lastFinish), new SqlParameter("@nextRun", nextRun), new SqlParameter("@enabled", enabled), new SqlParameter("@priorityId", priorityId), @@ -1971,6 +1973,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, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index 268391b7..9a92ecfe 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -58,13 +58,15 @@ namespace WebsitePanel.EnterpriseServer public static bool IsScheduleActive(int scheduleId) { Dictionary scheduledTasks = TaskManager.GetScheduledTasks(); - return scheduledTasks.ContainsKey(scheduleId); + + ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(scheduleId); + + return scheduledTasks.ContainsKey(scheduleId) || scheduleInfo.LastRun > scheduleInfo.LastFinish; } public static void StartSchedule(SchedulerJob schedule) { - Dictionary scheduledTasks = TaskManager.GetScheduledTasks(); - if (scheduledTasks.ContainsKey(schedule.ScheduleInfo.ScheduleId)) + if (IsScheduleActive(schedule.ScheduleInfo.ScheduleId)) return; // run schedule @@ -125,8 +127,6 @@ namespace WebsitePanel.EnterpriseServer static void RunSchedule(SchedulerJob schedule, bool changeNextRun) { - - try { // update next run (if required) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 0fc85004..65d8b175 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -275,7 +275,7 @@ namespace WebsitePanel.EnterpriseServer schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters); // re-schedule tasks - Scheduler.ScheduleTasks(); + //Scheduler.ScheduleTasks(); return scheduleId; } @@ -297,11 +297,11 @@ namespace WebsitePanel.EnterpriseServer DataProvider.UpdateSchedule(SecurityContext.User.UserId, schedule.ScheduleId, schedule.TaskId, schedule.ScheduleName, schedule.ScheduleTypeId, schedule.Interval, schedule.FromTime, schedule.ToTime, schedule.StartTime, - schedule.LastRun, schedule.NextRun, schedule.Enabled, schedule.PriorityId, + schedule.LastRun, schedule.LastFinish, schedule.NextRun, schedule.Enabled, schedule.PriorityId, schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters); // re-schedule tasks - Scheduler.ScheduleTasks(); + //Scheduler.ScheduleTasks(); return 0; } @@ -336,7 +336,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/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 946cd169..9b4f3604 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -223,6 +223,14 @@ namespace WebsitePanel.EnterpriseServer TopTask.TaskName, executionLog); } + // update last finish time + ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(TopTask.ItemId); + if (scheduleInfo != null) + { + scheduleInfo.LastFinish = DateTime.Now; + SchedulerController.UpdateSchedule(scheduleInfo); + } + // remove task from the stack TasksStack.RemoveAt(TasksStack.Count - 1); } From 38c8ac1199a86b94133fa24a581fd58070d97ee6 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Thu, 16 May 2013 15:42:43 +0300 Subject: [PATCH 05/24] fixed bug with reset settings tasks & update tasktype id DB --- WebsitePanel/Database/update_db.sql | 4 ++++ .../Tasks/TaskManager.cs | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 3f5e42bb..82413010 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -809,4 +809,8 @@ 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 \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 9b4f3604..5bdfa7c7 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -224,11 +224,11 @@ namespace WebsitePanel.EnterpriseServer } // update last finish time - ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(TopTask.ItemId); - if (scheduleInfo != null) + SchedulerJob schedule = SchedulerController.GetScheduleComplete(TopTask.ItemId); + if (schedule != null) { - scheduleInfo.LastFinish = DateTime.Now; - SchedulerController.UpdateSchedule(scheduleInfo); + schedule.ScheduleInfo.LastFinish = DateTime.Now; + SchedulerController.UpdateSchedule(schedule.ScheduleInfo); } // remove task from the stack From 9a10d75492f5f421c6c30e06703e18ff0bf439f8 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 17 May 2013 11:42:49 +0300 Subject: [PATCH 06/24] Added crypto key into scheduler service config --- .../CustomAction.cs | 28 ++++++++++++++++--- .../WebsitePanel.SchedulerService/app.config | 6 ++++ WebsitePanel/build.xml | 1 + 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs index d1eb0ec4..9dbf7fc3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerServiceInstaller/CustomAction.cs @@ -33,7 +33,8 @@ namespace WebsitePanel.SchedulerServiceInstaller [CustomAction] public static ActionResult FinalizeInstall(Session session) { - ChangeConnectionString(session["CONNECTIONSTRING"], session["INSTALLFOLDER"]); + ChangeConfigString("installer.connectionstring", session["CONNECTIONSTRING"], session["INSTALLFOLDER"]); + ChangeCryptoKey(session["INSTALLFOLDER"]); InstallService(session["INSTALLFOLDER"]); return ActionResult.Success; @@ -55,7 +56,26 @@ namespace WebsitePanel.SchedulerServiceInstaller } } - private static void ChangeConnectionString(string connectionString, string installFolder) + 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"); @@ -65,8 +85,8 @@ namespace WebsitePanel.SchedulerServiceInstaller content = reader.ReadToEnd(); } - var re = new Regex("\\$\\{" + "installer.connectionstring" + "\\}+", RegexOptions.IgnoreCase); - content = re.Replace(content, connectionString); + var re = new Regex("\\$\\{" + searchString + "\\}+", RegexOptions.IgnoreCase); + content = re.Replace(content, replaceValue); using (var writer = new StreamWriter(path)) { diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config b/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config index dff21e15..f4df3fb3 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/app.config @@ -6,4 +6,10 @@ + + + + + + diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 23b5e96e..d5d3bf4b 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -327,6 +327,7 @@ + Date: Fri, 17 May 2013 16:06:02 +0300 Subject: [PATCH 07/24] fixed bug with "Running Tasks" --- WebsitePanel/Database/update_db.sql | 44 + .../Data/DataProvider.cs | 808 +++++++++--------- .../Scheduling/SchedulerController.cs | 6 + .../Tasks/TaskManager.cs | 76 +- .../DesktopModules/WebsitePanel/Tasks.ascx | 10 +- .../DesktopModules/WebsitePanel/Tasks.ascx.cs | 30 +- .../WebsitePanel/Tasks.ascx.designer.cs | 44 +- 7 files changed, 584 insertions(+), 434 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 82413010..524433cf 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -813,4 +813,48 @@ 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 + +CREATE PROCEDURE [dbo].[GetRunningSchedules] +( + @ActorID int +) +AS + +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.LastFinish, + 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 Schedule AS S +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 +WHERE (U.UserID = @ActorID OR U.OwnerID = @ActorID) AND S.LastRun > S.LastFinish GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 08efc8c9..bd948d2e 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 @@ -1851,6 +1851,13 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } + public static IDataReader GetRunningSchedules(int actorId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetRunningSchedules", + new SqlParameter("@actorId", actorId)); + } + public static DataSet GetSchedules(int actorId, int packageId) { return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, @@ -1901,17 +1908,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,7 +1952,7 @@ 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, @@ -2149,7 +2156,7 @@ namespace WebsitePanel.EnterpriseServer } #endregion - #region Exchange Server + #region Exchange Server public static int AddExchangeAccount(int itemId, int accountType, string accountName, @@ -2181,42 +2188,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, @@ -2227,134 +2234,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, @@ -2388,16 +2395,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) { @@ -2422,37 +2429,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) { @@ -2464,9 +2471,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++) @@ -2483,41 +2490,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) { @@ -2531,7 +2538,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, @@ -2565,11 +2572,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); @@ -2607,8 +2614,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) ); } @@ -2688,16 +2695,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( @@ -2706,7 +2713,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) @@ -2727,7 +2734,7 @@ namespace WebsitePanel.EnterpriseServer #endregion #region CRM - + public static int GetCRMUsersCount(int itemId, string name, string email) { SqlParameter[] sqlParams = new SqlParameter[] @@ -2737,19 +2744,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[] { @@ -2762,7 +2769,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("Count", count) }; - + return SqlHelper.ExecuteReader( ConnectionString, CommandType.StoredProcedure, @@ -2772,7 +2779,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) @@ -2784,7 +2791,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@CrmUserID", crmId), new SqlParameter("@BusinessUnitId", businessUnitId) }); - + } @@ -2796,14 +2803,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) @@ -2811,8 +2817,8 @@ namespace WebsitePanel.EnterpriseServer SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "DeleteCRMOrganization", new SqlParameter[] { new SqlParameter("@ItemID", organizationId) }); } - - #endregion + + #endregion #region VPS - Virtual Private Servers @@ -2833,8 +2839,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", @@ -3030,7 +3036,7 @@ namespace WebsitePanel.EnterpriseServer #endregion #region BlackBerry - + public static void AddBlackBerryUser(int accountId) { SqlHelper.ExecuteNonQuery(ConnectionString, @@ -3041,8 +3047,8 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@AccountID", accountId) }); } - - + + public static bool CheckBlackBerryUserExists(int accountId) { int res = (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "CheckBlackBerryUserExists", @@ -3094,7 +3100,7 @@ namespace WebsitePanel.EnterpriseServer { new SqlParameter("@AccountID", accountId) }); - + } #endregion @@ -3181,142 +3187,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 @@ -3473,7 +3479,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@IsDefault", lyncUserPlan.IsDefault) ); } - + public static void DeleteLyncUserPlan(int lyncUserPlanId) { SqlHelper.ExecuteNonQuery( @@ -3591,11 +3597,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"]; } @@ -3666,7 +3672,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/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 65d8b175..58bab08f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -54,6 +54,12 @@ namespace WebsitePanel.EnterpriseServer DataProvider.GetScheduleTask(SecurityContext.User.UserId, taskId)); } + public static List GetRunningSchedules() + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetRunningSchedules(SecurityContext.User.UserId)); + } + public static DataSet GetSchedules(int packageId) { DataSet ds = DataProvider.GetSchedules(SecurityContext.User.UserId, packageId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 5bdfa7c7..9772aad5 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -134,13 +134,13 @@ namespace WebsitePanel.EnterpriseServer WriteLogRecord(0, parameterName + ": " + val, null, null); } - public static void Write(string text, params string[] textParameters) + public static void Write(string text, params string[] textParameters) { // INFO WriteLogRecord(0, text, null, textParameters); } - public static void WriteWarning(string text, params string[] textParameters) + public static void WriteWarning(string text, params string[] textParameters) { // WARNING WriteLogRecord(1, text, null, textParameters); @@ -168,7 +168,7 @@ namespace WebsitePanel.EnterpriseServer WriteLogRecord(2, text, ex.Message + "\n" + ex.StackTrace, prms); } - public static void WriteError(string text, params string[] textParameters) + public static void WriteError(string text, params string[] textParameters) { // ERROR WriteLogRecord(2, text, null, textParameters); @@ -195,8 +195,8 @@ namespace WebsitePanel.EnterpriseServer public static void CompleteTask() { - if (TasksStack.Count == 0) - return; + if (TasksStack.Count == 0) + return; // call event handler CallTaskEventHandler(TopTask, true); @@ -241,7 +241,7 @@ namespace WebsitePanel.EnterpriseServer XmlWriter writer = new XmlTextWriter(sw); writer.WriteStartElement("log"); - + // parameters writer.WriteStartElement("parameters"); foreach (string name in task.Parameters.Keys) @@ -320,7 +320,21 @@ namespace WebsitePanel.EnterpriseServer // remove tasks foreach (string taskId in completedTasks) + { + BackgroundTask task = GetTask(taskId); + if (task != null) + { + // update last finish time + SchedulerJob schedule = SchedulerController.GetScheduleComplete(task.ItemId); + if (schedule != null) + { + schedule.ScheduleInfo.LastFinish = DateTime.Now; + SchedulerController.UpdateSchedule(schedule.ScheduleInfo); + } + } + tasks.Remove(taskId); + } } public static int PackageId @@ -449,6 +463,14 @@ namespace WebsitePanel.EnterpriseServer // nope } + // update last finish time + SchedulerJob schedule = SchedulerController.GetScheduleComplete(task.ItemId); + if (schedule != null) + { + schedule.ScheduleInfo.LastFinish = DateTime.Now; + SchedulerController.UpdateSchedule(schedule.ScheduleInfo); + } + // remove it from stack tasks.Remove(taskId); } @@ -467,17 +489,37 @@ namespace WebsitePanel.EnterpriseServer { List list = new List(); - // try to get user first - UserInfo user = UserController.GetUser(userId); - if (user == null) - return list; // prohibited user + int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : SecurityContext.User.UserId; + Dictionary scheduledTasks = GetScheduledTasks(); - // get user tasks - foreach (BackgroundTask task in tasks.Values) + List scheduleList = SchedulerController.GetRunningSchedules(); + + foreach (var scheduleInfo in scheduleList) { - if(task.EffectiveUserId == userId && !task.Completed) - list.Add(task); + if (effectiveUserId == userId && scheduleInfo.LastRun > scheduleInfo.LastFinish) + { + if (scheduledTasks.ContainsKey(scheduleInfo.ScheduleId) && !scheduledTasks[scheduleInfo.ScheduleId].Completed) + { + list.Add(scheduledTasks[scheduleInfo.ScheduleId]); + } + else + { + list.Add(new BackgroundTask + { + TaskId = "", + ItemId = scheduleInfo.ScheduleId, + StartDate = scheduleInfo.LastRun, + TaskName = scheduleInfo.ScheduleName, + UserId = SecurityContext.User.UserId, + Source = "RUN_SCHEDULE", + Severity = 0, + ItemName = scheduleInfo.ScheduleName, + Completed = false + }); + } + } } + return list; } @@ -508,7 +550,7 @@ namespace WebsitePanel.EnterpriseServer string[] taskHandlers = GetTaskEventHandlers(task.Source, task.TaskName); if (taskHandlers != null) { - foreach(string taskHandler in taskHandlers) + foreach (string taskHandler in taskHandlers) { try { @@ -650,8 +692,8 @@ namespace WebsitePanel.EnterpriseServer res.IsSuccess = true; return res; } - - #endregion + + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx index 30b3a522..8acbbbc0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx @@ -13,8 +13,9 @@ - + + @@ -26,15 +27,16 @@ -
+ -
+ + In Progress
+ CausesValidation="false" Text="Stop" OnClientClick="return confirm('Do you really want to terminate this task?');" Visible="false"> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs index a1933493..c8465f60 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs @@ -66,13 +66,34 @@ namespace WebsitePanel.Portal // find controls HyperLink lnkTaskName = (HyperLink)e.Row.FindControl("lnkTaskName"); + Literal litTaskName = (Literal)e.Row.FindControl("litTaskName"); Literal litTaskDuration = (Literal)e.Row.FindControl("litTaskDuration"); + Panel pnlProgressBarContainer = (Panel)e.Row.FindControl("pnlProgressBarContainer"); Panel pnlProgressIndicator = (Panel)e.Row.FindControl("pnlProgressIndicator"); + Literal litProgressIndicator = (Literal)e.Row.FindControl("litProgressIndicator"); LinkButton cmdStop = (LinkButton)e.Row.FindControl("cmdStop"); - // bind controls - lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName); - lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details"); + if (String.IsNullOrEmpty(task.TaskId)) + { + litTaskName.Visible = true; + litProgressIndicator.Visible = true; + + // bind controls + litTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName); + } + else + { + lnkTaskName.Visible = true; + pnlProgressBarContainer.Visible = true; + cmdStop.Visible = true; + + // bind controls + lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details"); + lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName); + + // stop button + cmdStop.CommandArgument = task.TaskId; + } // duration TimeSpan duration = (TimeSpan)(DateTime.Now - task.StartDate); @@ -86,9 +107,6 @@ namespace WebsitePanel.Portal if (task.IndicatorMaximum > 0) percent = task.IndicatorCurrent * 100 / task.IndicatorMaximum; pnlProgressIndicator.Width = Unit.Percentage(percent); - - // stop button - cmdStop.CommandArgument = task.TaskId; } protected void gvTasks_RowCommand(object sender, GridViewCommandEventArgs e) 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; } } From 3353de1e5d08dea3f3941f692689c1055f32d298 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 17 May 2013 19:32:47 +0300 Subject: [PATCH 08/24] fixed check running task --- WebsitePanel/Database/update_db.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 524433cf..869c7b83 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -856,5 +856,6 @@ FROM Schedule AS S 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 -WHERE (U.UserID = @ActorID OR U.OwnerID = @ActorID) AND S.LastRun > S.LastFinish +WHERE (U.UserID = @ActorID OR U.OwnerID = @ActorID) + AND (ISNULL(S.LastRun, DATEADD(YEAR, -1, GETDATE())) > ISNULL(S.LastFinish, DATEADD(YEAR, -1, GETDATE()))) GO \ No newline at end of file From e7d5bf0c7e695a4ad798cda89a7dd0031502ce1c Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Thu, 23 May 2013 09:42:55 +0300 Subject: [PATCH 09/24] replace saving background tasks in DB --- .../Tasks/BackgroundTask.cs | 266 ++++---- .../Tasks/BackgroundTaskLogRecord.cs | 78 +-- .../Tasks/BackgroundTaskStatus.cs | 8 + .../WebsitePanel.EnterpriseServer.Base.csproj | 1 + .../Data/DataProvider.cs | 143 +++++ .../DatabaseServerController.cs | 23 +- .../DnsServers/DnsServerController.cs | 4 +- .../ContractSystem/ContractController.cs | 4 +- .../Ecommerce/InvoiceController.cs | 13 +- .../Provisioning/HostingPackageController.cs | 3 +- .../Provisioning/ServiceProvisioningBase.cs | 11 +- .../Ecommerce/StorehouseController.cs | 20 +- .../SendEmailNotification.cs | 29 +- .../TaskEventHandlers/SystemTriggersAgent.cs | 22 +- .../ExchangeServerController.cs | 222 +++---- .../Files/FilesController.cs | 54 +- .../FtpServers/FtpServerController.cs | 7 +- .../HostedSolution/LyncController.cs | 37 +- .../HostedSolution/OrganizationController.cs | 50 +- .../MailServers/MailServerController.cs | 52 +- .../OperatingSystemController.cs | 21 +- .../Packages/PackageController.cs | 20 +- .../Provisioning/BackupController.cs | 11 +- .../Provisioning/ImportController.cs | 3 +- .../SchedulerTasks/BackupDatabaseTask.cs | 14 +- .../SchedulerTasks/BackupTask.cs | 15 +- .../CalculateExchangeDiskspaceTask.cs | 4 +- .../CalculatePackagesBandwidthTask.cs | 4 +- .../CalculatePackagesDiskspaceTask.cs | 4 +- .../SchedulerTasks/CheckWebSiteTask.cs | 32 +- .../SchedulerTasks/FTPFilesTask.cs | 22 +- .../SchedulerTasks/HostedSolutionReport.cs | 16 +- .../NotifyOverusedDatabasesTask.cs | 32 +- .../SchedulerTasks/RunSystemCommandTask.cs | 8 +- .../SendMailNotificationTask.cs | 10 +- .../SuspendOverusedPackagesTask.cs | 34 +- .../SchedulerTasks/ZipFilesTask.cs | 8 +- .../Scheduling/SchedulerJob.cs | 16 +- .../Servers/ServerController.cs | 102 ++- .../HostedSharePointServerController.cs | 17 +- .../SharePoint/SharePointServerController.cs | 29 +- .../StatisticsServerController.cs | 6 +- .../Tasks/SendEmailNotification.cs | 41 +- .../Tasks/TaskController.cs | 174 +++++ .../Tasks/TaskManager.cs | 593 ++++++++++-------- .../Users/UserAsyncWorker.cs | 3 +- .../Users/UserController.cs | 22 +- .../VirtualizationServerController.cs | 139 +--- ...lizationServerControllerForPrivateCloud.cs | 149 +---- .../WebServers/WebServerController.cs | 121 ++-- .../WebsitePanel.EnterpriseServer.Code.csproj | 1 + .../Wizards/WebApplicationsInstaller.cs | 11 +- 52 files changed, 1423 insertions(+), 1306 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs create mode 100644 WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 8ea92110..419ebe91 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -36,162 +36,156 @@ 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 Properties - public System.DateTime StartDate + public int Id { get; protected set; } + + public String TaskId { get; protected set; } + + public int ScheduleId { get; set; } + + public int PackageId { get; set; } + + public int UserId { get; protected set; } + + public int EffectiveUserId { get; protected set; } + + public String TaskName { get; protected set; } + + public int ItemId { get; set; } + + public String ItemName { get; set; } + + public DateTime StartDate { get; protected 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; protected set; } + + public int Severity { get; set; } + + public bool Completed { get; set; } + + public bool NotifyOnComplete { get; set; } + + public BackgroundTaskStatus Status { get; set; } + + public IList Logs { get; set; } + + public IList Params { 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; + + Logs = new List(); } - public System.DateTime FinishDate + public BackgroundTask(String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, + int itemId, int scheduleId, int packageId, int maximumExecutionTime, IList parameters) + : this() { - get { return this.finishDate; } - set { this.finishDate = value; } + 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 Object GetParamValue(String name) { - get { return this.source; } - set { this.source = value; } + foreach(BackgroundTaskParameter param in Params) + { + if (param.Name == name) + return param.Value; + } + + return null; } - public string TaskName + public void UpdateParamValue(String name, object value) { - get { return this.taskName; } - set { this.taskName = value; } + foreach (BackgroundTaskParameter param in Params) + { + if (param.Name == name) + { + param.Value = value; + + return; + + } + } + + Params.Add(new BackgroundTaskParameter(name, value)); } - public int ItemId + public bool ContainsParam(String name) { - get { return this.itemId; } - set { this.itemId = value; } + foreach (BackgroundTaskParameter param in Params) + { + if (param.Name == name) + return true; + } + + return false; } - public int PackageId + #endregion + } + + public class BackgroundTaskParameter + { + #region Properties + + public int ParameterId { get; protected set; } + + public int TaskId { get; protected set; } + + public String Name { get; protected set; } + + public Object Value { get; set; } + + public String SerializerValue { get; set; } + + #endregion + + #region Constructors + + public BackgroundTaskParameter() { } + + public BackgroundTaskParameter(String name, Object value) { - get { return this.packageId; } - set { this.packageId = value; } + Name = name; + Value = value; } - public int Severity - { - get { return this.severity; } - set { this.severity = 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..51f33a04 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs @@ -0,0 +1,8 @@ +namespace WebsitePanel.EnterpriseServer +{ + public enum BackgroundTaskStatus + { + Run = 1, + Abort = 2 + } +} 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/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index bd948d2e..2e20067c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1836,6 +1836,149 @@ namespace WebsitePanel.EnterpriseServer #endregion #region Scheduler + + public static IDataReader GetBackgroundTask(int actorId, string taskId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTask", + new SqlParameter("@actorId", actorId), + new SqlParameter("@taskId", taskId)); + } + + public static IDataReader GetBackgroundTasks(int actorId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackgroundTasks", + new SqlParameter("actorId", actorId)); + } + + public static IDataReader GetBackgroundTopTask(int actorId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetBackGroundTopTask", + new SqlParameter("actorId", actorId)); + } + + public static int AddBackgroundTask(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("@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 + "AddBackgroundTaskLogParam", + new SqlParameter("@taskId", taskId), + new SqlParameter("@startLogTime", startLogTime)); + } + + public static void UpdateBackgroundTask(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("@taskId", scheduleId), + 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", 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) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "AddBackgroundTaskParam", + new SqlParameter("@taskId", taskId), + new SqlParameter("@name", name), + new SqlParameter("@value", value)); + } + + 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 DeleteBackgroundTaskStack(int taskId) + { + SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "DeleteBackgroundTaskStack", + new SqlParameter("@taskId", taskId)); + } + public static IDataReader GetScheduleTasks(int actorId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/DatabaseServers/DatabaseServerController.cs b/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 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/ContractSystem/ContractController.cs b/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/InvoiceController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/InvoiceController.cs index 8b666d2a..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; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/Provisioning/HostingPackageController.cs b/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/ServiceProvisioningBase.cs b/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/StorehouseController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs index f5efbdc9..6ea4ddc6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/StorehouseController.cs @@ -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/TaskEventHandlers/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs index d13af554..8dbdf99e 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 = TaskController.GetTopTask(); + + 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 = TaskController.GetTopTask(); + + 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 = TaskController.GetTopTask(); + // 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 = TaskController.GetTopTask(); + // 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 index 1ce637c4..cc7f4edd 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 = TaskController.GetTopTask(); + + if (!TaskManager.HasErrors(topTask)) { - switch (TaskManager.TaskName) + switch (topTask.TaskName) { case SystemTasks.TASK_ADD_INVOICE: RegisterInvoiceActivationTrigger(); @@ -64,8 +66,10 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterInvoiceActivationTrigger() { + BackgroundTask topTask = TaskController.GetTopTask(); + // Read contract invoice - Invoice invoice = (Invoice)TaskManager.TaskParameters[SystemTaskParams.PARAM_INVOICE]; + Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); // TriggerSystem.TriggerController.AddSystemTrigger(invoice.InvoiceId.ToString(), ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger)); @@ -73,10 +77,12 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterContractActivationTrigger() { + BackgroundTask topTask = TaskController.GetTopTask(); + // 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 +94,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 = TaskController.GetTopTask(); + + 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/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs index 8e0a1a82..8ea81b62 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 { @@ -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; + + IList 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 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 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/HostedSolution/LyncController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs index a72d5b59..71895df1 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; + IList 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/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index e8eb4767..b5755625 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; + IList 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; @@ -1740,8 +1734,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 +1825,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 +1923,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 +2039,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/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs index a911b077..e0ca1a40 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); + + IList 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/OperatingSystems/OperatingSystemController.cs b/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/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 3363a13f..9ebfda7d 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 = TaskController.GetTopTask(); + + topTask.ItemId = userId; + topTask.UpdateParamValue("SendLetter", sendLetter); + + TaskController.UpdateTask(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 = TaskController.GetTopTask(); + + topTask.ItemId = userId; + topTask.UpdateParamValue("Signup", signup); + topTask.UpdateParamValue("UserId", userId); + topTask.UpdateParamValue("SendLetter", sendLetter); + + TaskController.UpdateTask(topTask); } finally { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs index a580954a..f11491af 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs @@ -116,8 +116,7 @@ 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 TaskManager.Write("Calculate items to backup"); @@ -343,7 +342,10 @@ namespace WebsitePanel.EnterpriseServer } } - TaskManager.IndicatorCurrent = TaskManager.IndicatorMaximum; + BackgroundTask topTask = TaskController.GetTopTask(); + topTask.IndicatorCurrent = topTask.IndicatorMaximum; + + TaskController.UpdateTask(topTask); } catch (Exception ex) { @@ -490,8 +492,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(); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/ImportController.cs b/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/BackupDatabaseTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs index fd545c4e..f6cfa5b1 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 = TaskController.GetTopTask(); + + 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 index 8d04180d..cabc75e6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs @@ -53,13 +53,16 @@ namespace WebsitePanel.EnterpriseServer string storePackageFolder; string storeServerFolder; bool deleteTempBackup; + + BackgroundTask topTask = TaskController.GetTopTask(); + 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 +72,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 index 1a8909a9..fb49452f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs @@ -45,8 +45,10 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { + BackgroundTask topTask = TaskController.GetTopTask(); + // get all space organizations recursively - List items = ExchangeServerController.GetExchangeOrganizations(TaskManager.PackageId, true); + List items = ExchangeServerController.GetExchangeOrganizations(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 index ccb91d16..2cf26867 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs @@ -50,8 +50,10 @@ namespace WebsitePanel.EnterpriseServer public void CalculateBandwidth() { + BackgroundTask topTask = TaskController.GetTopTask(); + // get all owned packages - List packages = PackageController.GetPackagePackages(TaskManager.PackageId, true); + List packages = PackageController.GetPackagePackages(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 index 7a744cf9..d3f15df8 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs @@ -51,8 +51,10 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { + BackgroundTask topTask = TaskController.GetTopTask(); + // get all owned packages - List packages = PackageController.GetPackagePackages(TaskManager.PackageId, true); + List packages = PackageController.GetPackagePackages(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/CheckWebSiteTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs index c16812d9..438fbc41 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 = TaskController.GetTopTask(); - 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 = TaskController.GetTopTask(); + // 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 index b069aa07..35ff4e85 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 = TaskController.GetTopTask(); + // 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/HostedSolutionReport.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs index b82436df..68dea40f 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 = TaskController.GetTopTask(); - 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 index 5aae6dff..3700bc0a 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 = TaskController.GetTopTask(); + // 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/RunSystemCommandTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs index 3dba9938..0de5b022 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 = TaskController.GetTopTask(); + // 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 index 57e722ea..a882010c 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 = TaskController.GetTopTask(); + // 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/SuspendOverusedPackagesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs index 5fa58ce9..e5cd0413 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 = TaskController.GetTopTask(); + // 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 index 5f93c1ac..52aee2b9 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 = TaskController.GetTopTask(); + // 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/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index c29be3fd..5d8caede 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -89,15 +89,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 + IList 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 diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Servers/ServerController.cs b/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 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 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 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/Tasks/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs index 67d246b2..e69beb1f 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 = TaskController.GetTopTask(); + + 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 = TaskController.GetTopTask(); + + 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 = TaskController.GetTopTask(); + + 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 = TaskController.GetTopTask(); + + 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..71e25808 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -0,0 +1,174 @@ +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(SecurityContext.User.UserId, taskId)); + + task.Params = GetTaskParams(task.Id); + + return task; + } + + public static List GetTasks() + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTasks(SecurityContext.User.UserId)); + } + + public static BackgroundTask GetTopTask() + { + BackgroundTask task = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId)); + + task.Params = GetTaskParams(task.Id); + + return task; + } + + public static void AddTask(BackgroundTask task) + { + int taskId = DataProvider.AddBackgroundTask(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); + } + + public static void UpdateTask(BackgroundTask task) + { + DataProvider.UpdateBackgroundTask(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); + + AddTaskParams(task.Id, task.Params); + + if (task.Completed) + { + DeleteTaskStack(task.Id); + } + } + + public static void DeleteTaskStack(int taskId) + { + DataProvider.DeleteBackgroundTaskParams(taskId); + } + + public static void AddTaskParams(int taskId, IList parameters) + { + foreach (BackgroundTaskParameter param in SerializeParams(parameters)) + { + DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue); + } + } + + public static IList 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(int taskId, DateTime startLogTime) + { + List logs = ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTaskLogs(taskId, startLogTime)); + + foreach (BackgroundTaskLogRecord log in logs) + { + log.TextParameters = ReBuildParametersXml(log.XmlParameters); + } + + return logs; + } + + private static IList SerializeParams(IList parameters) + { + foreach (BackgroundTaskParameter param in parameters) + { + XmlSerializer serializer = new XmlSerializer(param.Value.GetType()); + 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 IList DeserializeParams(IList parameters) + { + foreach (BackgroundTaskParameter param in parameters) + { + XmlSerializer deserializer = new XmlSerializer(param.Value.GetType()); + 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) + { + string[] textParameters = new string[] {}; + + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(parameters); + + if (xmlDoc != null) + { + int index = 0; + foreach (XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter")) + { + textParameters[index] = xmlParameter.Attributes.GetNamedItem("value").Value; + index++; + } + } + + return textParameters; + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 9772aad5..7cf6d7a2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -42,7 +42,6 @@ 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 @@ -51,81 +50,120 @@ namespace WebsitePanel.EnterpriseServer 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); + 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, IList parameters) + { + StartTask(source, taskName, null, itemId, parameters); } public static void StartTask(string source, string taskName, object itemName) { - StartTask(null, source, taskName, itemName); + StartTask(source, taskName, itemName, 0); } - public static void StartTask(string taskId, string source, string taskName, object itemName) + public static void StartTask(string source, string taskName, object itemName, int itemId) { - // 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; + StartTask(source, taskName, itemName, itemId, new List()); + } - // new "parent" task? - if (TasksStack.Count == 0) + 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, IList 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, IList 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) + { + IList parameters = new List(); + if (parameter != null) { - // register task globally - tasks[task.TaskId] = task; + parameters.Add(parameter); } - 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; + 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, IList parameters) + { + StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, new List()); + } + + public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, + int scheduleId, int packageId, int maximumExecutionTime, IList parameters) + { + if (String.IsNullOrEmpty(taskId)) + { + taskId = Guid.NewGuid().ToString("N"); + } + + int userId = SecurityContext.User.UserId; + int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId; + String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; + + BackgroundTask task = new BackgroundTask(taskId, userId, effectiveUserId, source, taskName, itemNameStr, + itemId, scheduleId, packageId, maximumExecutionTime, parameters); + + List tasks = TaskController.GetTasks(); + + 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); - // push task on the stack - TasksStack.Add(task); + TaskController.AddTask(task); } public static void WriteParameter(string parameterName, object parameterValue) @@ -150,8 +188,11 @@ namespace WebsitePanel.EnterpriseServer { // 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); + + BackgroundTask topTask = TaskController.GetTopTask(); + + 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) @@ -176,63 +217,124 @@ namespace WebsitePanel.EnterpriseServer 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) + List tasks = TaskController.GetTasks(); + + if (tasks.Count > 0) { - RootTask.LogRecords.Add(logRecord); - RootTask.LastLogRecord = logRecord; + BackgroundTask rootTask = tasks[0]; - // change entire task severity - if (severity > RootTask.Severity) - RootTask.Severity = severity; + 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() { - if (TasksStack.Count == 0) + List tasks = TaskController.GetTasks(); + + if (tasks.Count == 0) return; + BackgroundTask topTask = TaskController.GetTopTask(); + // call event handler - CallTaskEventHandler(TopTask, true); + CallTaskEventHandler(topTask, true); // finish task - TopTask.FinishDate = DateTime.Now; - TopTask.Completed = true; + topTask.FinishDate = DateTime.Now; + topTask.Completed = true; // write task execution result to database - if (TasksStack.Count == 1) // single task + if (tasks.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); + topTask.Logs = TaskController.GetLogs(topTask.Id, topTask.StartDate); + + 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); + AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.UserId, + username, topTask.PackageId, topTask.ItemId, + topTask.ItemName, topTask.StartDate, topTask.FinishDate, topTask.Source, + topTask.TaskName, executionLog); } - // update last finish time - SchedulerJob schedule = SchedulerController.GetScheduleComplete(TopTask.ItemId); - if (schedule != null) + TaskController.UpdateTask(topTask); + } + + public static void UpdateParam(String name, Object value) + { + BackgroundTask topTask = TaskController.GetTopTask(); + + if (topTask == null) + return; + + topTask.UpdateParamValue(name, value); + + TaskController.UpdateTask(topTask); + } + + public static int ItemId + { + set { - schedule.ScheduleInfo.LastFinish = DateTime.Now; - SchedulerController.UpdateSchedule(schedule.ScheduleInfo); + BackgroundTask topTask = TaskController.GetTopTask(); + + if (topTask == null) + return; + + topTask.ItemId = value; + + TaskController.UpdateTask(topTask); + } + } + + public static String ItemName + { + set + { + BackgroundTask topTask = TaskController.GetTopTask(); + + if (topTask == null) + return; + + topTask.ItemName = value; + + TaskController.UpdateTask(topTask); + } + } + + public static void UpdateParams(Hashtable parameters) + { + BackgroundTask topTask = TaskController.GetTopTask(); + + if (topTask == null) + return; + + foreach (string key in parameters.Keys) + { + topTask.UpdateParamValue(key, parameters[key]); } - // remove task from the stack - TasksStack.RemoveAt(TasksStack.Count - 1); + TaskController.UpdateTask(topTask); } static string FormatExecutionLog(BackgroundTask task) @@ -244,19 +346,19 @@ namespace WebsitePanel.EnterpriseServer // parameters writer.WriteStartElement("parameters"); - foreach (string name in task.Parameters.Keys) + foreach (BackgroundTaskParameter param in task.Params) { - string val = task.Parameters[name] != null ? task.Parameters[name].ToString() : ""; writer.WriteStartElement("parameter"); - writer.WriteAttributeString("name", name); - writer.WriteString(val); + writer.WriteAttributeString("name", param.Name); + writer.WriteString(param.Value.ToString()); + writer.WriteEndElement(); } writer.WriteEndElement(); // parameters // records writer.WriteStartElement("records"); - foreach (BackgroundTaskLogRecord record in task.LogRecords) + foreach (BackgroundTaskLogRecord record in task.Logs) { writer.WriteStartElement("record"); writer.WriteAttributeString("severity", record.Severity.ToString()); @@ -289,133 +391,84 @@ namespace WebsitePanel.EnterpriseServer static void PurgeCompletedTasks(object obj) { - // remove completed tasks - List completedTasks = new List(); - foreach (BackgroundTask task in tasks.Values) + List tasks = TaskController.GetTasks(); + + foreach (BackgroundTask task in tasks) { if (task.MaximumExecutionTime != -1 - && ((TimeSpan)(DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) + && ((TimeSpan) (DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) { - // terminate task - try - { - task.TaskThread.Abort(); - } - catch - { - // nope - } + task.Status = BackgroundTaskStatus.Abort; - // 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); + TaskController.UpdateTask(task); } } - - // remove tasks - foreach (string taskId in completedTasks) - { - BackgroundTask task = GetTask(taskId); - if (task != null) - { - // update last finish time - SchedulerJob schedule = SchedulerController.GetScheduleComplete(task.ItemId); - if (schedule != null) - { - schedule.ScheduleInfo.LastFinish = DateTime.Now; - SchedulerController.UpdateSchedule(schedule.ScheduleInfo); - } - } - - 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; } + set + { + BackgroundTask topTask = TaskController.GetTopTask(); + topTask.IndicatorMaximum = value; + + TaskController.UpdateTask(topTask); + } } public static int IndicatorCurrent { - get { return TopTask.IndicatorCurrent; } - set { TopTask.IndicatorCurrent = value; } + get + { + return TaskController.GetTopTask().IndicatorCurrent; + } + set + { + BackgroundTask topTask = TaskController.GetTopTask(); + topTask.IndicatorCurrent = value; + + TaskController.UpdateTask(topTask); + } } public static int MaximumExecutionTime { - get { return TopTask.MaximumExecutionTime; } - set { TopTask.MaximumExecutionTime = value; } + get + { + return TaskController.GetTopTask().MaximumExecutionTime; + } + set + { + BackgroundTask topTask = TaskController.GetTopTask(); + topTask.MaximumExecutionTime = value; + + TaskController.UpdateTask(topTask); + } } - public static int ScheduleId + public static bool HasErrors(BackgroundTask task) { - get { return TopTask.ScheduleId; } - set { TopTask.ScheduleId = value; } - } - - public static bool HasErrors - { - get { return (TopTask.Severity == 2); } + return task.Severity == 2; } public static BackgroundTask GetTask(string taskId) { - BackgroundTask task = (BackgroundTask)tasks[taskId]; + BackgroundTask task = TaskController.GetTask(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); - } + task.Logs = TaskController.GetLogs(task.Id, startLogTime); return task; } @@ -425,7 +478,7 @@ namespace WebsitePanel.EnterpriseServer Dictionary scheduledTasks = new Dictionary(); try { - foreach (BackgroundTask task in tasks.Values) + foreach (BackgroundTask task in TaskController.GetTasks()) { if (task.ScheduleId > 0 && !task.Completed @@ -441,7 +494,8 @@ namespace WebsitePanel.EnterpriseServer public static void SetTaskNotifyOnComplete(string taskId) { - BackgroundTask task = (BackgroundTask)tasks[taskId]; + BackgroundTask task = GetTask(taskId); + if (task == null) return; @@ -450,101 +504,46 @@ namespace WebsitePanel.EnterpriseServer public static void StopTask(string taskId) { - BackgroundTask task = (BackgroundTask)tasks[taskId]; + BackgroundTask task = GetTask(taskId); + if (task == null) return; - try - { - task.TaskThread.Abort(); - } - catch - { - // nope - } - - // update last finish time - SchedulerJob schedule = SchedulerController.GetScheduleComplete(task.ItemId); - if (schedule != null) - { - schedule.ScheduleInfo.LastFinish = DateTime.Now; - SchedulerController.UpdateSchedule(schedule.ScheduleInfo); - } - - // remove it from stack - tasks.Remove(taskId); - } - - public static Hashtable TaskParameters - { - get { return TopTask.Parameters; } - } - - public static int GetTasksNumber() - { - return tasks.Count; + task.Status = BackgroundTaskStatus.Abort; + + TaskController.UpdateTask(task); } public static List GetUserTasks(int userId) { List list = new List(); - int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : SecurityContext.User.UserId; - Dictionary scheduledTasks = GetScheduledTasks(); + // try to get user first + UserInfo user = UserController.GetUser(userId); + if (user == null) + return list; // prohibited user - List scheduleList = SchedulerController.GetRunningSchedules(); - - foreach (var scheduleInfo in scheduleList) + // get user tasks + foreach (BackgroundTask task in TaskController.GetTasks()) { - if (effectiveUserId == userId && scheduleInfo.LastRun > scheduleInfo.LastFinish) - { - if (scheduledTasks.ContainsKey(scheduleInfo.ScheduleId) && !scheduledTasks[scheduleInfo.ScheduleId].Completed) - { - list.Add(scheduledTasks[scheduleInfo.ScheduleId]); - } - else - { - list.Add(new BackgroundTask - { - TaskId = "", - ItemId = scheduleInfo.ScheduleId, - StartDate = scheduleInfo.LastRun, - TaskName = scheduleInfo.ScheduleName, - UserId = SecurityContext.User.UserId, - Source = "RUN_SCHEDULE", - Severity = 0, - ItemName = scheduleInfo.ScheduleName, - Completed = false - }); - } - } + if (task.EffectiveUserId == userId && !task.Completed) + list.Add(task); } - return list; } public static List GetUserCompletedTasks(int userId) { - // get user tasks - List list = GetUserTasks(userId); + return new List(); + } - // 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; + 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); @@ -630,6 +629,7 @@ namespace WebsitePanel.EnterpriseServer List handlersList = (List)eventHandlers[fullTaskName]; return handlersList == null ? null : handlersList.ToArray(); } + #endregion @@ -677,14 +677,6 @@ namespace WebsitePanel.EnterpriseServer 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); @@ -693,6 +685,69 @@ namespace WebsitePanel.EnterpriseServer 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, IList 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 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 index ff333445..1f1254e5 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 = TaskController.GetTopTask(); + + topTask.ItemId = userId; + topTask.UpdateParamValue("SendLetter", sendLetter); + + TaskController.UpdateTask(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/VirtualizationServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs index ee986ab1..7dd16a43 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 = TaskController.GetTopTask(); + 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/VirtualizationServerControllerForPrivateCloud.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs index d1df6e1e..d33712dd 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 = TaskController.GetTopTask(); + 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/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebServers/WebServerController.cs index ae8a13bd..458b7f78 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 @@ -595,8 +594,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 @@ -710,8 +708,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 { @@ -886,8 +883,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 { @@ -1223,8 +1219,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()); @@ -1425,8 +1421,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()); @@ -1587,8 +1583,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 @@ -1641,8 +1637,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 @@ -1680,8 +1676,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 @@ -1721,8 +1717,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 @@ -1774,8 +1770,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 @@ -1815,8 +1811,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 @@ -1858,8 +1854,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 { @@ -1892,8 +1887,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 { @@ -1947,8 +1941,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 @@ -1977,8 +1971,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 @@ -2033,8 +2027,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 @@ -2063,8 +2057,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 @@ -2119,8 +2113,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 @@ -2149,8 +2143,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 @@ -2314,9 +2308,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) { @@ -2340,8 +2337,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 { @@ -2388,8 +2384,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 { @@ -2892,8 +2887,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 { @@ -2927,8 +2921,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 { @@ -3070,8 +3063,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 @@ -3126,8 +3119,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 @@ -3183,8 +3176,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 @@ -3213,8 +3206,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 @@ -3269,8 +3262,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 @@ -3299,8 +3292,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 index 49de1bd3..c7dd2261 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj @@ -160,6 +160,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs index 8ae1f11b..bea72671 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs @@ -91,17 +91,20 @@ 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 = TaskController.GetTopTask(); + topTask.ItemName = app.Name; + + TaskController.UpdateTask(topTask); // check web site for existance WebSite webSite = WebServerController.GetWebSite(inst.WebSiteId); From 8577c73c4cb3d5dafc55ea582fa7e2a87fb1785c Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Thu, 23 May 2013 11:19:07 +0300 Subject: [PATCH 10/24] fixed WebPortal & update sql --- WebsitePanel/Database/update_db.sql | 401 ++++++++++++++++++ .../Data/DataProvider.cs | 2 +- .../WebsitePanel/TasksTaskDetails.ascx.cs | 9 +- .../VPS/UserControls/ServerTabs.ascx.cs | 4 +- .../VPSForPC/UserControls/ServerTabs.ascx.cs | 4 +- 5 files changed, 410 insertions(+), 10 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 869c7b83..7c077c72 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -858,4 +858,405 @@ INNER JOIN ScheduleTasks AS ST ON S.TaskID = ST.TaskID INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID WHERE (U.UserID = @ActorID OR U.OwnerID = @ActorID) AND (ISNULL(S.LastRun, DATEADD(YEAR, -1, GETDATE())) > ISNULL(S.LastFinish, DATEADD(YEAR, -1, GETDATE()))) +GO + +CREATE TABLE BackgroundTasks +( + ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + 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, + FOREIGN KEY (ScheduleID) REFERENCES Schedule (ScheduleID), + FOREIGN KEY (PackageID) REFERENCES Packages (PackageID) +) +GO + +CREATE TABLE BackgroundTaskParameters +( + ParameterID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, + TaskID INT NOT NULL, + Name NVARCHAR(255), + SerializerValue NTEXT, + 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 NOT NULL PRIMARY KEY, + TaskID INT NOT NULL, + Value NVARCHAR(MAX), + FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) +) +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTask] +( + @BackgroundTaskID INT OUTPUT, + @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 +( + TaskID, + ScheduleID, + PackageID, + UserID, + EffectiveUserID, + TaskName, + ItemID, + ItemName, + StartDate, + IndicatorCurrent, + IndicatorMaximum, + MaximumExecutionTime, + Source, + Severity, + Completed, + NotifyOnComplete, + Status +) +VALUES +( + @TaskID, + @ScheduleID, + @PackageID, + @UserID, + @EffectiveUserID, + @TaskName, + @ItemID, + @ItemName, + @StartDate, + @IndicatorCurrent, + @IndicatorMaximum, + @MaximumExecutionTime, + @Source, + @Severity, + @Completed, + @NotifyOnComplete, + @Status +) + +SET @BackgroundTaskID = SCOPE_IDENTITY() + +RETURN +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTask] +( + @ActorID INT, + @TaskID NVARCHAR(255) +) +AS + +SELECT TOP 1 + 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 +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.TaskID = @TaskID AND T.UserID = @ActorID +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTasks] +( + @ActorID 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 +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.UserID = @ActorID +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTopTask] +( + @ActorID INT +) +AS + +SELECT TOP 1 + 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 +INNER JOIN BackgroundTaskStack AS TS + ON TS.TaskId = T.ID +WHERE T.UserID = @ActorID +ORDER BY T.StartDate DESC +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 + +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 + +CREATE PROCEDURE [dbo].[UpdateBackgroundTask] +( + @TaskID INT, + @ScheduleID INT, + @PackageID INT, + @UserID INT, + @EffectiveUserID 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 BackgroundTask +SET + ScheduleID = @ScheduleID, + PackageID = @PackageID, + UserID = @UserID, + EffectiveUserID = @EffectiveUserID, + 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 + +CREATE PROCEDURE [dbo].[GetBackgroundTaskParams] +( + @TaskID INT +) +AS + +SELECT + P.ParameterID, + P.TaskID, + P.Name, + P.SerializerValue +FROM BackgroundTaskParameters AS P +WHERE P.TaskID = @TaskID +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTaskParam] +( + @TaskID INT, + @Name NVARCHAR(255), + @Value NTEXT +) +AS + +INSERT INTO BackgroundTaskParameters +( + TaskID, + Name, + SerializerValue +) +VALUES +( + @TaskID, + @Name, + @Value +) +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams] +( + @TaskID INT +) +AS + +DELETE FROM BackgroundTaskParameters +WHERE TaskID = @TaskID +GO + +CREATE PROCEDURE [dbo].[AddBackgroundTaskStack] +( + @TaskID INT +) +AS + +INSERT INTO BackgroundTaskStack +( + TaskID +) +VALUES +( + @TaskID +) +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack] +( + @TaskID INT +) +AS + +DELETE FROM BackgroundTaskStack +WHERE TaskID = @TaskID GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 2e20067c..2a018650 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1921,7 +1921,7 @@ namespace WebsitePanel.EnterpriseServer { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "UpdateBackgroundTask", - new SqlParameter("@taskId", scheduleId), + new SqlParameter("@taskId", taskId), new SqlParameter("@scheduleId", scheduleId), new SqlParameter("@packageId", packageId), new SqlParameter("@taskName", taskName), diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index 7f3ee84a..7c7be1d2 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.Logs.Count > 0 ? task.Logs[0].Text : String.Empty); litStartTime.Text = task.StartDate.ToString(); // progress @@ -77,11 +77,10 @@ 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.Logs.Count > 0) + ViewState["lastLogDate"] = task.Logs[0].Date.AddTicks(1); - foreach (BackgroundTaskLogRecord logRecord in task.LastLogRecords) + foreach (BackgroundTaskLogRecord logRecord in task.Logs) { log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] "); log.Append(GetLogLineIdent(logRecord.TextIdent)); 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..4b0372ca 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.Logs; 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.Logs.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..56b6fe22 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.Logs; 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.Logs.Count - 1) { gauge.Visible = true; gauge.Total = task.IndicatorMaximum; From d14b5fc01f6f1a1ca70506fd03087f6e6661f399 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Thu, 23 May 2013 18:18:25 +0300 Subject: [PATCH 11/24] update start/stop task from windows service --- WebsitePanel/Database/update_db.sql | 44 +++++++++--- .../Tasks/BackgroundTask.cs | 28 ++++---- .../Tasks/BackgroundTaskStatus.cs | 4 +- .../Data/DataProvider.cs | 12 +++- .../ExchangeServerController.cs | 2 +- .../HostedSolution/LyncController.cs | 2 +- .../HostedSolution/OrganizationController.cs | 2 +- .../MailServers/MailServerController.cs | 2 +- .../Scheduling/Scheduler.cs | 68 ++++++++++++++++--- .../Scheduling/SchedulerController.cs | 47 +++++++++++-- .../Scheduling/SchedulerJob.cs | 2 +- .../Tasks/TaskController.cs | 30 ++++++-- .../Tasks/TaskManager.cs | 48 ++++++++++--- .../DesktopModules/WebsitePanel/Tasks.ascx | 10 ++- .../DesktopModules/WebsitePanel/Tasks.ascx.cs | 30 ++------ .../WebsitePanel/TasksTaskDetails.ascx.cs | 2 +- 16 files changed, 240 insertions(+), 93 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 7c077c72..d536e693 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -880,9 +880,7 @@ CREATE TABLE BackgroundTasks Severity INT NOT NULL, Completed BIT, NotifyOnComplete BIT, - Status INT NOT NULL, - FOREIGN KEY (ScheduleID) REFERENCES Schedule (ScheduleID), - FOREIGN KEY (PackageID) REFERENCES Packages (PackageID) + Status INT NOT NULL ) GO @@ -913,9 +911,8 @@ GO CREATE TABLE BackgroundTaskStack ( - TaskStackID INT NOT NULL PRIMARY KEY, + TaskStackID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, TaskID INT NOT NULL, - Value NVARCHAR(MAX), FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) ) GO @@ -1150,8 +1147,6 @@ CREATE PROCEDURE [dbo].[UpdateBackgroundTask] @TaskID INT, @ScheduleID INT, @PackageID INT, - @UserID INT, - @EffectiveUserID INT, @TaskName NVARCHAR(255), @ItemID INT, @ItemName NVARCHAR(255), @@ -1167,12 +1162,10 @@ CREATE PROCEDURE [dbo].[UpdateBackgroundTask] ) AS -UPDATE BackgroundTask +UPDATE BackgroundTasks SET ScheduleID = @ScheduleID, PackageID = @PackageID, - UserID = @UserID, - EffectiveUserID = @EffectiveUserID, TaskName = @TaskName, ItemID = @ItemID, ItemName = @ItemName, @@ -1259,4 +1252,35 @@ AS DELETE FROM BackgroundTaskStack WHERE TaskID = @TaskID +GO + +CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] +( + @ActorID INT, + @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.UserID = @ActorID AND T.Completed = 0 AND T.Status = @Status GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 419ebe91..afc5546e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -41,25 +41,25 @@ namespace WebsitePanel.EnterpriseServer { #region Properties - public int Id { get; protected set; } + public int Id { get; set; } - public String TaskId { get; protected set; } + public String TaskId { get; set; } public int ScheduleId { get; set; } public int PackageId { get; set; } - public int UserId { get; protected set; } + public int UserId { get; set; } - public int EffectiveUserId { get; protected set; } + public int EffectiveUserId { get; set; } - public String TaskName { get; protected set; } + public String TaskName { get; set; } public int ItemId { get; set; } public String ItemName { get; set; } - public DateTime StartDate { get; protected set; } + public DateTime StartDate { get; set; } public DateTime FinishDate { get; set; } @@ -69,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer public int MaximumExecutionTime { get; set; } - public String Source { get; protected set; } + public String Source { get; set; } public int Severity { get; set; } @@ -79,9 +79,9 @@ namespace WebsitePanel.EnterpriseServer public BackgroundTaskStatus Status { get; set; } - public IList Logs { get; set; } + public List Logs { get; set; } - public IList Params { get; set; } + public List Params { get; set; } #endregion @@ -99,10 +99,10 @@ namespace WebsitePanel.EnterpriseServer } public BackgroundTask(String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, - int itemId, int scheduleId, int packageId, int maximumExecutionTime, IList parameters) + int itemId, int scheduleId, int packageId, int maximumExecutionTime, List parameters) : this() { - TaskId = TaskId; + TaskId = taskId; UserId = userId; EffectiveUserId = effectiveUserId; Source = source; @@ -164,11 +164,11 @@ namespace WebsitePanel.EnterpriseServer { #region Properties - public int ParameterId { get; protected set; } + public int ParameterId { get; set; } - public int TaskId { get; protected set; } + public int TaskId { get; set; } - public String Name { get; protected set; } + public String Name { get; set; } public Object Value { get; set; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs index 51f33a04..74747641 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTaskStatus.cs @@ -3,6 +3,8 @@ public enum BackgroundTaskStatus { Run = 1, - Abort = 2 + Abort = 2, + Starting = 3, + Stopping = 4 } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 2a018650..cc069d0c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1852,6 +1852,14 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("actorId", actorId)); } + public static IDataReader GetProcessBackgroundTasks(int actorId, BackgroundTaskStatus status) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetProcessBackgroundTasks", + new SqlParameter("actorId", actorId), + new SqlParameter("status", (int)status)); + } + public static IDataReader GetBackgroundTopTask(int actorId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, @@ -1910,7 +1918,7 @@ namespace WebsitePanel.EnterpriseServer public static IDataReader GetBackgroundTaskLogs(int taskId, DateTime startLogTime) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "AddBackgroundTaskLogParam", + ObjectQualifier + "GetBackgroundTaskLogs", new SqlParameter("@taskId", taskId), new SqlParameter("@startLogTime", startLogTime)); } @@ -1938,7 +1946,7 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@severity", severity), new SqlParameter("@completed", completed), new SqlParameter("@notifyOnComplete", notifyOnComplete), - new SqlParameter("@status", status)); + new SqlParameter("@status", (int)status)); } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs index 8ea81b62..e296c57e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/ExchangeServer/ExchangeServerController.cs @@ -1456,7 +1456,7 @@ namespace WebsitePanel.EnterpriseServer // place log record - IList parameters = new List(); + List parameters = new List(); parameters.Add(new BackgroundTaskParameter("Domain ID", domainId)); parameters.Add(new BackgroundTaskParameter("Domain Type", domainType.ToString())); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs index 71895df1..e78b8a10 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/LyncController.cs @@ -881,7 +881,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution public static LyncUserResult AddFederationDomain(int itemId, string domainName, string proxyFqdn) { - IList parameters = new List(); + List parameters = new List(); parameters.Add(new BackgroundTaskParameter("domainName", domainName)); parameters.Add(new BackgroundTaskParameter("proxyFqdn", proxyFqdn)); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index b5755625..8162959d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs @@ -291,7 +291,7 @@ namespace WebsitePanel.EnterpriseServer return errorCode; // place log record - IList parameters = new List(); + List parameters = new List(); parameters.Add(new BackgroundTaskParameter("Organization ID", organizationId)); parameters.Add(new BackgroundTaskParameter("DomainName", domainName)); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs index e0ca1a40..d7923702 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/MailServers/MailServerController.cs @@ -1268,7 +1268,7 @@ namespace WebsitePanel.EnterpriseServer // place log record - IList parameters = new List(); + List parameters = new List(); parameters.Add(new BackgroundTaskParameter("Domain ID", domain.DomainId)); parameters.Add(new BackgroundTaskParameter("Domain pointer", domain.DomainName)); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index 9a92ecfe..bc8b8490 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -58,10 +58,8 @@ namespace WebsitePanel.EnterpriseServer public static bool IsScheduleActive(int scheduleId) { Dictionary scheduledTasks = TaskManager.GetScheduledTasks(); - - ScheduleInfo scheduleInfo = SchedulerController.GetSchedule(scheduleId); - - return scheduledTasks.ContainsKey(scheduleId) || scheduleInfo.LastRun > scheduleInfo.LastFinish; + + return scheduledTasks.ContainsKey(scheduleId); } public static void StartSchedule(SchedulerJob schedule) @@ -85,8 +83,10 @@ namespace WebsitePanel.EnterpriseServer public static void ScheduleTasks() { - nextSchedule = SchedulerController.GetNextSchedule(); + RunManualTasks(); + nextSchedule = SchedulerController.GetNextSchedule(); + // set timer if (nextSchedule != null) { @@ -94,9 +94,7 @@ namespace WebsitePanel.EnterpriseServer { // this will put the timer to sleep scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite); - - System.Threading.Thread.Sleep(1000); - + Thread.Sleep(1000); // run immediately RunNextSchedule(null); } @@ -106,13 +104,65 @@ namespace WebsitePanel.EnterpriseServer 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.Starting); + foreach (var task in tasks) + { + StartManualTask(task); + } + tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); + foreach (var task in tasks) + { + TaskManager.StopTask(task.TaskId); + } + } + private static void StartManualTask(BackgroundTask backgroundTask) + { + new Thread(() => RunBackgroundTask(backgroundTask)) { Priority = ThreadPriority.Highest }.Start(); + + backgroundTask.Status = BackgroundTaskStatus.Run; + + TaskController.UpdateTask(backgroundTask); + } + private static void RunBackgroundTask(BackgroundTask backgroundTask) + { + UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId); + + SecurityContext.SetThreadPrincipal(user.UserId); + + var schedule = SchedulerController.GetScheduleComplete(backgroundTask.ScheduleId); + + TaskManager.StartTask(backgroundTask.Source, backgroundTask.TaskName, backgroundTask.ItemName, backgroundTask.ItemId, backgroundTask.ScheduleId, backgroundTask.PackageId, backgroundTask.MaximumExecutionTime, backgroundTask.Params); + + try + { + var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); + objTask.DoWork(); + Thread.Sleep(100000); + } + 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 { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 58bab08f..62c067d8 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 @@ -157,30 +158,64 @@ 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); + var parameters = schedule.ScheduleInfo.Parameters.Select( + prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); + var backgroundTask = new BackgroundTask( + schedule.ScheduleInfo.TaskId, + SecurityContext.User.UserId, + SecurityContext.User.IsPeer + ? SecurityContext.User.OwnerId + : SecurityContext.User.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); + 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); + var parameters = schedule.ScheduleInfo.Parameters.Select( + prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); + var backgroundTask = new BackgroundTask( + schedule.ScheduleInfo.TaskId, + SecurityContext.User.UserId, + SecurityContext.User.IsPeer + ? SecurityContext.User.OwnerId + : SecurityContext.User.UserId, "SCHEDULER", "STOP_SCHEDULE", + schedule.ScheduleInfo.ScheduleName, + schedule.ScheduleInfo.ScheduleId, + schedule.ScheduleInfo.ScheduleId, + schedule.ScheduleInfo.PackageId, + schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Stopping }; + + TaskController.AddTask(backgroundTask); + return 0; + } public static void CalculateNextStartTime(ScheduleInfo schedule) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index 5d8caede..a1053325 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -89,7 +89,7 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = PackageController.GetPackageOwner(scheduleInfo.PackageId); SecurityContext.SetThreadPrincipal(user.UserId); - IList parameters = new List(); + List parameters = new List(); foreach (ScheduleTaskParameterInfo prm in scheduleInfo.Parameters) { parameters.Add(new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index 71e25808..1959d789 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -15,6 +15,11 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = ObjectUtils.FillObjectFromDataReader( DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId)); + if (task == null) + { + return null; + } + task.Params = GetTaskParams(task.Id); return task; @@ -26,6 +31,12 @@ namespace WebsitePanel.EnterpriseServer DataProvider.GetBackgroundTasks(SecurityContext.User.UserId)); } + public static List GetProcessTasks(BackgroundTaskStatus status) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status)); + } + public static BackgroundTask GetTopTask() { BackgroundTask task = ObjectUtils.FillObjectFromDataReader( @@ -58,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer AddTaskParams(task.Id, task.Params); - if (task.Completed) + if (task.Completed || task.Status == BackgroundTaskStatus.Abort) { DeleteTaskStack(task.Id); } @@ -66,10 +77,10 @@ namespace WebsitePanel.EnterpriseServer public static void DeleteTaskStack(int taskId) { - DataProvider.DeleteBackgroundTaskParams(taskId); + DataProvider.DeleteBackgroundTaskStack(taskId); } - public static void AddTaskParams(int taskId, IList parameters) + public static void AddTaskParams(int taskId, List parameters) { foreach (BackgroundTaskParameter param in SerializeParams(parameters)) { @@ -77,7 +88,7 @@ namespace WebsitePanel.EnterpriseServer } } - public static IList GetTaskParams(int taskId) + public static List GetTaskParams(int taskId) { List parameters = ObjectUtils.CreateListFromDataReader( DataProvider.GetBackgroundTaskParams(taskId)); @@ -104,8 +115,13 @@ namespace WebsitePanel.EnterpriseServer return logs; } - private static IList SerializeParams(IList parameters) + private static List SerializeParams(List parameters) { + if (parameters == null) + { + return new List(); + } + foreach (BackgroundTaskParameter param in parameters) { XmlSerializer serializer = new XmlSerializer(param.Value.GetType()); @@ -121,11 +137,11 @@ namespace WebsitePanel.EnterpriseServer return parameters; } - private static IList DeserializeParams(IList parameters) + private static List DeserializeParams(List parameters) { foreach (BackgroundTaskParameter param in parameters) { - XmlSerializer deserializer = new XmlSerializer(param.Value.GetType()); + XmlSerializer deserializer = new XmlSerializer(param.SerializerValue.GetType()); StringReader sr = new StringReader(param.SerializerValue); param.Value = deserializer.Deserialize(sr); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 7cf6d7a2..c45270f6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -37,6 +37,8 @@ using System.Web.Caching; using System.Xml; using System.Reflection; using WebsitePanel.Providers.Common; +using System.Diagnostics; +using System.Linq; namespace WebsitePanel.EnterpriseServer { @@ -66,7 +68,7 @@ namespace WebsitePanel.EnterpriseServer StartTask(source, taskName, null, itemId, parameter); } - public static void StartTask(string source, string taskName, int itemId, IList parameters) + public static void StartTask(string source, string taskName, int itemId, List parameters) { StartTask(source, taskName, null, itemId, parameters); } @@ -86,7 +88,7 @@ namespace WebsitePanel.EnterpriseServer StartTask(source, taskName, itemName, 0, parameter); } - public static void StartTask(string source, string taskName, object itemName, IList parameters) + public static void StartTask(string source, string taskName, object itemName, List parameters) { StartTask(source, taskName, itemName, 0, parameters); } @@ -96,14 +98,14 @@ namespace WebsitePanel.EnterpriseServer StartTask(source, taskName, itemName, itemId, 0, parameter); } - public static void StartTask(string source, string taskName, object itemName, int itemId, IList parameters) + 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) { - IList parameters = new List(); + List parameters = new List(); if (parameter != null) { parameters.Add(parameter); @@ -123,13 +125,13 @@ namespace WebsitePanel.EnterpriseServer } public static void StartTask(string source, string taskName, object itemName, int itemId, - int scheduleId, int packageId, int maximumExecutionTime, IList parameters) + int scheduleId, int packageId, int maximumExecutionTime, List parameters) { StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, new List()); } public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, - int scheduleId, int packageId, int maximumExecutionTime, IList parameters) + int scheduleId, int packageId, int maximumExecutionTime, List parameters) { if (String.IsNullOrEmpty(taskId)) { @@ -507,13 +509,43 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = GetTask(taskId); if (task == null) + { return; - + } + task.Status = BackgroundTaskStatus.Abort; + StopProcess(task.TaskId); + TaskController.UpdateTask(task); } + public static void StopTask(BackgroundTask task) + { + if (task == null) + { + return; + } + + task.Status = BackgroundTaskStatus.Abort; + + StopProcess(task.TaskId); + + TaskController.UpdateTask(task); + } + + private static void StopProcess(string taskId) + { + var process = Process.GetProcesses().FirstOrDefault( + p => p.ProcessName.Equals(taskId, StringComparison.CurrentCultureIgnoreCase)); + + if (process != null) + { + process.Kill(); + process.WaitForExit(10000); + } + } + public static List GetUserTasks(int userId) { List list = new List(); @@ -717,7 +749,7 @@ namespace WebsitePanel.EnterpriseServer return res; } - public static T StartResultTask(string source, string taskName, int itemId, IList parameters) where T : ResultObject, new() + 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(); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx index 8acbbbc0..30b3a522 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx @@ -13,9 +13,8 @@ - + - @@ -27,16 +26,15 @@ - +
- - In Progress +
+ CausesValidation="false" Text="Stop" OnClientClick="return confirm('Do you really want to terminate this task?');"> diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs index c8465f60..a1933493 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Tasks.ascx.cs @@ -66,34 +66,13 @@ namespace WebsitePanel.Portal // find controls HyperLink lnkTaskName = (HyperLink)e.Row.FindControl("lnkTaskName"); - Literal litTaskName = (Literal)e.Row.FindControl("litTaskName"); Literal litTaskDuration = (Literal)e.Row.FindControl("litTaskDuration"); - Panel pnlProgressBarContainer = (Panel)e.Row.FindControl("pnlProgressBarContainer"); Panel pnlProgressIndicator = (Panel)e.Row.FindControl("pnlProgressIndicator"); - Literal litProgressIndicator = (Literal)e.Row.FindControl("litProgressIndicator"); LinkButton cmdStop = (LinkButton)e.Row.FindControl("cmdStop"); - if (String.IsNullOrEmpty(task.TaskId)) - { - litTaskName.Visible = true; - litProgressIndicator.Visible = true; - - // bind controls - litTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName); - } - else - { - lnkTaskName.Visible = true; - pnlProgressBarContainer.Visible = true; - cmdStop.Visible = true; - - // bind controls - lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details"); - lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName); - - // stop button - cmdStop.CommandArgument = task.TaskId; - } + // bind controls + lnkTaskName.Text = GetAuditLogTaskName(task.Source, task.TaskName); + lnkTaskName.NavigateUrl = EditUrl("TaskID", task.TaskId, "view_details"); // duration TimeSpan duration = (TimeSpan)(DateTime.Now - task.StartDate); @@ -107,6 +86,9 @@ namespace WebsitePanel.Portal if (task.IndicatorMaximum > 0) percent = task.IndicatorCurrent * 100 / task.IndicatorMaximum; pnlProgressIndicator.Width = Unit.Percentage(percent); + + // stop button + cmdStop.CommandArgument = task.TaskId; } protected void gvTasks_RowCommand(object sender, GridViewCommandEventArgs e) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index 7c7be1d2..a5293d72 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.Portal private void BindTask() { - DateTime lastLogDate = DateTime.MinValue; + DateTime lastLogDate = DateTime.Now.AddYears(-1); if (ViewState["lastLogDate"] != null) lastLogDate = (DateTime)ViewState["lastLogDate"]; From 20f4b371d10cf73fa1ad83b9268522972e4b06c4 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 24 May 2013 15:46:10 +0300 Subject: [PATCH 12/24] fixed bugs Scheduler Service --- WebsitePanel/Database/update_db.sql | 218 +++++++++++++----- .../Scheduling/ScheduleInfo.cs | 7 - .../Tasks/BackgroundTask.cs | 7 +- .../Data/DataProvider.cs | 43 ++-- .../SendEmailNotification.cs | 8 +- .../TaskEventHandlers/SystemTriggersAgent.cs | 10 +- .../Packages/PackageController.cs | 4 +- .../Provisioning/BackupController.cs | 3 +- .../SchedulerTasks/BackupDatabaseTask.cs | 2 +- .../SchedulerTasks/BackupTask.cs | 2 +- .../CalculateExchangeDiskspaceTask.cs | 4 +- .../CalculatePackagesBandwidthTask.cs | 4 +- .../CalculatePackagesDiskspaceTask.cs | 4 +- .../SchedulerTasks/CheckWebSiteTask.cs | 4 +- .../SchedulerTasks/FTPFilesTask.cs | 2 +- .../SchedulerTasks/HostedSolutionReport.cs | 2 +- .../NotifyOverusedDatabasesTask.cs | 2 +- .../SchedulerTasks/RunSystemCommandTask.cs | 2 +- .../SendMailNotificationTask.cs | 2 +- .../SuspendOverusedPackagesTask.cs | 2 +- .../SchedulerTasks/ZipFilesTask.cs | 2 +- .../Scheduling/Scheduler.cs | 22 +- .../Scheduling/SchedulerController.cs | 31 +-- .../Tasks/SendEmailNotification.cs | 8 +- .../Tasks/TaskController.cs | 43 ++-- .../Tasks/TaskManager.cs | 75 ++++-- .../Users/UserController.cs | 2 +- .../VirtualizationServerController.cs | 2 +- ...lizationServerControllerForPrivateCloud.cs | 2 +- .../Wizards/WebApplicationsInstaller.cs | 3 +- 30 files changed, 332 insertions(+), 190 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index d536e693..862368bd 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -451,12 +451,13 @@ VALUES (1401, 41, N'Lync2013', N'Microsoft Lync Server 2013 Multitenant Hosting END GO --- Scheduler Service -ALTER TABLE Schedule -ADD LastFinish DATETIME NULL -GO +-------------------------------- Scheduler Service------------------------------------------------------ -UPDATE Schedule SET LastFinish = LastRun +IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = 'Schedule' + AND COLUMN_NAME = 'LastFinish') +ALTER TABLE Schedule +DROP COLUMN LastFinish GO ALTER PROCEDURE [dbo].[GetSchedule] @@ -478,7 +479,6 @@ SELECT TOP 1 S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, S.HistoriesNumber, @@ -538,7 +538,6 @@ SELECT S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, 1 AS StatusID, @@ -591,7 +590,6 @@ SELECT S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, 1 AS StatusID, @@ -693,7 +691,6 @@ SELECT S.ToTime, S.StartTime, S.LastRun, - S.LastFinish, S.NextRun, S.Enabled, 1 AS StatusID, @@ -739,7 +736,6 @@ ALTER PROCEDURE [dbo].[UpdateSchedule] @ToTime datetime, @StartTime datetime, @LastRun datetime, - @LastFinish datetime, @NextRun datetime, @Enabled bit, @PriorityID nvarchar(50), @@ -770,7 +766,6 @@ SET ToTime = @ToTime, StartTime = @StartTime, LastRun = @LastRun, - LastFinish = @LastFinish, NextRun = @NextRun, Enabled = @Enabled, PriorityID = @PriorityID, @@ -815,54 +810,30 @@ 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') +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetRunningSchedules') DROP PROCEDURE GetRunningSchedules GO -CREATE PROCEDURE [dbo].[GetRunningSchedules] -( - @ActorID int -) -AS +IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'BackgroundTaskStack') +DROP TABLE BackgroundTaskStack +GO -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.LastFinish, - 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 Schedule AS S -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 -WHERE (U.UserID = @ActorID OR U.OwnerID = @ActorID) - AND (ISNULL(S.LastRun, DATEADD(YEAR, -1, GETDATE())) > ISNULL(S.LastFinish, DATEADD(YEAR, -1, GETDATE()))) +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, @@ -917,9 +888,14 @@ CREATE TABLE BackgroundTaskStack ) 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, @@ -942,6 +918,7 @@ AS INSERT INTO BackgroundTasks ( + Guid, TaskID, ScheduleID, PackageID, @@ -962,6 +939,7 @@ INSERT INTO BackgroundTasks ) VALUES ( + @Guid, @TaskID, @ScheduleID, @PackageID, @@ -986,6 +964,10 @@ 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] ( @ActorID INT, @@ -995,6 +977,7 @@ AS SELECT TOP 1 T.ID, + T.Guid, T.TaskID, T.ScheduleID, T.PackageID, @@ -1019,6 +1002,10 @@ INNER JOIN BackgroundTaskStack AS TS WHERE T.TaskID = @TaskID AND T.UserID = @ActorID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks') +DROP PROCEDURE GetBackgroundTasks +GO + CREATE PROCEDURE [dbo].[GetBackgroundTasks] ( @ActorID INT @@ -1027,6 +1014,7 @@ AS SELECT T.ID, + T.Guid, T.TaskID, T.ScheduleId, T.PackageId, @@ -1051,14 +1039,20 @@ INNER JOIN BackgroundTaskStack AS TS WHERE T.UserID = @ActorID GO -CREATE PROCEDURE [dbo].[GetBackgroundTopTask] +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetThreadBackgroundTasks') +DROP PROCEDURE GetThreadBackgroundTasks +GO + +CREATE PROCEDURE [dbo].GetThreadBackgroundTasks ( - @ActorID INT + @ActorID INT, + @Guid UNIQUEIDENTIFIER ) AS -SELECT TOP 1 +SELECT T.ID, + T.Guid, T.TaskID, T.ScheduleId, T.PackageId, @@ -1080,10 +1074,52 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID +WHERE T.UserID = @ActorID AND T.Guid = @Guid +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask') +DROP PROCEDURE GetBackgroundTopTask +GO + +CREATE PROCEDURE [dbo].[GetBackgroundTopTask] +( + @ActorID INT, + @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.UserID = @ActorID AND T.Guid = @Guid ORDER BY T.StartDate DESC GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskLog') +DROP PROCEDURE AddBackgroundTaskLog +GO + CREATE PROCEDURE [dbo].[AddBackgroundTaskLog] ( @TaskID INT, @@ -1121,6 +1157,10 @@ VALUES ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTaskLogs') +DROP PROCEDURE GetBackgroundTaskLogs +GO + CREATE PROCEDURE [dbo].[GetBackgroundTaskLogs] ( @TaskID INT, @@ -1142,8 +1182,13 @@ 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, @@ -1164,6 +1209,7 @@ AS UPDATE BackgroundTasks SET + Guid = @Guid, ScheduleID = @ScheduleID, PackageID = @PackageID, TaskName = @TaskName, @@ -1181,6 +1227,10 @@ SET 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 @@ -1196,6 +1246,10 @@ 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, @@ -1218,6 +1272,10 @@ VALUES ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskParams') +DROP PROCEDURE DeleteBackgroundTaskParams +GO + CREATE PROCEDURE [dbo].[DeleteBackgroundTaskParams] ( @TaskID INT @@ -1228,6 +1286,10 @@ 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 @@ -1244,6 +1306,10 @@ VALUES ) GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskStack') +DROP PROCEDURE DeleteBackgroundTaskStack +GO + CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack] ( @TaskID INT @@ -1254,6 +1320,10 @@ DELETE FROM BackgroundTaskStack WHERE TaskID = @TaskID GO +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetProcessBackgroundTasks') +DROP PROCEDURE GetProcessBackgroundTasks +GO + CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] ( @ActorID INT, @@ -1283,4 +1353,44 @@ SELECT T.Status FROM BackgroundTasks AS T WHERE T.UserID = @ActorID AND 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] +( + @ActorID INT, + @ScheduleID 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.Guid = ( + SELECT Guid FROM BackgroundTasks + WHERE ScheduleID = @ScheduleID + AND UserID = @ActorID + AND Completed = 0 AND Status IN (1, 3)) + AND T.UserID = @ActorID AND T.Completed = 0 AND T.Status IN (1, 3) GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs index f618286d..4a8d0a54 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Scheduling/ScheduleInfo.cs @@ -45,7 +45,6 @@ namespace WebsitePanel.EnterpriseServer private DateTime toTime; private DateTime startTime; private DateTime lastRun; - private DateTime lastFinish; private DateTime nextRun; private bool enabled; private string statusId; @@ -122,12 +121,6 @@ namespace WebsitePanel.EnterpriseServer set { this.lastRun = value; } } - public System.DateTime LastFinish - { - get { return this.lastFinish; } - set { this.lastFinish = value; } - } - public System.DateTime NextRun { get { return this.nextRun; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index afc5546e..6b741c18 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -43,6 +43,8 @@ namespace WebsitePanel.EnterpriseServer public int Id { get; set; } + public Guid Guid { get; set; } + public String TaskId { get; set; } public int ScheduleId { get; set; } @@ -98,10 +100,11 @@ namespace WebsitePanel.EnterpriseServer Logs = new List(); } - public BackgroundTask(String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, + 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() { + Guid = guid; TaskId = taskId; UserId = userId; EffectiveUserId = effectiveUserId; @@ -172,6 +175,8 @@ namespace WebsitePanel.EnterpriseServer public Object Value { get; set; } + public String TypeName { get; set; } + public String SerializerValue { get; set; } #endregion diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index cc069d0c..85df4b3f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1845,29 +1845,46 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } + public static IDataReader GetScheduleBackgroundTasks(int actorId, int scheduleId) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetScheduleBackgroundTasks", + new SqlParameter("@actorId", actorId), + new SqlParameter("@scheduleId", scheduleId)); + } + public static IDataReader GetBackgroundTasks(int actorId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetBackgroundTasks", - new SqlParameter("actorId", actorId)); + new SqlParameter("@actorId", actorId)); + } + + public static IDataReader GetBackgroundTasks(int actorId, Guid guid) + { + return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, + ObjectQualifier + "GetThreadBackgroundTasks", + new SqlParameter("@actorId", actorId), + new SqlParameter("@guid", guid)); } public static IDataReader GetProcessBackgroundTasks(int actorId, BackgroundTaskStatus status) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetProcessBackgroundTasks", - new SqlParameter("actorId", actorId), - new SqlParameter("status", (int)status)); + new SqlParameter("@actorId", actorId), + new SqlParameter("@status", (int)status)); } - public static IDataReader GetBackgroundTopTask(int actorId) + public static IDataReader GetBackgroundTopTask(int actorId, Guid guid) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetBackGroundTopTask", - new SqlParameter("actorId", actorId)); + new SqlParameter("@actorId", actorId), + new SqlParameter("@guid", guid)); } - public static int AddBackgroundTask(string taskId, int scheduleId, int packageId, int userId, + 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) @@ -1878,6 +1895,7 @@ namespace WebsitePanel.EnterpriseServer SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "AddBackgroundTask", prmId, + new SqlParameter("@guid", guid), new SqlParameter("@taskId", taskId), new SqlParameter("@scheduleId", scheduleId), new SqlParameter("@packageId", packageId), @@ -1923,12 +1941,13 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@startLogTime", startLogTime)); } - public static void UpdateBackgroundTask(int taskId, int scheduleId, int packageId, string taskName, int itemId, + 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), @@ -2002,13 +2021,6 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } - public static IDataReader GetRunningSchedules(int actorId) - { - return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetRunningSchedules", - new SqlParameter("@actorId", actorId)); - } - public static DataSet GetSchedules(int actorId, int packageId) { return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, @@ -2107,7 +2119,7 @@ namespace WebsitePanel.EnterpriseServer 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 lastFinish, DateTime nextRun, bool enabled, string priorityId, + DateTime lastRun, DateTime nextRun, bool enabled, string priorityId, int historiesNumber, int maxExecutionTime, int weekMonthDay, string xmlParameters) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, @@ -2122,7 +2134,6 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@toTime", toTime), new SqlParameter("@startTime", startTime), new SqlParameter("@lastRun", (lastRun == DateTime.MinValue) ? DBNull.Value : (object)lastRun), - new SqlParameter("@lastFinish", (lastFinish == DateTime.MinValue) ? DBNull.Value : (object)lastFinish), new SqlParameter("@nextRun", nextRun), new SqlParameter("@enabled", enabled), new SqlParameter("@priorityId", priorityId), diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs index 8dbdf99e..114c09e6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SendEmailNotification.cs @@ -45,7 +45,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers /// public override void OnComplete() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; if (!TaskManager.HasErrors(topTask)) { @@ -74,7 +74,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // send an e-mail notification try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool sendNotification = Utils.ParseBool(topTask.GetParamValue(SystemTaskParams.PARAM_SEND_EMAIL), false); @@ -117,7 +117,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // Read task parameters Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); @@ -146,7 +146,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers // try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // Read task parameters Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs index cc7f4edd..b7b8efec 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Ecommerce/TaskEventHandlers/SystemTriggersAgent.cs @@ -44,7 +44,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers public override void OnComplete() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; if (!TaskManager.HasErrors(topTask)) { @@ -66,10 +66,8 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterInvoiceActivationTrigger() { - BackgroundTask topTask = TaskController.GetTopTask(); - // Read contract invoice - Invoice invoice = (Invoice)topTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); + Invoice invoice = (Invoice)TaskManager.TopTask.GetParamValue(SystemTaskParams.PARAM_INVOICE); // TriggerSystem.TriggerController.AddSystemTrigger(invoice.InvoiceId.ToString(), ActivateInvoiceTrigger.STATUS_AWAITING_PAYMENT, typeof(ActivateInvoiceTrigger)); @@ -77,7 +75,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void RegisterContractActivationTrigger() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // Ensure the contract has been registered successfully if (topTask.ContainsParam(SystemTaskParams.PARAM_CONTRACT)) @@ -94,7 +92,7 @@ namespace WebsitePanel.Ecommerce.EnterpriseServer.TaskEventHandlers private void ActivatePaymentSystemTriggers() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; CustomerPayment payment = (CustomerPayment)topTask.GetParamValue(SystemTaskParams.PARAM_PAYMENT); Contract contract = (Contract)topTask.GetParamValue(SystemTaskParams.PARAM_CONTRACT); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 9ebfda7d..522000ad 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -617,7 +617,7 @@ namespace WebsitePanel.EnterpriseServer } } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); @@ -722,7 +722,7 @@ namespace WebsitePanel.EnterpriseServer if (homeId < 0) result.Result = homeId; - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = userId; topTask.UpdateParamValue("Signup", signup); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs index f11491af..fb4a6d20 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs @@ -342,7 +342,8 @@ namespace WebsitePanel.EnterpriseServer } } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; + topTask.IndicatorCurrent = topTask.IndicatorMaximum; TaskController.UpdateTask(topTask); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs index f6cfa5b1..9a871c66 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupDatabaseTask.cs @@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer // - BACKUP_NAME // - ZIP_BACKUP - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; string databaseGroup = (string)topTask.GetParamValue("DATABASE_GROUP"); string databaseName = (string)topTask.GetParamValue("DATABASE_NAME"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs index cabc75e6..164f5ea9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs @@ -54,7 +54,7 @@ namespace WebsitePanel.EnterpriseServer string storeServerFolder; bool deleteTempBackup; - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; try { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs index fb49452f..b6e477cc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculateExchangeDiskspaceTask.cs @@ -45,10 +45,8 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { - BackgroundTask topTask = TaskController.GetTopTask(); - // get all space organizations recursively - List items = ExchangeServerController.GetExchangeOrganizations(topTask.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 index 2cf26867..995415f9 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesBandwidthTask.cs @@ -50,10 +50,8 @@ namespace WebsitePanel.EnterpriseServer public void CalculateBandwidth() { - BackgroundTask topTask = TaskController.GetTopTask(); - // get all owned packages - List packages = PackageController.GetPackagePackages(topTask.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 index d3f15df8..200648cc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CalculatePackagesDiskspaceTask.cs @@ -51,10 +51,8 @@ namespace WebsitePanel.EnterpriseServer public void CalculateDiskspace() { - BackgroundTask topTask = TaskController.GetTopTask(); - // get all owned packages - List packages = PackageController.GetPackagePackages(topTask.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/CheckWebSiteTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs index 438fbc41..574e3d26 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/CheckWebSiteTask.cs @@ -57,7 +57,7 @@ namespace WebsitePanel.EnterpriseServer // - MAIL_SUBJECT // - MAIL_BODY - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string url = (string)topTask.GetParamValue("URL"); @@ -128,7 +128,7 @@ namespace WebsitePanel.EnterpriseServer private void SendMailMessage(string url, string message, string content) { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // input parameters string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs index 35ff4e85..1738f145 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/FTPFilesTask.cs @@ -46,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer // - FTP_PASSWORD // - FTP_FOLDER - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string filePath = (string)topTask.GetParamValue("FILE_PATH"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs index 68dea40f..fedeb3e8 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/HostedSolutionReport.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.EnterpriseServer { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool isExchange = Utils.ParseBool(topTask.GetParamValue(EXCHANGE_REPORT), false); bool isSharePoint = Utils.ParseBool(topTask.GetParamValue(SHAREPOINT_REPORT), false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs index 3700bc0a..b38e5f38 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/NotifyOverusedDatabasesTask.cs @@ -44,7 +44,7 @@ namespace WebsitePanel.EnterpriseServer // - DISKSPACE_OVERUSED // - BANDWIDTH_OVERUSED - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get the list of all packages List packages = PackageController.GetPackagePackages(topTask.PackageId, false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs index 0de5b022..e05bf145 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/RunSystemCommandTask.cs @@ -42,7 +42,7 @@ namespace WebsitePanel.EnterpriseServer // - SERVER_NAME // - EXECUTABLE_PATH - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string serverName = (string)topTask.GetParamValue("SERVER_NAME"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs index a882010c..b7a0308f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SendMailNotificationTask.cs @@ -42,7 +42,7 @@ namespace WebsitePanel.EnterpriseServer // - MAIL_SUBJECT // - MAIL_BODY - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string mailFrom = (string)topTask.GetParamValue("MAIL_FROM"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs index e5cd0413..e7201be1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/SuspendOverusedPackagesTask.cs @@ -43,7 +43,7 @@ namespace WebsitePanel.EnterpriseServer // - DISKSPACE_OVERUSED // - BANDWIDTH_OVERUSED - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get the list of all packages List packages = PackageController.GetPackagePackages(topTask.PackageId, false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs index 52aee2b9..20247fee 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/ZipFilesTask.cs @@ -40,7 +40,7 @@ namespace WebsitePanel.EnterpriseServer // - FOLDER // - ZIP_FILE - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; // get input parameters string filesList = (string)topTask.GetParamValue("FOLDER"); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index bc8b8490..e111920c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -115,22 +115,15 @@ namespace WebsitePanel.EnterpriseServer var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); foreach (var task in tasks) { - StartManualTask(task); + new Thread(() => RunBackgroundTask(task)) {Priority = ThreadPriority.Highest}.Start(); } tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); foreach (var task in tasks) { - TaskManager.StopTask(task.TaskId); + TaskManager.StopTask(task); } } - private static void StartManualTask(BackgroundTask backgroundTask) - { - new Thread(() => RunBackgroundTask(backgroundTask)) { Priority = ThreadPriority.Highest }.Start(); - - backgroundTask.Status = BackgroundTaskStatus.Run; - - TaskController.UpdateTask(backgroundTask); - } + private static void RunBackgroundTask(BackgroundTask backgroundTask) { UserInfo user = PackageController.GetPackageOwner(backgroundTask.PackageId); @@ -138,13 +131,18 @@ namespace WebsitePanel.EnterpriseServer SecurityContext.SetThreadPrincipal(user.UserId); var schedule = SchedulerController.GetScheduleComplete(backgroundTask.ScheduleId); - - TaskManager.StartTask(backgroundTask.Source, backgroundTask.TaskName, backgroundTask.ItemName, backgroundTask.ItemId, backgroundTask.ScheduleId, backgroundTask.PackageId, backgroundTask.MaximumExecutionTime, backgroundTask.Params); + + backgroundTask.Guid = TaskManager.Guid; + backgroundTask.Status = BackgroundTaskStatus.Run; + + TaskController.UpdateTask(backgroundTask); try { var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); + objTask.DoWork(); + Thread.Sleep(100000); } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 62c067d8..1a2c354a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -55,12 +55,6 @@ namespace WebsitePanel.EnterpriseServer DataProvider.GetScheduleTask(SecurityContext.User.UserId, taskId)); } - public static List GetRunningSchedules() - { - return ObjectUtils.CreateListFromDataReader( - DataProvider.GetRunningSchedules(SecurityContext.User.UserId)); - } - public static DataSet GetSchedules(int packageId) { DataSet ds = DataProvider.GetSchedules(SecurityContext.User.UserId, packageId); @@ -170,6 +164,7 @@ namespace WebsitePanel.EnterpriseServer prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); var backgroundTask = new BackgroundTask( + Guid.NewGuid(), schedule.ScheduleInfo.TaskId, SecurityContext.User.UserId, SecurityContext.User.IsPeer @@ -197,22 +192,12 @@ namespace WebsitePanel.EnterpriseServer if (schedule == null) return 0; - var parameters = schedule.ScheduleInfo.Parameters.Select( - prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); - - var backgroundTask = new BackgroundTask( - schedule.ScheduleInfo.TaskId, - SecurityContext.User.UserId, - SecurityContext.User.IsPeer - ? SecurityContext.User.OwnerId - : SecurityContext.User.UserId, "SCHEDULER", "STOP_SCHEDULE", - schedule.ScheduleInfo.ScheduleName, - schedule.ScheduleInfo.ScheduleId, - schedule.ScheduleInfo.ScheduleId, - schedule.ScheduleInfo.PackageId, - schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Stopping }; - - TaskController.AddTask(backgroundTask); + foreach (BackgroundTask task in TaskController.GetScheduleTasks(scheduleId)) + { + task.Status = BackgroundTaskStatus.Stopping; + + TaskController.UpdateTask(task); + } return 0; @@ -338,7 +323,7 @@ namespace WebsitePanel.EnterpriseServer DataProvider.UpdateSchedule(SecurityContext.User.UserId, schedule.ScheduleId, schedule.TaskId, schedule.ScheduleName, schedule.ScheduleTypeId, schedule.Interval, schedule.FromTime, schedule.ToTime, schedule.StartTime, - schedule.LastRun, schedule.LastFinish, schedule.NextRun, schedule.Enabled, schedule.PriorityId, + schedule.LastRun, schedule.NextRun, schedule.Enabled, schedule.PriorityId, schedule.HistoriesNumber, schedule.MaxExecutionTime, schedule.WeekMonthDay, xmlParameters); // re-schedule tasks diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs index e69beb1f..e36eacb6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/SendEmailNotification.cs @@ -40,7 +40,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks public override void OnComplete() { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; if (!TaskManager.HasErrors(topTask)) { @@ -78,7 +78,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); @@ -98,7 +98,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; int userId = Utils.ParseInt(topTask.GetParamValue("UserId").ToString(), 0); bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); @@ -125,7 +125,7 @@ namespace WebsitePanel.EnterpriseServer.Tasks { try { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; bool sendLetter = Utils.ParseBool(topTask.GetParamValue("SendLetter"), false); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index 1959d789..d3ece14a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -15,32 +15,39 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = ObjectUtils.FillObjectFromDataReader( DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId)); - if (task == null) - { - return null; - } - task.Params = GetTaskParams(task.Id); return task; } + public static List GetScheduleTasks(int scheduleId) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetScheduleBackgroundTasks(SecurityContext.User.UserId, scheduleId)); + } + public static List GetTasks() { return ObjectUtils.CreateListFromDataReader( DataProvider.GetBackgroundTasks(SecurityContext.User.UserId)); } + public static List GetTasks(Guid guid) + { + return ObjectUtils.CreateListFromDataReader( + DataProvider.GetBackgroundTasks(SecurityContext.User.UserId, guid)); + } + public static List GetProcessTasks(BackgroundTaskStatus status) { return ObjectUtils.CreateListFromDataReader( DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status)); } - public static BackgroundTask GetTopTask() + public static BackgroundTask GetTopTask(Guid guid) { BackgroundTask task = ObjectUtils.FillObjectFromDataReader( - DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId)); + DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId, guid)); task.Params = GetTaskParams(task.Id); @@ -49,7 +56,7 @@ namespace WebsitePanel.EnterpriseServer public static void AddTask(BackgroundTask task) { - int taskId = DataProvider.AddBackgroundTask(task.TaskId, task.ScheduleId, task.PackageId, task.UserId, + 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, @@ -62,14 +69,14 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateTask(BackgroundTask task) { - DataProvider.UpdateBackgroundTask(task.Id, task.ScheduleId, task.PackageId, task.TaskName, task.ItemId, + 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); AddTaskParams(task.Id, task.Params); - if (task.Completed || task.Status == BackgroundTaskStatus.Abort) + if (task.Completed || task.Status == BackgroundTaskStatus.Abort || task.Status == BackgroundTaskStatus.Stopping) { DeleteTaskStack(task.Id); } @@ -82,6 +89,11 @@ namespace WebsitePanel.EnterpriseServer public static void AddTaskParams(int taskId, List parameters) { + if (parameters == null) + { + return; + } + foreach (BackgroundTaskParameter param in SerializeParams(parameters)) { DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue); @@ -117,14 +129,11 @@ namespace WebsitePanel.EnterpriseServer private static List SerializeParams(List parameters) { - if (parameters == null) - { - return new List(); - } - foreach (BackgroundTaskParameter param in parameters) { - XmlSerializer serializer = new XmlSerializer(param.Value.GetType()); + param.TypeName = param.Value.GetType().Name; + + XmlSerializer serializer = new XmlSerializer(Type.GetType(param.TypeName)); MemoryStream ms = new MemoryStream(); serializer.Serialize(ms, param.Value); @@ -141,7 +150,7 @@ namespace WebsitePanel.EnterpriseServer { foreach (BackgroundTaskParameter param in parameters) { - XmlSerializer deserializer = new XmlSerializer(param.SerializerValue.GetType()); + XmlSerializer deserializer = new XmlSerializer(Type.GetType(param.TypeName)); StringReader sr = new StringReader(param.SerializerValue); param.Value = deserializer.Deserialize(sr); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index c45270f6..1c6143dc 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -52,6 +52,20 @@ namespace WebsitePanel.EnterpriseServer 60000, // start from 1 minute 60000); // invoke each minute + protected static Guid? _Guid; + + public static Guid Guid + { + get + { + if (_Guid == null) + { + _Guid = Guid.NewGuid(); + } + + return _Guid.Value; + } + } public static void StartTask(string source, string taskName) { @@ -142,10 +156,10 @@ namespace WebsitePanel.EnterpriseServer int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId; String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; - BackgroundTask task = new BackgroundTask(taskId, userId, effectiveUserId, source, taskName, itemNameStr, + BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, itemId, scheduleId, packageId, maximumExecutionTime, parameters); - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count > 0) { @@ -191,10 +205,10 @@ namespace WebsitePanel.EnterpriseServer // ERROR WriteLogRecord(2, ex.Message, ex.StackTrace); - BackgroundTask topTask = TaskController.GetTopTask(); - - 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); + 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) @@ -219,7 +233,7 @@ namespace WebsitePanel.EnterpriseServer private static void WriteLogRecord(int severity, string text, string stackTrace, params string[] textParameters) { - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count > 0) { @@ -246,12 +260,12 @@ namespace WebsitePanel.EnterpriseServer public static void CompleteTask() { - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count == 0) return; - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = tasks[tasks.Count - 1]; // call event handler CallTaskEventHandler(topTask, true); @@ -284,7 +298,7 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateParam(String name, Object value) { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -298,7 +312,7 @@ namespace WebsitePanel.EnterpriseServer { set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -313,7 +327,7 @@ namespace WebsitePanel.EnterpriseServer { set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -326,7 +340,7 @@ namespace WebsitePanel.EnterpriseServer public static void UpdateParams(Hashtable parameters) { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; if (topTask == null) return; @@ -393,7 +407,7 @@ namespace WebsitePanel.EnterpriseServer static void PurgeCompletedTasks(object obj) { - List tasks = TaskController.GetTasks(); + List tasks = TaskController.GetTasks(Guid); foreach (BackgroundTask task in tasks) { @@ -411,7 +425,13 @@ namespace WebsitePanel.EnterpriseServer { set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + topTask.IndicatorMaximum = value; TaskController.UpdateTask(topTask); @@ -422,11 +442,17 @@ namespace WebsitePanel.EnterpriseServer { get { - return TaskController.GetTopTask().IndicatorCurrent; + return TopTask.IndicatorCurrent; } set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + topTask.IndicatorCurrent = value; TaskController.UpdateTask(topTask); @@ -437,11 +463,17 @@ namespace WebsitePanel.EnterpriseServer { get { - return TaskController.GetTopTask().MaximumExecutionTime; + return TopTask.MaximumExecutionTime; } set { - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TopTask; + + if (topTask == null) + { + return; + } + topTask.MaximumExecutionTime = value; TaskController.UpdateTask(topTask); @@ -453,6 +485,11 @@ namespace WebsitePanel.EnterpriseServer return task.Severity == 2; } + public static BackgroundTask TopTask + { + get { return TaskController.GetTopTask(Guid); } + } + public static BackgroundTask GetTask(string taskId) { BackgroundTask task = TaskController.GetTask(taskId); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs index 1f1254e5..f1690bd6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs @@ -448,7 +448,7 @@ namespace WebsitePanel.EnterpriseServer return BusinessErrorCodes.ERROR_USER_ALREADY_EXISTS; } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs index 7dd16a43..b6dec6b3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Virtualization/VirtualizationServerController.cs @@ -1760,7 +1760,7 @@ namespace WebsitePanel.EnterpriseServer return res; } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = machine.Id; topTask.ItemName = machine.Name; topTask.PackageId = machine.PackageId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs index d33712dd..7ec47d27 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/VirtualizationForPrivateCloud/VirtualizationServerControllerForPrivateCloud.cs @@ -1803,7 +1803,7 @@ namespace WebsitePanel.EnterpriseServer return res; } - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; topTask.ItemId = machine.Id; topTask.ItemName = machine.Name; topTask.PackageId = machine.PackageId; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs index bea72671..aa40c3dd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Wizards/WebApplicationsInstaller.cs @@ -101,7 +101,8 @@ namespace WebsitePanel.EnterpriseServer // get application info app = GetApplication(inst.PackageId, inst.ApplicationId); - BackgroundTask topTask = TaskController.GetTopTask(); + BackgroundTask topTask = TaskManager.TopTask; + topTask.ItemName = app.Name; TaskController.UpdateTask(topTask); From b2d9fb43b218d2d81c915ba91e3bfad7a20eaa77 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 24 May 2013 17:47:39 +0300 Subject: [PATCH 13/24] Testing and fixing scheduler --- WebsitePanel/Database/update_db.sql | 33 +++++++------------ .../Tasks/BackgroundTask.cs | 12 ++++++- .../Data/DataProvider.cs | 5 +-- .../Scheduling/SchedulerController.cs | 8 ++--- .../Scheduling/SchedulerJob.cs | 2 +- .../Tasks/TaskController.cs | 27 +++++---------- .../Tasks/TaskManager.cs | 8 ++--- 7 files changed, 44 insertions(+), 51 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 862368bd..5ea6fef1 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -1,18 +1,4 @@ -USE [${install.database}] -GO - --- update database version -DECLARE @build_version nvarchar(10), @build_date datetime -SET @build_version = N'${release.version}' -SET @build_date = '${release.date}T00:00:00' -- ISO 8601 Format (YYYY-MM-DDTHH:MM:SS) - -IF NOT EXISTS (SELECT * FROM [dbo].[Versions] WHERE [DatabaseVersion] = @build_version) -BEGIN - INSERT [dbo].[Versions] ([DatabaseVersion], [BuildDate]) VALUES (@build_version, @build_date) -END -GO - - + --- Fix on version 2.0 DELETE FROM HostingPlanQuotas WHERE QuotaID = 340 GO @@ -861,6 +847,7 @@ CREATE TABLE BackgroundTaskParameters TaskID INT NOT NULL, Name NVARCHAR(255), SerializerValue NTEXT, + TypeName NVARCHAR(255), FOREIGN KEY (TaskID) REFERENCES BackgroundTasks (ID) ) GO @@ -1074,7 +1061,7 @@ SELECT FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID AND T.Guid = @Guid +WHERE T.EffectiveUserID = @ActorID AND T.Guid = @Guid GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask') @@ -1112,7 +1099,7 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID AND T.Guid = @Guid +WHERE T.EffectiveUserID = @ActorID AND T.Guid = @Guid ORDER BY T.StartDate DESC GO @@ -1241,7 +1228,8 @@ SELECT P.ParameterID, P.TaskID, P.Name, - P.SerializerValue + P.SerializerValue, + P.TypeName FROM BackgroundTaskParameters AS P WHERE P.TaskID = @TaskID GO @@ -1254,7 +1242,8 @@ CREATE PROCEDURE [dbo].[AddBackgroundTaskParam] ( @TaskID INT, @Name NVARCHAR(255), - @Value NTEXT + @Value NTEXT, + @TypeName NVARCHAR(255) ) AS @@ -1262,13 +1251,15 @@ INSERT INTO BackgroundTaskParameters ( TaskID, Name, - SerializerValue + SerializerValue, + TypeName ) VALUES ( @TaskID, @Name, - @Value + @Value, + @TypeName ) GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 6b741c18..9529583e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -39,6 +39,12 @@ namespace WebsitePanel.EnterpriseServer public class BackgroundTask { + #region Fields + + private List parameters; + + #endregion + #region Properties public int Id { get; set; } @@ -83,7 +89,11 @@ namespace WebsitePanel.EnterpriseServer public List Logs { get; set; } - public List Params { get; set; } + public List Params + { + get { return parameters ?? (parameters = new List()); } + set { parameters = value; } + } #endregion diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 85df4b3f..60ad233e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1976,13 +1976,14 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } - public static void AddBackgroundTaskParam(int taskId, string name, string value) + 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("@value", value), + new SqlParameter("@typeName", typeName)); } public static void DeleteBackgroundTaskParams(int taskId) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 1a2c354a..02298569 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -152,10 +152,10 @@ namespace WebsitePanel.EnterpriseServer { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo); - + if (accountCheck < 0) return accountCheck; - + SchedulerJob schedule = GetScheduleComplete(scheduleId); if (schedule == null) return 0; @@ -177,9 +177,9 @@ namespace WebsitePanel.EnterpriseServer schedule.ScheduleInfo.MaxExecutionTime, parameters) { Status = BackgroundTaskStatus.Starting }; TaskController.AddTask(backgroundTask); - + return 0; - } + } public static int StopSchedule(int scheduleId) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index a1053325..7475b76c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -109,7 +109,7 @@ namespace WebsitePanel.EnterpriseServer objTask.DoWork(); else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", - task.TaskType)); + task.TaskType)); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index d3ece14a..cf6dac63 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -88,15 +88,10 @@ namespace WebsitePanel.EnterpriseServer } public static void AddTaskParams(int taskId, List parameters) - { - if (parameters == null) - { - return; - } - + { foreach (BackgroundTaskParameter param in SerializeParams(parameters)) { - DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue); + DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue, param.TypeName); } } @@ -131,9 +126,10 @@ namespace WebsitePanel.EnterpriseServer { foreach (BackgroundTaskParameter param in parameters) { - param.TypeName = param.Value.GetType().Name; + var type = param.Value.GetType(); + param.TypeName = type.FullName; - XmlSerializer serializer = new XmlSerializer(Type.GetType(param.TypeName)); + XmlSerializer serializer = new XmlSerializer(type); MemoryStream ms = new MemoryStream(); serializer.Serialize(ms, param.Value); @@ -178,22 +174,17 @@ namespace WebsitePanel.EnterpriseServer private static string[] ReBuildParametersXml(string parameters) { - string[] textParameters = new string[] {}; + var textParameters = new List(); - XmlDocument xmlDoc = new XmlDocument(); + var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(parameters); if (xmlDoc != null) { - int index = 0; - foreach (XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter")) - { - textParameters[index] = xmlParameter.Attributes.GetNamedItem("value").Value; - index++; - } + textParameters.AddRange(from XmlNode xmlParameter in xmlDoc.SelectNodes("parameters/parameter") select xmlParameter.Attributes.GetNamedItem("value").Value); } - return textParameters; + return textParameters.ToArray(); } } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 1c6143dc..c0e0d083 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -141,7 +141,7 @@ namespace WebsitePanel.EnterpriseServer 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, new List()); + StartTask(null, source, taskName, itemName, itemId, scheduleId, packageId, maximumExecutionTime, parameters); } public static void StartTask(string taskId, string source, string taskName, object itemName, int itemId, @@ -152,8 +152,8 @@ namespace WebsitePanel.EnterpriseServer taskId = Guid.NewGuid().ToString("N"); } - int userId = SecurityContext.User.UserId; - int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : userId; + int userId = SecurityContext.User.OwnerId; + int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : SecurityContext.User.UserId; String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, @@ -595,7 +595,7 @@ namespace WebsitePanel.EnterpriseServer // get user tasks foreach (BackgroundTask task in TaskController.GetTasks()) { - if (task.EffectiveUserId == userId && !task.Completed) + if (task.UserId == userId && !task.Completed) list.Add(task); } return list; From a52697864badeb27fd89f099fe25e4128db8e908 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 24 May 2013 17:49:02 +0300 Subject: [PATCH 14/24] Testing and fixing scheduler --- WebsitePanel/Database/update_db.sql | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 5ea6fef1..efe4d6d7 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -1,4 +1,17 @@ - +USE [${install.database}] +GO + +-- update database version +DECLARE @build_version nvarchar(10), @build_date datetime +SET @build_version = N'${release.version}' +SET @build_date = '${release.date}T00:00:00' -- ISO 8601 Format (YYYY-MM-DDTHH:MM:SS) + +IF NOT EXISTS (SELECT * FROM [dbo].[Versions] WHERE [DatabaseVersion] = @build_version) +BEGIN + INSERT [dbo].[Versions] ([DatabaseVersion], [BuildDate]) VALUES (@build_version, @build_date) +END +GO + --- Fix on version 2.0 DELETE FROM HostingPlanQuotas WHERE QuotaID = 340 GO From 91d9ee7d99381c2fd6d79f0d8c32af36f1ad00c8 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 24 May 2013 19:22:43 +0300 Subject: [PATCH 15/24] fixed guid --- .../Tasks/TaskManager.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index c0e0d083..f1806b77 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -52,18 +52,18 @@ namespace WebsitePanel.EnterpriseServer 60000, // start from 1 minute 60000); // invoke each minute - protected static Guid? _Guid; - public static Guid Guid { get { - if (_Guid == null) + Guid? guid = (Guid?)Thread.GetData(Thread.GetNamedDataSlot("BackgroundTaskGuid")); + if (!guid.HasValue) { - _Guid = Guid.NewGuid(); + guid = Guid.NewGuid(); + Thread.SetData(Thread.GetNamedDataSlot("BackgroundTaskGuid"), guid.Value); } - return _Guid.Value; + return guid.Value; } } From 2cf0890e14f46164a9ea638274efcc8e83af2135 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 27 May 2013 16:40:31 +0300 Subject: [PATCH 16/24] Scheduler Service fixes --- WebsitePanel/Database/update_db.sql | 6 +- .../Data/DataProvider.cs | 5 +- .../Scheduling/Scheduler.cs | 64 ++++++++----------- .../Tasks/TaskController.cs | 2 +- .../WebsitePanel.EnterpriseServer.Code.csproj | 2 + .../SchedulerServiceInstaller.cs | 2 +- 6 files changed, 37 insertions(+), 44 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index efe4d6d7..cca0ebdb 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -12,6 +12,7 @@ BEGIN END GO + --- Fix on version 2.0 DELETE FROM HostingPlanQuotas WHERE QuotaID = 340 GO @@ -1329,8 +1330,7 @@ DROP PROCEDURE GetProcessBackgroundTasks GO CREATE PROCEDURE [dbo].[GetProcessBackgroundTasks] -( - @ActorID INT, +( @Status INT ) AS @@ -1356,7 +1356,7 @@ SELECT T.NotifyOnComplete, T.Status FROM BackgroundTasks AS T -WHERE T.UserID = @ActorID AND T.Completed = 0 AND T.Status = @Status +WHERE T.Completed = 0 AND T.Status = @Status GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetScheduleBackgroundTasks') diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 60ad233e..87af1b43 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1868,11 +1868,10 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@guid", guid)); } - public static IDataReader GetProcessBackgroundTasks(int actorId, BackgroundTaskStatus status) + public static IDataReader GetProcessBackgroundTasks(BackgroundTaskStatus status) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetProcessBackgroundTasks", - new SqlParameter("@actorId", actorId), + ObjectQualifier + "GetProcessBackgroundTasks", new SqlParameter("@status", (int)status)); } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index e111920c..d54c76dc 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; @@ -41,18 +42,18 @@ namespace WebsitePanel.EnterpriseServer public sealed class Scheduler { - 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 SchedulerJob nextSchedule = null; public static void Start() - { - // schedule tasks - ScheduleTasks(); + { + var serviceController = new ServiceController("WebsitePanel Scheduler"); + + if (serviceController != null && serviceController.Status != ServiceControllerStatus.Running) + { + serviceController.WaitForStatus(ServiceControllerStatus.Running); + } + + ScheduleTasks(null); } public static bool IsScheduleActive(int scheduleId) @@ -81,43 +82,34 @@ namespace WebsitePanel.EnterpriseServer TaskManager.StopTask(activeTask.TaskId); } - public static void ScheduleTasks() - { - RunManualTasks(); - - nextSchedule = SchedulerController.GetNextSchedule(); - - // set timer + public static void ScheduleTasks(object obj) + { + RunManualTasks(); + nextSchedule = SchedulerController.GetNextSchedule(); + if (nextSchedule != null) - { + { if (nextSchedule.ScheduleInfo.NextRun <= DateTime.Now) - { - // this will put the timer to sleep - scheduleTimer.Change(Timeout.Infinite, Timeout.Infinite); - 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); - } + } } + + Thread.Sleep(30000); + ScheduleTasks(null); } private static void RunManualTasks() { - var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); + var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); + foreach (var task in tasks) { new Thread(() => RunBackgroundTask(task)) {Priority = ThreadPriority.Highest}.Start(); } - tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); + + tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); + foreach (var task in tasks) { TaskManager.StopTask(task); @@ -170,7 +162,7 @@ namespace WebsitePanel.EnterpriseServer RunSchedule(nextSchedule, true); // schedule next task - ScheduleTasks(); + ScheduleTasks(null); } static void RunSchedule(SchedulerJob schedule, bool changeNextRun) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index cf6dac63..58cf6085 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -41,7 +41,7 @@ namespace WebsitePanel.EnterpriseServer public static List GetProcessTasks(BackgroundTaskStatus status) { return ObjectUtils.CreateListFromDataReader( - DataProvider.GetProcessBackgroundTasks(SecurityContext.User.UserId, status)); + DataProvider.GetProcessBackgroundTasks(status)); } public static BackgroundTask GetTopTask(Guid guid) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj index c7dd2261..6b10906d 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/WebsitePanel.EnterpriseServer.Code.csproj @@ -21,6 +21,7 @@ DEBUG;TRACE prompt 4 + AnyCPU pdbonly @@ -42,6 +43,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs index 6d321a24..3bbafcff 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerServiceInstaller.cs @@ -17,7 +17,7 @@ namespace WebsitePanel.SchedulerService processInstaller.Account = ServiceAccount.LocalSystem; serviceInstaller.DisplayName = "WebsitePanel Scheduler"; serviceInstaller.StartType = ServiceStartMode.Automatic; - serviceInstaller.ServiceName = "WebsitePanlel Scheduler"; + serviceInstaller.ServiceName = "WebsitePanel Scheduler"; Installers.Add(processInstaller); Installers.Add(serviceInstaller); From bcceb95f924b47a8e4a745e8fc84a583097d1c3b Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 27 May 2013 19:10:30 +0300 Subject: [PATCH 17/24] Scheduler service fixes --- .../Scheduling/Scheduler.cs | 38 ++++++++--------- .../Tasks/TaskController.cs | 24 +++++++++-- .../Tasks/TaskManager.cs | 41 +++++++++++-------- 3 files changed, 62 insertions(+), 41 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index d54c76dc..05834c09 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -42,18 +42,12 @@ namespace WebsitePanel.EnterpriseServer public sealed class Scheduler { - public static SchedulerJob nextSchedule = null; + public static SchedulerJob nextSchedule = null; + private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000); public static void Start() - { - var serviceController = new ServiceController("WebsitePanel Scheduler"); - - if (serviceController != null && serviceController.Status != ServiceControllerStatus.Running) - { - serviceController.WaitForStatus(ServiceControllerStatus.Running); - } - - ScheduleTasks(null); + { + ScheduleTasks(); } public static bool IsScheduleActive(int scheduleId) @@ -82,21 +76,23 @@ namespace WebsitePanel.EnterpriseServer TaskManager.StopTask(activeTask.TaskId); } + public static void ScheduleTasks() + { + ScheduleTasks(null); + } + public static void ScheduleTasks(object obj) { - RunManualTasks(); - nextSchedule = SchedulerController.GetNextSchedule(); - + RunManualTasks(); + nextSchedule = SchedulerController.GetNextSchedule(); + if (nextSchedule != null) - { + { if (nextSchedule.ScheduleInfo.NextRun <= DateTime.Now) - { + { RunNextSchedule(null); - } + } } - - Thread.Sleep(30000); - ScheduleTasks(null); } private static void RunManualTasks() @@ -155,14 +151,14 @@ namespace WebsitePanel.EnterpriseServer // call back for the timer function static void RunNextSchedule(object obj) // obj ignored - { + { if (nextSchedule == null) return; RunSchedule(nextSchedule, true); // schedule next task - ScheduleTasks(null); + ScheduleTasks(); } static void RunSchedule(SchedulerJob schedule, bool changeNextRun) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index 58cf6085..29d03634 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -15,6 +15,11 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = ObjectUtils.FillObjectFromDataReader( DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId)); + if (task == null) + { + return null; + } + task.Params = GetTaskParams(task.Id); return task; @@ -27,9 +32,14 @@ namespace WebsitePanel.EnterpriseServer } public static List GetTasks() + { + return GetTasks(SecurityContext.User.UserId); + } + + public static List GetTasks(int actorId) { return ObjectUtils.CreateListFromDataReader( - DataProvider.GetBackgroundTasks(SecurityContext.User.UserId)); + DataProvider.GetBackgroundTasks(actorId)); } public static List GetTasks(Guid guid) @@ -49,6 +59,11 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = ObjectUtils.FillObjectFromDataReader( DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId, guid)); + if (task == null) + { + return null; + } + task.Params = GetTaskParams(task.Id); return task; @@ -88,7 +103,7 @@ namespace WebsitePanel.EnterpriseServer } public static void AddTaskParams(int taskId, List parameters) - { + { foreach (BackgroundTaskParameter param in SerializeParams(parameters)) { DataProvider.AddBackgroundTaskParam(taskId, param.Name, param.SerializerValue, param.TypeName); @@ -118,7 +133,7 @@ namespace WebsitePanel.EnterpriseServer { log.TextParameters = ReBuildParametersXml(log.XmlParameters); } - + return logs; } @@ -142,7 +157,7 @@ namespace WebsitePanel.EnterpriseServer return parameters; } - private static List DeserializeParams(List parameters) + private static List DeserializeParams(List parameters) { foreach (BackgroundTaskParameter param in parameters) { @@ -188,3 +203,4 @@ namespace WebsitePanel.EnterpriseServer } } } + diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index f1806b77..15465ad3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -153,8 +153,13 @@ namespace WebsitePanel.EnterpriseServer } int userId = SecurityContext.User.OwnerId; - int effectiveUserId = SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId : SecurityContext.User.UserId; - String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; + int effectiveUserId = SecurityContext.User.IsPeer + ? userId + : SecurityContext.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); @@ -170,7 +175,7 @@ namespace WebsitePanel.EnterpriseServer tasks.Count - 1, true, String.Format("{0}_{1}", source, taskName), - new string[] {itemNameStr}); + new string[] { itemNameStr }); TaskController.AddLog(log); @@ -234,7 +239,7 @@ namespace WebsitePanel.EnterpriseServer private static void WriteLogRecord(int severity, string text, string stackTrace, params string[] textParameters) { List tasks = TaskController.GetTasks(Guid); - + if (tasks.Count > 0) { BackgroundTask rootTask = tasks[0]; @@ -287,7 +292,7 @@ namespace WebsitePanel.EnterpriseServer UserInfo user = UserController.GetUserInternally(topTask.UserId); string username = user != null ? user.Username : null; - AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.UserId, + AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.EffectiveUserId, username, topTask.PackageId, topTask.ItemId, topTask.ItemName, topTask.StartDate, topTask.FinishDate, topTask.Source, topTask.TaskName, executionLog); @@ -412,7 +417,7 @@ namespace WebsitePanel.EnterpriseServer foreach (BackgroundTask task in tasks) { if (task.MaximumExecutionTime != -1 - && ((TimeSpan) (DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) + && ((TimeSpan)(DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) { task.Status = BackgroundTaskStatus.Abort; @@ -503,7 +508,7 @@ namespace WebsitePanel.EnterpriseServer public static BackgroundTask GetTaskWithLogRecords(string taskId, DateTime startLogTime) { BackgroundTask task = GetTask(taskId); - + if (task == null) return null; @@ -549,11 +554,11 @@ namespace WebsitePanel.EnterpriseServer { return; } - + task.Status = BackgroundTaskStatus.Abort; - + StopProcess(task.TaskId); - + TaskController.UpdateTask(task); } @@ -563,14 +568,14 @@ namespace WebsitePanel.EnterpriseServer { return; } - + task.Status = BackgroundTaskStatus.Abort; - + StopProcess(task.TaskId); - + TaskController.UpdateTask(task); } - + private static void StopProcess(string taskId) { var process = Process.GetProcesses().FirstOrDefault( @@ -595,8 +600,11 @@ namespace WebsitePanel.EnterpriseServer // get user tasks foreach (BackgroundTask task in TaskController.GetTasks()) { - if (task.UserId == userId && !task.Completed) + if (task.UserId == userId && !task.Completed + && task.Status == BackgroundTaskStatus.Run) + { list.Add(task); + } } return list; } @@ -698,7 +706,7 @@ namespace WebsitePanel.EnterpriseServer List handlersList = (List)eventHandlers[fullTaskName]; return handlersList == null ? null : handlersList.ToArray(); } - + #endregion @@ -821,3 +829,4 @@ namespace WebsitePanel.EnterpriseServer #endregion } } + From e8ed10a67bc1043309c617eba90a16fdeea0f78d Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 28 May 2013 17:55:44 +0300 Subject: [PATCH 18/24] Fixing bugs (Scheduler) --- WebsitePanel/Database/update_db.sql | 5 +- .../Log/AuditLog.cs | 2 +- .../Scheduling/Scheduler.cs | 12 ++--- .../Scheduling/SchedulerController.cs | 2 +- .../Scheduling/SchedulerJob.cs | 3 +- .../Tasks/TaskController.cs | 2 +- .../Tasks/TaskManager.cs | 49 +++++++++---------- 7 files changed, 36 insertions(+), 39 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index cca0ebdb..50de0516 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -1075,7 +1075,7 @@ SELECT FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.EffectiveUserID = @ActorID AND T.Guid = @Guid +WHERE T.Guid = @Guid GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTopTask') @@ -1113,7 +1113,7 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.EffectiveUserID = @ActorID AND T.Guid = @Guid +WHERE T.Guid = @Guid ORDER BY T.StartDate DESC GO @@ -1372,6 +1372,7 @@ AS SELECT T.ID, + T.Guid, T.TaskID, T.ScheduleId, T.PackageId, diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs index ec012ecf..e315d227 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Log/AuditLog.cs @@ -92,7 +92,7 @@ namespace WebsitePanel.EnterpriseServer DataProvider.AddAuditLogRecord(recordId, severityId, userId, username, packageId, itemId, itemName, startDate, finishDate, sourceName, taskName, executionLog); } - catch + catch(Exception ex) { // skip error } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index 05834c09..ae4a819a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -97,18 +97,20 @@ namespace WebsitePanel.EnterpriseServer private static void RunManualTasks() { - var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); + var tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); foreach (var task in tasks) { - new Thread(() => RunBackgroundTask(task)) {Priority = ThreadPriority.Highest}.Start(); + TaskManager.StopTask(task.TaskId); } - tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Stopping); + tasks = TaskController.GetProcessTasks(BackgroundTaskStatus.Starting); foreach (var task in tasks) { - TaskManager.StopTask(task); + var taskThread = new Thread(() => RunBackgroundTask(task)) { Priority = ThreadPriority.Highest }; + taskThread.Start(); + TaskManager.AddTaskThread(task, taskThread); } } @@ -130,8 +132,6 @@ namespace WebsitePanel.EnterpriseServer var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); objTask.DoWork(); - - Thread.Sleep(100000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 02298569..e6eb34cd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -165,7 +165,7 @@ namespace WebsitePanel.EnterpriseServer var backgroundTask = new BackgroundTask( Guid.NewGuid(), - schedule.ScheduleInfo.TaskId, + Guid.NewGuid().ToString("N"), SecurityContext.User.UserId, SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index 7475b76c..688442cc 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) { @@ -109,7 +108,7 @@ namespace WebsitePanel.EnterpriseServer objTask.DoWork(); else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", - task.TaskType)); + task.TaskType)); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index 29d03634..b85ced39 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -91,7 +91,7 @@ namespace WebsitePanel.EnterpriseServer AddTaskParams(task.Id, task.Params); - if (task.Completed || task.Status == BackgroundTaskStatus.Abort || task.Status == BackgroundTaskStatus.Stopping) + if (task.Completed || task.Status == BackgroundTaskStatus.Abort) { DeleteTaskStack(task.Id); } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 15465ad3..ecf5d5f3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -45,6 +45,8 @@ namespace WebsitePanel.EnterpriseServer public class TaskManager { private static Hashtable eventHandlers = null; + //using id instead of guid + private static Dictionary _taskThreadsDictionary = new Dictionary(); // purge timer, used for killing old tasks from the hash static Timer purgeTimer = new Timer(new TimerCallback(PurgeCompletedTasks), @@ -164,6 +166,8 @@ namespace WebsitePanel.EnterpriseServer BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, itemId, scheduleId, packageId, maximumExecutionTime, parameters); + AddTaskThread(task, Thread.CurrentThread); + List tasks = TaskController.GetTasks(Guid); if (tasks.Count > 0) @@ -289,7 +293,7 @@ namespace WebsitePanel.EnterpriseServer topTask.Logs = TaskController.GetLogs(topTask.Id, topTask.StartDate); string executionLog = FormatExecutionLog(topTask); - UserInfo user = UserController.GetUserInternally(topTask.UserId); + UserInfo user = UserController.GetUserInternally(topTask.EffectiveUserId); string username = user != null ? user.Username : null; AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.EffectiveUserId, @@ -419,7 +423,7 @@ namespace WebsitePanel.EnterpriseServer if (task.MaximumExecutionTime != -1 && ((TimeSpan)(DateTime.Now - task.StartDate)).TotalSeconds > task.MaximumExecutionTime) { - task.Status = BackgroundTaskStatus.Abort; + task.Status = BackgroundTaskStatus.Stopping; TaskController.UpdateTask(task); } @@ -526,6 +530,7 @@ namespace WebsitePanel.EnterpriseServer { if (task.ScheduleId > 0 && !task.Completed + && (task.Status == BackgroundTaskStatus.Run || task.Status == BackgroundTaskStatus.Starting) && !scheduledTasks.ContainsKey(task.ScheduleId)) scheduledTasks.Add(task.ScheduleId, task); } @@ -546,6 +551,14 @@ namespace WebsitePanel.EnterpriseServer task.NotifyOnComplete = true; } + internal static void AddTaskThread(BackgroundTask task, Thread taskThread) + { + if (_taskThreadsDictionary.ContainsKey(task.Id)) + _taskThreadsDictionary[task.Id] = taskThread; + else + _taskThreadsDictionary.Add(task.Id, taskThread); + } + public static void StopTask(string taskId) { BackgroundTask task = GetTask(taskId); @@ -557,35 +570,18 @@ namespace WebsitePanel.EnterpriseServer task.Status = BackgroundTaskStatus.Abort; - StopProcess(task.TaskId); + StopProcess(task.Id); TaskController.UpdateTask(task); } - public static void StopTask(BackgroundTask task) + private static void StopProcess(int key) { - if (task == null) - { - return; - } - - task.Status = BackgroundTaskStatus.Abort; - - StopProcess(task.TaskId); - - TaskController.UpdateTask(task); - } - - private static void StopProcess(string taskId) - { - var process = Process.GetProcesses().FirstOrDefault( - p => p.ProcessName.Equals(taskId, StringComparison.CurrentCultureIgnoreCase)); - - if (process != null) - { - process.Kill(); - process.WaitForExit(10000); - } + if (_taskThreadsDictionary.ContainsKey(key)) + { + _taskThreadsDictionary[key].Abort(); + _taskThreadsDictionary.Remove(key); + } } public static List GetUserTasks(int userId) @@ -827,6 +823,7 @@ namespace WebsitePanel.EnterpriseServer } #endregion + } } From c8a8be88941dfbc85a53b6f8555459498f48a96c Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 29 May 2013 15:52:13 +0300 Subject: [PATCH 19/24] Fixes Schedulers bugs --- .../Scheduling/Scheduler.cs | 3 +- .../Scheduling/SchedulerController.cs | 19 +++++++- .../Scheduling/SchedulerJob.cs | 1 + .../Tasks/TaskController.cs | 3 +- .../Tasks/TaskManager.cs | 23 ++++++---- .../WebsitePanel/Schedules.ascx | 13 +++++- .../WebsitePanel/Schedules.ascx.designer.cs | 46 ++++++++----------- 7 files changed, 65 insertions(+), 43 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index ae4a819a..b882ff82 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -110,7 +110,7 @@ namespace WebsitePanel.EnterpriseServer { var taskThread = new Thread(() => RunBackgroundTask(task)) { Priority = ThreadPriority.Highest }; taskThread.Start(); - TaskManager.AddTaskThread(task, taskThread); + TaskManager.AddTaskThread(task.Id, taskThread); } } @@ -132,6 +132,7 @@ namespace WebsitePanel.EnterpriseServer var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); objTask.DoWork(); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index e6eb34cd..220d1fea 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -160,24 +160,39 @@ namespace WebsitePanel.EnterpriseServer if (schedule == null) return 0; + 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 packageInfo = PackageController.GetPackage(schedule.ScheduleInfo.PackageId); var backgroundTask = new BackgroundTask( Guid.NewGuid(), Guid.NewGuid().ToString("N"), SecurityContext.User.UserId, SecurityContext.User.IsPeer ? SecurityContext.User.OwnerId - : SecurityContext.User.UserId, "SCHEDULER", "RUN_SCHEDULE", + : packageInfo.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; } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index 688442cc..a27d7c34 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -109,6 +109,7 @@ namespace WebsitePanel.EnterpriseServer else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", task.TaskType)); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index b85ced39..f19c4e13 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -69,7 +69,7 @@ namespace WebsitePanel.EnterpriseServer return task; } - public static void AddTask(BackgroundTask 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, @@ -80,6 +80,7 @@ namespace WebsitePanel.EnterpriseServer AddTaskParams(taskId, task.Params); DataProvider.AddBackgroundTaskStack(taskId); + return taskId; } public static void UpdateTask(BackgroundTask task) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index ecf5d5f3..4f838220 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -27,6 +27,7 @@ // 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; @@ -46,7 +47,7 @@ namespace WebsitePanel.EnterpriseServer { private static Hashtable eventHandlers = null; //using id instead of guid - private static Dictionary _taskThreadsDictionary = new Dictionary(); + private static ConcurrentDictionary _taskThreadsDictionary = new ConcurrentDictionary(); // purge timer, used for killing old tasks from the hash static Timer purgeTimer = new Timer(new TimerCallback(PurgeCompletedTasks), @@ -162,11 +163,9 @@ namespace WebsitePanel.EnterpriseServer String itemNameStr = itemName != null ? itemName.ToString() : String.Empty; - BackgroundTask task = new BackgroundTask(Guid, taskId, userId, effectiveUserId, source, taskName, itemNameStr, itemId, scheduleId, packageId, maximumExecutionTime, parameters); - AddTaskThread(task, Thread.CurrentThread); List tasks = TaskController.GetTasks(Guid); @@ -188,7 +187,8 @@ namespace WebsitePanel.EnterpriseServer // call event handler CallTaskEventHandler(task, false); - TaskController.AddTask(task); + int newTaskId = TaskController.AddTask(task); + AddTaskThread(newTaskId, Thread.CurrentThread); } public static void WriteParameter(string parameterName, object parameterValue) @@ -551,12 +551,12 @@ namespace WebsitePanel.EnterpriseServer task.NotifyOnComplete = true; } - internal static void AddTaskThread(BackgroundTask task, Thread taskThread) + internal static void AddTaskThread(int taskId, Thread taskThread) { - if (_taskThreadsDictionary.ContainsKey(task.Id)) - _taskThreadsDictionary[task.Id] = taskThread; + if (_taskThreadsDictionary.ContainsKey(taskId)) + _taskThreadsDictionary[taskId] = taskThread; else - _taskThreadsDictionary.Add(task.Id, taskThread); + _taskThreadsDictionary.AddOrUpdate(taskId, taskThread, (key, oldValue) => taskThread); } public static void StopTask(string taskId) @@ -579,8 +579,11 @@ namespace WebsitePanel.EnterpriseServer { if (_taskThreadsDictionary.ContainsKey(key)) { - _taskThreadsDictionary[key].Abort(); - _taskThreadsDictionary.Remove(key); + if (_taskThreadsDictionary[key] != null) + if (_taskThreadsDictionary[key].IsAlive) + _taskThreadsDictionary[key].Abort(); + Thread deleted; + _taskThreadsDictionary.TryRemove(key,out deleted); } } 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. /// From 645229bef11c3f36e18c70dc17b4033adc14332d Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 3 Jun 2013 14:07:52 +0300 Subject: [PATCH 20/24] Schedulers fixed --- WebsitePanel/Database/update_db.sql | 128 +++++++++++++++++- .../Tasks/BackgroundTask.cs | 30 ++-- .../Common/ObjectUtils.cs | 6 +- .../Data/DataProvider.cs | 13 +- .../Packages/PackageController.cs | 4 +- .../Provisioning/BackupController.cs | 7 +- .../SchedulerTasks/BackupTask.cs | 2 + .../Scheduling/Scheduler.cs | 4 +- .../Scheduling/SchedulerController.cs | 16 ++- .../Scheduling/SchedulerJob.cs | 2 +- .../Tasks/TaskController.cs | 48 +++++-- .../Tasks/TaskManager.cs | 76 +++++++---- .../Users/UserController.cs | 2 +- .../SchedulerService.cs | 9 ++ .../WebsitePanel/TasksTaskDetails.ascx.cs | 8 +- .../VPS/UserControls/ServerTabs.ascx.cs | 4 +- .../VPSForPC/UserControls/ServerTabs.ascx.cs | 4 +- 17 files changed, 278 insertions(+), 85 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 50de0516..fcd24049 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -1000,7 +1000,7 @@ SELECT TOP 1 FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID -WHERE T.TaskID = @TaskID AND T.UserID = @ActorID +WHERE T.TaskID = @TaskID GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetBackgroundTasks') @@ -1315,14 +1315,50 @@ IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgrou DROP PROCEDURE DeleteBackgroundTaskStack GO -CREATE PROCEDURE [dbo].[DeleteBackgroundTaskStack] +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTasks') +DROP PROCEDURE DeleteBackgroundTasks +GO + +CREATE PROCEDURE [dbo].[DeleteBackgroundTasks] ( - @TaskID INT + @Guid UNIQUEIDENTIFIER ) AS DELETE FROM BackgroundTaskStack -WHERE TaskID = @TaskID +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') @@ -1398,4 +1434,88 @@ WHERE T.Guid = ( AND UserID = @ActorID AND Completed = 0 AND Status IN (1, 3)) AND T.UserID = @ActorID AND T.Completed = 0 AND T.Status IN (1, 3) +GO + + + +ALTER PROCEDURE [dbo].[GetBackgroundTopTask] +( + @ActorID INT, + @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 + + +ALTER 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 \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs index 9529583e..bfe596f1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Tasks/BackgroundTask.cs @@ -41,7 +41,9 @@ namespace WebsitePanel.EnterpriseServer { #region Fields - private List parameters; + public List Params = new List(); + + public List Logs = new List(); #endregion @@ -51,7 +53,7 @@ namespace WebsitePanel.EnterpriseServer public Guid Guid { get; set; } - public String TaskId { get; set; } + public string TaskId { get; set; } public int ScheduleId { get; set; } @@ -61,11 +63,11 @@ namespace WebsitePanel.EnterpriseServer public int EffectiveUserId { get; set; } - public String TaskName { get; set; } + public string TaskName { get; set; } public int ItemId { get; set; } - public String ItemName { get; set; } + public string ItemName { get; set; } public DateTime StartDate { get; set; } @@ -77,7 +79,7 @@ namespace WebsitePanel.EnterpriseServer public int MaximumExecutionTime { get; set; } - public String Source { get; set; } + public string Source { get; set; } public int Severity { get; set; } @@ -87,14 +89,6 @@ namespace WebsitePanel.EnterpriseServer public BackgroundTaskStatus Status { get; set; } - public List Logs { get; set; } - - public List Params - { - get { return parameters ?? (parameters = new List()); } - set { parameters = value; } - } - #endregion #region Constructors @@ -106,8 +100,9 @@ namespace WebsitePanel.EnterpriseServer IndicatorCurrent = 0; IndicatorMaximum = 0; Status = BackgroundTaskStatus.Run; - - Logs = new List(); + + Completed = false; + NotifyOnComplete = false; } public BackgroundTask(Guid guid, String taskId, int userId, int effectiveUserId, String source, String taskName, String itemName, @@ -132,6 +127,11 @@ namespace WebsitePanel.EnterpriseServer #region Methods + public List GetLogs() + { + return Logs; + } + public Object GetParamValue(String name) { foreach(BackgroundTaskParameter param in Params) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs index 1ab1650d..5cb1e7b4 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs @@ -212,7 +212,7 @@ namespace WebsitePanel.EnterpriseServer // try implicit type conversion props[i].SetValue(obj, propVal, null); } - catch + catch (Exception ex) { // convert to string and then set property value try @@ -220,14 +220,14 @@ namespace WebsitePanel.EnterpriseServer string strVal = propVal.ToString(); props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); } - catch + catch(Exception e) { // skip property init } } } } - catch{} // just skip + catch (Exception e) { } // just skip } // for properties } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 87af1b43..51775512 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1999,11 +1999,18 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@taskId", taskId)); } - public static void DeleteBackgroundTaskStack(int taskId) + public static void DeleteBackgroundTasks(Guid guid) { SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "DeleteBackgroundTaskStack", - new SqlParameter("@taskId", taskId)); + 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) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 522000ad..b8532151 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -622,7 +622,7 @@ namespace WebsitePanel.EnterpriseServer topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); return result; } @@ -729,7 +729,7 @@ namespace WebsitePanel.EnterpriseServer topTask.UpdateParamValue("UserId", userId); topTask.UpdateParamValue("SendLetter", sendLetter); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); } finally { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Provisioning/BackupController.cs index fb4a6d20..81406cdd 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; @@ -118,7 +119,7 @@ namespace WebsitePanel.EnterpriseServer { 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); @@ -209,7 +210,7 @@ namespace WebsitePanel.EnterpriseServer // increment progress TaskManager.IndicatorCurrent += 1; - } + } } } catch (Exception ex) @@ -805,7 +806,7 @@ namespace WebsitePanel.EnterpriseServer // return true; } - catch + catch(Exception e) { // return false; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/BackupTask.cs index 164f5ea9..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,6 +49,7 @@ namespace WebsitePanel.EnterpriseServer /// public override void DoWork() { + string backupFileName; int storePackageId; string storePackageFolder; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index b882ff82..244ad9a2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -43,7 +43,7 @@ namespace WebsitePanel.EnterpriseServer public sealed class Scheduler { public static SchedulerJob nextSchedule = null; - private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000); + //private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000); public static void Start() { @@ -132,7 +132,7 @@ namespace WebsitePanel.EnterpriseServer var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); objTask.DoWork(); - // Thread.Sleep(40000); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs index 220d1fea..be434a2e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerController.cs @@ -167,19 +167,23 @@ namespace WebsitePanel.EnterpriseServer var parameters = schedule.ScheduleInfo.Parameters.Select( prm => new BackgroundTaskParameter(prm.ParameterId, prm.ParameterValue)).ToList(); - var packageInfo = PackageController.GetPackage(schedule.ScheduleInfo.PackageId); + var userInfo = PackageController.GetPackageOwner(schedule.ScheduleInfo.PackageId); + var backgroundTask = new BackgroundTask( Guid.NewGuid(), Guid.NewGuid().ToString("N"), - SecurityContext.User.UserId, - SecurityContext.User.IsPeer - ? SecurityContext.User.OwnerId - : packageInfo.UserId, "SCHEDULER", "RUN_SCHEDULE", + 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 }; + schedule.ScheduleInfo.MaxExecutionTime, parameters) + { + Status = BackgroundTaskStatus.Starting + }; TaskController.AddTask(backgroundTask); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs index a27d7c34..7b9d2efd 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/SchedulerJob.cs @@ -109,7 +109,7 @@ namespace WebsitePanel.EnterpriseServer else throw new Exception(String.Format("Could not create scheduled task of '{0}' type", task.TaskType)); - // Thread.Sleep(40000); + // Thread.Sleep(40000); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index f19c4e13..c9bd79b2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -80,27 +80,57 @@ namespace WebsitePanel.EnterpriseServer AddTaskParams(taskId, task.Params); DataProvider.AddBackgroundTaskStack(taskId); + return taskId; } - public static void UpdateTask(BackgroundTask task) + 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); - AddTaskParams(task.Id, task.Params); - - if (task.Completed || task.Status == BackgroundTaskStatus.Abort) - { - DeleteTaskStack(task.Id); - } + return true; } - public static void DeleteTaskStack(int taskId) + public static void UpdateBackgroundTaskParams(BackgroundTask task) { - DataProvider.DeleteBackgroundTaskStack(taskId); + 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) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index 4f838220..b2af3f5b 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -155,10 +155,13 @@ namespace WebsitePanel.EnterpriseServer taskId = Guid.NewGuid().ToString("N"); } - int userId = SecurityContext.User.OwnerId; - int effectiveUserId = SecurityContext.User.IsPeer - ? userId - : SecurityContext.User.UserId; + var user = SecurityContext.User; + + int userId = user.OwnerId == 0 + ? user.UserId + : user.OwnerId; + + int effectiveUserId = user.UserId; String itemNameStr = itemName != null ? itemName.ToString() @@ -286,23 +289,12 @@ namespace WebsitePanel.EnterpriseServer // write task execution result to database if (tasks.Count == 1) // single task { - // unregister task globally - // tasks.Remove(TopTask.TaskId); - // write to database - topTask.Logs = TaskController.GetLogs(topTask.Id, topTask.StartDate); - - string executionLog = FormatExecutionLog(topTask); - UserInfo user = UserController.GetUserInternally(topTask.EffectiveUserId); - string username = user != null ? user.Username : null; - - AuditLog.AddAuditLogRecord(topTask.TaskId, topTask.Severity, topTask.EffectiveUserId, - username, topTask.PackageId, topTask.ItemId, - topTask.ItemName, topTask.StartDate, topTask.FinishDate, topTask.Source, - topTask.TaskName, executionLog); + AddAuditLog(topTask); } TaskController.UpdateTask(topTask); + StopProcess(topTask); } public static void UpdateParam(String name, Object value) @@ -314,7 +306,7 @@ namespace WebsitePanel.EnterpriseServer topTask.UpdateParamValue(name, value); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); } public static int ItemId @@ -359,7 +351,7 @@ namespace WebsitePanel.EnterpriseServer topTask.UpdateParamValue(key, parameters[key]); } - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); } static string FormatExecutionLog(BackgroundTask task) @@ -535,7 +527,7 @@ namespace WebsitePanel.EnterpriseServer scheduledTasks.Add(task.ScheduleId, task); } } - catch (Exception) + catch (Exception e) { } return scheduledTasks; @@ -570,23 +562,51 @@ namespace WebsitePanel.EnterpriseServer task.Status = BackgroundTaskStatus.Abort; - StopProcess(task.Id); + StopProcess(task); + + if (!HasErrors(task)) + { + task.Severity = 1; + } + + task.FinishDate = DateTime.Now; + + AddAuditLog(task); TaskController.UpdateTask(task); } - private static void StopProcess(int key) + private static void StopProcess(BackgroundTask task) { - if (_taskThreadsDictionary.ContainsKey(key)) + if (_taskThreadsDictionary.ContainsKey(task.Id)) { - if (_taskThreadsDictionary[key] != null) - if (_taskThreadsDictionary[key].IsAlive) - _taskThreadsDictionary[key].Abort(); + 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(key,out deleted); + _taskThreadsDictionary.TryRemove(task.Id, out deleted); } } + private static void AddAuditLog(BackgroundTask task) + { + task.Logs = TaskController.GetLogs(task.Id, 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(); @@ -597,7 +617,7 @@ namespace WebsitePanel.EnterpriseServer return list; // prohibited user // get user tasks - foreach (BackgroundTask task in TaskController.GetTasks()) + foreach (BackgroundTask task in TaskController.GetTasks(user.IsPeer ? user.OwnerId : user.UserId)) { if (task.UserId == userId && !task.Completed && task.Status == BackgroundTaskStatus.Run) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs index f1690bd6..4f51e249 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Users/UserController.cs @@ -453,7 +453,7 @@ namespace WebsitePanel.EnterpriseServer topTask.ItemId = userId; topTask.UpdateParamValue("SendLetter", sendLetter); - TaskController.UpdateTask(topTask); + TaskController.UpdateTaskWithParams(topTask); return userId; } diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs index be2e8579..9405a417 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs @@ -1,15 +1,19 @@ using System.ServiceProcess; +using System.Threading; using WebsitePanel.EnterpriseServer; namespace WebsitePanel.SchedulerService { public partial class SchedulerService : ServiceBase { + private Timer _timer = new Timer(Process, null, 5000, 5000); + #region Construcor public SchedulerService() { InitializeComponent(); + } #endregion @@ -21,6 +25,11 @@ namespace WebsitePanel.SchedulerService Scheduler.Start(); } + protected static void Process(object callback) + { + Scheduler.Start(); + } + #endregion } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index a5293d72..a985b297 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.Logs.Count > 0 ? task.Logs[0].Text : String.Empty); + litStep.Text = LocalizeActivityText(task.GetLogs().Count > 0 ? task.GetLogs()[0].Text : String.Empty); litStartTime.Text = task.StartDate.ToString(); // progress @@ -77,10 +77,10 @@ namespace WebsitePanel.Portal // execution log StringBuilder log = new StringBuilder(); - if (task.Logs.Count > 0) - ViewState["lastLogDate"] = task.Logs[0].Date.AddTicks(1); + if (task.GetLogs().Count > 0) + ViewState["lastLogDate"] = task.GetLogs()[0].Date.AddTicks(1); - foreach (BackgroundTaskLogRecord logRecord in task.Logs) + foreach (BackgroundTaskLogRecord logRecord in task.GetLogs()) { log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] "); log.Append(GetLogLineIdent(logRecord.TextIdent)); 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 4b0372ca..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.Logs; + repRecords.DataSource = task.GetLogs(); repRecords.DataBind(); } @@ -213,7 +213,7 @@ namespace WebsitePanel.Portal.VPS.UserControls // gauge gauge.Visible = false; - if (e.Item.ItemIndex == task.Logs.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 56b6fe22..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.Logs; + repRecords.DataSource = task.GetLogs(); repRecords.DataBind(); } @@ -228,7 +228,7 @@ namespace WebsitePanel.Portal.VPSForPC.UserControls // gauge gauge.Visible = false; - if (e.Item.ItemIndex == task.Logs.Count - 1) + if (e.Item.ItemIndex == task.GetLogs().Count - 1) { gauge.Visible = true; gauge.Total = task.IndicatorMaximum; From 476f7a2b193b62946abb6e5d0ed9c2397d1a26aa Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 4 Jun 2013 17:53:11 +0300 Subject: [PATCH 21/24] Shedules fix --- WebsitePanel/Database/update_db.sql | 117 +-- .../Common/ObjectUtils.cs | 782 +++++++++--------- .../Data/DataProvider.cs | 14 +- .../Scheduling/Scheduler.cs | 36 +- .../Tasks/TaskController.cs | 13 +- .../Tasks/TaskManager.cs | 26 +- .../SchedulerService.cs | 15 +- 7 files changed, 461 insertions(+), 542 deletions(-) diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index fcd24049..d507476e 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -971,7 +971,6 @@ GO CREATE PROCEDURE [dbo].[GetBackgroundTask] ( - @ActorID INT, @TaskID NVARCHAR(255) ) AS @@ -1013,7 +1012,17 @@ CREATE PROCEDURE [dbo].[GetBackgroundTasks] ) AS -SELECT + 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, @@ -1035,9 +1044,12 @@ SELECT T.NotifyOnComplete, T.Status FROM BackgroundTasks AS T -INNER JOIN BackgroundTaskStack AS TS - ON TS.TaskId = T.ID -WHERE T.UserID = @ActorID +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') @@ -1046,7 +1058,6 @@ GO CREATE PROCEDURE [dbo].GetThreadBackgroundTasks ( - @ActorID INT, @Guid UNIQUEIDENTIFIER ) AS @@ -1084,7 +1095,6 @@ GO CREATE PROCEDURE [dbo].[GetBackgroundTopTask] ( - @ActorID INT, @Guid UNIQUEIDENTIFIER ) AS @@ -1114,7 +1124,7 @@ FROM BackgroundTasks AS T INNER JOIN BackgroundTaskStack AS TS ON TS.TaskId = T.ID WHERE T.Guid = @Guid -ORDER BY T.StartDate DESC +ORDER BY T.StartDate ASC GO IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddBackgroundTaskLog') @@ -1311,10 +1321,6 @@ VALUES ) GO -IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTaskStack') -DROP PROCEDURE DeleteBackgroundTaskStack -GO - IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteBackgroundTasks') DROP PROCEDURE DeleteBackgroundTasks GO @@ -1401,7 +1407,6 @@ GO CREATE PROCEDURE [dbo].[GetScheduleBackgroundTasks] ( - @ActorID INT, @ScheduleID INT ) AS @@ -1431,91 +1436,5 @@ FROM BackgroundTasks AS T WHERE T.Guid = ( SELECT Guid FROM BackgroundTasks WHERE ScheduleID = @ScheduleID - AND UserID = @ActorID AND Completed = 0 AND Status IN (1, 3)) - AND T.UserID = @ActorID AND T.Completed = 0 AND T.Status IN (1, 3) -GO - - - -ALTER PROCEDURE [dbo].[GetBackgroundTopTask] -( - @ActorID INT, - @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 - - -ALTER 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 \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs index 5cb1e7b4..94ede9cb 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Common/ObjectUtils.cs @@ -36,11 +36,11 @@ using WebsitePanel.Providers; namespace WebsitePanel.EnterpriseServer { - /// - /// Summary description for ObjectUtils. - /// - public class ObjectUtils - { + /// + /// Summary description for ObjectUtils. + /// + public class ObjectUtils + { public static DT ConvertObject(ST so) { Dictionary sProps = GetTypePropertiesHash(typeof(ST)); @@ -53,23 +53,23 @@ namespace WebsitePanel.EnterpriseServer { 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); - } - } - } + 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(); + private static Hashtable typeProperties = new Hashtable(); public static Hashtable GetObjectProperties(object obj, bool persistentOnly) { @@ -82,7 +82,7 @@ namespace WebsitePanel.EnterpriseServer { // check for persistent attribute object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); - if (!persistentOnly || (persistentOnly && attrs.Length > 0)) + if (!persistentOnly || (persistentOnly && attrs.Length > 0) && !hash.ContainsKey(prop.Name)) { object val = prop.GetValue(obj, null); string s = ""; @@ -110,60 +110,60 @@ namespace WebsitePanel.EnterpriseServer return hash; } - public static void FillCollectionFromDataSet(List list, DataSet ds) - { - if(ds.Tables.Count == 0) - return; + 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); + PropertyInfo[] props = GetTypeProperties(type); - foreach(DataRowView dr in dv) - { - // create an instance - T obj = (T)Activator.CreateInstance(type); - list.Add(obj); + 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; + // 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 - } + 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) { @@ -179,201 +179,201 @@ namespace WebsitePanel.EnterpriseServer return list; } - public static void FillCollectionFromDataReader(List list, IDataReader reader) - { + public static void FillCollectionFromDataReader(List list, IDataReader reader) + { Type type = typeof(T); - try - { - // get type properties - PropertyInfo[] props = GetTypeProperties(type); + try + { + // get type properties + PropertyInfo[] props = GetTypeProperties(type); - // iterate through reader - while(reader.Read()) - { - T obj = (T)Activator.CreateInstance(type); - list.Add(obj); + // 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 - { + // set properties + for (int i = 0; i < props.Length; i++) + { + string propName = props[i].Name; - 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); - } + 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 (Exception ex) - { - // convert to string and then set property value - try - { - string strVal = propVal.ToString(); - props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); - } - catch(Exception e) - { - // skip property init - } - } - } - } + { + // convert to string and then set property value + try + { + string strVal = propVal.ToString(); + props[i].SetValue(obj, Cast(strVal, props[i].PropertyType), null); + } + catch (Exception e) + { + // skip property init + } + } + } + } catch (Exception e) { } // just skip - } // for properties - } - } - finally - { - reader.Close(); - } - } + } // for properties + } + } + finally + { + reader.Close(); + } + } - public static T FillObjectFromDataView(DataView dv) - { + public static T FillObjectFromDataView(DataView dv) + { Type type = typeof(T); - T obj = default(T); + T obj = default(T); - // get type properties - PropertyInfo[] props = GetTypeProperties(type); + // get type properties + PropertyInfo[] props = GetTypeProperties(type); - // iterate through reader - foreach(DataRowView dr in dv) - { - obj = (T)Activator.CreateInstance(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; - } + // set properties + for (int i = 0; i < props.Length; i++) + { + string propName = props[i].Name; - object propVal = dr[propName]; - if(propVal == DBNull.Value) - props[i].SetValue(obj, GetNull(props[i].PropertyType), null); - else - { - try - { - string strVal = propVal.ToString(); + 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; + } - //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 - } + object propVal = dr[propName]; + if (propVal == DBNull.Value) + props[i].SetValue(obj, GetNull(props[i].PropertyType), null); + else + { + try + { + string strVal = propVal.ToString(); - return obj; - } + //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 + } - public static T FillObjectFromDataReader(IDataReader reader) + return obj; + } + + public static T FillObjectFromDataReader(IDataReader reader) { Type type = typeof(T); T obj = default(T); - try - { - // get type properties - PropertyInfo[] props = GetTypeProperties(type); + try + { + // get type properties + PropertyInfo[] props = GetTypeProperties(type); - // iterate through reader - while(reader.Read()) - { - obj = (T)Activator.CreateInstance(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; + // 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(); - } + try + { + if (!IsColumnExists(propName, reader.GetSchemaTable())) + { + continue; + } + object propVal = reader[propName]; - return obj; - } + 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(); @@ -384,7 +384,7 @@ namespace WebsitePanel.EnterpriseServer Hashtable propValues = new Hashtable(); foreach (DataRowView dr in dv) { - if (propValues[dr[nameColumn]] == null) + if (propValues[dr[nameColumn]] == null && !propValues.ContainsKey(dr[nameColumn])) propValues.Add(dr[nameColumn], dr[valueColumn]); } @@ -398,7 +398,7 @@ namespace WebsitePanel.EnterpriseServer Hashtable propValues = new Hashtable(); while (reader.Read()) { - if (propValues[reader[nameColumn]] == null) + if (propValues[reader[nameColumn]] == null && !propValues.ContainsKey(reader[nameColumn])) propValues.Add(reader[nameColumn], reader[valueColumn]); } reader.Close(); @@ -416,50 +416,54 @@ namespace WebsitePanel.EnterpriseServer 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); - } + 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); + } + } - // Copy the data - foreach (PropertyInfo propertyInfo in props.Values) - { - propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null); - } - } + if (!propertiesCache.ContainsKey(typeSource.Name)) + { + // add to cache + propertiesCache.Add(typeSource.Name, props); + } + } - public static void CreateObjectFromHash(object obj, Hashtable propValues, bool persistentOnly) + // 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(); @@ -481,15 +485,18 @@ namespace WebsitePanel.EnterpriseServer { // check for persistent attribute object[] attrs = prop.GetCustomAttributes(typeof(PersistentAttribute), false); - if (!persistentOnly || (persistentOnly && attrs.Length > 0)) + 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); + if (!propertiesCache.ContainsKey(type.Name)) + { + // add to cache + propertiesCache.Add(type.Name, props); + } } // fill properties @@ -513,37 +520,37 @@ namespace WebsitePanel.EnterpriseServer 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]; + 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]); + for (int i = 0; i < svals.Length; i++) + ivals[i] = Int32.Parse(svals[i]); - if (val == "") - ivals = new int[0]; + if (val == "") + ivals = new int[0]; - prop.SetValue(obj, ivals, null); - } + prop.SetValue(obj, ivals, null); + } } } } @@ -553,50 +560,55 @@ namespace WebsitePanel.EnterpriseServer Dictionary hash = new Dictionary(); PropertyInfo[] props = GetTypeProperties(type); foreach (PropertyInfo prop in props) - hash.Add(prop.Name, prop); + { + 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]; + 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; - } + 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 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) + 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(';'); } @@ -611,49 +623,49 @@ namespace WebsitePanel.EnterpriseServer iarr[i] = Int32.Parse(sarr[i]); return iarr; } - else - return val; - } + else + return val; + } - public static string GetTypeFullName(Type type) - { - return type.FullName + ", " + type.Assembly.GetName().Name; - } + public static string GetTypeFullName(Type type) + { + return type.FullName + ", " + type.Assembly.GetName().Name; + } - #region Helper Functions + #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; - } - } + /// + /// 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; - } + return false; + } - #endregion - } -} + #endregion + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 51775512..ef0f1995 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -1837,19 +1837,17 @@ namespace WebsitePanel.EnterpriseServer #region Scheduler - public static IDataReader GetBackgroundTask(int actorId, string taskId) + public static IDataReader GetBackgroundTask(string taskId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetBackgroundTask", - new SqlParameter("@actorId", actorId), new SqlParameter("@taskId", taskId)); } - public static IDataReader GetScheduleBackgroundTasks(int actorId, int scheduleId) + public static IDataReader GetScheduleBackgroundTasks(int scheduleId) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetScheduleBackgroundTasks", - new SqlParameter("@actorId", actorId), new SqlParameter("@scheduleId", scheduleId)); } @@ -1860,11 +1858,10 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@actorId", actorId)); } - public static IDataReader GetBackgroundTasks(int actorId, Guid guid) + public static IDataReader GetBackgroundTasks(Guid guid) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier + "GetThreadBackgroundTasks", - new SqlParameter("@actorId", actorId), new SqlParameter("@guid", guid)); } @@ -1875,11 +1872,10 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@status", (int)status)); } - public static IDataReader GetBackgroundTopTask(int actorId, Guid guid) + public static IDataReader GetBackgroundTopTask(Guid guid) { return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, - ObjectQualifier + "GetBackGroundTopTask", - new SqlParameter("@actorId", actorId), + ObjectQualifier + "GetBackgroundTopTask", new SqlParameter("@guid", guid)); } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs index 244ad9a2..34b9ffbf 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Scheduling/Scheduler.cs @@ -43,11 +43,10 @@ namespace WebsitePanel.EnterpriseServer public sealed class Scheduler { public static SchedulerJob nextSchedule = null; - //private static Timer timer = new Timer(ScheduleTasks, null, 30000, 30000); public static void Start() - { - ScheduleTasks(); + { + ScheduleTasks(); } public static bool IsScheduleActive(int scheduleId) @@ -57,33 +56,10 @@ namespace WebsitePanel.EnterpriseServer return scheduledTasks.ContainsKey(scheduleId); } - public static void StartSchedule(SchedulerJob schedule) - { - if (IsScheduleActive(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() - { - ScheduleTasks(null); - } - - public static void ScheduleTasks(object obj) - { + { RunManualTasks(); + nextSchedule = SchedulerController.GetNextSchedule(); if (nextSchedule != null) @@ -125,6 +101,7 @@ namespace WebsitePanel.EnterpriseServer backgroundTask.Guid = TaskManager.Guid; backgroundTask.Status = BackgroundTaskStatus.Run; + TaskController.UpdateTask(backgroundTask); try @@ -132,7 +109,6 @@ namespace WebsitePanel.EnterpriseServer var objTask = (SchedulerTask)Activator.CreateInstance(Type.GetType(schedule.Task.TaskType)); objTask.DoWork(); - // Thread.Sleep(40000); } catch (Exception ex) { @@ -199,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/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index c9bd79b2..3020c56c 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Text; using System.Xml; using System.Xml.Serialization; - namespace WebsitePanel.EnterpriseServer { public class TaskController @@ -13,7 +12,7 @@ namespace WebsitePanel.EnterpriseServer public static BackgroundTask GetTask(string taskId) { BackgroundTask task = ObjectUtils.FillObjectFromDataReader( - DataProvider.GetBackgroundTask(SecurityContext.User.UserId, taskId)); + DataProvider.GetBackgroundTask(taskId)); if (task == null) { @@ -28,12 +27,14 @@ namespace WebsitePanel.EnterpriseServer public static List GetScheduleTasks(int scheduleId) { return ObjectUtils.CreateListFromDataReader( - DataProvider.GetScheduleBackgroundTasks(SecurityContext.User.UserId, scheduleId)); + DataProvider.GetScheduleBackgroundTasks(scheduleId)); } public static List GetTasks() { - return GetTasks(SecurityContext.User.UserId); + var user = SecurityContext.User; + + return GetTasks(user.IsPeer ? user.OwnerId : user.UserId); } public static List GetTasks(int actorId) @@ -45,7 +46,7 @@ namespace WebsitePanel.EnterpriseServer public static List GetTasks(Guid guid) { return ObjectUtils.CreateListFromDataReader( - DataProvider.GetBackgroundTasks(SecurityContext.User.UserId, guid)); + DataProvider.GetBackgroundTasks(guid)); } public static List GetProcessTasks(BackgroundTaskStatus status) @@ -57,7 +58,7 @@ namespace WebsitePanel.EnterpriseServer public static BackgroundTask GetTopTask(Guid guid) { BackgroundTask task = ObjectUtils.FillObjectFromDataReader( - DataProvider.GetBackgroundTopTask(SecurityContext.User.UserId, guid)); + DataProvider.GetBackgroundTopTask(guid)); if (task == null) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index b2af3f5b..ab907b60 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -190,32 +190,36 @@ namespace WebsitePanel.EnterpriseServer // call event handler CallTaskEventHandler(task, false); - int newTaskId = TaskController.AddTask(task); - AddTaskThread(newTaskId, Thread.CurrentThread); + AddTaskThread(TaskController.AddTask(task), Thread.CurrentThread); } public static void WriteParameter(string parameterName, object parameterValue) { string val = parameterValue != null ? parameterValue.ToString() : ""; - WriteLogRecord(0, parameterName + ": " + val, null, null); + WriteLogRecord(Guid, 0, parameterName + ": " + val, null, null); } public static void Write(string text, params string[] textParameters) { // INFO - WriteLogRecord(0, text, null, textParameters); + 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(1, text, null, textParameters); + WriteLogRecord(guid, 1, text, null, textParameters); } public static Exception WriteError(Exception ex) { // ERROR - WriteLogRecord(2, ex.Message, ex.StackTrace); + WriteLogRecord(Guid, 2, ex.Message, ex.StackTrace); return new Exception((TopTask != null) ? String.Format("Error executing '{0}' task on '{1}' {2}", @@ -234,18 +238,18 @@ namespace WebsitePanel.EnterpriseServer prms[0] = ex.Message; } - WriteLogRecord(2, text, ex.Message + "\n" + ex.StackTrace, prms); + WriteLogRecord(Guid, 2, text, ex.Message + "\n" + ex.StackTrace, prms); } public static void WriteError(string text, params string[] textParameters) { // ERROR - WriteLogRecord(2, text, null, textParameters); + WriteLogRecord(Guid, 2, text, null, textParameters); } - private static void WriteLogRecord(int severity, string text, string stackTrace, params string[] textParameters) + private static void WriteLogRecord(Guid guid, int severity, string text, string stackTrace, params string[] textParameters) { - List tasks = TaskController.GetTasks(Guid); + List tasks = TaskController.GetTasks(guid); if (tasks.Count > 0) { @@ -571,6 +575,8 @@ namespace WebsitePanel.EnterpriseServer task.FinishDate = DateTime.Now; + WriteWarning(task.Guid, "Task aborted by user"); + AddAuditLog(task); TaskController.UpdateTask(task); diff --git a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs index 9405a417..d5407d1c 100644 --- a/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs +++ b/WebsitePanel/Sources/WebsitePanel.SchedulerService/SchedulerService.cs @@ -6,14 +6,16 @@ namespace WebsitePanel.SchedulerService { public partial class SchedulerService : ServiceBase { - private Timer _timer = new Timer(Process, null, 5000, 5000); - + private Timer _Timer; + private static bool _isRuninng; #region Construcor public SchedulerService() { InitializeComponent(); + _Timer = new Timer(Process, null, 5000, 5000); + _isRuninng = false; } #endregion @@ -22,12 +24,17 @@ namespace WebsitePanel.SchedulerService protected override void OnStart(string[] args) { - Scheduler.Start(); } protected static void Process(object callback) { - Scheduler.Start(); + //check running service + if (_isRuninng) + return; + + _isRuninng = true; + Scheduler.Start(); + _isRuninng = false; } #endregion From e4f84fb86926bedbe8540de278be918aef4dd6e2 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Tue, 4 Jun 2013 18:17:12 +0300 Subject: [PATCH 22/24] Fixed logging bugs --- .../Tasks/TaskController.cs | 9 +++++++-- .../Tasks/TaskManager.cs | 4 ++-- .../DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs index 3020c56c..b6207b84 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskController.cs @@ -156,10 +156,15 @@ namespace WebsitePanel.EnterpriseServer log.Severity, log.Text, log.TextIdent, BuildParametersXml(log.TextParameters)); } - public static List GetLogs(int taskId, DateTime startLogTime) + public static List GetLogs(BackgroundTask task, DateTime startLogTime) { + if (startLogTime <= task.StartDate) + { + startLogTime = task.StartDate; + } + List logs = ObjectUtils.CreateListFromDataReader( - DataProvider.GetBackgroundTaskLogs(taskId, startLogTime)); + DataProvider.GetBackgroundTaskLogs(task.Id, startLogTime)); foreach (BackgroundTaskLogRecord log in logs) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs index ab907b60..b26a68a6 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Tasks/TaskManager.cs @@ -512,7 +512,7 @@ namespace WebsitePanel.EnterpriseServer if (task == null) return null; - task.Logs = TaskController.GetLogs(task.Id, startLogTime); + task.Logs = TaskController.GetLogs(task, startLogTime); return task; } @@ -600,7 +600,7 @@ namespace WebsitePanel.EnterpriseServer private static void AddAuditLog(BackgroundTask task) { - task.Logs = TaskController.GetLogs(task.Id, task.StartDate); + task.Logs = TaskController.GetLogs(task, task.StartDate); string executionLog = FormatExecutionLog(task); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index a985b297..24892738 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs @@ -51,7 +51,7 @@ namespace WebsitePanel.Portal private void BindTask() { - DateTime lastLogDate = DateTime.Now.AddYears(-1); + DateTime lastLogDate = DateTime.MinValue; if (ViewState["lastLogDate"] != null) lastLogDate = (DateTime)ViewState["lastLogDate"]; From 7bedf7455514818082b1d1bf44fa0343ab41d0e7 Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Wed, 12 Jun 2013 17:58:23 +0300 Subject: [PATCH 23/24] JS fixes --- .../WebsitePanel/Scripts/AjaxUtils.js | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) 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) From 84caeb00c706d4e6e35b767f2ba8a422b422623e Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Mon, 17 Jun 2013 11:18:28 +0300 Subject: [PATCH 24/24] Execution logs fix --- .../DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs index 24892738..35287472 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/TasksTaskDetails.ascx.cs @@ -80,6 +80,8 @@ namespace WebsitePanel.Portal if (task.GetLogs().Count > 0) ViewState["lastLogDate"] = task.GetLogs()[0].Date.AddTicks(1); + + foreach (BackgroundTaskLogRecord logRecord in task.GetLogs()) { log.Append("[").Append(GetDurationText(task.StartDate, logRecord.Date)).Append("] "); @@ -87,7 +89,7 @@ namespace WebsitePanel.Portal 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;