Public/Suspend-DDMonitor.ps1
function Suspend-DDMonitor { <# .SYNOPSIS Mutes Datadog monitors. Either all of them with -All or a specific one with -MonitorID .DESCRIPTION .EXAMPLE # Mute all monitors Suspend-DDMonitor -All .EXAMPLE # Mute a single monitor Suspend-DDMonitor -MonitorID 123456 .EXAMPLE # Mute a single monitor and specify and end date in 2 days. Suspend-DDMonitor -MonitorID 123456 -EndDate (Get-Date).AddDays(2) .EXAMPLE # Mute a single monitor and specify and end timestamp, also mute only for scope role:frontend Suspend-DDMonitor -MonitorID 123456 -EndTimestamp -Scope 'role:frontend' .LINK http://docs.datadoghq.com/api/?lang=console#monitor-mute http://docs.datadoghq.com/api/?lang=console#monitor-mute-all .FUNCTIONALITY #> [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High',DefaultParameterSetName="Default")] param ( [Parameter( ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, ParameterSetName="Suspend-DDMonitor:All" )] [switch]$All, # Can be part of 3 parameter sets [Parameter( Position=0, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$false, Mandatory=$True, HelpMessage="A Datadog Monitor ID", ParameterSetName="Default" )] [Parameter( Position=0, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$false, Mandatory=$True, HelpMessage="A Datadog Monitor ID", ParameterSetName="Suspend-DDMonitor:IDAndDate" )] [Parameter( Position=0, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$false, Mandatory=$True, HelpMessage="A Datadog Monitor ID", ParameterSetName="Suspend-DDMonitor:IDAndTimestamp" )] [Alias('Id')] [uint32]$MonitorId, # Can be part of 3 parameter sets! [Parameter( Position=1, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, Mandatory=$False, HelpMessage="The scope to apply the mute to, e.g. role:db", ParameterSetName="Default" )] [Parameter( Position=1, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, Mandatory=$False, HelpMessage="The scope to apply the mute to, e.g. role:db", ParameterSetName="Suspend-DDMonitor:IDAndDate" )] [Parameter( Position=1, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, Mandatory=$False, HelpMessage="The scope to apply the mute to, e.g. role:db", ParameterSetName="Suspend-DDMonitor:IDAndTimestamp" )] [string[]]$Scope, [Parameter( Position=2, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, Mandatory=$False, HelpMessage="A POSIX timestamp for when the mute should end", ParameterSetName="Suspend-DDMonitor:IDAndTimestamp" )] [Double]$EndTimestamp, [Parameter( Position=2, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, Mandatory=$False, HelpMessage="A Datetime object representing when the mute should end", ParameterSetName="Suspend-DDMonitor:IDAndDate" )] [DateTime]$EndDate ) process { if ($PSCmdlet.ParameterSetName -eq "Suspend-DDMonitor:All") { $Endpoint = '/monitor/mute_all' $ConfirmationMessage = 'Muting all monitors' $defaultDisplaySet = 'id', 'active', 'disabled', 'start', 'end', 'scope' } else { $Endpoint = "/monitor/$MonitorId/mute" $ConfirmationMessage = "Muting monitor $MonitorId" $Body = @{} $defaultDisplaySet = 'id', 'name', 'type', 'query', 'overall_state', 'message', 'options', 'creator', 'created', 'modified' if ($PSCmdlet.ParameterSetName -eq "Suspend-DDMonitor:IDAndDate") { $unixEpochStart = new-object DateTime 1970,1,1,0,0,0,([DateTimeKind]::Utc) $EndTimestamp = [int]($EndDate - $unixEpochStart).TotalSeconds $Body.Add('end',$EndTimestamp) } elseif ($PSCmdlet.ParameterSetName -eq "Suspend-DDMonitor:IDAndTimestamp") { $Body.Add('end',$EndTimestamp) } if ($Scope) { $Body.Add('scope',$Scope) } $Body = $Body | ConvertTo-Json } if ($pscmdlet.ShouldProcess($ConfirmationMessage)) { $result = New-DDQuery -EndPoint $Endpoint -Method 'Post' -Body $Body -RequiresApplicationKey -ErrorAction Stop } else { Write-Verbose "Task aborted by user" return } $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $result | Add-Member MemberSet PSStandardMembers $PSStandardMembers return $result } } |