ServerPropsHandler.java 5.36 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.scene7.is.cache.clustering.impl.ClusterNetwork
 *  com.scene7.is.cache.server.access.CacheServerAccessBean
 *  com.scene7.is.mbeans.catalog.client.CatalogServerMBean
 *  com.scene7.is.mbeans.ps.ImageServerConnectionMBean
 *  com.scene7.is.provider.CacheSpec
 *  com.scene7.is.provider.DebugInfoEnum
 *  com.scene7.is.provider.RequestContext
 *  com.scene7.is.sleng.ImageAccessException
 *  com.scene7.is.sleng.ImageServer
 *  com.scene7.is.util.Statistics
 */
package com.scene7.is.ps.provider;

import com.scene7.is.cache.clustering.impl.ClusterNetwork;
import com.scene7.is.cache.server.access.CacheServerAccessBean;
import com.scene7.is.mbeans.catalog.client.CatalogServerMBean;
import com.scene7.is.mbeans.ps.ImageServerConnectionMBean;
import com.scene7.is.provider.CacheSpec;
import com.scene7.is.provider.DebugInfoEnum;
import com.scene7.is.provider.RequestContext;
import com.scene7.is.ps.provider.ModifierSet;
import com.scene7.is.ps.provider.PropertiesHandler;
import com.scene7.is.ps.provider.Request;
import com.scene7.is.ps.provider.ResponseStatistics;
import com.scene7.is.ps.provider.defs.ModifierEnum;
import com.scene7.is.sleng.ImageAccessException;
import com.scene7.is.sleng.ImageServer;
import com.scene7.is.util.Statistics;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

public abstract class ServerPropsHandler
extends PropertiesHandler {
    private static final Logger LOGGER = Logger.getLogger(ServerPropsHandler.class.getName());
    private final ImageServerConnectionMBean isConnection;
    private final ImageServer server;
    private final CatalogServerMBean catalogServer;
    private final CacheServerAccessBean cacheServerAccess;
    private final ClusterNetwork cluster;
    private final Map<String, Object> localProps = new HashMap<String, Object>();

    public abstract RequestContext getRequestContext();

    public ServerPropsHandler(ImageServer server, Statistics stats, ImageServerConnectionMBean isConnection, CatalogServerMBean catalogServer, CacheServerAccessBean cacheServerAccess, ClusterNetwork cluster) {
        this.server = server;
        this.isConnection = isConnection;
        this.catalogServer = catalogServer;
        this.cacheServerAccess = cacheServerAccess;
        this.cluster = cluster;
        this.localProps.put("copyright", "Copyright (c) 2001-2014 Adobe Systems Incorporated. All rights reserved.");
        this.localProps.put("server.buildDate", stats.getBuildDate());
        this.localProps.put("server.buildNumber", stats.getBuildNumber());
        this.localProps.put("server.revision", stats.getRevision());
        this.localProps.put("server.version", stats.getVersion());
        this.localProps.put("protocol.version", "2.3");
        this.useClientCache(false);
    }

    private Map<String, Object> stripOutSensitiveInfo(Map<String, Object> props, boolean showSensitive) {
        if (showSensitive) {
            return props;
        }
        HashMap<String, Object> secureProps = new HashMap<String, Object>();
        for (Map.Entry<String, Object> pairs : props.entrySet()) {
            if (!pairs.getKey().startsWith("#") && !pairs.getKey().equals("copyright")) continue;
            secureProps.put(pairs.getKey(), pairs.getValue());
        }
        return secureProps;
    }

    @Override
    protected Map<String, Object> getProperties(Request request) {
        boolean isDebugServerProps = request.getDebugInfo() == DebugInfoEnum.SERVER_PROPS;
        RequestContext context = this.getRequestContext();
        context.setIsInternalRequest(true);
        request.getGlobalAttributes().set(ModifierEnum.CACHE, CacheSpec.OFF);
        HashMap<String, Object> props = new HashMap<String, Object>();
        props.putAll(this.stripOutSensitiveInfo(this.localProps, isDebugServerProps));
        if (isDebugServerProps) {
            long startupTime = ResponseStatistics.getStartupTime();
            props.put("server.startTime", new Date(startupTime).toString());
            props.put("server.activeImageServerRequests", this.isConnection.getActiveConnections());
            Integer tmp = this.isConnection.getLocalOverlap();
            props.put("server.totalImageServerRequests", tmp.toString());
            props.put("server.usingCatalogServer", this.catalogServer.getServiceUrls().isEmpty() ? "false" : "true");
            props.put("server.usingCacheServer", this.cacheServerAccess.getServers().isEmpty() ? "false" : "true");
            props.put("server.usingCacheClustering", this.cluster.getHosts().isEmpty() ? "false" : "true");
            this.getImageServerProperties(props);
        }
        return props;
    }

    private void getImageServerProperties(Map<String, Object> props) {
        try {
            Properties src = this.server.getServerProps();
            props.put("imageServer.version", String.valueOf(src.getProperty("version")));
            props.put("imageServer.buildDate", String.valueOf(src.getProperty("buildDate")));
            props.put("imageServer.startTime", String.valueOf(src.getProperty("startTime")));
        }
        catch (ImageAccessException e) {
            LOGGER.log(Level.SEVERE, e.getMessage(), (Throwable)e);
            props.put("warning", "Image server is unavailable");
        }
    }
}