MeasureTrace.Database.psm1
Set-StrictMode -Version Latest function Add-MtDbTrace { param( [Parameter(Mandatory=$true)] [string] $ConnectionString , [Parameter(Mandatory=$true, ValueFromPipeline=$true)] [MeasureTrace.TraceModel.Trace[]]$MeasuredTrace ) begin{ $repository = Connect-MtDbRepository -ConnectionString $ConnectionString $repository.Database.EnsureCreated() } process{ foreach($trace in $MeasuredTrace){ $repository.SaveTraceAndMeasurements($trace) } } end{ $repository.Dispose() } } function Connect-MtDbRepository { param( [Parameter(Mandatory=$true)] [string]$ConnectionString ) $r = New-Object MeasureTrace.Database.Repository -ArgumentList $ConnectionString try{ $r.TryToProvisionDatabase() } catch{} $r } function Compare-MtDbTraceFileStatus { param( [Parameter(Mandatory=$true)] [string]$ConnectionString, [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)] [Alias('Path')] [string[]]$FullName ) begin{ $repo = Connect-MtDbRepository -ConnectionString $ConnectionString } process{ foreach($pathX in $FullName){ $packageFileName = Split-Path -Path $pathX -Leaf [pscustomobject]@{ PackageFileNameFull = $pathX PackageFIleName = $packageFileName IsInDatabase = $repo.IsTraceAlreadyInDb( $packageFileName ) } } } } function Compare-MtDbFolderVsRepository{ param( [string[]]$FolderPath, [Parameter(Mandatory=$true)] [string]$ConnectionString, [string[]]$Filter = @("*.etl","*.zip") ) foreach($folder in $FolderPath){ foreach($filterX in $Filter){ Get-ChildItem -Path $folder -Filter $filterX | Compare-MtDbTraceFileStatus -ConnectionString $ConnectionString } } } function Measure-MtDbNewTracesFromFolder{ param( [string[]]$FolderPath, [string]$ConnectionString, [int]$MaxCount = 100, [int]$ParallelThrottle = $([Environment]::ProcessorCount + 2) ) begin{ $batchLabel = [Guid]::NewGuid().ToString() } process{ Compare-MtDbFolderVsRepository -FolderPath $FolderPath -ConnectionString $ConnectionString | Where-Object {-not $_.IsInDatabase} | Select-Object -First $MaxCount | #Foreach-Object{ Start-RSJob -ModulesToImport $psscriptroot -Throttle ([Environment]::ProcessorCount + 2) -Batch $batchLabel -ScriptBlock { Measure-Trace -Path $_.PackageFileNameFull | Add-MtDbTrace -ConnectionString $Using:ConnectionString } } #Wait-RSJob -Batch $batchLabel #Receive-RSJob -Batch $batchLabel | Where-Object {$_ -is [MeasureTrace.TraceModel.Trace]} | # Add-MtDbTrace -ConnectionString $ConnectionString end{ Get-RSJob -Batch $batchLabel | Wait-RSJob -ShowProgress Get-RSJob -Batch $batchLabel | Receive-RSJob } } |