Hybr.psm1


# Instal Pre-Req Modules

if ((Get-InstalledModule -Name "CloudAssert.Common" -ErrorAction SilentlyContinue) -eq $null) {
    #-MinimumVersion 5.0 # Optionally specify minimum version to have
    Install-Module -Name CloudAssert.Common
} else {
    Update-Module -Name CloudAssert.Common -Force
}

# For Adding a Job to Purge the Hybr Tables on a weekly basis
function AddOrUpdate-SqlHybrTablesCleanUpJob {
    param($connectionName)
    if($connectionName -eq $null) {
        $connectionName =  Read-Input -message "Enter SQL connection name"
    }

    $sqlDbConn = Get-SqlDbConnection $connectionName
    $decoded = Invoke-Decode $sqlDbConn.Password
    $hybrDb = "Hybr";
    $dbServerName = $sqlDbConn.DbServerName;
    $backupScriptBlobUrl = '"https://cadownloads.blob.core.windows.net/plugins/BackupEventNotifications.ps1"';
    if(!(Get-YesOrNoUserResponse -message "Is Hybr database name - $hybrDb ?")) {
        $hybrDb = Read-Input -message "Enter Hybr database name"
    }

    $oldRecDuration = Read-Input -message "Enter how much old data need to be purged in months"
    $backupPath = $null;
    do
    {
        $backupPath = Read-Input -message "Enter Path to Backup EventNotifications(Eg: C:\EventsBackup)"
        if(($backupPath -replace "[^\s]").length -gt 0)
        {
            Write-Host "Backup path cannot contain path name with spaces inbetween. Enter Path name with no spaces"
        }
    }until(($backupPath -replace "[^\s]").length -eq 0)
    $proxyName = Read-Input -message "Enter Proxy Name created for powershell execution"
    $backUpScriptPath = '"' + $backupPath + "\Assets_DonotDelete" + '"';
    $backUpScriptFileName = '"' + $backupPath + "\Assets_DonotDelete\BackupEventNotifications.ps1" + '"';
    if(!(Test-Path -PathType container $backupPath))
    {
        New-Item -ItemType Directory -Path $backupPath
    }

    $endDate = (Get-Date).AddMonths(-$oldRecDuration).ToString('yyyy-MM-dd');
    $query = " USE msdb ;
                GO
                IF EXISTS(SELECT 1 FROM msdb.dbo.sysjobs WHERE name='Weekly_Hybr_Tables_Cleanup')
                BEGIN
                    EXEC sp_delete_jobschedule @name = N'Weekly_Hybr_Cleanup_Schedule', @job_name = N'Weekly_Hybr_Tables_Cleanup'
                    EXEC msdb.dbo.sp_delete_job @job_name = N'Weekly_Hybr_Tables_Cleanup', @delete_unused_schedule = 1
                END
 
                IF NOT EXISTS(SELECT 1 FROM msdb.dbo.sysjobs WHERE name='Weekly_Hybr_Tables_Cleanup')
                BEGIN
                    EXEC dbo.sp_add_job @job_name = N'Weekly_Hybr_Tables_Cleanup';
                END
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr Logs Table Cleanup',
                    @subsystem = N'TSQL',
                    @command = N'Declare @enddate date = DATEADD(MONTH, -$oldRecDuration, GETDATE())
                                WHILE 1 = 1
                                BEGIN
                                    DELETE TOP (1000)
                                    FROM Logs
                                    WHERE CreatedDate <= @endDate;
 
                                    IF @@rowcount < 1000
                                        BREAK;
                                END',
                    @retry_attempts = 5,
                    @retry_interval = 5,
                    @on_success_action = 3,
                    @on_fail_action = 3,
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr Notifications Table Cleanup',
                    @subsystem = N'TSQL',
                    @command = N'Declare @enddate date = DATEADD(MONTH, -$oldRecDuration, GETDATE())
                                WHILE 1 = 1
                                BEGIN
                                    DELETE TOP (1000)
                                    FROM Notifications
                                    WHERE CompletedDate <= @endDate;
 
                                    IF @@rowcount < 1000
                                        BREAK;
                                END',
                    @retry_attempts = 5,
                    @retry_interval = 5,
                    @on_success_action = 3,
                    @on_fail_action = 3,
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr EventNotificationStateChanges Table Cleanup',
                    @subsystem = N'TSQL',
                    @command = N'Declare @enddate date = DATEADD(MONTH, -$oldRecDuration, GETDATE())
                                WHILE 1 = 1
                                BEGIN
                                    DELETE TOP (1000)
                                    FROM EventNotificationStateChanges
                                    WHERE Timestamp <= @endDate;
 
                                    IF @@rowcount < 1000
                                        BREAK;
                                END',
                    @retry_attempts = 5,
                    @retry_interval = 5,
                    @on_success_action = 3,
                    @on_fail_action = 3,
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr Trace Table Cleanup',
                    @subsystem = N'TSQL',
                    @command = N'Declare @enddate date = DATEADD(MONTH, -$oldRecDuration, GETDATE())
                                WHILE 1 = 1
                                BEGIN
                                    DELETE TOP (1000)
                                    FROM Trace
                                    WHERE CreatedDate <= @endDate;
 
                                    IF @@rowcount < 1000
                                        BREAK;
                                END',
                    @retry_attempts = 5,
                    @retry_interval = 5,
                    @on_success_action = 3,
                    @on_fail_action = 3,
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr Events Table Cleanup',
                    @subsystem = N'TSQL',
                    @command = N'Declare @enddate date = DATEADD(MONTH, -$oldRecDuration, GETDATE())
                                WHILE 1 = 1
                                BEGIN
                                    DELETE TOP (1000)
                                    FROM Events
                                    WHERE CreatedTimestamp <= @endDate;
 
                                    IF @@rowcount < 1000
                                        BREAK;
                                END',
                    @retry_attempts = 5,
                    @retry_interval = 5,
                    @on_success_action = 3,
                    @on_fail_action = 3,
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Copy Event Notification backup script from blob if not exists',
                    @subsystem = N'PowerShell',
                    @command = 'if(!(Test-Path -PathType container $backUpScriptPath))
                    {
                        New-Item -ItemType Directory -Path $backUpScriptPath
                    }
                    if(Test-Path($backUpScriptFileName))
                    {
                        return
                    }
                    Invoke-WebRequest -URI $backupScriptBlobUrl -OutFile $backUpScriptFileName',
                    @retry_attempts = 5,
                    @on_success_action = 3,
                    @on_fail_action = 1,
                    @proxy_name= '$proxyName',
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr EventNotifications Table Backup',
                    @subsystem = N'PowerShell',
                    @command = N'powershell $backUpScriptFileName $dbServerName $hybrDb $oldRecDuration $backupPath',
                    @retry_attempts = 5,
                    @on_success_action = 3,
                    @on_fail_action = 1,
                    @database_name = '$hybrDb';
                GO
                EXEC sp_add_jobstep
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @step_name = N'Hybr EventNotifications Table Cleanup',
                    @subsystem = N'TSQL',
                    @command = N'Declare @enddate date = DATEADD(MONTH, -$oldRecDuration, GETDATE())
                                WHILE 1 = 1
                                BEGIN
                                    DELETE TOP (1000)
                                    FROM EventNotifications
                                    WHERE CreatedTimestamp <= @endDate
                                    AND NotificationState <> 0;
 
                                    IF @@rowcount < 1000
                                        BREAK;
                                END',
                    @retry_attempts = 5,
                    @retry_interval = 5,
                    @on_success_action = 1,
                    @database_name = '$hybrDb';
                GO
                EXEC dbo.sp_add_schedule
                    @schedule_name = N'Weekly_Hybr_Cleanup_Schedule',
                    @freq_type = 8,
                    @freq_interval = 64,
                    @freq_recurrence_factor = 1,
                    @active_start_time = 200000 ;
                EXEC sp_attach_schedule
                    @job_name = N'Weekly_Hybr_Tables_Cleanup',
                    @schedule_name = N'Weekly_Hybr_Cleanup_Schedule';
                GO
                EXEC dbo.sp_add_jobserver
                    @job_name = N'Weekly_Hybr_Tables_Cleanup';"


    $dbName = 'master'
    Invoke-Sqlcmd -ServerInstance $sqlDbConn.DbServerName -Database $dbName -Username $sqlDbConn.User -Password "$decoded" -Query $query
 }

 function Delete-SqlHybrTablesCleanUpJob {
    param($connectionName)
    if($connectionName -eq $null) {
        $connectionName =  Read-Input -message "Enter SQL connection name"
    }

    $sqlDbConn = Get-SqlDbConnection $connectionName
    $decoded = Invoke-Decode $sqlDbConn.Password

    $query = " USE msdb ;
                GO
                IF EXISTS(SELECT 1 FROM msdb.dbo.sysjobs WHERE name='Weekly_Hybr_Tables_Cleanup')
                BEGIN
                    EXEC sp_delete_jobschedule @name = N'Weekly_Hybr_Cleanup_Schedule', @job_name = N'Weekly_Hybr_Tables_Cleanup'
                    EXEC msdb.dbo.sp_delete_job @job_name = N'Weekly_Hybr_Tables_Cleanup', @delete_unused_schedule = 1
                END "


    $dbName = 'master'
    Invoke-Sqlcmd -ServerInstance $sqlDbConn.DbServerName -Database $dbName -Username $sqlDbConn.User -Password "$decoded" -Query $query
 }

