// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.compute.outputs;

import com.pulumi.core.annotations.CustomType;
import com.pulumi.gcp.compute.outputs.GetBackendServiceOutlierDetectionBaseEjectionTime;
import com.pulumi.gcp.compute.outputs.GetBackendServiceOutlierDetectionInterval;
import java.lang.Integer;
import java.util.List;
import java.util.Objects;

@CustomType
public final class GetBackendServiceOutlierDetection {
    private List<GetBackendServiceOutlierDetectionBaseEjectionTime> baseEjectionTimes;
    private Integer consecutiveErrors;
    private Integer consecutiveGatewayFailure;
    private Integer enforcingConsecutiveErrors;
    private Integer enforcingConsecutiveGatewayFailure;
    private Integer enforcingSuccessRate;
    private List<GetBackendServiceOutlierDetectionInterval> intervals;
    private Integer maxEjectionPercent;
    private Integer successRateMinimumHosts;
    private Integer successRateRequestVolume;
    private Integer successRateStdevFactor;

    private GetBackendServiceOutlierDetection() {}
    public List<GetBackendServiceOutlierDetectionBaseEjectionTime> baseEjectionTimes() {
        return this.baseEjectionTimes;
    }
    public Integer consecutiveErrors() {
        return this.consecutiveErrors;
    }
    public Integer consecutiveGatewayFailure() {
        return this.consecutiveGatewayFailure;
    }
    public Integer enforcingConsecutiveErrors() {
        return this.enforcingConsecutiveErrors;
    }
    public Integer enforcingConsecutiveGatewayFailure() {
        return this.enforcingConsecutiveGatewayFailure;
    }
    public Integer enforcingSuccessRate() {
        return this.enforcingSuccessRate;
    }
    public List<GetBackendServiceOutlierDetectionInterval> intervals() {
        return this.intervals;
    }
    public Integer maxEjectionPercent() {
        return this.maxEjectionPercent;
    }
    public Integer successRateMinimumHosts() {
        return this.successRateMinimumHosts;
    }
    public Integer successRateRequestVolume() {
        return this.successRateRequestVolume;
    }
    public Integer successRateStdevFactor() {
        return this.successRateStdevFactor;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static Builder builder(GetBackendServiceOutlierDetection defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private List<GetBackendServiceOutlierDetectionBaseEjectionTime> baseEjectionTimes;
        private Integer consecutiveErrors;
        private Integer consecutiveGatewayFailure;
        private Integer enforcingConsecutiveErrors;
        private Integer enforcingConsecutiveGatewayFailure;
        private Integer enforcingSuccessRate;
        private List<GetBackendServiceOutlierDetectionInterval> intervals;
        private Integer maxEjectionPercent;
        private Integer successRateMinimumHosts;
        private Integer successRateRequestVolume;
        private Integer successRateStdevFactor;
        public Builder() {}
        public Builder(GetBackendServiceOutlierDetection defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.baseEjectionTimes = defaults.baseEjectionTimes;
    	      this.consecutiveErrors = defaults.consecutiveErrors;
    	      this.consecutiveGatewayFailure = defaults.consecutiveGatewayFailure;
    	      this.enforcingConsecutiveErrors = defaults.enforcingConsecutiveErrors;
    	      this.enforcingConsecutiveGatewayFailure = defaults.enforcingConsecutiveGatewayFailure;
    	      this.enforcingSuccessRate = defaults.enforcingSuccessRate;
    	      this.intervals = defaults.intervals;
    	      this.maxEjectionPercent = defaults.maxEjectionPercent;
    	      this.successRateMinimumHosts = defaults.successRateMinimumHosts;
    	      this.successRateRequestVolume = defaults.successRateRequestVolume;
    	      this.successRateStdevFactor = defaults.successRateStdevFactor;
        }

        @CustomType.Setter
        public Builder baseEjectionTimes(List<GetBackendServiceOutlierDetectionBaseEjectionTime> baseEjectionTimes) {
            this.baseEjectionTimes = Objects.requireNonNull(baseEjectionTimes);
            return this;
        }
        public Builder baseEjectionTimes(GetBackendServiceOutlierDetectionBaseEjectionTime... baseEjectionTimes) {
            return baseEjectionTimes(List.of(baseEjectionTimes));
        }
        @CustomType.Setter
        public Builder consecutiveErrors(Integer consecutiveErrors) {
            this.consecutiveErrors = Objects.requireNonNull(consecutiveErrors);
            return this;
        }
        @CustomType.Setter
        public Builder consecutiveGatewayFailure(Integer consecutiveGatewayFailure) {
            this.consecutiveGatewayFailure = Objects.requireNonNull(consecutiveGatewayFailure);
            return this;
        }
        @CustomType.Setter
        public Builder enforcingConsecutiveErrors(Integer enforcingConsecutiveErrors) {
            this.enforcingConsecutiveErrors = Objects.requireNonNull(enforcingConsecutiveErrors);
            return this;
        }
        @CustomType.Setter
        public Builder enforcingConsecutiveGatewayFailure(Integer enforcingConsecutiveGatewayFailure) {
            this.enforcingConsecutiveGatewayFailure = Objects.requireNonNull(enforcingConsecutiveGatewayFailure);
            return this;
        }
        @CustomType.Setter
        public Builder enforcingSuccessRate(Integer enforcingSuccessRate) {
            this.enforcingSuccessRate = Objects.requireNonNull(enforcingSuccessRate);
            return this;
        }
        @CustomType.Setter
        public Builder intervals(List<GetBackendServiceOutlierDetectionInterval> intervals) {
            this.intervals = Objects.requireNonNull(intervals);
            return this;
        }
        public Builder intervals(GetBackendServiceOutlierDetectionInterval... intervals) {
            return intervals(List.of(intervals));
        }
        @CustomType.Setter
        public Builder maxEjectionPercent(Integer maxEjectionPercent) {
            this.maxEjectionPercent = Objects.requireNonNull(maxEjectionPercent);
            return this;
        }
        @CustomType.Setter
        public Builder successRateMinimumHosts(Integer successRateMinimumHosts) {
            this.successRateMinimumHosts = Objects.requireNonNull(successRateMinimumHosts);
            return this;
        }
        @CustomType.Setter
        public Builder successRateRequestVolume(Integer successRateRequestVolume) {
            this.successRateRequestVolume = Objects.requireNonNull(successRateRequestVolume);
            return this;
        }
        @CustomType.Setter
        public Builder successRateStdevFactor(Integer successRateStdevFactor) {
            this.successRateStdevFactor = Objects.requireNonNull(successRateStdevFactor);
            return this;
        }
        public GetBackendServiceOutlierDetection build() {
            final var o = new GetBackendServiceOutlierDetection();
            o.baseEjectionTimes = baseEjectionTimes;
            o.consecutiveErrors = consecutiveErrors;
            o.consecutiveGatewayFailure = consecutiveGatewayFailure;
            o.enforcingConsecutiveErrors = enforcingConsecutiveErrors;
            o.enforcingConsecutiveGatewayFailure = enforcingConsecutiveGatewayFailure;
            o.enforcingSuccessRate = enforcingSuccessRate;
            o.intervals = intervals;
            o.maxEjectionPercent = maxEjectionPercent;
            o.successRateMinimumHosts = successRateMinimumHosts;
            o.successRateRequestVolume = successRateRequestVolume;
            o.successRateStdevFactor = successRateStdevFactor;
            return o;
        }
    }
}
