Skip to content

Commit 43e94b3

Browse files
AgentAlert
1 parent b558063 commit 43e94b3

File tree

2 files changed

+91
-62
lines changed

2 files changed

+91
-62
lines changed

source/checks/Agentv5.Tests.ps1

Lines changed: 45 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -181,72 +181,55 @@ Describe "SQL Agent Failed Jobs" -Tag FailedJob, Agent -ForEach $InstancesToTest
181181

182182

183183

184+
Describe "Agent Alerts" -Tag AgentAlert, Agent -ForEach $InstancesToTest {
185+
$skipAgentAlerts = ($__dbcconfig | Where-Object { $_.Name -eq 'skip.agent.alert' }).Value
186+
$AgentAlertJob = ($__dbcconfig | Where-Object { $_.Name -eq 'agent.alert.Job' }).Value
187+
$AgentAlertNotification = ($__dbcconfig | Where-Object { $_.Name -eq 'agent.alert.Notification' }).Value
184188

189+
Write-PSFMessage -Message "Instances = $($PSItem.Severity)" -Level Verbose
185190

191+
Context "Testing Agent Alerts Severity exists on <_.Name>" {
192+
It "Severity <_.AgentAlertSeverity> Alert should exist on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.Severities) { #| Where-Object { $_.Severity -NE $null }) {
193+
$PSItem.Severity | Should -Be $PSItem.AgentAlertSeverity -Because "Recommended Agent Alerts to exists http://blog.extreme-advice.com/2013/01/29/list-of-errors-and-severity-level-in-sql-server-with-catalog-view-sysmessages/"
194+
}
195+
196+
It "Severity <_.AgentAlertSeverity> Alert should be enabled on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.Severities) {
197+
$PSItem.IsEnabled | Should -Be $true -Because "Configured alerts should be enabled"
198+
}
199+
if ($AgentAlertJob) {
200+
It "A job name for Severity <_.AgentAlertSeverity> Alert on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.Severities) {
201+
$PSItem.JobName -ne $null | Should -Be $true -Because "Should notify by SQL Agent Job"
202+
}
203+
}
204+
if ($AgentAlertNotification) {
205+
It "Severity <_.AgentAlertSeverity> Alert should have a notification on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.Severities) {
206+
$PSItem.HasNotification -in 1, 2, 3, 4, 5, 6, 7 | Should -Be $true -Because "Should notify by Agent notifications"
207+
}
208+
}
209+
210+
}
211+
212+
Context "Testing Agent Alerts MessageID exists on <_.Name>" {
213+
It "MessageID <_.AgentMessageID> Alert should exist on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.MessageIDs) {
214+
$PSItem.MessageID | Should -Be $PSItem.AgentMessageID -Because "Recommended Agent Alerts to exists http://blog.extreme-advice.com/2013/01/29/list-of-errors-and-severity-level-in-sql-server-with-catalog-view-sysmessages/"
215+
}
216+
It "MessageID <_.AgentMessageID> Alert should be enabled on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.MessageIDs) {
217+
$PSItem.IsEnabled | Should -Be $true -Because "Configured alerts should be enabled"
218+
}
219+
if ($AgentAlertJob) {
220+
It "A job name for MessageID <_.AgentMessageID> on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.MessageIDs) {
221+
$PSItem.JobName -ne $null | Should -Be $true -Because "Should notify by SQL Agent Job"
222+
}
223+
}
224+
if ($AgentAlertNotification) {
225+
It "MessageID <_.AgentMessageID> Alert should have a notification on <_.InstanceName>" -Skip:$skipAgentAlerts -ForEach ($PSItem.AgentAlerts.MessageIDs) {
226+
$PSItem.HasNotification -in 1, 2, 3, 4, 5, 6, 7 | Should -Be $true -Because "Should notify by Agent notifications"
227+
}
228+
}
229+
}
230+
}
186231

187232

