org.fusesource.cloudmix.agent.webapp.GridAgentWebapp.java Source code

Java tutorial

Introduction

Here is the source code for org.fusesource.cloudmix.agent.webapp.GridAgentWebapp.java

Source

/**
 *  Copyright (C) 2008 Progress Software, Inc. All rights reserved.
 *  http://fusesource.com
 *
 *  The software in this package is published under the terms of the AGPL license
 *  a copy of which has been included with this distribution in the license.txt file.
 */
package org.fusesource.cloudmix.agent.webapp;

import java.util.Set;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fusesource.cloudmix.agent.AgentPoller;
import org.fusesource.cloudmix.agent.Bundle;
import org.fusesource.cloudmix.agent.RestGridClient;
import org.fusesource.cloudmix.agent.dir.DirectoryInstallerAgent;
import org.fusesource.cloudmix.common.dto.AgentDetails;

public class GridAgentWebapp {

    public static final String IMAGES_ROOT = "images/";
    public static final String STYLESHEET_HREF = "css/main.css";

    private static final Log LOGGER = LogFactory.getLog(GridAgentWebapp.class);

    private RestGridClient gridClient;
    private DirectoryInstallerAgent agent;
    private AgentPoller poller;
    private String servletName;
    private String serverName;

    public GridAgentWebapp() {
        // Complete
    }

    public void destroy() {
        try {
            LOGGER.info("destroying poller");
            agent.setClient(null);
            poller.destroy();
        } catch (Exception e) {
            LOGGER.warn("Exception destroying poller; " + e);
        }
    }

    public void init(ServletConfig config) throws ServletException {

        LOGGER.debug("---------------------------------------------");
        LOGGER.debug("Initializing Grid Agent");

        LOGGER.info("initialising agent");
        try {

            servletName = config.getServletContext().getServletContextName();
            serverName = config.getServletContext().getServerInfo();

            LOGGER.debug("\nConfiguration:\n");
            LOGGER.debug("  Name:              " + agent.getAgentName());
            LOGGER.debug("  ID:                " + agent.getAgentId());
            LOGGER.debug("  Profile:           " + agent.getProfile());
            LOGGER.debug("  Properties File:   " + agent.getDetailsPropertyFilePath());
            LOGGER.debug("  Max Features:      " + agent.getMaxFeatures());
            LOGGER.debug("  Link:              " + agent.getAgentLink());
            LOGGER.debug("  Package Types:     " + getAgentPackageTypes());
            LOGGER.debug("  Type:              " + agent.getContainerType());
            LOGGER.debug("  Install Directory: " + agent.getInstallDirectory());
            LOGGER.debug("  Repository URI:    " + gridClient.getRootUri());
            LOGGER.debug("  Agent Username:    " + gridClient.getUsername());
            LOGGER.debug("  Password Provider: " + gridClient.getPasswordProvider().getClass().getSimpleName());
            LOGGER.debug("  Polling Dealay:    " + poller.getInitialPollingDelay());
            LOGGER.debug("  Polling Period:    " + poller.getPollingPeriod());

            LOGGER.debug("\nGrid Agent Ready");
            LOGGER.debug("---------------------------------------------");
            LOGGER.debug("\n");
            //poller.start();

        } catch (Exception e) {
            LOGGER.error("Excepton " + e, e);
        }

    }

