From 32400d8413556f36e892bc5dac7603cb08635384 Mon Sep 17 00:00:00 2001 From: Kelly Thomas Reardon Date: Mon, 4 May 2026 16:45:35 -0500 Subject: [PATCH] implementing better error handling --- Start-QBTGluetunPortMgr.ps1 | 106 +++++++++++++++++++++++------------- 1 file changed, 68 insertions(+), 38 deletions(-) diff --git a/Start-QBTGluetunPortMgr.ps1 b/Start-QBTGluetunPortMgr.ps1 index d594e95..9d3ae08 100644 --- a/Start-QBTGluetunPortMgr.ps1 +++ b/Start-QBTGluetunPortMgr.ps1 @@ -9,6 +9,55 @@ [string] $appriseWebhookURL = $ENV:APPRISEWEBHOOKURL [string] $appriseWebhookTag = $ENV:APPRISEWEBHOOKTAG + +function Send-Notification +{ + param( + # Content of the notification + [Parameter(Mandatory=$true)] + [string] + $content + ) + + if ($notificationWebhookURL -or $discordWebhookURL) + { + if ($discordWebhookURL) { $notificationWebhookURL = $discordWebhookURL } + $headers = @{ + "Content-Type"="application/json" + } + $body = @{ + content=$content + # content="QBitTorrent Listening Port updated to $gluetunForwardedPort" + } + $json = $body | ConvertTo-Json + try { + Invoke-WebRequest -URI $notificationWebhookURL -Method post -Body $json -Headers $headers + } + catch { + Write-Host "Notification Error Encountered: $($global:Error[0])" + } + } + elseif ($appriseWebhookURL) + { + $headers = @{ + "Content-Type"="application/json" + } + $body = @{ + title="QBitTorrent Port Manager" + body=$content + # body="QBitTorrent Listening Port updated to $gluetunForwardedPort" + tags="$appriseWebhookTag" + } + $json = $body | ConvertTo-Json + try { + Invoke-WebRequest -URI $appriseWebhookURL -Method post -Body $json -Headers $headers + } + catch { + Write-Host "Notification Error Encountered: $($global:Error[0])" + } + } +} + while ($true) { $gluetunForwardedPort = Get-Content $gluetunForwardedPortFile @@ -21,46 +70,27 @@ while ($true) username = $qbtUser password = $qbtPassword } - $qbtSession = [Microsoft.PowerShell.Commands.WebRequestSession]::new() - $qbtResponse = Invoke-WebRequest -Uri "http://$($qbtHost):$($qbtPort)/api/v2/auth/login" -WebSession $qbtSession -Method POST -Headers $qbtHeaders -Body $qbtBody - - $qbtQueryResponse = Invoke-WebRequest -Uri "http://$($qbtHost):$($qbtPort)/api/v2/app/preferences" -WebSession $qbtSession -Method GET - $qbtListenPort = (ConvertFrom-Json $qbtQueryResponse.Content).listen_port - Write-Host "Current QBT Listening port: $qbtListenPort" + try { + $qbtSession = [Microsoft.PowerShell.Commands.WebRequestSession]::new() + $qbtResponse = Invoke-WebRequest -Uri "http://$($qbtHost):$($qbtPort)/api/v2/auth/login" -WebSession $qbtSession -Method POST -Headers $qbtHeaders -Body $qbtBody + $qbtQueryResponse = Invoke-WebRequest -Uri "http://$($qbtHost):$($qbtPort)/api/v2/app/preferences" -WebSession $qbtSession -Method GET + $qbtListenPort = (ConvertFrom-Json $qbtQueryResponse.Content).listen_port + Write-Host "Current QBT Listening port: $qbtListenPort" - if ($gluetunForwardedPort -eq $qbtListenPort) - { - Write-Host "Ports match!" + if ($gluetunForwardedPort -eq $qbtListenPort) + { + Write-Host "Ports match!" + } + else + { + $qbtPortChangeBody = 'json={"listen_port":' + $gluetunForwardedPort + '}' + $qbtPortChangeResponse = Invoke-WebRequest -Uri "http://$($qbtHost):$($qbtPort)/api/v2/app/setPreferences" -WebSession $qbtSession -Method POST -Headers $qbtHeaders -Body $qbtPortChangeBody + Send-Notification -content "QBitTorrent Listening Port updated to $gluetunForwardedPort" + } } - else - { - $qbtPortChangeBody = 'json={"listen_port":' + $gluetunForwardedPort + '}' - $qbtPortChangeResponse = Invoke-WebRequest -Uri "http://$($qbtHost):$($qbtPort)/api/v2/app/setPreferences" -WebSession $qbtSession -Method POST -Headers $qbtHeaders -Body $qbtPortChangeBody - if ($notificationWebhookURL -or $discordWebhookURL) - { - if ($discordWebhookURL) { $notificationWebhookURL = $discordWebhookURL } - $headers = @{ - "Content-Type"="application/json" - } - $body = @{ - content="QBitTorrent Listening Port updated to $gluetunForwardedPort" - } - $json = $body | ConvertTo-Json - Invoke-WebRequest -URI $notificationWebhookURL -Method post -Body $json -Headers $headers - } - elseif ($appriseWebhookURL) - { - $headers = @{ - "Content-Type"="application/json" - } - $body = @{ - title="QBitTorrent Port Manager" - body="QBitTorrent Listening Port updated to $gluetunForwardedPort" - tags="$appriseWebhookTag" - } - $json = $body | ConvertTo-Json - Invoke-WebRequest -URI $appriseWebhookURL -Method post -Body $json -Headers $headers - } + catch { + Write-Host "Error encountered: $($global:Error[0])" + Send-Notification -content "Error encountered: $($global:Error[0])" } Write-Host "Sleeping for $schedule minutes..." Start-Sleep ($schedule * 60)