navcontainerhelper/TelemetryHelper.ps1

123 строки
3.9 KiB
PowerShell
Исходник Обычный вид История

2021-07-01 22:44:04 +03:00
$telemetryClient = $null
function FormatValue {
Param(
$value
)
if ($value -is [switch]) {
"$($value.IsPresent)"
}
elseif ($value -is [boolean]) {
"$value"
}
elseif ($value -is [SecureString]) {
"[SecureString]"
}
elseif ($value -is [PSCredential]) {
"[PSCredential]"
}
elseif ($value -is [string]) {
if (($value -like "https:*" -or $value -like "http:*") -and ($value.Contains('?'))) {
"""$($value.Split('?')[0])?[parameters]"""
}
else {
"""$value"""
}
}
elseif ($value -is [System.Collections.IDictionary]) {
$str = ""
$value.GetEnumerator() | ForEach-Object {
if ($str) { $str += ", " } else { $str = "{ " }
$str += "$($_.Key): $(FormatValue -value $_.Value)"
}
"$str }"
}
elseif ($value -is [System.Collections.IEnumerable]
) {
$str = ""
$value.GetEnumerator() | ForEach-Object {
if ($str) { $str += ", " } else { $str = "[ " }
$str += "$(FormatValue -value $_)"
}
"$str ]"
}
else {
"$value"
}
}
function AddTelemetryProperty {
Param(
$telemetryScope,
$key,
$value
)
if ($telemetryScope) {
$telemetryScope.properties.Add($key, (FormatValue -value $value))
}
}
function InitTelemetryScope {
Param(
[string] $name,
[string[]] $includeParameters = @(),
$parameterValues = $null
)
if ($telemetryClient -eq $null) {
if ($bcContainerHelperConfig.InstrumentationKey) {
Add-Type -path (Join-Path $PSScriptRoot "Microsoft.ApplicationInsights.dll") -ErrorAction SilentlyContinue
$telemetryClient = [Microsoft.ApplicationInsights.TelemetryClient]::new()
$telemetryClient.InstrumentationKey = $bcContainerHelperConfig.InstrumentationKey
}
}
if ($telemetryClient) {
$scope = @{
"Name" = $name
"StartTime" = [DateTime]::Now
"SeverityLevel" = 1
"Properties" = [Collections.Generic.Dictionary[string, string]]::new()
}
if ($includeParameters) {
$parameterValues.GetEnumerator() | % {
$includeParameter = $false
$key = $_.key
$includeParameters | ForEach-Object { if ($key -like $_) { $includeParameter = $true } }
if ($includeParameter) {
AddTelemetryProperty -telemetryScope $scope -key "Parameter[$Key]" -value $_.Value
}
}
}
AddTelemetryProperty -telemetryScope $scope -key "BcContainerHelperVersion" -value $BcContainerHelperVersion
AddTelemetryProperty -telemetryScope $scope -key "IsAdministrator" -value $isAdministrator
AddTelemetryProperty -telemetryScope $scope -key "StackTrace" -value (Get-PSCallStack | % { "$($_.Command) at $($_.Location)" }) -join "`n"
$scope
}
}
function TrackTrace {
Param(
$telemetryScope
)
if ($telemetryClient -and $telemetryClient.IsEnabled()) {
$telemetryScope.Properties.Add("Duration", [DateTime]::Now.Subtract($telemetryScope.StartTime).TotalSeconds)
$telemetryClient.TrackTrace($telemetryScope.Name, $telemetryScope.SeverityLevel, $telemetryScope.Properties)
}
}
function TrackException {
Param(
$telemetryScope,
$errorRecord
)
if ($telemetryClient -and $telemetryClient.IsEnabled()) {
$telemetryScope.Properties.Add("Duration", [DateTime]::Now.Subtract($telemetryScope.StartTime).TotalSeconds)
$telemetryScope.Properties.Add("StackTrace", $errorRecord.ScriptStackTrace)
$telemetryClient.TrackException($errorRecord.Exception, $telemetryScope.Properties)
}
}