Package com.odiago.flumebase.util

Source Code of com.odiago.flumebase.util.AppUtils

/**
* Licensed to Odiago, Inc. under one or more contributor license
* agreements.  See the NOTICE.txt file distributed with this work for
* additional information regarding copyright ownership.  Odiago, Inc.
* 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 com.odiago.flumebase.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import java.util.Properties;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.log4j.PropertyConfigurator;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Utility methods regarding application lifecycle management (startup,
* logging init, etc.)
*/
public final class AppUtils {
  private static final Logger LOG = LoggerFactory.getLogger(AppUtils.class.getName());

  /** System property that sets the path of the FlumeBase configuration. */
  private static final String FLUMEBASE_CONF_DIR_KEY = "flumebase.conf.dir";

  /** Environment variable that sets the path of the FlumeBase configuration. */
  private static final String FLUMEBASE_CONF_DIR_ENV = "FLUMEBASE_CONF_DIR";

  /** Environment variable that sets the path of the FlumeBase installation "home". */
  private static final String FLUMEBASE_HOME_ENV = "FLUMEBASE_HOME";

  private AppUtils() { }

  /**
   * Initialize slf4j / log4j for the application.
   */
  public static void initLogging() {
    String confDir = getAppConfDir();
    File confDirFile = new File(confDir);
    File log4jPropertyFile = new File(confDirFile, "log4j.properties");
    FileInputStream fis = null;
    try {
      // Load the properties from the file first.
      fis = new FileInputStream(log4jPropertyFile);
      Properties props = new Properties();
      props.load(fis);

      // Overlay the system properties on top of the file, in case the
      // user wants to override the file settings at invocation time.
      Properties sysProps = System.getProperties();
      props.putAll(sysProps);
      PropertyConfigurator.configure(props);
      LOG.debug("Logging enabled.");
    } catch (IOException ioe) {
      System.err.println("IOException encoutered while initializing logging.");
      System.err.println("The logging system might not be ready, meaning you");
      System.err.println("might miss many other messages. Do you have an");
      System.err.println("etc/log4j.properties file in this installation?");
      System.err.println("Specific exception follows:");
      System.err.println(ioe);
    } finally {
      if (null != fis) {
        try {
          fis.close();
        } catch (IOException ioe) {
          LOG.warn("Exception closing log4j.properties file: " + ioe);
        }
      }
    }
  }

  /**
   * @return the home directory for this application installation.
   * This is taken from $FLUMEBASE_HOME. Returns null if this is not set.
   */
  public static String getAppHomeDir() {
    String homeEnv = System.getenv(FLUMEBASE_HOME_ENV);
    if (null != homeEnv) {
      File homeFile = new File(homeEnv);
      return homeFile.getAbsolutePath();
    } else {
      return null;
    }
  }

  /**
   * @return the configuration directory for this application.
   * This is one of the following, in order:
   * <ol>
   *   <li>${flumebase.conf.dir} (System property)</li>
   *   <li>$FLUMEBASE_CONF_DIR</li>
   *   <li>$FLUMEBASE_HOME/etc</li>
   *   <li>(current dir)</li>
   * </ol>
   */
  public static String getAppConfDir() {
    String flumebaseConfDir = System.getProperty(FLUMEBASE_CONF_DIR_KEY, null);
    if (null == flumebaseConfDir) {
      flumebaseConfDir = System.getenv(FLUMEBASE_CONF_DIR_ENV);
    }

    if (null != flumebaseConfDir) {
      File confFile = new File(flumebaseConfDir);
      return confFile.getAbsolutePath();
    }

    // Infer from application home dir.
    String homeDir = getAppHomeDir();
    if (null != homeDir) {
      // return $FLUMEBASE_HOME/etc.
      File homeFile = new File(homeDir);
      return new File(homeFile, "etc").getAbsolutePath();
    }

    return ".";
  }

  /**
   * @return a Configuration with the appropriate flumebase-site.xml file added.
   * Should be used as the base Configuration for the program.
   */
  public static Configuration initConfResources() {
    String flumebaseConfFile = new File(getAppConfDir(), "flumebase-site.xml").toString();
    LOG.debug("Initializing configuration from " + flumebaseConfFile);
    Configuration conf = new Configuration();
    conf.addResource(new Path(flumebaseConfFile));
    return conf;
  }
}
TOP

Related Classes of com.odiago.flumebase.util.AppUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.