silentbalanceyh/vertx-zero

View on GitHub
vertx-semper/aeon-eternal/aeon-inlet/src/main/java/io/vertx/up/uca/options/CircuitVisitor.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.vertx.up.uca.options;

import io.horizon.eon.VMessage;
import io.horizon.exception.ProgramException;
import io.horizon.uca.log.Annal;
import io.vertx.circuitbreaker.CircuitBreakerOptions;
import io.vertx.core.json.JsonObject;
import io.vertx.up.commune.Ruler;
import io.vertx.up.eon.configure.YmlCore;
import io.vertx.up.fn.Fn;
import io.vertx.up.runtime.ZeroStore;

public class CircuitVisitor implements Visitor<CircuitBreakerOptions> {

    private static final Annal LOGGER = Annal.get(CircuitVisitor.class);

    @Override
    public CircuitBreakerOptions visit(final String... key)
        throws ProgramException {
        // 3. CircuitBreakerOptions building.
        final JsonObject config = Fn.runOr(
            ZeroStore.is(YmlCore.circuit.__KEY), LOGGER,
            () -> ZeroStore.option(YmlCore.circuit.__KEY),
            JsonObject::new);
        // 4. Verify the configuration data
        assert config != null;
        return this.visit(config);
    }

    private CircuitBreakerOptions visit(final JsonObject data)
        throws ProgramException {
        LOGGER.info(VMessage.Visitor.V_BEFORE, YmlCore.circuit.__KEY, "Circuit", data.encode());
        Ruler.verify(YmlCore.circuit.__KEY, data);
        return new CircuitBreakerOptions(data);
    }
}