    001    /*
    002     * Copyright 2009 Red Hat, Inc.
    003     * Red Hat licenses this file to you under the Apache License, version
    004     * 2.0 (the "License"); you may not use this file except in compliance
    005     * with the License.  You may obtain a copy of the License at
    006     *    http://www.apache.org/licenses/LICENSE-2.0
    007     * Unless required by applicable law or agreed to in writing, software
    008     * distributed under the License is distributed on an "AS IS" BASIS,
    009     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    010     * implied.  See the License for the specific language governing
    011     * permissions and limitations under the License.
    012     */
    013
    014    package org.hornetq.api.core.management;
    015
    016    import java.text.DateFormat;
    017    import java.util.Date;
    018
    019    import org.hornetq.core.logging.Logger;
    020    import org.hornetq.core.messagecounter.MessageCounter;
    021    import org.hornetq.utils.json.JSONObject;
    022
    023    /**
    024     * Helper class to create Java Objects from the
    025     * JSON serialization returned by {@link QueueControl#listMessageCounter()}.
    026     *
    027     *  @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
    028     */
    029    public class MessageCounterInfo
    030    {
    031       // Constants -----------------------------------------------------
    032
    033       private static final Logger log = Logger.getLogger(MessageCounterInfo.class);
    034
    035       // Attributes ----------------------------------------------------
    036
    037       private final String name;
    038
    039       private final String subscription;
    040
    041       private final boolean durable;
    042
    043       private final long count;
    044
    045       private final long countDelta;
    046
    047       private final int depth;
    048
    049       private final int depthDelta;
    050
    051       private final String lastAddTimestamp;
    052
    053       private final String udpateTimestamp;
    054
    055       // Static --------------------------------------------------------
    056
    057       public static String toJSon(final MessageCounter counter) throws Exception
    058       {
    059          DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
    060
    061          JSONObject json = new JSONObject(counter);
    062          String lastAddTimestamp = dateFormat.format(new Date(counter.getLastAddedMessageTime()));
    063          json.put("lastAddTimestamp", lastAddTimestamp);
    064          String updateTimestamp = dateFormat.format(new Date(counter.getLastUpdate()));
    065          json.put("updateTimestamp", updateTimestamp);
    066
    067          return json.toString();
    068       }
    069
    070       /**
    071        * Returns an array of RoleInfo corresponding to the JSON serialization returned
    072        * by {@link QueueControl#listMessageCounter()}.
    073        */
    074       public static MessageCounterInfo fromJSON(final String jsonString) throws Exception
    075       {
    076          JSONObject data = new JSONObject(jsonString);
    077          String name = data.getString("destinationName");
    078          String subscription = data.getString("destinationSubscription");
    079          boolean durable = data.getBoolean("destinationDurable");
    080          long count = data.getLong("count");
    081          long countDelta = data.getLong("countDelta");
    082          int depth = data.getInt("messageCount");
    083          int depthDelta = data.getInt("messageCountDelta");
    084          String lastAddTimestamp = data.getString("lastAddTimestamp");
    085          String updateTimestamp = data.getString("updateTimestamp");
    086
    087          return new MessageCounterInfo(name,
    088                                        subscription,
    089                                        durable,
    090                                        count,
    091                                        countDelta,
    092                                        depth,
    093                                        depthDelta,
    094                                        lastAddTimestamp,
    095                                        updateTimestamp);
    096       }
    097
    098       // Constructors --------------------------------------------------
    099
    100       public MessageCounterInfo(final String name,
    101                                 final String subscription,
    102                                 final boolean durable,
    103                                 final long count,
    104                                 final long countDelta,
    105                                 final int depth,
    106                                 final int depthDelta,
    107                                 final String lastAddTimestamp,
    108                                 final String udpateTimestamp)
    109       {
    110          this.name = name;
    111          this.subscription = subscription;
    112          this.durable = durable;
    113          this.count = count;
    114          this.countDelta = countDelta;
    115          this.depth = depth;
    116          this.depthDelta = depthDelta;
    117          this.lastAddTimestamp = lastAddTimestamp;
    118          this.udpateTimestamp = udpateTimestamp;
    119       }
    120
    121       // Public --------------------------------------------------------
    122
    123       /**
    124        * Returns the name of the queue.
    125        */
    126       public String getName()
    127       {
    128          return name;
    129       }
    130
    131       /**
    132        * Returns the name of the subscription.
    133        */
    134       public String getSubscription()
    135       {
    136          return subscription;
    137       }
    138
    139       /**
    140        * Returns whether the queue is durable.
    141        */
    142       public boolean isDurable()
    143       {
    144          return durable;
    145       }
    146
    147       /**
    148        * Returns the number of messages added to the queue since it was created.
    149        */
    150       public long getCount()
    151       {
    152          return count;
    153       }
    154
    155       /**
    156        * Returns the number of messages added to the queue since the last counter sample.
    157        */
    158       public long getCountDelta()
    159       {
    160          return countDelta;
    161       }
    162
    163       /**
    164        * Returns the number of messages currently in the queue.
    165        */
    166       public int getDepth()
    167       {
    168          return depth;
    169       }
    170
    171       /**
    172        * Returns the number of messages in the queue since last counter sample.
    173        */
    174       public int getDepthDelta()
    175       {
    176          return depthDelta;
    177       }
    178
    179       /**
    180        * Returns the timestamp of the last time a message was added to the queue.
    181        */
    182       public String getLastAddTimestamp()
    183       {
    184          return lastAddTimestamp;
    185       }
    186
    187       /**
    188        * Returns the timestamp of the last time the queue was updated.
    189        */
    190       public String getUdpateTimestamp()
    191       {
    192          return udpateTimestamp;
    193       }
    194
    195       // Package protected ---------------------------------------------
    196
    197       // Protected -----------------------------------------------------
    198
    199       // Private -------------------------------------------------------
    200
    201       // Inner classes -------------------------------------------------
    202    }