Toolkit/Public/Get-RscEventSeries.ps1

#Requires -Version 3
function Get-RscEventSeries {
    <#
  .SYNOPSIS
  Retrieve RSC events.

  .DESCRIPTION
  By default, retrieve info about events.
  `Get-RscEventSeries` defaults to `Get-RscEventSeries -List -First 50`
  which returns the first 50 events.

  To get info about a specific event, use the `-Id` parameter.

  By default, responses contain a minimal set of fields: mostly ids and names.
  To get more details, use the `-Detail` parameter.

  .LINK
  Schema reference:
  https://rubrikinc.github.io/rubrik-api-documentation/schema/reference

  The ActivitySeriesConnection type:
  https://rubrikinc.github.io/rubrik-api-documentation/schema/reference/activityseriesconnection.doc.html
  
  The ActivitySeries type:
  https://rubrikinc.github.io/rubrik-api-documentation/schema/reference/activityseries.doc.html

  .PARAMETER List
  Retrieve paginated list of event series associated with RubrikSecurityCloud.
  This is the default parameter set.

  .PARAMETER Id
  Retrieve information about a specific event series based on Id.

  .PARAMETER First
  Specify the number of event series to retrieve.

  .PARAMETER Detail
  Use the DETAIL field profile instead of the DEFAULT field profile.
  The DETAIL field profile returns more fields than the DEFAULT field profile.

  .PARAMETER AsQuery
  Instead of running the command, the query object is returned.

  .EXAMPLE
  Get-RscEventSeries -First 3
  Id IsCancelable IsPolarisEventSeries LastActivityStatus
  -- ------------ -------------------- ------------------
  24738 False True SUCCESS
  24736 False True SUCCESS
  24731 False True SUCCESS

  This example lists the first 3 events.

  .EXAMPLE
  (Get-RscEventSeries -First 3).ActivitySeriesId
  a17b691d-3935-4e1f-8abf-82f3229e836f
  36081adp-148e-4c19-9896-3f9b2f3b3026
  5ce92d82-9ce7-4fdf-9d4f-97ed7eb93a71
  
  This example lists the first 3 events, and only gets their ids.

  .EXAMPLE
  $firstId = (Get-RscEventSeries -First 1).ActivitySeriesId

  Saves the first id.

  .EXAMPLE
  Get-RscEventSeries -Id $firstId -Detail

  Retrieves an event series by ID.

  .EXAMPLE
  ActivitySeriesId : e4c274e5-a096-4464-89a4-4771492baf00
  ClusterName : Polaris
  ClusterUuid : 00000000-0000-0000-0000-000000000000
  Fid : e4c274e5-a096-4464-89a4-4771492baf00
  Id : 24738
  IsCancelable : False
  IsPolarisEventSeries : True
  LastEventAddedAt : 4/12/2023 10:18:06 PM
  LastUpdated : 4/12/2023 10:18:06 PM
  Location :
  ObjectId : e4c274e5-a096-4464-89a4-4771492baf00
  ObjectName : cdm-cluster-fvvvch-rrjkitw
  OrgName :
  Progress : 100%
  StartTime : 4/12/2023 10:02:17 PM
  LastActivityStatus : SUCCESS
  LastActivityType : CONFIGURATION
  ObjectType : CLUSTER
  Severity : INFO

  Retrieves an event series by ID, with details.

  .EXAMPLE
  Return back just the query that would run instead of running the query and returning the results.
  Get-RscEventSeries -AsQuery

  #>


    [CmdletBinding(
        DefaultParameterSetName = "List"
    )]
    Param(
        # Id parameter set: show event from ID
        [Parameter(
            ParameterSetName = "Id",
            Mandatory = $false, 
            ValueFromPipelineByPropertyName = $true
        )]
        [String]$Id,
      
        # List parameter set: list event series
        [Parameter(
            ParameterSetName = "List",
            Mandatory = $false, 
            ValueFromPipelineByPropertyName = $true
        )]
        [Switch]$List,
        [Parameter(
            ParameterSetName = "List",
            Mandatory = $false, 
            ValueFromPipelineByPropertyName = $true
        )]
        [Int]$First = 50,

        # Common parameter to all parameter sets:
        [Parameter(
            Mandatory = $false, 
            ValueFromPipelineByPropertyName = $true
        )]
        [Switch]$Detail,

        [Parameter(
            Mandatory = $false,
            ValueFromPipeline = $false
        )][Switch]$AsQuery
    )
  
    Process {
        # Re-use existing connection, or create a new one:
        Connect-Rsc -ErrorAction Stop | Out-Null

        # Determine field profile:
        $fieldProfile = "DEFAULT"
        if ( $Detail -eq $true ) {
            $fieldProfile = "DETAIL"
        }

        # Create query:
        $operation = "List"
        if ( $Id ) {
            $operation = "ActivitySeries"
        }
        $query = (New-RscQueryActivitySeries -Op $operation -FieldProfile $fieldProfile)

        # Customize query:
        if ( $Id ) {
            $activitySeriesInput = Get-RscType -Name "ActivitySeriesInput" -InitialValues @{"activitySeriesId" = $Id }
            $query.Var.input = $activitySeriesInput
        }
        else {
            if ( $First -gt 0 ) {
                $query.Var.first = $First
            }
            $query.Field.Count = $null
        }

        # Skip sending, return query object:
        if ( $AsQuery ) {
            return $query
        }

        # Send request to the API server
        $result = Invoke-Rsc $query

        # Filter results
        # the response's `Nodes` field contains the list
        if ( $PSCmdlet.ParameterSetName -eq "List" ) {
            $result = $result.Nodes
        }

        # Filter out null values:
        # fields that weren't requested
        # come back as nulls in the `$result` object,
        # but that's not interesting to display
        $result | Remove-NullProperties
    } 
}