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

com.netflix.eureka2.testkit.embedded.view.ClusterViewHttpServer Maven / Gradle / Ivy

The newest version!
package com.netflix.eureka2.testkit.embedded.view;

import java.io.IOException;

import com.netflix.eureka2.testkit.embedded.EurekaDeployment;
import com.netflix.eureka2.testkit.embedded.cluster.EmbeddedReadCluster.ReadClusterReport;
import com.netflix.eureka2.testkit.embedded.cluster.EmbeddedWriteCluster.WriteClusterReport;
import com.netflix.eureka2.testkit.embedded.server.EmbeddedBridgeServer.BridgeServerReport;
import com.netflix.eureka2.testkit.embedded.server.EmbeddedDashboardServer.DashboardServerReport;
import io.netty.buffer.ByteBuf;
import io.reactivex.netty.RxNetty;
import io.reactivex.netty.protocol.http.server.HttpServer;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
import io.reactivex.netty.protocol.http.server.HttpServerResponse;
import io.reactivex.netty.protocol.http.server.RequestHandler;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rx.Observable;

/**
 * @author Tomasz Bak
 */
public class ClusterViewHttpServer {

    private static final Logger logger = LoggerFactory.getLogger(ClusterViewHttpServer.class);

    private static final int VIEW_PORT = 7010;

    private static final ObjectMapper MAPPER = new ObjectMapper();

    private final EurekaDeployment deployment;

    private HttpServer httpServer;

    public ClusterViewHttpServer(EurekaDeployment deployment) {
        this.deployment = deployment;
    }

    public void start() {
        httpServer = RxNetty.createHttpServer(VIEW_PORT, new RequestHandler() {
            @Override
            public Observable handle(HttpServerRequest request, HttpServerResponse response) {
                DeploymentReport report = createReport();
                String result;
                try {
                    result = MAPPER.writeValueAsString(report);
                } catch (IOException e) {
                    return Observable.error(e);
                }
                return response.writeStringAndFlush(result);
            }
        }).start();
    }

    public void shutdown() {
        try {
            httpServer.shutdown();
        } catch (InterruptedException e) {
            logger.error("Shutdown failure", e);
        }
    }

    private DeploymentReport createReport() {
        WriteClusterReport writeClusterReport = deployment.getWriteCluster().clusterReport();
        ReadClusterReport readClusterReport = deployment.getReadCluster().clusterReport();
        BridgeServerReport bridgeServerReport = null;
        if (deployment.getBridgeServer() != null) {
            bridgeServerReport = deployment.getBridgeServer().serverReport();
        }
        DashboardServerReport dashboardServerReport = null;
        if (deployment.getDashboardServer() != null) {
            dashboardServerReport = deployment.getDashboardServer().serverReport();
        }
        return new DeploymentReport(writeClusterReport, readClusterReport, bridgeServerReport, dashboardServerReport);
    }

    public static class DeploymentReport {
        private final WriteClusterReport writeClusterReport;
        private final ReadClusterReport readClusterReport;
        private final BridgeServerReport bridgeServerReport;
        private final DashboardServerReport dashboardServerReport;

        public DeploymentReport(WriteClusterReport writeClusterReport,
                                ReadClusterReport readClusterReport,
                                BridgeServerReport bridgeServerReport,
                                DashboardServerReport dashboardServerReport) {
            this.writeClusterReport = writeClusterReport;
            this.readClusterReport = readClusterReport;
            this.bridgeServerReport = bridgeServerReport;
            this.dashboardServerReport = dashboardServerReport;
        }

        public WriteClusterReport getWriteClusterReport() {
            return writeClusterReport;
        }

        public ReadClusterReport getReadClusterReport() {
            return readClusterReport;
        }

        public BridgeServerReport getBridgeServerReport() {
            return bridgeServerReport;
        }

        public DashboardServerReport getDashboardServerReport() {
            return dashboardServerReport;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy