Public/Suspend-DDHost.ps1
function Suspend-DDHost { <# .SYNOPSIS Mutes Datadog hosts. .PARAMETER Hostname A hostname as shown on Datadog's Infrastructure List .PARAMETER Message A message to associate with the muting of this host .PARAMETER EndDate A Datetime object representing when the mute should end. If omitted, the host will remain muted until explicitly unmuted. .PARAMETER EndTimestamp POSIX timestamp when the host will be unmuted. If omitted, the host will remain muted until explicitly unmuted. .PARAMETER override If true and the host is already muted, will replace existing host mute settings. .DESCRIPTION .EXAMPLE # Mute a host called myhost, undefinitely Suspend-DDHost -Hostname myhost .EXAMPLE # Mute a host for 1h using a Datetime object Suspend-DDMonitor -Hostname myhost -EndDate (get-date).AddHours(1) .EXAMPLE # Mute a host for 1h using a Unix timestamp Suspend-DDMonitor -Hostname myhost -EndTimestamp 1473358000 .EXAMPLE # Mute a host, provide an informationnal message and override an existing muting Suspend-DDMonitor -Hostname myhost -Message 'Shutting down this server' -Override .LINK http://docs.datadoghq.com/api/?lang=console#hosts-mute .FUNCTIONALITY #> [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High',DefaultParameterSetName="Default")] param ( # Can be part of 3 parameter sets [Parameter( Position=0, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Default" )] [Parameter( Position=0, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Suspend-DDHost:ByDate" )] [Parameter( Position=0, Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Suspend-DDHost:ByTimestamp" )] [Alias('Computername')] [ValidateNotNullOrEmpty()] [string]$Hostname, # Can be part of 3 parameter sets [Parameter( Position=1, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Default" )] [Parameter( Position=1, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Suspend-DDHost:ByDate" )] [Parameter( Position=1, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Suspend-DDHost:ByTimestamp" )] [ValidateNotNullOrEmpty()] [string]$Message, [Parameter( Position=2, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, HelpMessage="A POSIX timestamp for when the mute should end", ParameterSetName="Suspend-DDHost:ByTimestamp" )] [ValidateNotNullOrEmpty()] [Double]$EndTimestamp, [Parameter( Position=2, ValueFromPipeline=$False, ValueFromPipelineByPropertyName=$False, ValueFromRemainingArguments=$False, HelpMessage="A Datetime object representing when the mute should end", ParameterSetName="Suspend-DDHost:ByDate" )] [DateTime]$EndDate, # Can be part of 3 parameter sets [Parameter( Position=3, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Default" )] [Parameter( Position=3, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Suspend-DDHost:ByDate" )] [Parameter( Position=3, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True, ValueFromRemainingArguments=$True, ParameterSetName="Suspend-DDHost:ByTimestamp" )] [switch]$Override ) process { $Body = @{} if ($Message) { $Body.Add('message',$Message) } if ($Override) { $Body.Add('override','true') } if ($PSCmdlet.ParameterSetName -eq "Suspend-DDHost:ByDate") { $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-DDHost:ByTimestamp") { $Body.Add('end',$EndTimestamp) } if ($pscmdlet.ShouldProcess($ConfirmationMessage)) { $result = New-DDQuery -EndPoint "/host/$Hostname/mute" -Method 'Post' -Body ($Body | ConvertTo-Json) -RequiresApplicationKey -ErrorAction Stop } else { Write-Verbose 'Task aborted by user' return } $defaultDisplaySet = 'hostname', 'action', 'message' $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $result | Add-Member MemberSet PSStandardMembers $PSStandardMembers return $result } } |