154 lines
4.4 KiB
PowerShell
154 lines
4.4 KiB
PowerShell
|
|
|
||
|
|
function Compare-MartiResource {
|
||
|
|
Param(
|
||
|
|
[Parameter(Mandatory)][String] $DataSource,
|
||
|
|
[Parameter(Mandatory)][PSCustomObject] $Resource,
|
||
|
|
[String] $LogPath
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
$script:LogPathName = $LogPath
|
||
|
|
|
||
|
|
Write-Debug "Parameter: LogPath Value: $LogPath "
|
||
|
|
Open-Log
|
||
|
|
Write-Log "Function 'Compare-MartiResource' parameters follow"
|
||
|
|
Write-Log ""
|
||
|
|
|
||
|
|
if ($null -eq $Resource) {
|
||
|
|
$Global:MartiErrorId = "MRI2201"
|
||
|
|
$message = "No Marti resource definition supplied"
|
||
|
|
Write-Log ($message + " " + $Global:MartiErrorId)
|
||
|
|
Close-Log
|
||
|
|
throw $message
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
if ($null -eq $DataSource -or $DataSource -eq "") {
|
||
|
|
$Global:MartiErrorId = "MRI2202"
|
||
|
|
$message = "No document supplied"
|
||
|
|
Write-Log ($message + " " + $Global:MartiErrorId)
|
||
|
|
Close-Log
|
||
|
|
throw $message
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($DataSource.Length -le 1000) {
|
||
|
|
# Check if the name is a file
|
||
|
|
if (Test-Path -Path $DataSource) {
|
||
|
|
$inputData = Get-Content -Path $DataSource -Raw
|
||
|
|
Write-Host "Loading file $DataSource"
|
||
|
|
} else {
|
||
|
|
$inputData = $DataSource
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$inputData = $DataSource
|
||
|
|
}
|
||
|
|
|
||
|
|
$formatProcessed = $false
|
||
|
|
[System.Collections.ArrayList]$lerror = @()
|
||
|
|
|
||
|
|
if ($Resource.format -eq "CSV") {
|
||
|
|
$formatProcessed = $true
|
||
|
|
|
||
|
|
$data = $inputData | ConvertFrom-Csv -Delim ','
|
||
|
|
|
||
|
|
$columns = ($data | get-member -type NoteProperty).count
|
||
|
|
$rows = @($data).count
|
||
|
|
|
||
|
|
$Resource.attributes | ForEach-Object {
|
||
|
|
|
||
|
|
if ($_.category -eq "dataset" -and $_.name -eq "records" -and $_.function -eq "count" -and $_.comparison -eq "EQ") {
|
||
|
|
|
||
|
|
if ($_.value -ne $rows) {
|
||
|
|
$oError = [PSCustomObject]@{
|
||
|
|
id = "MRI2203"
|
||
|
|
message = "Row count does not match"
|
||
|
|
found = "$rows"
|
||
|
|
expected = "$($_.value)"
|
||
|
|
}
|
||
|
|
$lerror += $oError
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($_.category -eq "dataset" -and $_.name -eq "columns" -and $_.function -eq "count" -and $_.comparison -eq "EQ") {
|
||
|
|
|
||
|
|
if ($_.value -ne $columns) {
|
||
|
|
$oError = [PSCustomObject]@{
|
||
|
|
id = "MRI2204"
|
||
|
|
message = "Column count does not match"
|
||
|
|
found = "$columns"
|
||
|
|
expected = "$($_.value)"
|
||
|
|
}
|
||
|
|
$lerror += $oError
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
if ($Resource.format -eq "JSON") {
|
||
|
|
$formatProcessed = $true
|
||
|
|
|
||
|
|
$data = $inputData | ConvertFrom-Json
|
||
|
|
|
||
|
|
$rows = @($data.data.monitor).count
|
||
|
|
$item = $data.data.monitor[0]
|
||
|
|
$columns = ($item | get-member -type NoteProperty).count
|
||
|
|
|
||
|
|
$Resource.attributes | ForEach-Object {
|
||
|
|
|
||
|
|
if ($_.category -eq "dataset" -and $_.name -eq "records" -and $_.function -eq "count" -and $_.comparison -eq "EQ") {
|
||
|
|
|
||
|
|
if ($_.value -ne $rows) {
|
||
|
|
$oError = [PSCustomObject]@{
|
||
|
|
id = "MRI2203"
|
||
|
|
message = "Row count does not match"
|
||
|
|
found = "$rows"
|
||
|
|
expected = "$($_.value)"
|
||
|
|
}
|
||
|
|
$lerror += $oError
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($_.category -eq "dataset" -and $_.name -eq "columns" -and $_.function -eq "count" -and $_.comparison -eq "EQ") {
|
||
|
|
|
||
|
|
if ($_.value -ne $columns) {
|
||
|
|
$oError = [PSCustomObject]@{
|
||
|
|
id = "MRI2204"
|
||
|
|
message = "Column count does not match"
|
||
|
|
found = "$columns"
|
||
|
|
expected = "$($_.value)"
|
||
|
|
}
|
||
|
|
$lerror += $oError
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
if (!$formatProcessed) {
|
||
|
|
$Global:MartiErrorId = "MRI2203"
|
||
|
|
$message = "Data format not supported"
|
||
|
|
Write-Log ($message + " " + $Global:MartiErrorId)
|
||
|
|
Close-Log
|
||
|
|
throw $message
|
||
|
|
}
|
||
|
|
|
||
|
|
$status = "OK"
|
||
|
|
if ($lerror.Count -gt 0) {
|
||
|
|
$status = "ERROR"
|
||
|
|
}
|
||
|
|
$oResult = [PSCustomObject]@{
|
||
|
|
status = $status
|
||
|
|
errors = $lerror
|
||
|
|
}
|
||
|
|
|
||
|
|
Close-Log
|
||
|
|
return $oResult
|
||
|
|
}
|