188-
# Describe "Agent Alerts" -Tags AgentAlert, $filename {
189-
# $severity = Get-DbcConfigValue agent.alert.Severity
190-
# $messageid = Get-DbcConfigValue agent.alert.messageid
191-
# $AgentAlertJob = Get-DbcConfigValue agent.alert.Job
192-
# $AgentAlertNotification = Get-DbcConfigValue agent.alert.Notification
193-
# $skip = Get-DbcConfigValue skip.agent.alert
194-
# if ($NotContactable -contains $psitem) {
195-
# Context "Testing Agent Alerts Severity exists on $psitem" {
196-
# It "Can't Connect to $Psitem" {
197-
# $false | Should -BeTrue -Because "The instance should be available to be connected to!"
198-
# }
199-
# }
200-
# Context "Testing Agent Alerts MessageID exists on $psitem" {
201-
# It "Can't Connect to $Psitem" {
202-
# $false | Should -BeTrue -Because "The instance should be available to be connected to!"
203-
# }
204-
# }
205-
# }
206-
# else {
207-
# $alerts = Get-DbaAgentAlert -SqlInstance $psitem
208-
# Context "Testing Agent Alerts Severity exists on $psitem" {
209-
# ForEach ($sev in $severity) {
210-
# It "Severity $sev Alert should exist on $psitem" -Skip:$skip {
211-
# ($alerts.Where{ $psitem.Severity -eq $sev }) | Should -be $true -Because "Recommended Agent Alerts to exists http://blog.extreme-advice.com/2013/01/29/list-of-errors-and-severity-level-in-sql-server-with-catalog-view-sysmessages/"
212-
# }
213-
# It "Severity $sev Alert should be enabled on $psitem" -Skip:$skip {
214-
# ($alerts.Where{ $psitem.Severity -eq $sev }).IsEnabled | Should -be $true -Because "Configured alerts should be enabled"
215-
# }
216-
# if ($AgentAlertJob) {
217-
# It "A job name for Severity $sev Alert on $psitem" -Skip:$skip {
218-
# ($alerts.Where{ $psitem.Severity -eq $sev }).jobname -ne $null | Should -be $true -Because "Should notify by SQL Agent Job"
219-
# }
220-
# }
221-
# if ($AgentAlertNotification) {
222-
# It "Severity $sev Alert should have a notification on $psitem" -Skip:$skip {
223-
# ($alerts.Where{ $psitem.Severity -eq $sev }).HasNotification -in 1, 2, 3, 4, 5, 6, 7 | Should -be $true -Because "Should notify by Agent notifications"
224-
# }
225-
# }
226-
# }
227-
# }
228-
# Context "Testing Agent Alerts MessageID exists on $psitem" {
229-
# ForEach ($mid in $messageid) {
230-
# It "Message_ID $mid Alert should exist on $psitem" -Skip:$skip {
231-
# ($alerts.Where{ $psitem.messageid -eq $mid }) | Should -be $true -Because "Recommended Agent Alerts to exists http://blog.extreme-advice.com/2013/01/29/list-of-errors-and-severity-level-in-sql-server-with-catalog-view-sysmessages/"
232-
# }
233-
# It "Message_ID $mid Alert should be enabled on $psitem" -Skip:$skip {
234-
# ($alerts.Where{ $psitem.messageid -eq $mid }) | Should -be $true -Because "Configured alerts should be enabled"
235-
# }
236-
# if ($AgentAlertJob) {
237-
# It "A Job name for Message_ID $mid Alert should be on $psitem" -Skip:$skip {
238-
# ($alerts.Where{ $psitem.messageid -eq $mid }).jobname -ne $null | Should -be $true -Because "Should notify by SQL Agent Job"
239-
# }
240-
# }
241-
# if ($AgentAlertNotification) {
242-
# It "Message_ID $mid Alert should have a notification on $psitem" -Skip:$skip {
243-
# ($alerts.Where{ $psitem.messageid -eq $mid }).HasNotification -in 1, 2, 3, 4, 5, 6, 7 | Should -be $true -Because "Should notify by Agent notifications"
244-
# }
245-
# }
246-
# }
247-
# }
248-
# }
249-
# }
250233

