All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kiwiproject.consul.model.agent.Registration Maven / Gradle / Ivy

package org.kiwiproject.consul.model.agent;

import static com.google.common.base.Preconditions.checkState;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.immutables.value.Value;
import org.kiwiproject.consul.model.catalog.ServiceWeights;

import java.util.List;
import java.util.Map;
import java.util.Optional;


@Value.Immutable
@Value.Style(jakarta = true)
@JsonSerialize(as = ImmutableRegistration.class)
@JsonDeserialize(as = ImmutableRegistration.class)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public abstract class Registration {

    @JsonProperty("Name")
    public abstract String getName();

    @JsonProperty("Id")
    public abstract String getId();

    @JsonProperty("Address")
    public abstract Optional getAddress();

    @JsonProperty("Port")
    public abstract Optional getPort();

    @JsonProperty("Check")
    public abstract Optional getCheck();

    @JsonProperty("Checks")
    public abstract List getChecks();

    @JsonProperty("Tags")
    public abstract List getTags();

    @JsonProperty("Meta")
    public abstract Map getMeta();

    @JsonProperty("EnableTagOverride")
    public abstract Optional getEnableTagOverride();

    @JsonProperty("Weights")
    public abstract Optional getServiceWeights();

    @Value.Immutable
    @JsonSerialize(as = ImmutableRegCheck.class)
    @JsonDeserialize(as = ImmutableRegCheck.class)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public abstract static class RegCheck {

        @JsonProperty("CheckID")
        public abstract Optional getId();

        @JsonProperty("Name")
        public abstract Optional getName();

        @JsonProperty("Args")
        public abstract Optional> getArgs();

        @JsonProperty("Interval")
        public abstract Optional getInterval();

        @JsonProperty("TTL")
        public abstract Optional getTtl();

        @JsonProperty("HTTP")
        public abstract Optional getHttp();

        @JsonProperty("TCP")
        public abstract Optional getTcp();

        @JsonProperty("GRPC")
        public abstract Optional getGrpc();

        @JsonProperty("GRPCUseTLS")
        public abstract Optional getGrpcUseTls();

        @JsonProperty("Timeout")
        public abstract Optional getTimeout();

        @JsonProperty("Notes")
        public abstract Optional getNotes();

        @JsonProperty("DeregisterCriticalServiceAfter")
        public abstract Optional getDeregisterCriticalServiceAfter();

        @JsonProperty("TLSSkipVerify")
        public abstract Optional getTlsSkipVerify();

        @JsonProperty("Status")
        public abstract Optional getStatus();

        @JsonProperty("SuccessBeforePassing")
        public abstract Optional getSuccessBeforePassing();

        @JsonProperty("FailuresBeforeCritical")
        public abstract Optional getFailuresBeforeCritical();

        public static RegCheck ttl(long ttl) {
            return ImmutableRegCheck
                    .builder()
                    .ttl(String.format("%ss", ttl))
                    .build();
        }

        public static RegCheck args(List args, long interval) {
            return ImmutableRegCheck
                    .builder()
                    .args(args)
                    .interval(String.format("%ss", interval))
                    .build();
        }

        public static RegCheck args(List args, long interval, long timeout) {
            return ImmutableRegCheck
                    .builder()
                    .args(args)
                    .interval(String.format("%ss", interval))
                    .timeout(String.format("%ss", timeout))
                    .build();
        }

        public static RegCheck args(List args, long interval, long timeout, String notes) {
            return ImmutableRegCheck
                    .builder()
                    .args(args)
                    .interval(String.format("%ss", interval))
                    .timeout(String.format("%ss", timeout))
                    .notes(notes)
                    .build();
        }

        public static RegCheck http(String http, long interval) {
            return ImmutableRegCheck
                    .builder()
                    .http(http)
                    .interval(String.format("%ss", interval))
                    .build();
        }

        public static RegCheck http(String http, long interval, long timeout) {
            return ImmutableRegCheck
                    .builder()
                    .http(http)
                    .interval(String.format("%ss", interval))
                    .timeout(String.format("%ss", timeout))
                    .build();
        }

        public static RegCheck http(String http, long interval, long timeout, String notes) {
            return ImmutableRegCheck
                    .builder()
                    .http(http)
                    .interval(String.format("%ss", interval))
                    .timeout(String.format("%ss", timeout))
                    .notes(notes)
                    .build();
        }

        public static RegCheck tcp(String tcp, long interval) {
            return ImmutableRegCheck
                    .builder()
                    .tcp(tcp)
                    .interval(String.format("%ss", interval))
                    .build();
        }

        public static RegCheck tcp(String tcp, long interval, long timeout) {
            return ImmutableRegCheck
                    .builder()
                    .tcp(tcp)
                    .interval(String.format("%ss", interval))
                    .timeout(String.format("%ss", timeout))
                    .build();
        }

        public static RegCheck tcp(String tcp, long interval, long timeout, String notes) {
            return ImmutableRegCheck
                    .builder()
                    .tcp(tcp)
                    .interval(String.format("%ss", interval))
                    .timeout(String.format("%ss", timeout))
                    .notes(notes)
                    .build();
        }

        public static RegCheck grpc(String grpc, long interval) {
            return RegCheck.grpc(grpc, interval, false);
        }

        public static RegCheck grpc(String grpc, long interval, boolean useTls) {
            return ImmutableRegCheck
                    .builder()
                    .grpc(grpc)
                    .grpcUseTls(useTls)
                    .interval(String.format("%ss", interval))
                    .build();
        }

        @Value.Check
        protected void validate() {

            checkState(getHttp().isPresent() || getTtl().isPresent()
                || getArgs().isPresent() || getTcp().isPresent() || getGrpc().isPresent(),
                    "Check must specify either http, tcp, ttl, grpc or args");

            if (getHttp().isPresent() || getArgs().isPresent() || getTcp().isPresent() || getGrpc().isPresent()) {
                checkState(getInterval().isPresent(),
                        "Interval must be set if check type is http, tcp, grpc or args");
            }
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy