private getRuleConditionMetrics()

in projects/alloydb-autoscaler/src/autoscaler-core/scaler/scaler-rules-engine.ts [150:180]


  private getRuleConditionMetrics(
    ruleResult: RuleResult
  ): ConditionPropertiesResult[] {
    let ruleConditions: NestedConditionResult[] = [];
    if (ruleResult?.conditions && 'all' in ruleResult.conditions) {
      ruleConditions = ruleResult.conditions.all as NestedConditionResult[];
    } else if (ruleResult?.conditions && 'any' in ruleResult.conditions) {
      ruleConditions = ruleResult?.conditions?.any as NestedConditionResult[];
    } else {
      ruleConditions = [] as NestedConditionResult[];
    }

    const ruleConditionsList: ConditionPropertiesResult[] = [];
    for (const ruleCondition of ruleConditions) {
      /*
       * Narrow down typing and skip NestedConditions.
       * TODO: add support for nested conditions.
       */
      if (!('result' in ruleCondition)) continue;
      if (!('fact' in ruleCondition)) continue;
      if (!('factResult' in ruleCondition)) continue;
      if (!('value' in ruleCondition)) continue;

      // Only consider rules if they triggered the scale (i.e. result=true).
      if (!ruleCondition.result) continue;

      ruleConditionsList.push(ruleCondition);
    }

    return ruleConditionsList;
  }