org.perf.log.logger.PerfLogData.java Source code

Java tutorial

Introduction

Here is the source code for org.perf.log.logger.PerfLogData.java

Source

/*******************************************************************************
 * Copyright 2012 Pradeep Nambiar,  Pexus LLC
 * 
 * Source File: src/org/perf/log/logger/PerfLogData.java 
 * 
 * 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 org.perf.log.logger;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Date;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.perf.log.context.PerfLogContext;
import org.perf.log.txn.types.PerfLogTxnClass;

public class PerfLogData implements Externalizable {
    public PerfLogData() {
        super();
        // TODO Auto-generated constructor stub
    }

    public PerfLogData(PerfLogContext perfLogContext) {
        super();

        // fill in perfLogData with common elements from perfLogContext
        if (perfLogContext != null) {
            setUserId(perfLogContext.getUserId());
            setCloneName(perfLogContext.getJvmCloneId());
            setGuid(perfLogContext.getGuid());
            setSessionId(perfLogContext.getRequestSessionId());
            setThreadName(perfLogContext.getThreadName());
            setPerfLogContext(perfLogContext);
            setServerIp(perfLogContext.getHostIp());
            setServerName(perfLogContext.getHostId());
            setJvmDepth(perfLogContext.getJvmDepth());
            setTxnFilterDepth(perfLogContext.getTxnFilterDepth());
            setThreadId(perfLogContext.getThreadId());
            setInfoContextString(perfLogContext.getInfoContextString());
        } else
            setPerfLogContext(null);

    }

    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    private final static Logger logger = LoggerFactory.getLogger("PerfLogData");
    String guid = null;
    String sessionId = null;
    String threadName = null;
    String threadId = null;
    Date transactionDate = null;
    String serverName = null;
    String serverIp = null;
    String cloneName = null;
    int jvmDepth = 0;
    int txnFilterDepth = 0;
    String transactionType = null;
    String userId = null;
    String transactionName = null;
    String subTransactionName = null;
    String transactionClass = null;
    long transactionTime = 0;
    String message = null;
    String infoContextString = null;
    String throwableClassName = null;
    String throwableMessage = null;
    PerfLogContext perfLogContext = null;
    Throwable throwable = null; // set if there was an exception otherwise null.

    public String getGuid() {
        return guid;
    }

    public void setGuid(String guid) {
        this.guid = guid;
    }

    public Date getTransactionDate() {
        return transactionDate;
    }

    public void setTransactionDate(Date transactionDate) {
        this.transactionDate = transactionDate;
    }

    public String getServerName() {
        return serverName;
    }

    public void setServerName(String serverName) {
        this.serverName = serverName;
    }

    public String getCloneName() {
        return cloneName;
    }

    public void setCloneName(String cloneName) {
        this.cloneName = cloneName;
    }

    public String getTransactionType() {
        return transactionType;
    }

    public void setTransactionType(String transactionType) {
        this.transactionType = transactionType;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getTransactionName() {
        return transactionName;
    }

    public void setTransactionName(String transactionName) {
        this.transactionName = transactionName;
    }

    public String getSubTransactionName() {
        return subTransactionName;
    }

    public void setSubTransactionName(String subTransactionName) {
        this.subTransactionName = subTransactionName;
    }

    public long getTransactionTime() {
        return transactionTime;
    }

    public void setTransactionTime(long transactionTime) {
        this.transactionTime = transactionTime;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setPerfLogContext(PerfLogContext perfLogContext) {
        this.perfLogContext = perfLogContext;
        if (perfLogContext != null) {
            // extract the infoContext String plus additional details not available
            // in the log data that would be useful
            setInfoContextString(perfLogContext.getInfoContextString());
        }
    }

    public Throwable getThrowable() {
        return throwable;
    }

    public void setThrowable(Throwable throwable) {
        this.throwable = throwable;
        if (throwable != null) {
            setThrowableClassName(throwable.getClass().getCanonicalName());
            setThrowableMessage(throwable.getMessage());
        }
    }

    public String getSessionId() {
        return sessionId;
    }

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    private String readStr(ObjectInput in) {
        // read length
        try {
            int len = in.readInt();
            if (len == 0)
                return null;
            else
                return (String) in.readObject();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    private void writeStr(String outStr, ObjectOutput out) {
        try {
            if (outStr != null) {
                out.writeInt(outStr.length());
                out.writeObject(outStr);
            } else {
                out.writeInt(0);
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        setTransactionTime(in.readLong());
        setGuid(readStr(in));
        setSessionId(readStr(in));
        setThreadName(readStr(in));
        setThreadId(readStr(in));
        setTransactionDate(new Date(in.readLong()));
        setServerName(readStr(in));
        setServerIp(readStr(in));
        setCloneName(readStr(in));
        setJvmDepth(in.readInt());
        setTxnFilterDepth(in.readInt());
        setTransactionType(readStr(in));
        setUserId(readStr(in));
        setTransactionName(readStr(in));
        setSubTransactionName(readStr(in));
        setTransactionClass(readStr(in));
        setInfoContextString(readStr(in));
        setMessage(readStr(in));
        setThrowableClassName(readStr(in));
        setThrowableMessage(readStr(in));
        // add any required PerfLogContext data

    }

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        // write out the desired fields
        out.writeLong(getTransactionTime());
        writeStr(getGuid(), out);
        writeStr(getSessionId(), out);
        writeStr(getThreadName(), out);
        writeStr(getThreadId(), out);
        if (getTransactionDate() != null)
            out.writeLong(getTransactionDate().getTime());
        else
            out.writeLong(new Date().getTime());

        writeStr(getServerName(), out);
        writeStr(getServerIp(), out);
        writeStr(getCloneName(), out);
        out.writeInt(getJvmDepth());
        out.writeInt(getTxnFilterDepth());
        writeStr(getTransactionType(), out);
        writeStr(getUserId(), out);
        writeStr(getTransactionName(), out);
        writeStr(getSubTransactionName(), out);
        writeStr(getTransactionClass(), out);
        writeStr(getInfoContextString(), out);
        writeStr(getMessage(), out);
        writeStr(getThrowableClassName(), out);
        writeStr(getThrowableMessage(), out);
    }

    @SuppressWarnings("unchecked")
    public String toJSON() {

        JSONObject obj = new JSONObject();
        obj.put("txnDate", new Long(getTransactionDate().getTime()));
        obj.put("txnTime", new Long(getTransactionTime()));
        obj.put("guid", getGuid());
        obj.put("sid", getSessionId());
        obj.put("threadName", getThreadName());
        obj.put("threadId", getThreadId());
        obj.put("cloneName", getCloneName());
        obj.put("jvmDepth", new Integer(getJvmDepth()));
        obj.put("txnFilterDepth", new Integer(getTxnFilterDepth()));
        obj.put("serverName", getServerName());
        obj.put("serverIp", getServerIp());
        obj.put("userid", getUserId());
        obj.put("txnName", getTransactionName());
        obj.put("subTxnName", getSubTransactionName());
        obj.put("txnClass", getTransactionClass());
        obj.put("txnType", getTransactionType());
        obj.put("infoCtxStr", getInfoContextString());
        obj.put("message", getMessage());
        obj.put("throwableClass", getThrowableClassName());
        obj.put("throwableMessage", getThrowableMessage());
        return obj.toJSONString();

    }

    /**
     * @return the infoContextString
     */
    public String getInfoContextString() {
        return infoContextString;
    }

    /**
     * @param infoContextString the infoContextString to set
     */
    protected void setInfoContextString(String infoContextString) {
        this.infoContextString = infoContextString;
    }

    /**
     * @return the throwableClassName
     */
    public String getThrowableClassName() {
        return throwableClassName;
    }

    /**
     * @param throwableClassName the throwableClassName to set
     */
    public void setThrowableClassName(String throwableClassName) {
        this.throwableClassName = throwableClassName;
    }

    /**
     * @return the throwableMessage
     */
    public String getThrowableMessage() {
        return throwableMessage;
    }

    /**
     * @param throwableMessage the throwableMessage to set
     */
    public void setThrowableMessage(String throwableMessage) {
        this.throwableMessage = throwableMessage;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        // A short version of perf data suitable for writing to 
        // log file when exceptions happen
        StringBuffer buf = new StringBuffer();

        buf.append("PERFLOG");
        if (getThrowable() != null) {
            buf.append("(FAILURE=");
            buf.append(getThrowable().getMessage());
            buf.append(")");
        } else
            buf.append("(SUCCESS)");

        buf.append(" :txnType=");
        buf.append(getTransactionType());
        buf.append(" :txnTime=");
        buf.append(getTransactionTime());
        buf.append(" msec");
        buf.append(LINE_SEPARATOR);
        return buf.toString();
    }

    // convert perf log data suitable for writing to console or file
    public String getFullFormatedPerfDataStr() {

        StringBuffer buf = new StringBuffer();
        buf.append("PERFLOG");
        if (getThrowable() != null) {
            buf.append("(FAILURE=");
            buf.append(getThrowableClassName() + ": " + getThrowableMessage());
            buf.append(")");
        } else
            buf.append("(SUCCESS)");
        buf.append(" :txnType=" + getTransactionType());
        buf.append(" :txnDate=" + getTransactionDate());
        buf.append(" :txnTime=" + getTransactionTime());
        buf.append(" :userId=" + getUserId());
        buf.append(" :guid=" + getGuid());
        buf.append(" :sessionId=" + getSessionId());
        buf.append(" :threadName=" + getThreadName());
        buf.append(" :threadId=" + getThreadId());
        buf.append(" :serverName=" + getServerName());
        buf.append(" :serverIp=" + getServerIp());
        buf.append(" :cloneName=" + getCloneName());
        buf.append(" :jvmDepth=" + getJvmDepth());
        buf.append(" :txnFilterDepth=" + getTxnFilterDepth());
        buf.append(" :txnName=" + getTransactionName());
        buf.append(" :subTxnName=" + getSubTransactionName());
        buf.append(" :txnClass=" + getTransactionClass());
        buf.append(LINE_SEPARATOR);
        buf.append(" :infoCtxStr=" + getInfoContextString());
        buf.append(LINE_SEPARATOR);
        buf.append(" :message=" + getMessage());

        return buf.toString();

    }

    /**
     * @return the serverIp
     */
    public String getServerIp() {
        return serverIp;
    }

    /**
     * @param serverIp the serverIp to set
     */
    public void setServerIp(String serverIp) {
        this.serverIp = serverIp;
    }

    // This method takes a JSON message string creates a PerfLogData object
    public static PerfLogData fromJSON(String messageContent) {
        PerfLogData perfLogData = new PerfLogData();
        JSONObject perfLogDataJSONObj = null;
        // deserialize the JSON Object
        JSONParser parser = new JSONParser();

        try {
            if (messageContent != null) {
                perfLogDataJSONObj = (JSONObject) parser.parse(messageContent);

                // transactionStart
                if (perfLogDataJSONObj.get("txnDate") != null) {
                    java.util.Date timeStamp = new java.util.Date(
                            ((Long) perfLogDataJSONObj.get("txnDate")).longValue());
                    perfLogData.setTransactionDate(new java.sql.Timestamp(timeStamp.getTime()));
                } else
                    perfLogData.setTransactionDate(null);

                // GUID
                if (perfLogDataJSONObj.get("guid") != null) {
                    perfLogData.setGuid(perfLogDataJSONObj.get("guid").toString());
                } else
                    perfLogData.setGuid(null);

                // SID (Session ID)
                if (perfLogDataJSONObj.get("sid") != null) {
                    perfLogData.setSessionId(perfLogDataJSONObj.get("sid").toString());
                } else
                    perfLogData.setSessionId(null);

                // THREAD_NAME
                if (perfLogDataJSONObj.get("threadName") != null) {
                    perfLogData.setThreadName(perfLogDataJSONObj.get("threadName").toString());
                } else
                    perfLogData.setThreadName(null);

                // THREAD_ID
                if (perfLogDataJSONObj.get("threadId") != null) {
                    perfLogData.setThreadId(perfLogDataJSONObj.get("threadId").toString());
                } else
                    perfLogData.setThreadId(null);

                // cloneName (InstanceName)
                if (perfLogDataJSONObj.get("cloneName") != null) {
                    perfLogData.setCloneName(perfLogDataJSONObj.get("cloneName").toString());
                } else
                    perfLogData.setCloneName(null);

                // jvmDepth
                if (perfLogDataJSONObj.get("jvmDepth") != null) {
                    perfLogData.setJvmDepth(((Integer) (perfLogDataJSONObj.get("jvmDepth"))).intValue());
                } else
                    perfLogData.setJvmDepth(0);

                // txnFilterDepth
                if (perfLogDataJSONObj.get("txnFilterDepth") != null) {
                    perfLogData
                            .setTxnFilterDepth(((Integer) (perfLogDataJSONObj.get("txnFilterDepth"))).intValue());
                } else
                    perfLogData.setTxnFilterDepth(0);

                // serverName
                if (perfLogDataJSONObj.get("serverName") != null) {
                    perfLogData.setServerName(perfLogDataJSONObj.get("serverName").toString());
                } else
                    perfLogData.setServerName(null);

                // serverIp
                if (perfLogDataJSONObj.get("serverIp") != null) {
                    perfLogData.setServerIp(perfLogDataJSONObj.get("serverIp").toString());
                } else
                    perfLogData.setServerIp(null);

                // userId
                if (perfLogDataJSONObj.get("userid") != null) {
                    perfLogData.setUserId(perfLogDataJSONObj.get("userid").toString());
                } else
                    perfLogData.setUserId(null);

                // pageId
                if (perfLogDataJSONObj.get("txnName") != null) {
                    perfLogData.setTransactionName(perfLogDataJSONObj.get("txnName").toString());
                } else
                    perfLogData.setTransactionName(null);

                // action
                if (perfLogDataJSONObj.get("subTxnName") != null) {
                    perfLogData.setSubTransactionName(perfLogDataJSONObj.get("subTxnName").toString());
                } else
                    perfLogData.setSubTransactionName(null);

                // txnClass
                if (perfLogDataJSONObj.get("txnClass") != null) {
                    perfLogData.setTransactionClass(perfLogDataJSONObj.get("txnClass").toString());
                } else
                    perfLogData.setTransactionClass(null);

                // transactionTimeInMilliSeconds
                if (perfLogDataJSONObj.get("txnTime") != null) {
                    perfLogData.setTransactionTime(((Long) perfLogDataJSONObj.get("txnTime")).longValue());
                } else
                    perfLogData.setTransactionTime(0);

                // get throwableMessage and throwableClass
                String throwableMessage = (String) perfLogDataJSONObj.get("throwableMessage");
                perfLogData.setThrowableMessage(throwableMessage);
                perfLogData.setThrowableClassName((String) perfLogDataJSONObj.get("throwableClass"));
                // Transaction Type
                perfLogData.setTransactionType((String) perfLogDataJSONObj.get("txnType"));
                // InfoContext String
                perfLogData.setInfoContextString((String) perfLogDataJSONObj.get("infoCtxStr"));

                // Message String
                perfLogData.setMessage((String) perfLogDataJSONObj.get("message"));

            }
        } catch (ParseException parseException) {
            logger.error("JSON Parser Exception" + parseException.getMessage());
            // parseException.printStackTrace();

        }
        return perfLogData;
    }

    public String getThreadName() {
        return threadName;
    }

    public void setThreadName(String threadName) {
        this.threadName = threadName;
    }

    public String getTransactionClass() {
        if (transactionClass != null)
            return transactionClass;
        else
            return PerfLogTxnClass.getTxnClassFromTransactionType(this);
    }

    public void setTransactionClass(String transactionClass) {
        this.transactionClass = transactionClass;
    }

    public String getThreadId() {
        return threadId;
    }

    public void setThreadId(String threadId) {
        this.threadId = threadId;
    }

    public int getJvmDepth() {
        return jvmDepth;
    }

    public void setJvmDepth(int jvmDepth) {
        this.jvmDepth = jvmDepth;
    }

    public int getTxnFilterDepth() {
        return txnFilterDepth;
    }

    public void setTxnFilterDepth(int txnFilterDepth) {
        this.txnFilterDepth = txnFilterDepth;
    }

}