private/Write-PodEvent.ps1

<#
.SYNOPSIS
Private function to write the events for a pod to the output

.PARAMETER PodName
Name of the pod to get events for

.PARAMETER Prefix
Prefix for logging

.PARAMETER Since
Only get events since this time

.PARAMETER Namespace
Namespace to get the events from

.PARAMETER LogLevel
Log level to use for the header

.PARAMETER PassThru
Return any errors messages found in events

.PARAMETER FilterStartupWarnings
Filter out startup warnings if pod is running ok
#>

function Write-PodEvent {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$PodName,
        [Parameter(Mandatory)]
        [string]$Prefix,
        [DateTime]$Since,
        [string] $Namespace = "default",
        [ValidateSet("error", "warning", "ok", "normal")]
        [string] $LogLevel = "ok",
        [switch] $PassThru,
        [switch] $FilterStartupWarnings
    )

    $events = Get-PodEvent -Namespace $Namespace -PodName $PodName
    if ($null -eq $events) {
        Write-Status "Get-PodEvent returned null for pod $PodName" -LogLevel warning
        return
    }
    $msg = "Events for $Prefix $PodName"
    if ($Since) {
        $msg += " since $($Since.ToString("HH:mm:ss"))"
        $events = $events | Where-Object { $_.lastTimestamp -gt $Since }
    }

    $errors = $events | Where-Object { $_.type -ne "Normal" } | Select-Object -ExpandProperty Message
    if ($errors -and $FilterStartupWarnings) {
        $errors = $errors | Where-Object { $_ -notLike "Startup probe failed:*" }
    }
    $filteredEvents = $events | Select-Object type, reason, message, @{n='creationTimestamp';e={$_.metadata.creationTimestamp}}
    if ($filteredEvents) {
        Write-Header $msg -LogLevel $LogLevel
        $filteredEvents | Out-String -Width 500 | Write-Plain
        Write-Footer "End events for $Prefix $PodName"
    } else {
        Write-Status "No $msg" -LogLevel ok
    }

    if ($PassThru) {
        return $errors
    }
}