azkaban.webapp.servlet.ExternalAnalyzerUtils.java Source code

Java tutorial

Introduction

Here is the source code for azkaban.webapp.servlet.ExternalAnalyzerUtils.java

Source

/*
 * Copyright 2016 LinkedIn Corp.
 *
 * 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 azkaban.webapp.servlet;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import azkaban.utils.Props;

public final class ExternalAnalyzerUtils {
    private static final Logger LOGGER = Logger.getLogger(ExternalAnalyzerUtils.class.getName());
    public static final String EXECUTION_EXTERNAL_LINK_URL = "execution.external.link.url";
    public static final String EXECUTION_EXTERNAL_LINK_LABEL = "execution.external.link.label";

    private ExternalAnalyzerUtils() {

    }

    /**
     * Gets an external analyzer URL if configured in 'azkaban.properties'.
     * 
     * @param props    The props to be set to get the external analyzer URL. 
     *                 
     * @param req      The <code>HttpServletRequest</code> requesting the page.
     * 
     * @return         Returns an external analyzer URL.
     */
    public static String getExternalAnalyzer(Props props, HttpServletRequest req) {
        String url = props.getString(EXECUTION_EXTERNAL_LINK_URL, "");
        int index = url.indexOf('%');

        if (StringUtils.isNotEmpty(url) && index != -1) {
            String pattern = url.substring(url.indexOf('%'), url.length());

            switch (pattern) {
            case "%url":
                return buildExternalAnalyzerURL(req, url, pattern);
            default:
                LOGGER.error("Pattern configured is not supported. "
                        + "Please check the comments section in 'azkaban.properties' " + "for supported patterns.");
                return "";
            }
        }
        LOGGER.debug("An optional external analyzer is not configured.");
        return "";
    }

    private static String buildExternalAnalyzerURL(HttpServletRequest req, String url, String pattern) {
        StringBuilder builder = new StringBuilder();
        builder.append(req.getRequestURL());
        builder.append("?");
        builder.append(req.getQueryString());
        String flowExecutionURL = builder.toString();
        String encodedFlowExecUrl = "";
        try {
            encodedFlowExecUrl = URLEncoder.encode(flowExecutionURL, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            LOGGER.error("Specified encoding is not supported", e);
        }
        return url.replaceFirst(pattern, encodedFlowExecUrl);
    }
}