Datadog - Schedule Downtime

Octopus.Script exported 2016-03-01 by baynewc1 belongs to ‘Datadog’ category.

Datadog is cloud monitoring service which allows you to push arbitrary events into via an api. This task allows you to schedule a downtime event to prevent error alerts during a deployment.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Datadog Api Key

ApiKey

The api key used to authenticate with Datadog

Datadog Application Key

AppKey

The Application key used to authenticate with Datadog

Datadog Endpoint

DatadogEndpoint = https://app.datadoghq.com

The endpoint for datadog, for most (if not all) instances this should just be “https://app.datadoghq.com

Environment

Environment

Environment tag in Datadog to schedule the downtime for

Downtime Duration (seconds)

Duration = 600

How long should the downtime be scheduled for, in seconds default is 10 minutes

Script body

Steps based on this template will execute the following PowerShell script.

# Lets handle our own errors here
$ErrorActionPreference = "continue"

$apiKey = $OctopusParameters['ApiKey']
$appKey = $OctopusParameters['AppKey']
$endpoint = $OctopusParameters['DatadogEndpoint']
$downtimeApiEndpoint = "/api/v1/downtime"
$scope = $OctopusParameters['Environment']
$durstring = $OctopusParameters['Duration']

[int]$duration = [convert]::ToInt32($durstring,10)

# Write out some debug information
Write-Host "Scheduling Downtime for: $scope"
Write-Host "Datadog Endpoint: $endpoint$downtimeApiEndpoint"

# Create the url from basic information
$url = "$endpoint$downtimeApiEndpoint`?api_key=$apiKey&application_key=$appKey"

Write-Host $url

$start=[Math]::Floor([decimal](Get-Date(Get-Date).ToUniversalTime()-uformat "%s"))
$end = $start + $duration
$json = @"
{
      "scope": "env:$scope",
      "start": "$start",
      "end": "$end"
  }
"@

# Make the response and handle exceptions **Requires PS 3.0 + 
try {
    $response = Invoke-WebRequest -Uri $url -Method POST -Body ($json | ConvertFrom-Json | ConvertTo-Json) -ContentType "Application/json" -UseBasicParsing
}catch{
    Write-Error "Error: $_"
    EXIT 0
}

# Some Error handling here
if($response.StatusCode -ne 200){
    Write-Error "There was an error listing response content below to debug"
    $response.RawContent
}else{
    Write-Host "Sent Successfully"
}

# We usually don't want to fail a deployment because of this
EXIT 0

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "4db094ce-9c74-499d-8129-ce973cdaa9d4",
  "Name": "Datadog - Schedule Downtime",
  "Description": "Datadog is cloud monitoring service which allows you to push arbitrary events into via an api. This task allows you to schedule a downtime event to prevent error alerts during a deployment.",
  "Version": 4,
  "ExportedAt": "2016-03-01T23:11:19.809Z",
  "ActionType": "Octopus.Script",
  "Author": "baynewc1",
  "Parameters": [
    {
      "Name": "ApiKey",
      "Label": "Datadog Api Key",
      "HelpText": "The api key used to authenticate with Datadog",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AppKey",
      "Label": "Datadog Application Key",
      "HelpText": "The Application key used to authenticate with Datadog",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "DatadogEndpoint",
      "Label": "Datadog Endpoint",
      "HelpText": "The endpoint for datadog, for most (if not all) instances this should just be \"https://app.datadoghq.com\"",
      "DefaultValue": "https://app.datadoghq.com",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "Environment",
      "Label": "Environment",
      "HelpText": "Environment tag in Datadog to schedule the downtime for",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "Duration",
      "Label": "Downtime Duration (seconds)",
      "HelpText": "How long should the downtime be scheduled for, in seconds default is 10 minutes",
      "DefaultValue": "600",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "# Lets handle our own errors here\n$ErrorActionPreference = \"continue\"\n\n$apiKey = $OctopusParameters['ApiKey']\n$appKey = $OctopusParameters['AppKey']\n$endpoint = $OctopusParameters['DatadogEndpoint']\n$downtimeApiEndpoint = \"/api/v1/downtime\"\n$scope = $OctopusParameters['Environment']\n$durstring = $OctopusParameters['Duration']\n\n[int]$duration = [convert]::ToInt32($durstring,10)\n\n# Write out some debug information\nWrite-Host \"Scheduling Downtime for: $scope\"\nWrite-Host \"Datadog Endpoint: $endpoint$downtimeApiEndpoint\"\n\n# Create the url from basic information\n$url = \"$endpoint$downtimeApiEndpoint`?api_key=$apiKey&application_key=$appKey\"\n\nWrite-Host $url\n\n$start=[Math]::Floor([decimal](Get-Date(Get-Date).ToUniversalTime()-uformat \"%s\"))\n$end = $start + $duration\n$json = @\"\n{\n      \"scope\": \"env:$scope\",\n      \"start\": \"$start\",\n      \"end\": \"$end\"\n  }\n\"@\n\n# Make the response and handle exceptions **Requires PS 3.0 + \ntry {\n    $response = Invoke-WebRequest -Uri $url -Method POST -Body ($json | ConvertFrom-Json | ConvertTo-Json) -ContentType \"Application/json\" -UseBasicParsing\n}catch{\n    Write-Error \"Error: $_\"\n    EXIT 0\n}\n\n# Some Error handling here\nif($response.StatusCode -ne 200){\n    Write-Error \"There was an error listing response content below to debug\"\n    $response.RawContent\n}else{\n    Write-Host \"Sent Successfully\"\n}\n\n# We usually don't want to fail a deployment because of this\nEXIT 0"
  },
  "Category": "Datadog",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/datadog-schedule-downtime.json",
  "Website": "/step-templates/4db094ce-9c74-499d-8129-ce973cdaa9d4",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Tuesday, March 1, 2016