com.meltmedia.cadmium.cli.StatusCommand.java Source code

Java tutorial

Introduction

Here is the source code for com.meltmedia.cadmium.cli.StatusCommand.java

Source

/**
 *    Copyright 2012 meltmedia
 *
 *    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.meltmedia.cadmium.cli;

import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.meltmedia.cadmium.core.MavenVector;
import com.meltmedia.cadmium.status.Status;
import com.meltmedia.cadmium.status.StatusMember;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.core.MediaType;
import java.util.List;

/**
 * Displays the status information from a Cadmium site.
 * 
 * @author Brian Barr
 * @author John McEntire
 *
 */
@Parameters(commandDescription = "Displays status info for a site")
public class StatusCommand extends AbstractAuthorizedOnly implements CliCommand {

    private final Logger log = LoggerFactory.getLogger(getClass());

    @Parameter(description = "<site>", required = true)
    private List<String> site;

    public static final String JERSEY_ENDPOINT = "/system/status";

    public void execute() throws Exception {
        if (site.size() != 1) {
            System.err.println("Please specify a url");
            System.exit(1);
        }
        String siteUrl = getSecureBaseUrl(site.get(0));
        Status statusObj = getSiteStatus(siteUrl, token);
        if (statusObj != null) {
            List<StatusMember> members = statusObj.getMembers();

            log.debug(statusObj.toString());

            System.out.println();
            System.out.println("Current status for [" + siteUrl + "]");
            System.out.println("-----------------------------------------------------");
            System.out.print("Environment      => [" + statusObj.getEnvironment() + "]\n"
                    + (StringUtils.isNotBlank(statusObj.getRepo())
                            ? "Repo URL         => [" + statusObj.getRepo() + "]\n"
                            : "")
                    + "Branch           => [" + statusObj.getBranch() + "]\n" + "Revision         => ["
                    + statusObj.getRevision() + "]\n"
                    + (StringUtils.isNotBlank(statusObj.getConfigRepo())
                            ? "Config Repo URL  => [" + statusObj.getConfigRepo() + "]\n"
                            : "")
                    + "Config Branch    => [" + statusObj.getConfigBranch() + "]\n" + "Config Revision  => ["
                    + statusObj.getConfigRevision() + "]\n" + "Content Source   => [\n" + statusObj.getSource()
                    + "]\n" + "Maint Page State => [" + statusObj.getMaintPageState() + "]\n");
            if (StringUtils.isNotBlank(statusObj.getCadmiumVersion())) {
                System.out.println("Cadmium Version  => [" + statusObj.getCadmiumVersion() + "]\n");
            } else {
                System.out.println();
            }
            if (members != null) {
                System.out.println();
                System.out.println("Member States:\n");
                System.out.println("-----------------------------------------------------");
                for (StatusMember member : members) {
                    System.out.println("   External IP     : [" + member.getExternalIp() + "]\n"
                            + "   Address         : [" + member.getAddress() + "]\n" + "   Is Coordinator? : ["
                            + member.isCoordinator() + "]\n" + "   State           : [" + member.getState() + "]\n"
                            + "   Config State    : [" + member.getConfigState() + "]\n" + "   Is Me?          : ["
                            + member.isMine() + "]");
                    if (member.getWarInfo() != null) {
                        System.out.println("   War File Name   : [" + member.getWarInfo().getWarName() + "]\n"
                                + "   Domain          : [" + member.getWarInfo().getDomain() + "]\n"
                                + "   Context         : [" + member.getWarInfo().getContext() + "]\n"
                                + "   Content Repo    : [" + member.getWarInfo().getRepo() + "]\n"
                                + "   Content Branch  : [" + member.getWarInfo().getContentBranch() + "]\n"
                                + "   Config Repo     : [" + member.getWarInfo().getConfigRepo() + "]\n"
                                + "   Config Branch   : [" + member.getWarInfo().getConfigBranch() + "]");
                        if (member.getWarInfo().getArtifacts() != null) {
                            System.out.print("   Artifact        : [");
                            boolean first = true;
                            for (MavenVector mvn : member.getWarInfo().getArtifacts()) {
                                System.out.print((!first ? ", " : "") + mvn.getGroupId() + ":" + mvn.getArtifactId()
                                        + ":war:" + mvn.getVersion());
                                first = false;
                            }
                            System.out.println("]");
                        }
                    }
                    System.out.println();
                }
            }
        } else {
            System.out.println("No status returned.");
        }

    }

    @Override
    public String getCommandName() {
        return "status";
    }

    /**
     * Retrieves the status of a Cadmium site into a {@link Status} Object.
     * 
     * @param site The site uri of the Cadmium site to get the status from.
     * @param token The Github API token used for authenticating the request.
     * @return
     * @throws Exception
     */
    public static Status getSiteStatus(String site, String token) throws Exception {
        HttpClient client = httpClient();

        HttpGet get = new HttpGet(site + StatusCommand.JERSEY_ENDPOINT);
        addAuthHeader(token, get);

        HttpResponse response = client.execute(get);
        HttpEntity entity = response.getEntity();
        if (entity.getContentType().getValue().equals(MediaType.APPLICATION_JSON)) {
            String responseContent = EntityUtils.toString(entity);
            return new Gson().fromJson(responseContent, new TypeToken<Status>() {
            }.getType());
        }
        return null;
    }

}