/* * 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.activemq.artemis.api.core.management; import javax.json.JsonObject; import java.text.DateFormat; import java.util.Date; import org.apache.activemq.artemis.api.core.JsonUtil; import org.apache.activemq.artemis.core.messagecounter.MessageCounter; import org.apache.activemq.artemis.utils.JsonLoader; import static org.apache.activemq.artemis.api.core.JsonUtil.nullSafe; /** * Helper class to create Java Objects from the * JSON serialization returned by {@link QueueControl#listMessageCounter()}. */ public final class MessageCounterInfo { private final String name; private final String subscription; private final boolean durable; private final long count; private final long countDelta; private final int depth; private final int depthDelta; private final String lastAddTimestamp; private final String udpateTimestamp; /** * Returns a JSON String serialization of a {@link MessageCounter} object. * * @param counter * @return * @throws Exception */ public static String toJSon(final MessageCounter counter) throws Exception { DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); String lastAddTimestamp = dateFormat.format(new Date(counter.getLastAddedMessageTime())); String updateTimestamp = dateFormat.format(new Date(counter.getLastUpdate())); return JsonLoader.createObjectBuilder().add("destinationName", nullSafe(counter.getDestinationName())).add("destinationSubscription", nullSafe(counter.getDestinationSubscription())).add("destinationDurable", counter.isDestinationDurable()).add("count", counter.getCount()).add("countDelta", counter.getCountDelta()).add("messageCount", counter.getMessageCount()).add("messageCountDelta", counter.getMessageCountDelta()).add("lastAddTimestamp", lastAddTimestamp).add("updateTimestamp", updateTimestamp).build().toString(); } /** * Returns a MessageCounterInfo corresponding to the JSON serialization returned * by {@link QueueControl#listMessageCounter()}. */ public static MessageCounterInfo fromJSON(final String jsonString) throws Exception { JsonObject data = JsonUtil.readJsonObject(jsonString); String name = data.getString("destinationName"); String subscription = data.getString("destinationSubscription", null); boolean durable = data.getBoolean("destinationDurable"); long count = data.getJsonNumber("count").longValue(); long countDelta = data.getJsonNumber("countDelta").longValue(); int depth = data.getInt("messageCount"); int depthDelta = data.getInt("messageCountDelta"); String lastAddTimestamp = data.getString("lastAddTimestamp"); String updateTimestamp = data.getString("updateTimestamp"); return new MessageCounterInfo(name, subscription, durable, count, countDelta, depth, depthDelta, lastAddTimestamp, updateTimestamp); } // Constructors -------------------------------------------------- public MessageCounterInfo(final String name, final String subscription, final boolean durable, final long count, final long countDelta, final int depth, final int depthDelta, final String lastAddTimestamp, final String udpateTimestamp) { this.name = name; this.subscription = subscription; this.durable = durable; this.count = count; this.countDelta = countDelta; this.depth = depth; this.depthDelta = depthDelta; this.lastAddTimestamp = lastAddTimestamp; this.udpateTimestamp = udpateTimestamp; } // Public -------------------------------------------------------- /** * Returns the name of the queue. */ public String getName() { return name; } /** * Returns the name of the subscription. */ public String getSubscription() { return subscription; } /** * Returns whether the queue is durable. */ public boolean isDurable() { return durable; } /** * Returns the number of messages added to the queue since it was created. */ public long getCount() { return count; } /** * Returns the number of messages added to the queue since the last counter sample. */ public long getCountDelta() { return countDelta; } /** * Returns the number of messages currently in the queue. */ public int getDepth() { return depth; } /** * Returns the number of messages in the queue since last counter sample. */ public int getDepthDelta() { return depthDelta; } /** * Returns the timestamp of the last time a message was added to the queue. */ public String getLastAddTimestamp() { return lastAddTimestamp; } /** * Returns the timestamp of the last time the queue was updated. */ public String getUdpateTimestamp() { return udpateTimestamp; } }