functions/Send-THMetric.ps1
<#
.SYNOPSIS Send a metric .DESCRIPTION Send a metric (up to two dimensions) to AppInsights. Metrics will be correlated. .PARAMETER MetricName Metric name (dimension 0) .PARAMETER MetricDimension1 Additional metric dimension 1 .PARAMETER MetricDimension2 Additional metric dimension 2 .PARAMETER Value Value (double) of the metric .PARAMETER ModuleName Auto-generated, used to select the proper configuration in case you have different modules .PARAMETER DoNotFlush Indicates that data should be collected and flushed by the telemetry client at regular intervals Intervals are 30s or 500 metrics .EXAMPLE Send-THMetric -MetricName Layer8Errors -Value 300 Sends the metric Layer8Errors with a value of 300 .EXAMPLE Send-THMetric -MetricName Layer8 -MetricDimension Errors -Value 300 Sends a multidimensional metric #> function Send-THMetric { [CmdletBinding(DefaultParameterSetName = 'NoDim')] param ( [Parameter(Mandatory = $true, ParameterSetName = 'NoDim')] [Parameter(Mandatory = $true, ParameterSetName = 'OneDim')] [Parameter(Mandatory = $true, ParameterSetName = 'TwoDim')] [string] $MetricName, [Parameter(Mandatory = $true, ParameterSetName = 'OneDim')] [Parameter(Mandatory = $true, ParameterSetName = 'TwoDim')] [string] $MetricDimension1, [Parameter(Mandatory = $true, ParameterSetName = 'TwoDim')] [string] $MetricDimension2, [Parameter(Mandatory = $true)] [double] $Value, [Parameter()] [string] $ModuleName = (Get-CallingModule), [Parameter()] [switch] $DoNotFlush ) $telemetryInstance = Get-THTelemetryConfiguration -ModuleName $ModuleName if ($null -eq $telemetryInstance) { Initialize-THTelemetry -ModuleName $ModuleName $telemetryInstance = Get-THTelemetryConfiguration -ModuleName $ModuleName } try { switch ($PSCmdlet.ParameterSetName) { 'NoDim' { $telemetryInstance.SendMetric($MetricName, $Value) } 'OneDim' { $telemetryInstance.SendMetric($MetricName, $MetricDimension1, $Value) } 'TwoDim' { $telemetryInstance.SendMetric($MetricName, $MetricDimension1, $MetricDimension2, $Value) } } } catch { Stop-PSFFunction -Message "Unable to send metric '$MetricName$MetricDimension1$MetricDimension2' with value $Value to ApplicationInsights" -Exception $_.Exception } if ($DoNotFlush) { return } try { $telemetryInstance.Flush() } catch { Stop-PSFFunction -Message "Unable to flush telemetry client. Messages may be delayed." -Exception $_.Exception } } |