in projects/alloydb-autoscaler/src/autoscaler-core/scaler/scaler-rules-manager.ts [71:136]
private getRulesForProfile(
instance: ScalableInstanceWithData,
instanceLogger: pino.Logger
): Rules {
if (!instance?.scalingConfig?.scalingProfile) {
instanceLogger.info({
message: 'No scaling profile configured. Using default rules:',
});
return this.defaultRules;
}
const scalingProfile = instance.scalingConfig.scalingProfile;
if (scalingProfile === CUSTOM_RULE_NAME) {
if (
!instance?.scalingConfig?.scalingRules ||
instance.scalingConfig.scalingRules.length === 0
) {
instanceLogger.info({
message:
'CUSTOM rule profile was selected, but no scalingRules were ' +
'passed. Using default rules:',
});
return this.defaultRules;
}
instanceLogger.info({
message: 'Using custom rules:',
});
const customRulesList = instance.scalingConfig.scalingRules;
const customRules: Rules = {};
customRulesList.forEach(ruleSet => {
const ruleName = ruleSet?.name as string;
customRules[ruleName] = ruleSet;
});
return customRules;
}
if (!this.profileRules) {
instanceLogger.info({
message: 'No profiles exist for this autoscaler. Using default rules:',
});
return this.defaultRules;
}
if (!this.profileRules.has(scalingProfile)) {
instanceLogger.info({
message: `Unknown scaling profile ${scalingProfile}. Using default rules:`,
});
return this.defaultRules;
}
const currentProfileRules = this.profileRules.get(scalingProfile);
if (!currentProfileRules) {
// This should not happen, but protecting for typing and safety.
instanceLogger.info({
message: `Unknown scaling profile ${scalingProfile}. Using default rules: `,
});
return this.defaultRules;
}
instanceLogger.info({
message: `Using predefined scaling rules for profile ${scalingProfile}:`,
});
return currentProfileRules;
}