private getRulesForProfile()

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