blob: a302d548d8f49aa9bebf759478bb14144f4227f8 [file] [log] [blame]
/*
* 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 flex.messaging.messages;
import java.io.Serializable;
/**
* The MessagePerformanceInfo class is used to capture various metrics about
* the sizing and timing of a message sent from a client to the server and its
* response message, as well as pushed messages from the server to the client.
* A response message should have two instances of this class among its headers,
* headers[MPII] - info for the client to server message,
* headers[MPIO] - info for the response message from server to client.
* A pushed message will have an extra headers and its headers will represent,
* headers[MPII] - info for the client to server message poll message (non RTMP)
* headers[MPIO] - info for the pushed message from server to client,
* headers[MPIP] - info for the message from the client that caused the push message
* <p>
* It has a symmetric AS counterpart - MessagePerformanceInfo.as
*/
public class MessagePerformanceInfo implements Serializable, Cloneable {
private static final long serialVersionUID = -8556484221291213962L;
/**
* Size of message in Bytes (message types depends on what header this MPI is in)
*/
public long messageSize;
/**
* Millisecond timestamp of when this message was sent
* (origin depends on on what header this MPI is in)
*/
public long sendTime;
/**
* Millisecond timestamp of when this message was received
* (destination depends on on what header this MPI is in)
*/
public long receiveTime;
/**
* Amount of time in milliseconds that this message was being processed on the server
* in order to calculate and populate MPI metrics
*/
public long overheadTime;
/**
* "OUT" when this message originated on the server
*/
public String infoType;
/**
* True if this is info for a message that was pushed from server to client
*/
public boolean pushedFlag;
/**
* Flag is true when record-message-sizes is enabled for the communication channel
*/
public boolean recordMessageSizes;
/**
* Flag is true when record-message-times is enabled for the communication channel
*/
public boolean recordMessageTimes;
/**
* Millisecond timestamp of when the server became ready to push this message out
* to clients
*/
public long serverPrePushTime;
/**
* Millisecond timestamp of when the server called into the adapter associated with the
* destination of this message
*/
public long serverPreAdapterTime;
/**
* Millisecond timestamp of when server processing returned from the adapater associated
* with the destination of this message
*/
public long serverPostAdapterTime;
/**
* Millisecond timestamp of when the adapter associated with the destination of this message
* made a call to an external component (for example a JMS server)
*/
public long serverPreAdapterExternalTime;
/**
* Millisecond timestamp of when processing came back to the adapter associated with the destination
* of this message from a call to an external component (for example a JMS server)
*/
public long serverPostAdapterExternalTime;
/**
* Copies the immutable fields of this MPI isntance over to create a new one
*
* @return cloned instance of this MessagePerformanceInfo instance
*/
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
// This cannot happen since the super class is Object but since
// the exception has to be caught anyway, code is left in
MessagePerformanceInfo mpii = new MessagePerformanceInfo();
mpii.messageSize = this.messageSize;
mpii.sendTime = this.sendTime;
mpii.receiveTime = this.receiveTime;
mpii.overheadTime = this.overheadTime;
mpii.serverPrePushTime = this.serverPrePushTime;
mpii.serverPreAdapterTime = this.serverPreAdapterTime;
mpii.serverPostAdapterTime = this.serverPostAdapterTime;
mpii.serverPreAdapterExternalTime = this.serverPreAdapterExternalTime;
mpii.serverPostAdapterExternalTime = this.serverPostAdapterExternalTime;
mpii.recordMessageSizes = this.recordMessageSizes;
mpii.recordMessageTimes = this.recordMessageTimes;
return mpii;
}
}
/**
* Increase the overhead counter for this MPI
*
* @param overhead Increment size in milliseconds
*/
public void addToOverhead(long overhead) {
overheadTime += overhead;
}
/**
* Default constructor
*/
public MessagePerformanceInfo() {
}
}