Esempio n. 1
0
  public static boolean validateHAProxyLBRule(final LoadBalancingRule rule) {
    final String timeEndChar = "dhms";

    for (final LbStickinessPolicy stickinessPolicy : rule.getStickinessPolicies()) {
      final List<Pair<String, String>> paramsList = stickinessPolicy.getParams();

      if (StickinessMethodType.LBCookieBased.getName()
          .equalsIgnoreCase(stickinessPolicy.getMethodName())) {

      } else if (StickinessMethodType.SourceBased.getName()
          .equalsIgnoreCase(stickinessPolicy.getMethodName())) {
        String tablesize = "200k"; // optional
        String expire = "30m"; // optional

        /* overwrite default values with the stick parameters */
        for (final Pair<String, String> paramKV : paramsList) {
          final String key = paramKV.first();
          final String value = paramKV.second();
          if ("tablesize".equalsIgnoreCase(key)) {
            tablesize = value;
          }
          if ("expire".equalsIgnoreCase(key)) {
            expire = value;
          }
        }
        if (expire != null && !containsOnlyNumbers(expire, timeEndChar)) {
          throw new InvalidParameterValueException(
              "Failed LB in validation rule id: "
                  + rule.getId()
                  + " Cause: expire is not in timeformat: "
                  + expire);
        }
        if (tablesize != null && !containsOnlyNumbers(tablesize, "kmg")) {
          throw new InvalidParameterValueException(
              "Failed LB in validation rule id: "
                  + rule.getId()
                  + " Cause: tablesize is not in size format: "
                  + tablesize);
        }
      } else if (StickinessMethodType.AppCookieBased.getName()
          .equalsIgnoreCase(stickinessPolicy.getMethodName())) {
        String length = null; // optional
        String holdTime = null; // optional

        for (final Pair<String, String> paramKV : paramsList) {
          final String key = paramKV.first();
          final String value = paramKV.second();
          if ("length".equalsIgnoreCase(key)) {
            length = value;
          }
          if ("holdtime".equalsIgnoreCase(key)) {
            holdTime = value;
          }
        }

        if (length != null && !containsOnlyNumbers(length, null)) {
          throw new InvalidParameterValueException(
              "Failed LB in validation rule id: "
                  + rule.getId()
                  + " Cause: length is not a number: "
                  + length);
        }
        if (holdTime != null
            && !containsOnlyNumbers(holdTime, timeEndChar)
            && !containsOnlyNumbers(holdTime, null)) {
          throw new InvalidParameterValueException(
              "Failed LB in validation rule id: "
                  + rule.getId()
                  + " Cause: holdtime is not in timeformat: "
                  + holdTime);
        }
      }
    }
    return true;
  }