blob: dc89ee268517a8312eee358a40d005b73a874537 [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.management.runtime.messaging.services.messaging;
import flex.management.BaseControl;
import flex.management.runtime.AdminConsoleTypes;
import flex.messaging.services.messaging.ThrottleManager;
import java.util.Date;
/**
* The <code>ThrottleManagerControl</code> class is the MBean implementation for
* monitoring and managing a <code>ThrottleManager</code> at runtime.
*/
public class ThrottleManagerControl extends BaseControl implements
ThrottleManagerControlMBean
{
private ThrottleManager throttleManager;
private long clientIncomingMessageThrottleStart;
private int clientIncomingMessageThrottleCount;
private Date lastClientIncomingMessageThrottleTimestamp;
private long clientOutgoingMessageThrottleStart;
private int clientOutgoingMessageThrottleCount;
private Date lastClientOutgoingMessageThrottleTimestamp;
private long destinationIncomingMessageThrottleStart;
private int destinationIncomingMessageThrottleCount;
private Date lastDestinationIncomingMessageThrottleTimestamp;
private long destinationOutgoingMessageThrottleStart;
private int destinationOutgoingMessageThrottleCount;
private Date lastDestinationOutgoingMessageThrottleTimestamp;
/**
* Constructs a new <code>ThrottleManagerControl</code> instance, assigning its
* backing <code>ThrottleManager</code>.
*
* @param throttleManager The <code>ThrottleManager</code> managed by this MBean.
* @param parent The parent MBean in the management hierarchy.
*/
public ThrottleManagerControl(ThrottleManager throttleManager, BaseControl parent)
{
super(parent);
this.throttleManager = throttleManager;
clientIncomingMessageThrottleStart = System.currentTimeMillis();
clientOutgoingMessageThrottleStart = clientIncomingMessageThrottleStart;
destinationIncomingMessageThrottleStart = clientIncomingMessageThrottleStart;
destinationOutgoingMessageThrottleStart = clientIncomingMessageThrottleStart;
}
@Override
protected void onRegistrationComplete()
{
String name = this.getObjectName().getCanonicalName();
String[] attributes = {
"ClientIncomingMessageThrottleCount", "ClientIncomingMessageThrottleFrequency",
"ClientOutgoingMessageThrottleCount", "ClientOutgoingMessageThrottleFrequency",
"DestinationIncomingMessageThrottleCount", "DestinationIncomingMessageThrottleFrequency",
"DestinationOutgoingMessageThrottleCount", "DestinationOutgoingMessageThrottleFrequency",
"LastClientIncomingMessageThrottleTimestamp", "LastClientOutgoingMessageThrottleTimestamp",
"LastDestinationIncomingMessageThrottleTimestamp", "LastDestinationOutgoingMessageThrottleTimestamp"
};
getRegistrar().registerObjects(AdminConsoleTypes.DESTINATION_POLLABLE, name, attributes);
}
/*
* (non-Javadoc)
* @see flex.management.BaseControlMBean#getId()
*/
@Override
public String getId()
{
return throttleManager.getId();
}
/*
* (non-Javadoc)
* @see flex.management.BaseControlMBean#getType()
*/
@Override
public String getType()
{
return ThrottleManager.TYPE;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getClientIncomingMessageThrottleCount()
*/
public Integer getClientIncomingMessageThrottleCount()
{
return Integer.valueOf(clientIncomingMessageThrottleCount);
}
/**
* Increments the count of throttled incoming client messages.
*/
public void incrementClientIncomingMessageThrottleCount()
{
++clientIncomingMessageThrottleCount;
lastClientIncomingMessageThrottleTimestamp = new Date();
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#resetClientIncomingMessageThrottleCount()
*/
public void resetClientIncomingMessageThrottleCount()
{
clientIncomingMessageThrottleStart = System.currentTimeMillis();
clientIncomingMessageThrottleCount = 0;
lastClientIncomingMessageThrottleTimestamp = null;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getLastClientIncomingMessageThrottleTimestamp()
*/
public Date getLastClientIncomingMessageThrottleTimestamp()
{
return lastClientIncomingMessageThrottleTimestamp;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getClientIncomingMessageThrottleFrequency()
*/
public Double getClientIncomingMessageThrottleFrequency()
{
if (clientIncomingMessageThrottleCount > 0)
{
double runtime = differenceInMinutes(clientIncomingMessageThrottleStart, System.currentTimeMillis());
return new Double(clientIncomingMessageThrottleCount/runtime);
}
return new Double(0);
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getClientOutgoingMessageThrottleCount()
*/
public Integer getClientOutgoingMessageThrottleCount()
{
return Integer.valueOf(clientOutgoingMessageThrottleCount);
}
/**
* Increments the count of throttled outgoing client messages.
*/
public void incrementClientOutgoingMessageThrottleCount()
{
++clientOutgoingMessageThrottleCount;
lastClientOutgoingMessageThrottleTimestamp = new Date();
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#resetClientOutgoingMessageThrottleCount()
*/
public void resetClientOutgoingMessageThrottleCount()
{
clientOutgoingMessageThrottleStart = System.currentTimeMillis();
clientOutgoingMessageThrottleCount = 0;
lastClientOutgoingMessageThrottleTimestamp = null;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getLastClientOutgoingMessageThrottleTimestamp()
*/
public Date getLastClientOutgoingMessageThrottleTimestamp()
{
return lastClientOutgoingMessageThrottleTimestamp;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getClientOutgoingMessageThrottleFrequency()
*/
public Double getClientOutgoingMessageThrottleFrequency()
{
if (clientOutgoingMessageThrottleCount > 0)
{
double runtime = differenceInMinutes(clientOutgoingMessageThrottleStart, System.currentTimeMillis());
return new Double(clientOutgoingMessageThrottleCount/runtime);
}
return new Double(0);
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getDestinationIncomingMessageThrottleCount()
*/
public Integer getDestinationIncomingMessageThrottleCount()
{
return Integer.valueOf(destinationIncomingMessageThrottleCount);
}
/**
* Increments the count of throttled incoming destination messages.
*/
public void incrementDestinationIncomingMessageThrottleCount()
{
++destinationIncomingMessageThrottleCount;
lastDestinationIncomingMessageThrottleTimestamp = new Date();
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#resetDestinationIncomingMessageThrottleCount()
*/
public void resetDestinationIncomingMessageThrottleCount()
{
destinationIncomingMessageThrottleStart = System.currentTimeMillis();
destinationIncomingMessageThrottleCount = 0;
lastDestinationIncomingMessageThrottleTimestamp = null;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getLastDestinationIncomingMessageThrottleTimestamp()
*/
public Date getLastDestinationIncomingMessageThrottleTimestamp()
{
return lastDestinationIncomingMessageThrottleTimestamp;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getDestinationIncomingMessageThrottleFrequency()
*/
public Double getDestinationIncomingMessageThrottleFrequency()
{
if (destinationIncomingMessageThrottleCount > 0)
{
double runtime = differenceInMinutes(destinationIncomingMessageThrottleStart, System.currentTimeMillis());
return new Double(destinationIncomingMessageThrottleCount/runtime);
}
return new Double(0);
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getDestinationOutgoingMessageThrottleCount()
*/
public Integer getDestinationOutgoingMessageThrottleCount()
{
return Integer.valueOf(destinationOutgoingMessageThrottleCount);
}
/**
* Increments the count of throttled outgoing destination messages.
*/
public void incrementDestinationOutgoingMessageThrottleCount()
{
++destinationOutgoingMessageThrottleCount;
lastDestinationOutgoingMessageThrottleTimestamp = new Date();
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#resetDestinationOutgoingMessageThrottleCount()
*/
public void resetDestinationOutgoingMessageThrottleCount()
{
destinationOutgoingMessageThrottleStart = System.currentTimeMillis();
destinationOutgoingMessageThrottleCount = 0;
lastDestinationOutgoingMessageThrottleTimestamp = null;
}
/*
* (non-Javadoc)
* @see flex.management.runtime.ThrottleManagerControlMBean#getLastDestinationOutgoingMessageThrottleTimestamp()
*/
public Date getLastDestinationOutgoingMessageThrottleTimestamp()
{
return lastDestinationOutgoingMessageThrottleTimestamp;
}
public Double getDestinationOutgoingMessageThrottleFrequency()
{
if (destinationOutgoingMessageThrottleCount > 0)
{
double runtime = differenceInMinutes(destinationOutgoingMessageThrottleStart, System.currentTimeMillis());
return new Double(destinationOutgoingMessageThrottleCount/runtime);
}
return new Double(0);
}
}