public/Test-ChecksDB.ps1

function Test-ChecksDB {
    <#
    .SYNOPSIS
        Test the Healthchecks database connection/status endpoint.
 
    .DESCRIPTION
        Calls the /api/v3/status/ endpoint of a Healthchecks instance to test the database connection. Returns a PSCustomObject with the result and status message.
 
    .PARAMETER BaseUrl
        The base URL of the Healthchecks instance.
 
    .EXAMPLE
        Test-ChecksDB -BaseUrl "https://checks.example.com"
 
        Tests the Healthchecks instance's database connection and returns the result.
 
    .OUTPUTS
        PSCustomObject with Url, StatusCode, StatusMessage, and Success properties.
 
    .NOTES
        Useful for monitoring or troubleshooting Healthchecks server connectivity.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$BaseUrl
    )

    $base = $BaseUrl.TrimEnd('/')
    $url = "$base/api/v3/status/"
    $pwshVersion = $PSVersionTable.PSVersion.ToString()
    $userAgent = "HealthchecksPwsh/$pwshVersion"

    try {
        $response = Invoke-WebRequest -Uri $url -UserAgent $userAgent -Method Get -ErrorAction Stop
        $statusMsg = switch ($response.StatusCode) {
            200 { "The request succeeded" }
            500 { "Test database query did not succeed" }
            default { "Unknown error" }
        }
        [PSCustomObject]@{
            Url = $url
            StatusCode = $response.StatusCode
            StatusMessage = $statusMsg
            Success = ($response.StatusCode -eq 200)
        }
    } catch {
        $status = $null
        $statusMsg = $null
        if ($_.Exception.Response -and $_.Exception.Response.StatusCode) {
            $status = $_.Exception.Response.StatusCode.value__
            $statusMsg = switch ($status) {
                500 { "Test database query did not succeed" }
                default { $_.Exception.Message }
            }
        } else {
            $statusMsg = $_.Exception.Message
        }
        [PSCustomObject]@{
            Url = $url
            StatusCode = $status
            StatusMessage = $statusMsg
            Success = $false
        }
    }
}