# SIG # Begin signature block
# MIIQQAYJKoZIhvcNAQcCoIIQMTCCEC0CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUnSflUBOIvd3Rhs++V7+DRaJ5
# uSygggz8MIIGcjCCBFqgAwIBAgIIZDNR08c4nwgwDQYJKoZIhvcNAQELBQAwfDEL
# MAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgw
# FgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBD
# ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwNjI0MjA0NDMwWhcNMzEw
# NjI0MjA0NDMwWjB4MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNV
# BAcMB0hvdXN0b24xETAPBgNVBAoMCFNTTCBDb3JwMTQwMgYDVQQDDCtTU0wuY29t
# IENvZGUgU2lnbmluZyBJbnRlcm1lZGlhdGUgQ0EgUlNBIFIxMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAn4MTc6qwxm0hy9uLeod00HHcjpdymuS7iDS0
# 3YADxi9FpHSavx4PUOqebXjzn/pRJqk9ndGylFc++zmJG5ErVu9ny+YL4w45jMY1
# 9Iw93SXpAawXQn1YFkDc+dUoRB2VZDBhOmTyl9dzTH17IwJt83XrVT1vqi3Er750
# rF3+arb86lx56Q9DnLVSBQ/vPrGxj9BJrabjQhlUP/MvDqHLfP4T+SM52iUcuD4A
# SjpvMjA3ZB7HrnUH2FXSGMkOiryjXPB8CqeFgcIOr4+ZXNNgJbyDWmkcJRPNcvXr
# nICb3CxnxN3JCZjVc+vEIaPlMo4+L1KYxmA3ZIyyb0pUchjMJ4f6zXWiYyFMtT1k
# /Summ1WvJkxgtLlc/qtDva3QE2ZQHwvSiab/14AG8cMRAjMzYRf3Vh+OLzto5xXx
# d1ZKKZ4D2sIrJmEyW6BW5UkpjTan9cdSolYDIC84eIC99gauQTTLlEW9m8eJGB8L
# uv+prmpAmRPd71DfAbryBNbQMd80OF5XW8g4HlbUrEim7f/5uME77cIkvkRgp3fN
# 1T2YWbRD6qpgfc3C5S/x6/XUINWXNG5dBGsFEdLTkowJJ0TtTzUxRn50GQVi7Inj
# 6iNwmOTRL9SKExhGk2XlWHPTTD0neiI/w/ijVbf55oeC7EUexW46fLFOuato95tj
# 1ZFBvKkCAwEAAaOB+zCB+DAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0E
# CQei9Xp9UlMSkpXuOIAlDaZZMDAGCCsGAQUFBwEBBCQwIjAgBggrBgEFBQcwAYYU
# aHR0cDovL29jc3BzLnNzbC5jb20wEQYDVR0gBAowCDAGBgRVHSAAMBMGA1UdJQQM
# MAoGCCsGAQUFBwMDMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9jcmxzLnNzbC5j
# b20vc3NsLmNvbS1yc2EtUm9vdENBLmNybDAdBgNVHQ4EFgQUVML+EJUAk81q9efA
# 19myS7iPDOMwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQD1DyaH
# cK+Zosr11snwjWY9OYLTiCPYgr+PVIQnttODB9eeJ4lNhI5U0SDuYEPbV0I8x7CV
# 9r7M6qM9jk8GxitZhn/rcxvK5UAm4D1vzPa9ccbNfQ4gQDnWBdKvlAi/f8JRtyu1
# e4Mh8GPa5ZzhaS51HU7LYR71pTPfAp0V2e1pk1e6RkUugLxlvucSPt5H/5CcEK32
# VrKk1PrW/C68lyGzdoPSkfoGUNGxgCiA/tutD2ft+H3c2XBberpotbNKZheP5/Dn
# V91p/rxe4dWMnxO7lZoV+3krhdVtPmdHbhsHXPtURQ8WES4Rw7C8tW4cM1eUHv5C
# NEaOMVBO2zNXlfo45OYS26tYLkW32SLK9FpHSSwo6E+MQjxkaOnmQ6wZkanHE4Jf
# /HEKN7edUHs8XfeiUoI15LXn0wpva/6N+aTX1R1L531iCPjZ16yZSdu1hEEULvYu
# YJdTS5r+8Yh6dLqedeng2qfJzCw7e0wKeM+U9zZgtoM8ilTLTg1oKpQRdSYU6iA3
# zOt5F3ZVeHFt4kk4Mzfb5GxZxyNi5rzOLlRL/V4DKsjdHktxRNB1PjFiZYsppu0k
# 4XodhDR/pBd8tKx9PzVYy8O/Gt2fVFZtReVT84iKKzGjyj5Q0QA07CcIw2fGXOho
# v88uFmW4PGb/O7KVq5qNncyU8O14UH/sZEejnTCCBoIwggRqoAMCAQICEA0SjRWQ
# uYT7eM+eDgHqTTMwDQYJKoZIhvcNAQELBQAweDELMAkGA1UEBhMCVVMxDjAMBgNV
# BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDE0
# MDIGA1UEAwwrU1NMLmNvbSBDb2RlIFNpZ25pbmcgSW50ZXJtZWRpYXRlIENBIFJT
# QSBSMTAeFw0yMTEwMjUyMDQ1NTNaFw0yMzEwMjUyMDQ1NTNaMHcxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdSZWRtb25kMRkwFwYD
# VQQKDBBDbG91ZCBBc3NlcnQgTExDMQswCQYDVQQLDAJVUzEZMBcGA1UEAwwQQ2xv
# dWQgQXNzZXJ0IExMQzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAOr+
# k6LFTYXntOaV4dGI/mIyACrEE3JCr4RP5Aur5QgWuraKhL2JSh63eADxOOuk5P4E
# KXhNG8F1XW67gDLNfUlQ9ZagD3+xts/Vc8hZOqmwGw57K0/EUy5RoVVVWntMQ7DX
# q0VNp2SgMVHBuRWLvB7MX7OGTJ96+IWgEzMITBxx+bToBl+iefkJhOVZi2lCG9oN
# M3i5Yrq2T7cV1uCQwl6JNBrsaCJ64vs6pz8LzR0XmhXtg5rLYehFCqcWYCcH4Njm
# ZUVharTmBozLOTPdL6y3UReZRM5J1SxvrfRvalFQGWX4hK6OirBey1yPnhzqNHAt
# iwCLxn5l+pnTh89LLmtc1Bp8OI2nN7yaiXK13441EQFpIYnBSQJ6e8n0dDpwwoux
# OSfxtgX8iila0DBoy9vLCyGTnyXdO1zZYGoll9v8aSbvWOZu4n4gvQPVIhgROU74
# wkfGXI61Ab9ZtltF5W5WQesJoDiRIYgHUxYWU5fsTPzsoQFIXzHyaTqeJKXOtwID
# AQABo4IBhzCCAYMwHwYDVR0jBBgwFoAUVML+EJUAk81q9efA19myS7iPDOMwegYI
# KwYBBQUHAQEEbjBsMEgGCCsGAQUFBzAChjxodHRwOi8vY2VydC5zc2wuY29tL1NT
# TGNvbS1TdWJDQS1Db2RlU2lnbmluZy1SU0EtNDA5Ni1SMS5jZXIwIAYIKwYBBQUH
# MAGGFGh0dHA6Ly9vY3Nwcy5zc2wuY29tMFEGA1UdIARKMEgwCAYGZ4EMAQQBMDwG
# DCsGAQQBgqkwAQMDATAsMCoGCCsGAQUFBwIBFh5odHRwczovL3d3dy5zc2wuY29t
# L3JlcG9zaXRvcnkwEwYDVR0lBAwwCgYIKwYBBQUHAwMwTQYDVR0fBEYwRDBCoECg
# PoY8aHR0cDovL2NybHMuc3NsLmNvbS9TU0xjb20tU3ViQ0EtQ29kZVNpZ25pbmct
# UlNBLTQwOTYtUjEuY3JsMB0GA1UdDgQWBBT5QOeOXNcPYtBWMGBY9lkdLp4AczAO
# BgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAGL909UmLyhbmLPe0AyH
# mItkDXXIonmIsCrNrquwtFB5ZFhV2eQEEcFi8N+R1Pw2CGWNQe8EGN83nr1ItDNc
# JqweHvadc6i5FF1DVRPKEVHzORKKsKGZ97KyYQkT+YxJLfVCLdFCemCd2QYQuFJQ
# 4LdKcR9QZE0LvoiE9qVZ0fv2oO/4Yg/jgFTS4m1znT1IXIfCgnxfK9dr5QwQt/wX
# 3ayq554Ptbl7f6g9AGnD3U7cEaDvaPqRX16AGgxWbJU4W740UeNZnsFvdNcBHY/7
# wWxCzR03dzTGivW1aozokn05KeOyF0ZU7vhhXSeKyoaLzJXEr96r7pBUfBlVL9p9
# 6IVsHxsnPGFVZiaaZ0YQFsBWJZLEpVOIXCl2Jb2KX/NshRJGeijK0a6msVYIHKPv
# mhLnDruJkadj4RIgk8AQ2wsttUWtjWRKjD072OnAVZatRsCPIPQJsk+8gSKqfDZR
# o3DZhnrCd6TfjuoU9aULSXrwJljrOqLNOZHFoBuT7y3dZHPoo596yCmwUs+7dYCR
# nBU+hQ0Fca9aWpaYw4lKdxxhXn66EIR00TbaE3HYdHhlOc8koA9VUI/eiWdd1rKL
# j67luXYkCEJ37fE6SlyL1Jkhu3dd79+GSYlTINRnH415fH4DwiOMckj8kRbdyRV1
# tT1R5QeVMAdZHzQ80j8shEydMYICrjCCAqoCAQEwgYwweDELMAkGA1UEBhMCVVMx
# DjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wg
# Q29ycDE0MDIGA1UEAwwrU1NMLmNvbSBDb2RlIFNpZ25pbmcgSW50ZXJtZWRpYXRl
# IENBIFJTQSBSMQIQDRKNFZC5hPt4z54OAepNMzAJBgUrDgMCGgUAoHgwGAYKKwYB
# BAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAc
# BgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUIOWU
# puKWcVlUkRZ4gbOWHvmP64AwDQYJKoZIhvcNAQEBBQAEggGAGK1dobd2Owvmc0tl
# KppX7fUrPSA7Y76zk6Ja0+0DYI9ul96w7g9M6+dmh/2jCXK3W9GyJN9AQVkG8dup
# kgl1vlLs/686PKwBDxlY90FhVrmrBNDoiZWtdNELGyj+C1btpWQbGmDa6KWG+Tsk
# ATMhJGMpeK9BqOcvwYV2r3QBHVn00J6EF/rSt/IkKmuwOwgTaq5FCtOGUafRoAVw
# yWB4NJYFb0qRIexUlgSeRWbRd9N56X+YKAjf7c7aTMRZAn32kgc0+WXJQxPlU1g4
# VV21TmM65AZky2h/3EdbQb27XHouUJT5fALbyD1UbjCsZ2/U5nNqLqJyz/Is3aIq
# gfYeY/IEFtO7vn1HyhF3bVGL1FFU5hAMiecRrEL1VGMORO19CHrTpjvL9+XVwsjk
# 0JePff9QDFM43m+xIBxBISgpghj0shxpaMEyocal1rI/tPSejbyNuNcApRTJZ1+g
# TkSpRErlfvYqB3VDvhVxZNYltMOxj+q1w/IFHI1+x1CUboXw
# SIG # End signature block