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

io.fabric8.gateway.http.Main Maven / Gradle / Ivy

/**
 *  Copyright 2005-2014 Red Hat, Inc.
 *
 *  Red Hat licenses this file to you under the Apache License, version
 *  2.0 (the "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 *  implied.  See the License for the specific language governing
 *  permissions and limitations under the License.
 */
package io.fabric8.gateway.http;

import io.fabric8.gateway.fabric.http.HTTPGatewayConfig;
import io.fabric8.gateway.fabric.http.HttpMappingRuleConfiguration;
import io.fabric8.gateway.loadbalancer.LoadBalancers;
import io.fabric8.utils.Systems;

import javax.enterprise.event.Observes;
import javax.inject.Inject;

import org.jboss.weld.environment.se.bindings.Parameters;
import org.jboss.weld.environment.se.events.ContainerInitialized;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {

    public static final String DEFAULT_HOST = "127.0.0.1";
    public static final String DEFAULT_PORT = "9090";
    public static final String DEFAULT_APIMAN_PORT = "9089";
    public static final String DEFAULT_INDEX_ENABLED = "true";
    public static final String DEFAULT_GATEWAY_SERVICES_SELECTORS = "[{\"container\":\"java\",\"group\":\"quickstarts\"},{\"container\":\"camel\",\"group\":\"quickstarts\"}]";
    public static final String DEFAULT_URI_TEMPLATE = "/{contextPath}";
    public static final String DEFAULT_LOADBALANCER = LoadBalancers.ROUND_ROBIN_LOAD_BALANCER;
    public static final String DEFAULT_KUBERNETES_MASTER = "http://localhost:8484/";
    public static final String DEFAULT_API_MANAGER_ENABLED = "true";
    private static final Logger LOG = LoggerFactory.getLogger(Main.class);
    
    @Inject HttpMappingRuleConfiguration httpMappingRuleConfigutation;
    @Inject @Parameters String[] args;

    public void main(@Observes ContainerInitialized event) {
        HTTPGatewayConfig gatewayConfig = new HTTPGatewayConfig();
        
        String serviceName = Systems.getEnvVarOrSystemProperty("HTTP_GATEWAY_SERVICE_ID", "HTTP_GATEWAY_SERVICE_ID", "FABRIC8HTTPGATEWAY").toUpperCase() + "_SERVICE_";
        String hostEnvVar = serviceName + HTTPGatewayConfig.HOST;
        String portEnvVar = HTTPGatewayConfig.HTTP_PORT;
        String apiManagerEnabledEnvVar = serviceName + HTTPGatewayConfig.IS_API_MANAGER_ENABLED;
        String kubernetesMasterEnvVar = HTTPGatewayConfig.KUBERNETES_MASTER;
        String selectorEnvVar = serviceName + HTTPGatewayConfig.SELECTORS;
        String uriTemplateEnvVar = serviceName + HTTPGatewayConfig.URI_TEMPLATE;
        String loadBalancerEnvVar = serviceName + HTTPGatewayConfig.LOAD_BALANCER;
        String enabledVersionEnvVar = serviceName + HTTPGatewayConfig.ENABLED_VERSION;
        String enableIndexEnvVar = serviceName + HTTPGatewayConfig.ENABLE_INDEX;
        String reverseHeadersEnvVar = serviceName + HTTPGatewayConfig.REVERSE_HEADERS;
        //Gateway config
        gatewayConfig.put(HTTPGatewayConfig.HOST,
                Systems.getEnvVarOrSystemProperty(hostEnvVar, hostEnvVar, DEFAULT_HOST));
        gatewayConfig.put(HTTPGatewayConfig.HTTP_PORT,
                Systems.getEnvVarOrSystemProperty(portEnvVar, portEnvVar, DEFAULT_PORT));
        gatewayConfig.put(HTTPGatewayConfig.ENABLE_INDEX,
                Systems.getEnvVarOrSystemProperty(enableIndexEnvVar, enableIndexEnvVar, DEFAULT_INDEX_ENABLED));
        gatewayConfig.put(HTTPGatewayConfig.IS_API_MANAGER_ENABLED,
        		Systems.getEnvVarOrSystemProperty(apiManagerEnabledEnvVar, apiManagerEnabledEnvVar, DEFAULT_API_MANAGER_ENABLED));
        LOG.info("Container host " + gatewayConfig.getHost());
        LOG.info("Container port " + gatewayConfig.getPort());
        LOG.info("Index enabled: " + gatewayConfig.isIndexEnabled());
        LOG.info("API Manager Enabled: " + gatewayConfig.isApiManagerEnabled());
        //Kube config
        gatewayConfig.put(HTTPGatewayConfig.KUBERNETES_MASTER,
                Systems.getEnvVarOrSystemProperty(kubernetesMasterEnvVar, kubernetesMasterEnvVar, DEFAULT_KUBERNETES_MASTER));
        LOG.info("Kubernetes Master: " + gatewayConfig.getKubernetesMaster());
        //Rule config
        gatewayConfig.put(HTTPGatewayConfig.SELECTORS,
                Systems.getEnvVarOrSystemProperty(selectorEnvVar, selectorEnvVar, DEFAULT_GATEWAY_SERVICES_SELECTORS));
        gatewayConfig.put(HTTPGatewayConfig.URI_TEMPLATE,
                Systems.getEnvVarOrSystemProperty(uriTemplateEnvVar, uriTemplateEnvVar, DEFAULT_URI_TEMPLATE));
        gatewayConfig.put(HTTPGatewayConfig.LOAD_BALANCER,
                Systems.getEnvVarOrSystemProperty(loadBalancerEnvVar, loadBalancerEnvVar, DEFAULT_LOADBALANCER));
        gatewayConfig.put(HTTPGatewayConfig.ENABLED_VERSION,
                Systems.getEnvVarOrSystemProperty(enabledVersionEnvVar, enabledVersionEnvVar, null));
        gatewayConfig.put(HTTPGatewayConfig.REVERSE_HEADERS,
                Systems.getEnvVarOrSystemProperty(reverseHeadersEnvVar, reverseHeadersEnvVar, "true"));
        LOG.info("Gateway Selector: " + gatewayConfig.get(HTTPGatewayConfig.SELECTORS));
        LOG.info("Gateway URI Template; " + gatewayConfig.get(HTTPGatewayConfig.URI_TEMPLATE));
        LOG.info("LoadBalancer: " + gatewayConfig.getLoadBalancerType());
        LOG.info("Enabled Version: " + gatewayConfig.getEnabledVersion());
        LOG.info("Reverse Headers: " + gatewayConfig.isReverseHeaders());
        LOG.info("Pushing configuration to the gateway...");
        try {
            httpMappingRuleConfigutation.configure(gatewayConfig);
            LOG.info("Gateway startup successful");
            waitUntilStop();
        } catch (Exception e) {
            LOG.error("Could not start the HTTP Gateway");
            LOG.error(e.getMessage(),e);
        }
        
    }
        
    protected static void waitUntilStop() {
        Object lock = new Object();
        while (true) {
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    // ignore
                }
            }
        }
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy