Example - Using Groovy Closure

The following rule sets the calculated KPI's status to Critical, if at least one Availability KPI with Major status exists for the calculated CI's child CIs.

This rule illustrates Groovy Closure. Refer to http://groovy.codehaus.org/Closures for more information.

public void calculateKPI(CI ci, KPI kpi) {
    /**
     * Use Groovy Closure with the CI class getChildrenKPIs method,
     * to get List of KPIs from the CI`s child CIs, where 
     * 1. KPI type is Availability
     * 2. Status is MAJOR
     
     Closure description:
     { KPI childKPI ->
        childKPI.type == KpiType.Availability.getID("DASHBOARD") && childKPI.status == Status.MAJOR
     }
     The Closure defines one parameter named childKPI of type KPI.
     Each KPI from the CI`s child CIs will be passed to the Closure by the getChildrenKPIs method.
     The Closure body returns a boolean value based on the logical expression result.
     Each KPI that the Closure body will return true for, will be part of the returned List 
     The expression KpiType.Availability.getID("DASHBOARD") returns an int representing the Availability KPI ID from the Service Health KPI Repository.
     */
    List<KPI> kpiList = ci.getChildrenKPIs {KPI childKPI ->
        childKPI.type == KpiType.Availability.getID("DASHBOARD") && childKPI.status == Status.MAJOR
    }
    // Check if such a KPI exists.
    if (kpiList.isEmpty()) {
         // No such KPI exists.
        // Write to a log file at debug level.
        logger.debug "Closure Rule: no Availability KPI with  MAJOR status exist"
    }
    else {
        //  At least one Availability KPI with MAJOR status exists.
        logger.debug("Closure Rule: At least one Availability KPI  with  MAJOR status exist")
        // Set calculated KPI status to CRITICAL.
        kpi.status = Status.CRITICAL;
    }
}


Parent topic: Examples - API Group and Sibling Rule