    public String getStatus() {
        // TODO this code is a bit sick! :)
        // its better to use a template engine instead for doing HTML representions!
        // see Jersey implicit views or the controller web application's HTML templates

        AgentDetails details = agent.getAgentDetails();
        StringBuilder sb = new StringBuilder().append("<html><head>\n").append("<link href=\"")
                .append(STYLESHEET_HREF).append("\" rel=\"stylesheet\" type=\"text/css\">\n").append("<title>")
                .append(servletName).append("</title>\n").append("</head>\n")
                .append("<body><img src=\"images/logo.gif\"/>\n").append("<h1>").append(servletName)
                .append("</h1>\n");
        try {
            sb.append("<h2>Properties</h2>\n").append("<table>\n")
                    .append("<tr><td><b>Agent Profile</b></td><td><i>\n").append(agent.getProfile())
                    .append("</i></td></tr>\n").append("<tr><td><b>Agent Host</b></td><td><i>\n")
                    .append(agent.getHostName()).append("</i></td></tr>\n")
                    .append("<tr><td><b>Agent OS</b></td><td><i>\n").append(details.getOs())
                    .append("</i></td></tr>\n").append("<tr><td><b>Agent PID</b></td><td><i>\n")
                    .append(details.getPid()).append("</i></td></tr>\n")
                    .append("<tr><td><b>Agent Link</b></td><td><i>\n").append(details.getAgentLink())
                    .append("</i></td></tr>\n").append("<tr><td><b>Agent Container</b></td><td><i>\n")
                    .append(details.getContainerType()).append("</i></td></tr>\n")
                    .append("<tr><td><b>Package types</b></td><td><i>\n");

            for (String packageType : details.getSupportPackageTypes()) {
                sb.append(packageType + " ");
            }
            sb.append("</i></td></tr>\n").append("<tr><td><b>Install Directory</b></td><td><i>")
                    .append(agent.getInstallDirectory()).append("</i></td></tr>\n")
                    .append("<tr><td><b>Temp Suffix</b></td><td><i>").append(agent.getTempSuffix())
                    .append("</i></td></tr>\n").append("<tr><td><b>Max Features</b></td><td><i>")
                    .append(agent.getMaxFeatures()).append("</i></td></tr>\n")
                    .append("<tr><td><b>Repository URI</b></td><td><i>").append(gridClient.getRootUri())
                    .append("</i></td></tr>\n").append("<tr><td><b>Polling Period</b></td><td><i>")
                    .append(poller.getPollingPeriod()).append("</i></td></tr>\n")
                    .append("<tr><td><b>Initial Polling Delay</b></td><td><i>")
                    .append(poller.getInitialPollingDelay()).append("</i></td></tr>\n").append("</table>\n")
                    .append("<h2>Features</h2>");

            Set<String> features = details.getCurrentFeatures();
            if (features == null || features.isEmpty()) {
                sb.append("<i>No features installed</i>\n");
            } else {
                sb.append("<table>\n");
                for (String f : features) {
                    sb.append("<tr><td valign=\"top\"><div id=\"application\">").append(f)
                            .append("</div></td><td><ul id=\"artifact\">");
                    for (Bundle bundle : agent.getFeatureBundles(f)) {
                        sb.append("<li>");
                        String name = bundle.getName();
                        if (name != null && !"".equals(name)) {
                            sb.append(name).append(", ");
                        }

                        String uri = bundle.getUri();
                        sb.append("<a href=\"").append(uri).append("\">").append(uri).append("</a>")
                                .append("</li>\n");
                    }
                    sb.append("</ul></td></tr>\n");
                }
                sb.append("</table>");
            }

            sb.append("<hr noshade><i>").append(serverName).append("</i></hr>\n");

            // TODO : add link for history?

        } catch (Exception e) {
            e.printStackTrace();
            sb.append("Error! " + e);
        }
        sb.append("</body>\n").append("</html>\n");

        return sb.toString();
    }

    public void setClient(RestGridClient gridclient) {
        this.gridClient = gridclient;
    }

    public synchronized RestGridClient getClient() {
        if (gridClient == null) {
            gridClient = new RestGridClient();
        }
        return gridClient;
    }

    public void setAgent(DirectoryInstallerAgent agent) {
        this.agent = agent;
    }

    public DirectoryInstallerAgent getAgent() {
        return agent != null ? agent : new DirectoryInstallerAgent();
    }

    public void setPoller(AgentPoller poller) {
        this.poller = poller;
    }

    private String getAgentPackageTypes() {
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for (String t : agent.getSupportPackageTypes()) {
            if (!first) {
                sb.append(", ");
            } else {
                first = false;
            }
            sb.append(t);
        }
        return sb.toString();
    }

}