Private/Send-Logs.ps1

function Send-Logs {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$vSphereEnvironment,

        [Parameter(Mandatory = $true)]
        [string]$Version,

        [Parameter(Mandatory = $true)]
        [string]$LogsApiHost,

        [Parameter(Mandatory = $true)]
        [string]$LoginHost,

        [Parameter(Mandatory = $true)]
        [string]$NexthinkTarget
    )

    if ($script:IN_MEMORY_LOGS.Count -eq 0) {
        return
    }

    $logsUrl = "https://$LogsApiHost/vdi/vdi-log-ingestion-api/api/v1/logs/entries"
    $traceId = [Guid]::NewGuid().ToString()

    try {
        $jwt = Get-Jwt -LoginHost $LoginHost -Target $NexthinkTarget

        $logsPayload = @{
            source              = "vsphere-hypervisor-on-prem-connector"
            customerEnvironment = $vSphereEnvironment
            version             = $Version
            logs                = $script:IN_MEMORY_LOGS
        }

        $logsJsonPayload = $logsPayload | ConvertTo-Json -Depth 10 -Compress

        $headers = @{
            'Content-Type'                 = 'application/json'
            'Authorization'                = "Bearer $jwt"
            'x-nexthink-vdi-logs-trace-id' = $traceId
        }

        $response = Invoke-WebRequestWithLogging -Uri $logsUrl -Method 'POST' -Headers $headers -Body $logsJsonPayload -UseBasicParsing
        Write-CustomLog -Message "[$traceId] Successfully sent $($script:IN_MEMORY_LOGS.Count) log entries to Logs API. Response code: $($response.StatusCode)" -Severity 'INFO' -NoCache
    }
    catch {
        Write-CustomLog -Message "[$traceId] Error sending logs to Logs API. Details: $($_.Exception.Message)" -Severity 'ERROR' -NoCache
    }
}