/* * * 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 org.apache.qpid.server.queue; import org.apache.qpid.server.message.ServerMessage; public enum NotificationCheck { MESSAGE_COUNT_ALERT { boolean notifyIfNecessary(ServerMessage msg, AMQQueue queue, QueueNotificationListener listener) { int msgCount; final long maximumMessageCount = queue.getMaximumMessageCount(); if (maximumMessageCount!= 0 && (msgCount = queue.getMessageCount()) >= maximumMessageCount) { listener.notifyClients(this, queue, msgCount + ": Maximum count on queue threshold ("+ maximumMessageCount +") breached."); return true; } return false; } }, MESSAGE_SIZE_ALERT(true) { boolean notifyIfNecessary(ServerMessage msg, AMQQueue queue, QueueNotificationListener listener) { final long maximumMessageSize = queue.getMaximumMessageSize(); if(maximumMessageSize != 0) { // Check for threshold message size long messageSize; messageSize = (msg == null) ? 0 : msg.getSize(); if (messageSize >= maximumMessageSize) { listener.notifyClients(this, queue, messageSize + "b : Maximum message size threshold ("+ maximumMessageSize +") breached. [Message ID=" + msg.getMessageNumber() + "]"); return true; } } return false; } }, QUEUE_DEPTH_ALERT { boolean notifyIfNecessary(ServerMessage msg, AMQQueue queue, QueueNotificationListener listener) { // Check for threshold queue depth in bytes final long maximumQueueDepth = queue.getMaximumQueueDepth(); if(maximumQueueDepth != 0) { final long queueDepth = queue.getQueueDepth(); if (queueDepth >= maximumQueueDepth) { listener.notifyClients(this, queue, (queueDepth>>10) + "Kb : Maximum queue depth threshold ("+(maximumQueueDepth>>10)+"Kb) breached."); return true; } } return false; } }, MESSAGE_AGE_ALERT { boolean notifyIfNecessary(ServerMessage msg, AMQQueue queue, QueueNotificationListener listener) { final long maxMessageAge = queue.getMaximumMessageAge(); if(maxMessageAge != 0) { final long currentTime = System.currentTimeMillis(); final long thresholdTime = currentTime - maxMessageAge; final long firstArrivalTime = queue.getOldestMessageArrivalTime(); if(firstArrivalTime < thresholdTime) { long oldestAge = currentTime - firstArrivalTime; listener.notifyClients(this, queue, (oldestAge/1000) + "s : Maximum age on queue threshold ("+(maxMessageAge /1000)+"s) breached."); return true; } } return false; } } ; private final boolean _messageSpecific; NotificationCheck() { this(false); } NotificationCheck(boolean messageSpecific) { _messageSpecific = messageSpecific; } public boolean isMessageSpecific() { return _messageSpecific; } abstract boolean notifyIfNecessary(ServerMessage msg, AMQQueue queue, QueueNotificationListener listener); }