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

com.nesscomputing.service.discovery.announce.GalaxyAnnouncer Maven / Gradle / Ivy

/**
 * Copyright (C) 2012 Ness Computing, Inc.
 *
 * Licensed 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 com.nesscomputing.service.discovery.announce;

import java.util.Set;


import org.apache.commons.lang3.StringUtils;

import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.nesscomputing.galaxy.GalaxyConfig;
import com.nesscomputing.galaxy.GalaxyIp;
import com.nesscomputing.httpserver.HttpServerConfig;
import com.nesscomputing.logging.Log;
import com.nesscomputing.service.discovery.client.DiscoveryClient;
import com.nesscomputing.service.discovery.client.ServiceAnnouncer;
import com.nesscomputing.service.discovery.client.ServiceInformation;

/**
 * Announces HTTP and HTTPS services based off the Galaxy configuration and
 * the state of the HttpServer Configuration.
 */
public class GalaxyAnnouncer extends ServiceAnnouncer
{
    private static final Log LOG = Log.findLog();

    @Inject
    GalaxyAnnouncer(final DiscoveryClient discoveryClient,
                    final AnnouncementConfig announcementConfig,
                    final HttpServerConfig httpServerConfig,
                    final GalaxyConfig galaxyConfig)
    {
        super(discoveryClient);
        setServices(GalaxyAnnouncer.buildServices(announcementConfig, httpServerConfig, galaxyConfig));
    }

    public static final Set buildServices(final AnnouncementConfig announcementConfig,
                                                              final HttpServerConfig httpServerConfig,
                                                              final GalaxyConfig galaxyConfig)
    {
        final Set services = Sets.newHashSet();

        final String serviceName = announcementConfig.getServiceName();
        if (StringUtils.isBlank(serviceName)) {
            LOG.warn("No service name given, not announcing anything. This is not what you want!");
        }
        else {
            final String serviceType = announcementConfig.getServiceType();

            if (announcementConfig.isAnnounceInternal()) {
                LOG.debug("Internal services are announced");
                services.addAll(buildInternalServices(serviceName, serviceType, httpServerConfig, galaxyConfig));
            }
            if (announcementConfig.isAnnounceExternal()) {
                LOG.debug("External services are announced");
                services.addAll(buildExternalServices(serviceName, serviceType, httpServerConfig, galaxyConfig));
            }
        }

        LOG.debug("Total number of announcements: %d", services.size());
        return services;
    }

    public static final Set buildInternalServices(final String serviceName,
                                                                      final String serviceType,
                                                                      final HttpServerConfig httpServerConfig,
                                                                      final GalaxyConfig galaxyConfig)
    {
        final Set services = Sets.newHashSet();

        final GalaxyIp internalIp = galaxyConfig.getInternalIp();
        if (httpServerConfig.isInternalHttpEnabled()) {
            services.add(ServiceInformation.forService(serviceName, serviceType, "http", internalIp.getIp(), internalIp.getHttpPort()));
        }
        if (httpServerConfig.isInternalHttpsEnabled()) {
            services.add(ServiceInformation.forService(serviceName, serviceType, "https", internalIp.getIp(), internalIp.getHttpsPort()));
        }

        return services;
    }

    public static final Set buildExternalServices(final String serviceName,
                                                                      final String serviceType,
                                                                      final HttpServerConfig httpServerConfig,
                                                                      final GalaxyConfig galaxyConfig)
    {
        final Set services = Sets.newHashSet();

        final GalaxyIp externalIp = galaxyConfig.getExternalIp();
        if (httpServerConfig.isExternalHttpEnabled()) {
            services.add(ServiceInformation.forService(serviceName, serviceType, "http", externalIp.getIp(), externalIp.getHttpPort()));
        }
        if (httpServerConfig.isExternalHttpsEnabled()) {
            services.add(ServiceInformation.forService(serviceName, serviceType, "https", externalIp.getIp(), externalIp.getHttpsPort()));
        }

        return services;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy