Added functionality of Service Levels

This commit is contained in:
vfedosevich 2014-09-11 22:23:48 +03:00
parent 4c58752483
commit b1c52c36eb
39 changed files with 2282 additions and 175 deletions

View file

@ -4506,3 +4506,703 @@ GO
UPDATE [dbo].[ScheduleTaskParameters] SET [DefaultValue]= N'MsSQL2005=SQL Server 2005;MsSQL2008=SQL Server 2008;MsSQL2012=SQL Server 2012;MsSQL2014=SQL Server 2014;MySQL4=MySQL 4.0;MySQL5=MySQL 5.0' WHERE [TaskID]= 'SCHEDULE_TASK_BACKUP_DATABASE' AND [ParameterID]='DATABASE_GROUP'
GO
/*SUPPORT SERVICE LEVELS*/
IF NOT EXISTS (SELECT * FROM [dbo].[ResourceGroups] WHERE [GroupName] = 'Service Levels')
BEGIN
INSERT [dbo].[ResourceGroups] ([GroupID], [GroupName], [GroupOrder], [GroupController], [ShowGroup]) VALUES (47, N'Service Levels', 2, NULL, 1)
END
GO
IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'SupportServiceLevels')
CREATE TABLE SupportServiceLevels
(
[LevelID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[LevelName] NVARCHAR(100) NOT NULL,
[LevelDescription] NVARCHAR(1000) NULL
)
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSupportServiceLevels')
DROP PROCEDURE GetSupportServiceLevels
GO
CREATE PROCEDURE [dbo].[GetSupportServiceLevels]
AS
SELECT *
FROM SupportServiceLevels
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSupportServiceLevel')
DROP PROCEDURE GetSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[GetSupportServiceLevel]
(
@LevelID int
)
AS
SELECT *
FROM SupportServiceLevels
WHERE LevelID = @LevelID
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddSupportServiceLevel')
DROP PROCEDURE AddSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[AddSupportServiceLevel]
(
@LevelID int OUTPUT,
@LevelName nvarchar(100),
@LevelDescription nvarchar(1000)
)
AS
BEGIN
IF EXISTS (SELECT * FROM SupportServiceLevels WHERE LevelName = @LevelName)
BEGIN
SET @LevelID = -1
RETURN
END
INSERT INTO SupportServiceLevels
(
LevelName,
LevelDescription
)
VALUES
(
@LevelName,
@LevelDescription
)
SET @LevelID = SCOPE_IDENTITY()
DECLARE @ResourseGroupID int
IF EXISTS (SELECT * FROM ResourceGroups WHERE GroupName = 'Service Levels')
BEGIN
DECLARE @QuotaLastID int, @CurQuotaName nvarchar(100),
@CurQuotaDescription nvarchar(1000), @QuotaOrderInGroup int
SET @CurQuotaName = N'ServiceLevel.' + @LevelName
SET @CurQuotaDescription = @LevelName + N', users'
SELECT @ResourseGroupID = GroupID FROM ResourceGroups WHERE GroupName = 'Service Levels'
SELECT @QuotaLastID = MAX(QuotaID) FROM Quotas
SELECT @QuotaOrderInGroup = MAX(QuotaOrder) FROM Quotas WHERE GroupID = @ResourseGroupID
IF @QuotaOrderInGroup IS NULL SET @QuotaOrderInGroup = 0
IF NOT EXISTS (SELECT * FROM Quotas WHERE QuotaName = @CurQuotaName)
BEGIN
INSERT Quotas
(QuotaID,
GroupID,
QuotaOrder,
QuotaName,
QuotaDescription,
QuotaTypeID,
ServiceQuota,
ItemTypeID)
VALUES
(@QuotaLastID + 1,
@ResourseGroupID,
@QuotaOrderInGroup + 1,
@CurQuotaName,
@CurQuotaDescription,
3,
0,
NULL)
END
END
END
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteSupportServiceLevel')
DROP PROCEDURE DeleteSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[DeleteSupportServiceLevel]
(
@LevelID int
)
AS
BEGIN
DECLARE @LevelName nvarchar(100), @QuotaName nvarchar(100), @QuotaID int
SELECT @LevelName = LevelName FROM SupportServiceLevels WHERE LevelID = @LevelID
SET @QuotaName = N'ServiceLevel.' + @LevelName
SELECT @QuotaID = QuotaID FROM Quotas WHERE QuotaName = @QuotaName
IF @QuotaID IS NOT NULL
BEGIN
DELETE FROM HostingPlanQuotas WHERE QuotaID = @QuotaID
DELETE FROM PackageQuotas WHERE QuotaID = @QuotaID
DELETE FROM Quotas WHERE QuotaID = @QuotaID
END
IF EXISTS (SELECT * FROM ExchangeAccounts WHERE LevelID = @LevelID)
UPDATE ExchangeAccounts
SET LevelID = NULL
WHERE LevelID = @LevelID
DELETE FROM SupportServiceLevels WHERE LevelID = @LevelID
END
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateSupportServiceLevel')
DROP PROCEDURE UpdateSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[UpdateSupportServiceLevel]
(
@LevelID int,
@LevelName nvarchar(100),
@LevelDescription nvarchar(1000)
)
AS
BEGIN
DECLARE @PrevQuotaName nvarchar(100), @PrevLevelName nvarchar(100)
SELECT @PrevLevelName = LevelName FROM SupportServiceLevels WHERE LevelID = @LevelID
SET @PrevQuotaName = N'ServiceLevel.' + @PrevLevelName
UPDATE SupportServiceLevels
SET LevelName = @LevelName,
LevelDescription = @LevelDescription
WHERE LevelID = @LevelID
IF EXISTS (SELECT * FROM Quotas WHERE QuotaName = @PrevQuotaName)
BEGIN
DECLARE @QuotaID INT
SELECT @QuotaID = QuotaID FROM Quotas WHERE QuotaName = @PrevQuotaName
UPDATE Quotas
SET QuotaName = N'ServiceLevel.' + @LevelName,
QuotaDescription = @LevelName + ', users'
WHERE QuotaID = @QuotaID
END
END
RETURN
GO
IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='ExchangeAccounts' AND COLS.name='LevelID')
BEGIN
ALTER TABLE [dbo].[ExchangeAccounts] ADD
[LevelID] [int] NULL,
[IsVIP] [bit] NOT NULL DEFAULT 0
END
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type IN ('FN', 'IF', 'TF') AND name = 'GetPackageServiceLevelResource')
DROP FUNCTION GetPackageServiceLevelResource
GO
CREATE FUNCTION dbo.GetPackageServiceLevelResource
(
@PackageID int,
@GroupID int,
@ServerID int
)
RETURNS bit
AS
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.ResourceGroups WHERE GroupID = @GroupID AND GroupName = 'Service Levels')
RETURN 0
IF @PackageID IS NULL
RETURN 1
DECLARE @Result bit
SET @Result = 1 -- enabled
DECLARE @PID int, @ParentPackageID int
SET @PID = @PackageID
DECLARE @OverrideQuotas bit
IF @ServerID IS NULL OR @ServerID = 0
SELECT @ServerID = ServerID FROM Packages
WHERE PackageID = @PackageID
WHILE 1 = 1
BEGIN
DECLARE @GroupEnabled int
-- get package info
SELECT
@ParentPackageID = ParentPackageID,
@OverrideQuotas = OverrideQuotas
FROM Packages WHERE PackageID = @PID
-- check if this is a root 'System' package
SET @GroupEnabled = 1 -- enabled
IF @ParentPackageID IS NULL
BEGIN
IF @ServerID = 0
RETURN 0
ELSE IF @PID = -1
RETURN 1
ELSE IF @ServerID IS NULL
RETURN 1
ELSE IF @ServerID > 0
RETURN 1
ELSE RETURN 0
END
ELSE -- parentpackage is not null
BEGIN
-- check the current package
IF @OverrideQuotas = 1
BEGIN
IF NOT EXISTS(
SELECT GroupID FROM PackageResources WHERE GroupID = @GroupID AND PackageID = @PID
)
SET @GroupEnabled = 0
END
ELSE
BEGIN
IF NOT EXISTS(
SELECT HPR.GroupID FROM Packages AS P
INNER JOIN HostingPlanResources AS HPR ON P.PlanID = HPR.PlanID
WHERE HPR.GroupID = @GroupID AND P.PackageID = @PID
)
SET @GroupEnabled = 0
END
-- check addons
IF EXISTS(
SELECT HPR.GroupID FROM PackageAddons AS PA
INNER JOIN HostingPlanResources AS HPR ON PA.PlanID = HPR.PlanID
WHERE HPR.GroupID = @GroupID AND PA.PackageID = @PID
AND PA.StatusID = 1 -- active add-on
)
SET @GroupEnabled = 1
END
IF @GroupEnabled = 0
RETURN 0
SET @PID = @ParentPackageID
END -- end while
RETURN @Result
END
GO
ALTER PROCEDURE [dbo].[GetPackageQuotasForEdit]
(
@ActorID int,
@PackageID int
)
AS
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
DECLARE @ServerID int, @ParentPackageID int, @PlanID int
SELECT @ServerID = ServerID, @ParentPackageID = ParentPackageID, @PlanID = PlanID FROM Packages
WHERE PackageID = @PackageID
-- get resource groups
SELECT
RG.GroupID,
RG.GroupName,
ISNULL(PR.CalculateDiskSpace, ISNULL(HPR.CalculateDiskSpace, 0)) AS CalculateDiskSpace,
ISNULL(PR.CalculateBandwidth, ISNULL(HPR.CalculateBandwidth, 0)) AS CalculateBandwidth,
--dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, @ServerID) AS Enabled,
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(PackageID, RG.GroupID, @ServerID)
ELSE dbo.GetPackageAllocatedResource(PackageID, RG.GroupID, @ServerID)
END AS Enabled,
--dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, @ServerID) AS ParentEnabled
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(@ParentPackageID, RG.GroupID, @ServerID)
ELSE dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, @ServerID)
END AS ParentEnabled
FROM ResourceGroups AS RG
LEFT OUTER JOIN PackageResources AS PR ON RG.GroupID = PR.GroupID AND PR.PackageID = @PackageID
LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID
ORDER BY RG.GroupOrder
-- return quotas
SELECT
Q.QuotaID,
Q.GroupID,
Q.QuotaName,
Q.QuotaDescription,
Q.QuotaTypeID,
CASE
WHEN PQ.QuotaValue IS NULL THEN dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID)
ELSE PQ.QuotaValue
END QuotaValue,
dbo.GetPackageAllocatedQuota(@ParentPackageID, Q.QuotaID) AS ParentQuotaValue
FROM Quotas AS Q
LEFT OUTER JOIN PackageQuotas AS PQ ON PQ.QuotaID = Q.QuotaID AND PQ.PackageID = @PackageID
ORDER BY Q.QuotaOrder
RETURN
GO
ALTER PROCEDURE [dbo].[GetPackageQuotas]
(
@ActorID int,
@PackageID int
)
AS
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
DECLARE @PlanID int, @ParentPackageID int
SELECT @PlanID = PlanID, @ParentPackageID = ParentPackageID FROM Packages
WHERE PackageID = @PackageID
-- get resource groups
SELECT
RG.GroupID,
RG.GroupName,
ISNULL(HPR.CalculateDiskSpace, 0) AS CalculateDiskSpace,
ISNULL(HPR.CalculateBandwidth, 0) AS CalculateBandwidth,
--dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, 0) AS ParentEnabled
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(@ParentPackageID, RG.GroupID, 0)
ELSE dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, 0)
END AS ParentEnabled
FROM ResourceGroups AS RG
LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID
--WHERE dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, 0) = 1
WHERE (dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, 0) = 1 AND RG.GroupName <> 'Service Levels') OR
(dbo.GetPackageServiceLevelResource(@PackageID, RG.GroupID, 0) = 1 AND RG.GroupName = 'Service Levels')
ORDER BY RG.GroupOrder
-- return quotas
SELECT
Q.QuotaID,
Q.GroupID,
Q.QuotaName,
Q.QuotaDescription,
Q.QuotaTypeID,
dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID) AS QuotaValue,
dbo.GetPackageAllocatedQuota(@ParentPackageID, Q.QuotaID) AS ParentQuotaValue,
ISNULL(dbo.CalculateQuotaUsage(@PackageID, Q.QuotaID), 0) AS QuotaUsedValue
FROM Quotas AS Q
WHERE Q.HideQuota IS NULL OR Q.HideQuota = 0
ORDER BY Q.QuotaOrder
RETURN
GO
ALTER PROCEDURE [dbo].[GetHostingPlanQuotas]
(
@ActorID int,
@PlanID int,
@PackageID int,
@ServerID int
)
AS
-- check rights
IF dbo.CheckActorParentPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
DECLARE @IsAddon bit
IF @ServerID = 0
SELECT @ServerID = ServerID FROM Packages
WHERE PackageID = @PackageID
-- get resource groups
SELECT
RG.GroupID,
RG.GroupName,
CASE
WHEN HPR.CalculateDiskSpace IS NULL THEN CAST(0 as bit)
ELSE CAST(1 as bit)
END AS Enabled,
--dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, @ServerID) AS ParentEnabled,
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(@PackageID, RG.GroupID, @ServerID)
ELSE dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, @ServerID)
END AS ParentEnabled,
ISNULL(HPR.CalculateDiskSpace, 1) AS CalculateDiskSpace,
ISNULL(HPR.CalculateBandwidth, 1) AS CalculateBandwidth
FROM ResourceGroups AS RG
LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID
WHERE (RG.ShowGroup = 1)
ORDER BY RG.GroupOrder
-- get quotas by groups
SELECT
Q.QuotaID,
Q.GroupID,
Q.QuotaName,
Q.QuotaDescription,
Q.QuotaTypeID,
ISNULL(HPQ.QuotaValue, 0) AS QuotaValue,
dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID) AS ParentQuotaValue
FROM Quotas AS Q
LEFT OUTER JOIN HostingPlanQuotas AS HPQ ON Q.QuotaID = HPQ.QuotaID AND HPQ.PlanID = @PlanID
WHERE Q.HideQuota IS NULL OR Q.HideQuota = 0
ORDER BY Q.QuotaOrder
RETURN
GO
ALTER PROCEDURE [dbo].[SearchOrganizationAccounts]
(
@ActorID int,
@ItemID int,
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@SortColumn nvarchar(50),
@IncludeMailboxes bit
)
AS
DECLARE @PackageID int
SELECT @PackageID = PackageID FROM ServiceItems
WHERE ItemID = @ItemID
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
-- start
DECLARE @condition nvarchar(700)
SET @condition = '
(EA.AccountType = 7 OR (EA.AccountType = 1 AND @IncludeMailboxes = 1) )
AND EA.ItemID = @ItemID
'
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 = 'EA.DisplayName ASC'
DECLARE @sql nvarchar(3500)
set @sql = '
SELECT
EA.AccountID,
EA.ItemID,
EA.AccountType,
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress,
EA.SubscriberNumber,
EA.UserPrincipalName,
EA.LevelID,
EA.IsVIP
FROM ExchangeAccounts AS EA
WHERE ' + @condition
print @sql
exec sp_executesql @sql, N'@ItemID int, @IncludeMailboxes bit',
@ItemID, @IncludeMailboxes
RETURN
GO
ALTER PROCEDURE [dbo].[GetExchangeAccount]
(
@ItemID int,
@AccountID int
)
AS
SELECT
E.AccountID,
E.ItemID,
E.AccountType,
E.AccountName,
E.DisplayName,
E.PrimaryEmailAddress,
E.MailEnabledPublicFolder,
E.MailboxManagerActions,
E.SamAccountName,
E.AccountPassword,
E.MailboxPlanId,
P.MailboxPlan,
E.SubscriberNumber,
E.UserPrincipalName,
E.ArchivingMailboxPlanId,
AP.MailboxPlan as 'ArchivingMailboxPlan',
E.EnableArchiving,
E.LevelID,
E.IsVIP
FROM
ExchangeAccounts AS E
LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId
LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId
WHERE
E.ItemID = @ItemID AND
E.AccountID = @AccountID
RETURN
GO
ALTER PROCEDURE [dbo].[GetExchangeAccountsPaged]
(
@ActorID int,
@ItemID int,
@AccountTypes nvarchar(30),
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@SortColumn nvarchar(50),
@StartRow int,
@MaximumRows int,
@Archiving bit
)
AS
DECLARE @PackageID int
SELECT @PackageID = PackageID FROM ServiceItems
WHERE ItemID = @ItemID
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
-- start
DECLARE @condition nvarchar(700)
SET @condition = '
EA.AccountType IN (' + @AccountTypes + ')
AND EA.ItemID = @ItemID
'
IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL
AND @FilterValue <> '' AND @FilterValue IS NOT NULL
BEGIN
IF @FilterColumn = 'PrimaryEmailAddress' AND @AccountTypes <> '2'
BEGIN
SET @condition = @condition + ' AND EA.AccountID IN (SELECT EAEA.AccountID FROM ExchangeAccountEmailAddresses EAEA WHERE EAEA.EmailAddress LIKE ''' + @FilterValue + ''')'
END
ELSE
BEGIN
SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + ''''
END
END
if @Archiving = 1
BEGIN
SET @condition = @condition + ' AND (EA.ArchivingMailboxPlanId > 0) '
END
IF @SortColumn IS NULL OR @SortColumn = ''
SET @SortColumn = 'EA.DisplayName ASC'
DECLARE @joincondition nvarchar(700)
SET @joincondition = ',P.MailboxPlan FROM ExchangeAccounts AS EA
LEFT OUTER JOIN ExchangeMailboxPlans AS P ON EA.MailboxPlanId = P.MailboxPlanId'
DECLARE @sql nvarchar(3500)
set @sql = '
SELECT COUNT(EA.AccountID) FROM ExchangeAccounts AS EA
WHERE ' + @condition + ';
WITH Accounts AS (
SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row,
EA.AccountID,
EA.ItemID,
EA.AccountType,
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress,
EA.MailEnabledPublicFolder,
EA.MailboxPlanId,
EA.SubscriberNumber,
EA.UserPrincipalName,
EA.LevelID,
EA.IsVIP ' + @joincondition +
' WHERE ' + @condition + '
)
SELECT * FROM Accounts
WHERE Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows
'
print @sql
exec sp_executesql @sql, N'@ItemID int, @StartRow int, @MaximumRows int',
@ItemID, @StartRow, @MaximumRows
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateExchangeAccountSLSettings')
DROP PROCEDURE UpdateExchangeAccountSLSettings
GO
CREATE PROCEDURE [dbo].[UpdateExchangeAccountSLSettings]
(
@AccountID int,
@LevelID int,
@IsVIP bit
)
AS
BEGIN TRAN
IF (@LevelID = -1)
BEGIN
SET @LevelID = NULL
END
UPDATE ExchangeAccounts SET
LevelID = @LevelID,
IsVIP = @IsVIP
WHERE
AccountID = @AccountID
IF (@@ERROR <> 0 )
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
COMMIT TRAN
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'CheckServiceLevelUsage')
DROP PROCEDURE CheckServiceLevelUsage
GO
CREATE PROCEDURE [dbo].[CheckServiceLevelUsage]
(
@LevelID int
)
AS
SELECT COUNT(EA.AccountID)
FROM SupportServiceLevels AS SL
INNER JOIN ExchangeAccounts AS EA ON SL.LevelID = EA.LevelID
WHERE EA.LevelID = @LevelID
RETURN
GO