251234
# Describe "Job History Configuration" -Tags JobHistory, $filename {
252235
# if ($NotContactable -contains $psitem) {

source/internal/functions/Get-AllAgentInfo.ps1

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ function Get-AllAgentInfo {
4444
# Failed Job Initial fields
4545
$FailedJobInitFields = $Instance.GetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Agent.Job])
4646

47+
# Agent Alerts Initial fields
48+
$AgentAlertsInitFields = $Instance.GetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Agent.Alert])
49+
4750
#TODO: Clean up?
4851
## Database Initial Fields
4952
#$DatabaseInitFields = $Instance.GetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Database])
@@ -251,7 +254,49 @@ function Get-AllAgentInfo {
251254

252255
}
253256
'AgentAlert' {
257+
$AgentAlertsInitFields.Add("Severity") | Out-Null # so we can check Alert Severity
258+
$AgentAlertsInitFields.Add("IsEnabled") | Out-Null # so we can check Alert status
259+
$AgentAlertsInitFields.Add("JobName") | Out-Null # so we can check Alert job
260+
$AgentAlertsInitFields.Add("HasNotification") | Out-Null # so we can check Alert notification
261+
262+
$Instance.SetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Agent.Alert], $AgentAlertsInitFields)
263+
$AgentAlertsInitFields = $Instance.GetDefaultInitFields([Microsoft.SqlServer.Management.Smo.Agent.Alert])
264+
265+
$ConfigValues | Add-Member -MemberType NoteProperty -Name 'AgentAlertSeverity' -Value (Get-DbcConfigValue agent.alert.Severity)
266+
$ConfigValues | Add-Member -MemberType NoteProperty -Name 'AgentAlertMessageId' -Value (Get-DbcConfigValue agent.alert.messageid)
267+
268+
$Severities = $ConfigValues.AgentAlertSeverity.ForEach{
269+
$Severity = [int]($PSItem)
270+
$sev = $Instance.JobServer.Alerts.Where{ $_.Severity -eq $Severity }
271+
[PSCustomObject]@{
272+
InstanceName = $Instance.Name
273+
AlertName = $sev.Name
274+
Severity = $sev.Severity
275+
IsEnabled = $sev.IsEnabled
276+
JobName = $sev.JobName
277+
HasNotification = $sev.HasNotification
278+
AgentAlertSeverity = $Severity
279+
}
280+
}
281+
282+
$MessageIDs = $ConfigValues.AgentAlertMessageId.ForEach{
283+
$MessageID = [int]($PSItem)
284+
$msgID = $Instance.JobServer.Alerts.Where{ $_.MessageID -eq $MessageID }
285+
[PSCustomObject]@{
286+
InstanceName = $Instance.Name
287+
AlertName = $msgID.Name
288+
MessageID = $msgID.MessageID
289+
IsEnabled = $msgID.IsEnabled
290+
JobName = $msgID.JobName
291+
HasNotification = $msgID.HasNotification
292+
AgentMessageID = $MessageID
293+
}
294+
}
254295

296+
$AgentAlerts = [PSCustomObject]@{
297+
Severities = $Severities
298+
MessageIDs = $MessageIDs
299+
}
255300
}
256301
'JobHistory' {
257302

@@ -386,6 +431,7 @@ function Get-AllAgentInfo {
386431
JobsFailed = $JobsFailed
387432
LastJobRuns = $LastJobRuns
388433
LongRunningJobs = $LongRunningJobs
434+
AgentAlerts = $AgentAlerts
389435
}
390436
return $testInstanceObject
391437
}

0 commit comments

Comments
 (0)