/* * Licensed to the Apache Software Foundation (ASF) under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional information regarding * copyright ownership. The ASF 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 org.apache.geode.management.internal; import org.apache.geode.distributed.internal.DistributionConfig; import org.apache.geode.internal.lang.StringUtils; import org.apache.geode.internal.logging.LogService; import org.apache.logging.log4j.Logger; import java.io.File; import java.net.URL; /** * Hosts common utility methods needed by the management package * * @since Geode 1.0.0.0 * */ public class AgentUtil { private static final Logger logger = LogService.getLogger(); public static final String ERROR_VARIABLE_NOT_SET = "The GEODE_HOME environment variable must be set!"; private String gemfireVersion = null; public AgentUtil(String gemfireVersion) { this.gemfireVersion = gemfireVersion; } /** * this method will try to find the named war files in the following order: 1. if GEODE_HOME is * defined, it will look under tools/Extensions, tools/Pulse and lib folder (in this order) to * find either the name-version.war or the name.war file 2. If GEODE_HOME is not defined, it will * try to find either the name-version.war/name.war (in that order) on the classpath * * @param warFilePrefix : the prefix of the war file, e.g. geode-web, geode-pulse, or * geode-web-api */ public String findWarLocation(String warFilePrefix) { String geodeHome = getGeodeHome(); if (!StringUtils.isBlank(geodeHome)) { String[] possibleFiles = {geodeHome + "/tools/Extensions/" + warFilePrefix + "-" + gemfireVersion + ".war", geodeHome + "/tools/Pulse/" + warFilePrefix + "-" + gemfireVersion + ".war", geodeHome + "/lib/" + warFilePrefix + "-" + gemfireVersion + ".war", geodeHome + "/tools/Extensions/" + warFilePrefix + ".war", geodeHome + "/tools/Pulse/" + warFilePrefix + ".war", geodeHome + "/lib/" + warFilePrefix + ".war"}; for (String possibleFile : possibleFiles) { if (new File(possibleFile).isFile()) { logger.info(warFilePrefix + " war found: {}", possibleFile); return possibleFile; } } } // if $GEODE_HOME is not set or we are not able to find it in all the possible locations under // $GEODE_HOME, try to // find in the classpath String[] possibleFiles = {warFilePrefix + "-" + gemfireVersion + ".war", "tools/Pulse/" + warFilePrefix + "-" + gemfireVersion + ".war", "tools/Extensions/" + warFilePrefix + "-" + gemfireVersion + ".war", "lib/" + warFilePrefix + "-" + gemfireVersion + ".war", warFilePrefix + ".war"}; for (String possibleFile : possibleFiles) { URL url = this.getClass().getClassLoader().getResource(possibleFile); if (url != null) { // found the war file logger.info(warFilePrefix + " war found: {}", possibleFile); return url.getPath(); } } // we still couldn't find the war file logger.warn(warFilePrefix + " war file was not found"); return null; } public boolean isWebApplicationAvailable(final String warFileLocation) { return !StringUtils.isBlank(warFileLocation); } public boolean isWebApplicationAvailable(final String... warFileLocations) { for (String warFileLocation : warFileLocations) { if (isWebApplicationAvailable(warFileLocation)) { return true; } } return false; } public String getGeodeHome() { String geodeHome = System.getenv("GEODE_HOME"); logger.info("GEODE_HOME:" + geodeHome); // Check for empty variable. if empty, then log message and exit HTTP server // startup if (StringUtils.isBlank(geodeHome)) { geodeHome = System.getProperty(DistributionConfig.GEMFIRE_PREFIX + "home"); logger.info("Reading gemfire.home System Property -> {}", geodeHome); if (StringUtils.isBlank(geodeHome)) { logger.info("GEODE_HOME environment variable not set; HTTP service will not start."); geodeHome = null; } } return geodeHome; } public boolean isGemfireHomeDefined() { String gemfireHome = getGeodeHome(); return !StringUtils.isBlank(gemfireHome); } }