winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

Process-CorrelationResults.ps1 (3367B)


      1 Param(
      2   [Parameter(Position = 0, HelpMessage = "The root location of the results.")]
      3   [String] $ResultsPath
      4 )
      5 
      6 $resultFile = Join-Path $ResultsPath "results.csv"
      7 $failedFile = Join-Path $ResultsPath "failed.csv"
      8 $statsFile = Join-Path $ResultsPath "stats.json"
      9 
     10 if (Test-Path $resultFile)
     11 {
     12     Remove-Item $resultFile -Force
     13 }
     14 
     15 if (Test-Path $failedFile)
     16 {
     17     Remove-Item $failedFile -Force
     18 }
     19 
     20 $stats = @{
     21     Total = 0
     22     Missing = 0
     23     Completed = 0
     24     Failed = 0
     25     CorrelatePackageKnown = 0
     26     CorrelateArchive = 0
     27     CorrelateMetadata = 0
     28     CorrelationDisagreement = 0
     29     CorrelateArchiveRatio = 0
     30     CorrelatePackageKnownRatio = 0
     31     CorrelateMetadataRatio = 0
     32     CorrelationDisagreementRatio = 0
     33 }
     34 
     35 # Aggregate results in a single CSV file
     36 foreach ($result in (Get-ChildItem $ResultsPath -Directory))
     37 {
     38     $stats.Total++
     39 
     40     $resultJSON = Join-Path $result.FullName "install_and_correlate.json"
     41     if (Test-Path $resultJSON)
     42     {
     43         $resultObj = (Get-Content -Path $resultJSON -Encoding utf8 | ConvertFrom-Json)
     44     }
     45 
     46     if (-not $resultObj)
     47     {
     48         # Result JSON file does not exist or is empty
     49         $stats.Missing++
     50         continue
     51     }
     52 
     53     $metadataJSON = Join-Path $result.FullName "metadata_output.json"
     54     if (Test-Path $metadataJSON)
     55     {
     56         $metadataObj = (Get-Content -Path $metadataJSON -Encoding utf8 | ConvertFrom-Json)
     57     }
     58 
     59     if ($resultObj.HRESULT -eq 0)
     60     {
     61         $stats.Completed++
     62         $stats.CorrelateArchive += $resultObj.CorrelateArchive
     63         $stats.CorrelatePackageKnown += $resultObj.CorrelatePackageKnown
     64         if ($metadataObj -and $metadataObj.status -eq "Success")
     65         {
     66             $stats.CorrelateMetadata += 1
     67             Add-Member -InputObject $resultObj -MemberType NoteProperty -Name "CorrelateMetadata" -Value 1 -Force
     68             Add-Member -InputObject $resultObj -MemberType NoteProperty -Name "MetadataName" -Value $metadataObj.metadata[0].metadata[0].AppsAndFeaturesEntries[0].DisplayName -Force
     69             Add-Member -InputObject $resultObj -MemberType NoteProperty -Name "MetadataPublisher" -Value $metadataObj.metadata[0].metadata[0].AppsAndFeaturesEntries[0].Publisher -Force
     70 
     71             if ($resultObj.PackageKnownName -ne "" -and $resultObj.MetadataName -ne "" -and $resultObj.PackageKnownName -ne $resultObj.MetadataName)
     72             {
     73                 $stats.CorrelationDisagreement += 1
     74             }
     75         }
     76         Export-Csv -InputObject ($resultObj | Select-Object -Property * -ExcludeProperty @("Error", "Phase", "Action", "HRESULT") ) -Path $resultFile -Append -Encoding utf8
     77     }
     78     else
     79     {
     80         $stats.Failed++
     81         Export-Csv -InputObject $resultObj -Path $failedFile -Append -Encoding utf8
     82     }
     83 }
     84 
     85 # Write some stats to a file for quick evaluation
     86 $stats.CompletedRatio = $stats.Completed / $stats.Total
     87 if ($stats.Completed -ne 0)
     88 {
     89     $stats.CorrelateArchiveRatio = $stats.CorrelateArchive / $stats.Completed
     90     $stats.CorrelatePackageKnownRatio = $stats.CorrelatePackageKnown / $stats.Completed
     91     $stats.CorrelateMetadataRatio = $stats.CorrelateMetadata / $stats.Completed
     92     $stats.CorrelationDisagreementRatio = $stats.CorrelationDisagreement / $stats.Completed
     93 }
     94 $stats | ConvertTo-Json | Out-File $statsFile -Force