public/Event/Read-Scoreboard.ps1

using module '..\..\modules\Enums.psm1'
using module '..\..\modules\Helper\DateTimeHelper.psm1'
using module '..\..\modules\Session.psd1'

function Read-Scoreboard{
    [CmdletBinding()]
    [Alias('rdsb')]
    param(
        [Parameter(Mandatory=$true)]
        # Audit log source file from where the messages will be loaded.
        [SOURCE] $source,
        # Referent message time taken as baseline from where the messages will be start analyzing.
        [string] $referentTime,
        # Timeframe in which the messages will be analyzed after the referent time.
        [string] $timeSpan,
        # Displayed progress message
        [string]$progressMessage="Read $source score data..."
    )

    if ([Session]::activeSessions.Count -eq 0){
        Write-Error $LocalizedData.NoActiveSessionMessage
        return
    }
    if (-not [Session]::getCurrent().canRead($source)){
        Write-Error $LocalizedData.BackgroundJobsStillActiveMessage
        return
    }

    $afterDateTime, $beforeDateTime = [DateTimeHelper]::getAfterBefore($referentTime, $timeSpan)
    if ($timeSpan -and -not $referentTime){ $referentTime = (now)}
    $hasReturn = $false

    $logFile = [Session]::getCurrent().auditLogFile
    $processor = [ProcessorFactory]::getBySource($source)

    $totalLines = $logFile.AssignFile($source)
    if($referentTime) {
        $count = $logFile.Seek($afterDateTime)
    }
    else {
        $count = 0
    }

    while (-not $logFile.EOF()) {
        $line = $logFile.ReadLine()

        if ($line -and $line.created_at -lt $beforeDateTime){
            $processor.ProcessMessage($line)

            if ($processor.isEnrichmentRelated($line)){
                $processor.ProcessEnrichment($line)

                if ($processor.message) {
                    Write-Output $processor.message.ScoreToOutput()
                    $hasReturn = $true
                }
            }
        }
        else { break }

        $count++
        $percentage = 100 * $count / $totalLines
        Write-Progress -Activity $progressMessage -PercentComplete $percentage
    }
    Write-Progress -Activity $progressMessage -Completed

    if (-not $hasReturn){
        Write-Host $LocalizedData.NoOutputMessage -ForegroundColor Red
    }
}