Octopus.Script exported 2023-02-16 by harrisonmeister belongs to ‘Seq’ category.
Post details of the deployment to a Seq log server. Add this as the last step in a process, and ensure it is set to run always (on success and failure).
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Seq server URL
SeqServerUrl = http://localhost:5341
The URL of the Seq server.
Script body
Steps based on this template will execute the following PowerShell script.
function Open-Seq ([string] $url, [string] $apiKey, $properties = @{})
{
return @{ Url = $url; ApiKey = $apiKey; Properties = $properties.Clone() }
}
function Send-SeqEvent (
$seq,
[string] $text,
[string] $level,
$properties = @{},
[string] $exception = $null,
[switch] $template)
{
if (-not $level) {
$level = 'Information'
}
if (@('Verbose', 'Debug', 'Information', 'Warning', 'Error', 'Fatal') -notcontains $level) {
$level = 'Information'
}
$allProperties = $seq["Properties"].Clone()
$allProperties += $properties
$messageTemplate = "{Text}"
if ($template) {
$messageTemplate = $text;
} else {
$allProperties += @{ Text = $text; }
}
$exceptionProperty = ""
if ($exception) {
$exceptionProperty = """Exception"": $($exception | ConvertTo-Json),"
}
$body = "{""Events"": [ {
""Timestamp"": ""$([System.DateTimeOffset]::Now.ToString('o'))"",
""Level"": ""$level"",
$exceptionProperty
""MessageTemplate"": $($messageTemplate | ConvertTo-Json),
""Properties"": $($allProperties | ConvertTo-Json) }]}"
$target = "$($seq["Url"])/api/events/raw?apiKey=$($seq["ApiKey"])"
Invoke-RestMethod -Uri $target -Body $body -ContentType "application/json" -Method POST
}
Write-Output "Logging the deployment result to Seq at $SeqServerUrl..."
$seq = Open-Seq $SeqServerUrl -apiKey $SeqApiKey
$properties = @{
ProjectName = $OctopusParameters['Octopus.Project.Name'];
ReleaseNumber = $OctopusParameters['Octopus.Release.Number'];
Result = "succeeded";
EnvironmentName = $OctopusParameters['Octopus.Environment.Name'];
DeploymentName = $OctopusParameters['Octopus.Deployment.Name'];
Channel = $OctopusParameters['Octopus.Release.Channel.Name'];
DeploymentLink = $OctopusParameters['#{if Octopus.Web.ServerUri}Octopus.Web.ServerUri#{else}Octopus.Web.BaseUrl#{/if}'] + $OctopusParameters['Octopus.Web.DeploymentLink']
}
$level = "Information"
$exception = $null
if ($OctopusParameters['Octopus.Deployment.Error']) {
$level = "Error"
$properties["Result"] = "failed"
$properties["Error"] = $OctopusParameters['Octopus.Deployment.Error']
$exception = $OctopusParameters['Octopus.Deployment.ErrorDetail']
}
try {
Send-SeqEvent $seq "A deployment of {ProjectName} release {ReleaseNumber} {Result} in {EnvironmentName}" -level $level -template -properties $properties -exception $exception
} catch [Exception] {
[System.Console]::Error.WriteLine("Unable to write deployment details to Seq")
$_.Exception | format-list -force
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "a55a825b-8e8b-4995-8143-0f9dd7b6bcfa",
"Name": "Seq - Log Deployment",
"Description": "Post details of the deployment to a [Seq](https://getseq.net) log server. Add this as the last step in a process, and ensure it is set to run always (on success and failure).",
"Version": 22,
"ExportedAt": "2023-02-16T15:38:44.043Z",
"ActionType": "Octopus.Script",
"Author": "harrisonmeister",
"Parameters": [
{
"Name": "SeqServerUrl",
"Label": "Seq server URL",
"HelpText": "The URL of the Seq server.",
"DefaultValue": "http://localhost:5341",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SeqApiKey",
"Label": "Seq API key",
"HelpText": "If an [API key](http://docs.getseq.net/docs/api-keys) is required for writing events, specify it here.",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "Sensitive"
}
}
],
"Properties": {
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptBody": "function Open-Seq ([string] $url, [string] $apiKey, $properties = @{})\n{\n return @{ Url = $url; ApiKey = $apiKey; Properties = $properties.Clone() }\n}\n \nfunction Send-SeqEvent (\n $seq,\n [string] $text,\n [string] $level,\n $properties = @{},\n [string] $exception = $null,\n [switch] $template)\n{\n if (-not $level) {\n $level = 'Information'\n }\n \n if (@('Verbose', 'Debug', 'Information', 'Warning', 'Error', 'Fatal') -notcontains $level) {\n $level = 'Information'\n }\n \n $allProperties = $seq[\"Properties\"].Clone()\n $allProperties += $properties\n \n $messageTemplate = \"{Text}\"\n \n if ($template) {\n $messageTemplate = $text;\n } else {\n $allProperties += @{ Text = $text; }\n }\n \n $exceptionProperty = \"\"\n if ($exception) {\n $exceptionProperty = \"\"\"Exception\"\": $($exception | ConvertTo-Json),\"\n }\n \n $body = \"{\"\"Events\"\": [ {\n \"\"Timestamp\"\": \"\"$([System.DateTimeOffset]::Now.ToString('o'))\"\",\n \"\"Level\"\": \"\"$level\"\",\n $exceptionProperty\n \"\"MessageTemplate\"\": $($messageTemplate | ConvertTo-Json),\n \"\"Properties\"\": $($allProperties | ConvertTo-Json) }]}\"\n \n $target = \"$($seq[\"Url\"])/api/events/raw?apiKey=$($seq[\"ApiKey\"])\"\n \n Invoke-RestMethod -Uri $target -Body $body -ContentType \"application/json\" -Method POST\n}\n\nWrite-Output \"Logging the deployment result to Seq at $SeqServerUrl...\"\n\n$seq = Open-Seq $SeqServerUrl -apiKey $SeqApiKey\n\n$properties = @{\n ProjectName = $OctopusParameters['Octopus.Project.Name'];\n ReleaseNumber = $OctopusParameters['Octopus.Release.Number'];\n Result = \"succeeded\";\n EnvironmentName = $OctopusParameters['Octopus.Environment.Name'];\n DeploymentName = $OctopusParameters['Octopus.Deployment.Name'];\n Channel = $OctopusParameters['Octopus.Release.Channel.Name'];\n DeploymentLink = $OctopusParameters['#{if Octopus.Web.ServerUri}Octopus.Web.ServerUri#{else}Octopus.Web.BaseUrl#{/if}'] + $OctopusParameters['Octopus.Web.DeploymentLink']\n}\n\n$level = \"Information\"\n$exception = $null\nif ($OctopusParameters['Octopus.Deployment.Error']) {\n $level = \"Error\"\n $properties[\"Result\"] = \"failed\"\n $properties[\"Error\"] = $OctopusParameters['Octopus.Deployment.Error']\n $exception = $OctopusParameters['Octopus.Deployment.ErrorDetail']\n}\n\ntry {\n Send-SeqEvent $seq \"A deployment of {ProjectName} release {ReleaseNumber} {Result} in {EnvironmentName}\" -level $level -template -properties $properties -exception $exception\n} catch [Exception] {\n [System.Console]::Error.WriteLine(\"Unable to write deployment details to Seq\")\n $_.Exception | format-list -force\n}\n"
},
"Category": "Seq",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/seq-log-deployment.json",
"Website": "/step-templates/a55a825b-8e8b-4995-8143-0f9dd7b6bcfa",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Thursday, February 16, 2023