Package com.springsource.insight.plugin.servlet

Source Code of com.springsource.insight.plugin.servlet.HttpStatusTraceErrorAnalyzer

/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* 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.springsource.insight.plugin.servlet;

import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationFields;
import com.springsource.insight.intercept.operation.OperationMap;
import com.springsource.insight.intercept.operation.OperationType;
import com.springsource.insight.intercept.trace.AbstractTraceErrorAnalyzer;
import com.springsource.insight.intercept.trace.Frame;
import com.springsource.insight.intercept.trace.TraceError;
import com.springsource.insight.util.StringUtil;

public class HttpStatusTraceErrorAnalyzer extends AbstractTraceErrorAnalyzer {
    private static final TraceError contextNotAvailableError = new TraceError("Context not available");
    private static final HttpStatusTraceErrorAnalyzer INSTANCE = new HttpStatusTraceErrorAnalyzer();
    public static final String STATUS_CODE_ATTR = "statusCode", REASON_PHRASE_ATTR = "reasonPhrase";

    private HttpStatusTraceErrorAnalyzer() {
        super(OperationType.HTTP);
    }

    public static final HttpStatusTraceErrorAnalyzer getInstance() {
        return INSTANCE;
    }

    @Override
    public TraceError locateFrameError(Frame httpFrame) {
        Operation op = httpFrame.getOperation();
        OperationMap response = op.get("response", OperationMap.class);

        int statusCode = (response == null) ? (-1) : response.getInt(STATUS_CODE_ATTR, (-1));
        if ((statusCode >= 0) && httpStatusIsError(statusCode)) {
            return new TraceError(createErrorMessage(statusCode, response.get(REASON_PHRASE_ATTR, String.class)));
        }

        OperationMap request = op.get("request", OperationMap.class);
        Boolean contextAvailable = (request == null) ? null : request.get(OperationFields.CONTEXT_AVAILABLE, Boolean.class);
        if ((contextAvailable != null) && (!contextAvailable.booleanValue())) {
            return contextNotAvailableError;
        } else {
            return null;
        }
    }

    // TODO make this a general utility
    static String createErrorMessage(int statusCode, String reasonPhrase) {
        if (StringUtil.isEmpty(reasonPhrase)) {
            return String.valueOf("Status code = " + statusCode);
        } else {
            return String.valueOf(statusCode) + " " + reasonPhrase;
        }
    }

    // TODO make this a general utility
    static boolean httpStatusIsError(int status) {
        return (status < 100) || (status >= 400);
    }
}
TOP

Related Classes of com.springsource.insight.plugin.servlet.HttpStatusTraceErrorAnalyzer

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.