Public/Get-DDMonitor.ps1
function Get-DDMonitor { <# .SYNOPSIS Retrieves a list of all existing Datadog monitors with -All or a specific one with -MonitorID. .DESCRIPTION .PARAMETER All Retrieves all monitors. Incompatible with -MonitorID. .PARAMETER MonitorId A Datadog Monitor ID. Incompatible with -All. .PARAMETER GroupStates A string or array of strings indicating what, if any, group states to include. Choose from one or more from 'all', 'alert', 'warn', or 'no data'. The argument `group_states` will in fact not render all the monitors that have an alert / warning state. Rather, they give more details on different groups within a monitor that has the multi-alert feature activated. .Parameter Tags A string or array of strings indicating what tags, if any, should be used to filter the list of monitors by scope. Incompatible with -MonitorID .EXAMPLE # Get a list of all monitors Get-DDMonitor -All .EXAMPLE # Get a list of all monitors and filter with a tags Get-DDMonitor -All -Tags host:myhostname .EXAMPLE # Get a list of all monitors and request the alert and warn group states Get-DDMonitor -All -GroupStates @('alert', 'warn') .EXAMPLE # Get a specific monitor Get-DDMonitor -MonitorID 123456 .LINK .FUNCTIONALITY #> [CmdletBinding()] param ( [Parameter( ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, ParameterSetName="Get-DDMonitor:All" )] [switch]$All, [Parameter( Position=0, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$false, Mandatory=$True, HelpMessage="A Datadog Monitor ID", ParameterSetName="Get-DDMonitor:ByID" )] [ValidateNotNullOrEmpty()] [Alias('Id')] [uint32]$MonitorId, # Can be part of both Parameter Sets [Parameter( ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, Mandatory=$False, HelpMessage="A string or array of strings indicating what, if any, group states to include. Choose from one or more from 'all', 'alert', 'warn', or 'no data'. Example: 'alert,warn'", ParameterSetName="Get-DDMonitor:All" )] [Parameter( ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, Mandatory=$False, HelpMessage="A string or array of strings indicating what, if any, group states to include. Choose from one or more from 'all', 'alert', 'warn', or 'no data'. Example: 'alert,warn'", ParameterSetName="Get-DDMonitor:ByID" )] [ValidateSet("all","alert","warn","no data")] [string[]]$GroupStates, [Parameter( ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, Mandatory=$False, HelpMessage="A string or array of strings indicating what tags, if any, should be used to filter the list of monitors by scope", ParameterSetName="Get-DDMonitor:All" )] [string[]]$Tags ) process { $Body = @{} if ($GroupStates){ $Body.Add("group_states",($GroupStates -join ',')) } if ($Tags) { $Body.Add("tags",($Tags -join ',')) } if ($PSCmdlet.ParameterSetName -eq "Get-DDMonitor:ByID") { $Endpoint = "/monitor/$MonitorId" # Build the default property set $defaultDisplaySet = 'id', 'name', 'type', 'query', 'overall_state', 'message', 'options', 'created', 'creator' } elseif ($PSCmdlet.ParameterSetName -eq "Get-DDMonitor:All") { $Endpoint = '/monitor' # Build the default property set $defaultDisplaySet = 'name','id','query' } $result = New-DDQuery -EndPoint $Endpoint -Method 'Get' -Body $Body -RequiresApplicationKey -ErrorAction Stop $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $result | Add-Member MemberSet PSStandardMembers $PSStandardMembers return $result } } |