Public/New-LMPushMetricDataPoint.ps1

<#
.SYNOPSIS
Creates a new data point object for pushing metric data to LogicMonitor.

.DESCRIPTION
The New-LMPushMetricDataPoint function creates a new data point object that can be used to push metric data to LogicMonitor. The function accepts an array of data points, where each data point consists of a name and a value. The function also allows you to specify the data point type, aggregation type, and percentile value.

.PARAMETER DataPointsArray
An optional parameter that allows you to pass an existing array of data points. If not provided, a new array will be created.

.PARAMETER DataPoints
A mandatory parameter that accepts an array of data points. Each data point should be an object with a Name and a Value property.

.PARAMETER DataPointType
Specifies the type of the data point. Valid values are "counter", "derive", and "gauge". The default value is "gauge".

.PARAMETER DataPointAggregationType
Specifies the aggregation type of the data point. Valid values are "min", "max", "avg", "sum", "none", and "percentile". The default value is "none".

.PARAMETER PercentileValue
Specifies the percentile value for the data point. This parameter is only applicable when the DataPointAggregationType is set to "percentile". The value should be between 0 and 100.

.EXAMPLE
$datapoints = @(
    [PSCustomObject]@{
        Name = "CPUUsage"
        Value = 80
    },
    [PSCustomObject]@{
        Name = "MemoryUsage"
        Value = 60
    }
)

New-LMPushMetricDataPoint -DataPoints $datapoints -DataPointType "gauge" -DataPointAggregationType "avg"

This example creates two data points for CPU usage and memory usage, and sets the data point type to "gauge" and the aggregation type to "avg".

.NOTES
You must run Connect-LMAccount before running this command.

.INPUTS
None. You cannot pipe objects to this command.

.OUTPUTS
Returns LogicMonitor.DataPoint object.
#>

function New-LMPushMetricDataPoint {
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = "None")]
    param (
        [System.Collections.Generic.List[object]]$DataPointsArray,
        [Parameter(Mandatory)]
        [System.Collections.Generic.List[object]]$DataPoints, # object with datapoint name and value
        [ValidateSet("counter", "derive", "gauge")]
        [String]$DataPointType = "gauge",
        [ValidateSet("min", "max", "avg", "sum", "none", "percentile")]
        [String]$DataPointAggregationType = "none",
        [ValidateRange(0, 100)]
        [Int]$PercentileValue
    )
    #Check if we are logged in and have valid api creds
    if ($Script:LMAuth.Valid) {
        if (!$DataPointsArray) {
            $DataPointsArray = [System.Collections.Generic.List[object]]::New()
        }

        $Message = "DataPoints: $($DataPoints.Count) items"

        if ($PSCmdlet.ShouldProcess($Message, "Create Push Metric Data Point")) {
            #Add each datapoint to new datapoint array
            foreach ($Datapoint in $DataPoints) {
                $DataPointsArray.Add([PSCustomObject]@{
                        dataPointName            = $Datapoint.Name
                        dataPointType            = $DataPointType
                        dataPointDescription     = ($Datapoint.Description -replace '"|"', '')
                        dataPointAggregationType = $DataPointAggregationType
                        percentileValue          = $PercentileValue
                        values                   = @{$((Get-Date -UFormat %s).Split(".")[0]) = $Datapoint.Value }
                    })
            }

            return $DataPointsArray
        }
    }
    else {
        Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
    }
}