Package hermes.ext.seebeyond

Source Code of hermes.ext.seebeyond.SeeBeyondAdmin

/*
* Copyright 2003,2004 Colin Crist
*
* 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 hermes.ext.seebeyond;

import hermes.Domain;
import hermes.Hermes;
import hermes.HermesAdmin;
import hermes.HermesAdminFactory;
import hermes.HermesException;
import hermes.browser.HermesBrowser;
import hermes.config.DestinationConfig;
import hermes.ext.HermesAdminSupport;
import hermes.ext.seebeyond.model.SeeBeyondQueue;
import hermes.ext.seebeyond.model.SeeBeyondTopic;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.QueueConnectionFactory;
import javax.jms.TopicConnectionFactory;

import org.apache.log4j.Logger;

/**
*
* @author murali
*
*/
public abstract class SeeBeyondAdmin extends HermesAdminSupport implements HermesAdmin {

  public SeeBeyondAdmin(Hermes hermes) {
    super(hermes);
  }

  private static final Logger log = Logger.getLogger(SeeBeyondAdmin.class);

  protected ConnectionFactory connectionFactory;

  protected HermesAdminFactory factory;

  protected SunSeeBeyondAdminBase seeBeyondAdmin;

  protected DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy hh:mm:ss");



  /*
   * (non-Javadoc)
   *
   * @see hermes.ProviderExtensionSession#size(javax.jms.Destination)
   */
  public int getDepth(DestinationConfig dConfig) throws JMSException {
    String destinationName = getRealDestinationName(dConfig);
    Properties props = null;
    int depth = 0;
    if (dConfig.getDomain() == Domain.QUEUE.getId()) {
      props = seeBeyondAdmin.getQueueStatistics(destinationName);
    } else {
      props = seeBeyondAdmin.getTopicStatistics(destinationName);
    }
    Object count = props.get(SunSeeBeyondAdminBase.MESSAGE_COUNT_KEY);
    if (count != null) {
      depth = Integer.parseInt(count.toString());
    }
    return depth;
  }

  /*
   * (non-Javadoc)
   *
   * @see hermes.ProviderExtensionSession#close()
   */
  public void close() throws JMSException {
    // NOP
  }

  public Collection<DestinationConfig> discoverDestinationConfigs() throws JMSException {
    final Collection<DestinationConfig> rval = new ArrayList<DestinationConfig>();
    List queues = seeBeyondAdmin.getQueues();
    log.info("Adding destination queues.");
    boolean addQueues = false;
    boolean addTopics = false;
    if (connectionFactory instanceof QueueConnectionFactory)
      addQueues = true;
    else if (connectionFactory instanceof TopicConnectionFactory)
      addTopics = true;
    else {
      addQueues = true;
      addTopics = true;
    }
    if (addQueues)
      for (Object queue : seeBeyondAdmin.getQueues()) {
        String queueName = queue.toString();
        if (queueName.startsWith("STCMS.") || queueName.startsWith("STCTemporary.")) {
          continue;
        }
        log.debug("Adding queue " + queueName);
        DestinationConfig dConfig = HermesBrowser.getConfigDAO().createDestinationConfig();
        dConfig.setDomain(Domain.QUEUE.getId());
        dConfig.setName(queueName);
        rval.add(dConfig);
      }
    log.info("Adding destination queues.");
    if (addTopics)
      for (Object topic : seeBeyondAdmin.getTopics()) {
        String topicName = topic.toString();
        if (topicName.startsWith("STCMS.") || topicName.startsWith("STCTemporary.")) {
          continue;
        }
        log.debug("Adding topic " + topicName);
        DestinationConfig dConfig = HermesBrowser.getConfigDAO().createDestinationConfig();
        dConfig.setDomain(Domain.TOPIC.getId());
        dConfig.setName(topicName);
        rval.add(dConfig);
        log.debug("Fetching durable subscriptions for topic " + topicName);
        rval.addAll(discoverDurableSubscriptions(topicName, null));
      }
    return rval;
  }

  public Map getStatistics(DestinationConfig dConfig) throws JMSException {
    final Map stats = new LinkedHashMap();
    String destinationName = getRealDestinationName(dConfig);
    Properties props = null;
    int depth = 0;
    if (dConfig.getDomain() == Domain.QUEUE.getId()) {
      props = seeBeyondAdmin.getQueueStatistics(destinationName);
      SeeBeyondQueue sbQueue = new SeeBeyondQueue(props);
      stats.put("Queue Name", sbQueue.getQueueName());
      stats.put("Min Sequence Number", sbQueue.getMinSequence());
      stats.put("Max Sequence Number", sbQueue.getMaxSequence());
      stats.put("Available Count", sbQueue.getMessageCount());
      stats.put("Number of Receivers", sbQueue.getCurrentReceivers());
      stats.put("Last Published Date/Time", sbQueue.getLastEnqueueTime());
    } else {
      props = seeBeyondAdmin.getTopicStatistics(destinationName);
      SeeBeyondTopic sbTopic = new SeeBeyondTopic(props);
      stats.put("Topic Name", sbTopic.getTopicName());
      stats.put("Min Sequence Number", sbTopic.getFirstSequence());
      stats.put("Max Sequence Number", sbTopic.getLastSequence());
      stats.put("Available Count", sbTopic.getMessageCount());
      stats.put("Number of Subscribers", sbTopic.getCurrentSubscribers());
      stats.put("Last Published Date/Time", sbTopic.getLastEnqueueTime());
    }

    return stats;
  }

  @Override
  protected Collection discoverDurableSubscriptions(String topicName, String jndiName) throws JMSException {
    final Collection<DestinationConfig> rval = new ArrayList<DestinationConfig>();
    List subscribers = seeBeyondAdmin.getSubscribers(topicName);
    log.debug("Durable subscriptions for " + topicName + " are " + subscribers);
    for (final Object subscriber : subscribers) {
      Properties subscriberProps = (Properties) subscriber;

      final DestinationConfig dConfig = HermesBrowser.getConfigDAO().createDestinationConfig();

      dConfig.setClientID(subscriberProps.getProperty("SUBSCRIBER_NAME"));
      dConfig.setName(jndiName == null ? "topics/" + topicName : jndiName);
      dConfig.setDomain(Domain.TOPIC.getId());
      dConfig.setSelector(null);// Not Available
      dConfig.setDurable(true);

      rval.add(dConfig);

    }
    return rval;
  }
 
  @Override
  public long getAge(DestinationConfig dConfig) throws JMSException {
    long rval = 0;
    String destName = getRealDestinationName(dConfig);
    Properties queueStats = null;
    try
    {
      if (dConfig.getDomain() == Domain.QUEUE.getId()) {
        queueStats = seeBeyondAdmin.getQueueStatistics(destName);
      } else if (dConfig.getDomain() == Domain.QUEUE.getId()){
        queueStats = seeBeyondAdmin.getTopicStatistics(destName);
      } else
      {
        log.error("Unsupported destination domain " + dConfig.getDomain());
      }
      rval = dateFormat.parse(queueStats.getProperty("LAST_ENQUEUE_TIME")).getTime();

    }catch(Exception e)
    {
      throw new HermesException("Could not fetch last published time.",e);
    }

    return rval;
  }


}
TOP

Related Classes of hermes.ext.seebeyond.SeeBeyondAdmin

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.