scripts/Get-AppDMetricData.ps1

<#
.SYNOPSIS
    Gets Metric data
.DESCRIPTION
    Queries the rest API and returns an object containing the metric information
.PARAMETER MetricPath
    Rest path to the desired metric
    You can get this by right clicking a metric in the metric browser and selecting 'Copy REST Url'
    e.g.
    http://appdynamics.contoso.com:8090/controller/rest/applications/Asgard/metric-data?metric-path=Business%20Transaction%20Performance%7CBusiness%20Transactions%7CAsgard%7CAccountsWorkflow.LogonAccountDob%7CCalls%20per%20Minute&time-range-type=BEFORE_NOW&duration-in-mins=15
.PARAMETER Auth
    Authorization header required by AppDynamics rest API.
    You can get this either by using this module's Get-AppDAuth cmdlet OR by making it yourself
    e.g.
    $auth = 'Basic ' + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('yourusername@customer1' + ":" + 'yourpassword' ))
.EXAMPLE
    $auth = 'Basic ' + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('yourusername@customer1' + ":" + 'yourpassword' ))
    $metricPaths = @(
        http://appdynamics.contoso.com:8090/controller/rest/applications/Asgard/metric-data?metric-path=Business%20Transaction%20Performance%7CBusiness%20Transactions%7CAsgard%7CAccountsWorkflow.LogonAccountDob%7CCalls%20per%20Minute&time-range-type=BEFORE_NOW&duration-in-mins=15
    )
    $metricPaths | Get-MetricData -Auth $auth

    This will get the overall business transactions per minute metric data for the Asgard application metric 'AccountsWorkflow.LogonAccountDob'
.INPUTS
    String[]]
.OUTPUTS
    PSCustomObject
#>

function Get-AppDMetricData
{
    [CmdletBinding()]
    Param(
        # Mandatory application ID.
        [Parameter(Mandatory=$false, ValueFromPipeline)]
        $AppId,

        # Use the name of the application if you do not know the AppId
        [Parameter(Mandatory=$false)]
        $AppName,

        [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
        [String[]]$MetricPath,

        [Parameter(Mandatory=$false)]
        [String]
        $MinsAgo = '240'
    )
    Begin
    {
        Write-AppDLog "$($MyInvocation.MyCommand)"

        $connectionInfo = New-AppDConnection
    }
    Process
    {
        $AppId = Test-AppId -AppDId $AppId -AppDName $AppName

        <# Chosen metric types
            |Average Response Time (ms)
            |Calls per Minute
            |Errors per Minute
            |Number of Slow Calls
            |Stall Count
        #>

        $metricTypes = @("%7CAverage%20Response%20Time%20%28ms%29","%7CCalls%20per%20Minute","%7CErrors%20per%20Minute","%7CNumber%20of%20Slow%20Calls","%7CStall%20Count")

        $URLS =@()
        foreach ($path in $MetricPath) {
            foreach ($type in $metricTypes) {
                $URLS +=  "controller/rest/applications/$AppId/metric-data?metric-path=Business%20Transaction%20Performance%7CBusiness%20Transactions%7C" + $path + $type + "&time-range-type=BEFORE_NOW&duration-in-mins=$MinsAgo"
            }
        }
        $URLS = $URLS.Replace(' ','%20')
        $URLS = $URLS.Replace('|','%7C')

        $URLS | ForEach-Object { Write-Verbose $_ }

        foreach ($url in $URLS) {
            $response = Get-AppDResource -uri $url -connectionInfo $connectionInfo

            [PSCustomObject]@{
                metricId = $response.'metric-datas'.'metric-data'.metricId
                metricPath = $response.'metric-datas'.'metric-data'.metricPath
                metricName = $response.'metric-datas'.'metric-data'.metricName
                frequency = $response.'metric-datas'.'metric-data'.frequency
                startTime = [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddMilliseconds(($response.'metric-datas'.'metric-data'.metricValues.'metric-value'.startTimeInMillis)))
                value  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.value
                min  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.min
                max  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.max
                current  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.current
                sum  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.sum
                count  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.count
                standardDeviation  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.standardDeviation
                occurrences  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.occurrences
                useRange  = $response.'metric-datas'.'metric-data'.metricValues.'metric-value'.useRange
            }
        }
    }
}