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;
}