diff --git a/src/main/java/net/greghaines/jesque/meta/QueueInfo.java b/src/main/java/net/greghaines/jesque/meta/QueueInfo.java index e720fff8..5450c158 100644 --- a/src/main/java/net/greghaines/jesque/meta/QueueInfo.java +++ b/src/main/java/net/greghaines/jesque/meta/QueueInfo.java @@ -15,12 +15,12 @@ */ package net.greghaines.jesque.meta; -import java.io.Serializable; -import java.util.List; - import net.greghaines.jesque.Job; import net.greghaines.jesque.utils.JesqueUtils; +import java.io.Serializable; +import java.util.List; + /** * Information about the current state of a queue. * @@ -33,6 +33,7 @@ public class QueueInfo implements Comparable, Serializable { private String name; private Long size; private List jobs; + private Boolean delayed; /** * @return the name of the queue @@ -76,6 +77,20 @@ public void setJobs(final List jobs) { this.jobs = jobs; } + /** + * @return whether this queue is a delayed queue + */ + public Boolean isDelayed() { + return this.delayed; + } + + /** + * @param delayed whether this queue is a delayed queue + */ + public void setDelayed(final Boolean delayed) { + this.delayed = delayed; + } + /** * {@inheritDoc} */ @@ -94,6 +109,7 @@ public int hashCode() { result = prime * result + ((this.jobs == null) ? 0 : this.jobs.hashCode()); result = prime * result + ((this.name == null) ? 0 : this.name.hashCode()); result = prime * result + ((this.size == null) ? 0 : this.size.hashCode()); + result = prime * result + ((this.delayed == null) ? 0 : this.delayed.hashCode()); return result; } @@ -109,7 +125,8 @@ public boolean equals(final Object obj) { final QueueInfo other = (QueueInfo) obj; equal = (JesqueUtils.nullSafeEquals(this.jobs, other.jobs) && JesqueUtils.nullSafeEquals(this.name, other.name) - && JesqueUtils.nullSafeEquals(this.size, other.size)); + && JesqueUtils.nullSafeEquals(this.size, other.size) + && JesqueUtils.nullSafeEquals(this.delayed, other.delayed)); } return equal; } diff --git a/src/main/java/net/greghaines/jesque/meta/dao/impl/QueueInfoDAORedisImpl.java b/src/main/java/net/greghaines/jesque/meta/dao/impl/QueueInfoDAORedisImpl.java index dd2ba9ff..d868c85a 100644 --- a/src/main/java/net/greghaines/jesque/meta/dao/impl/QueueInfoDAORedisImpl.java +++ b/src/main/java/net/greghaines/jesque/meta/dao/impl/QueueInfoDAORedisImpl.java @@ -137,6 +137,7 @@ public List doWork(final Jedis jedis) throws Exception { final QueueInfo queueInfo = new QueueInfo(); queueInfo.setName(queueName); queueInfo.setSize(size(jedis, queueName)); + queueInfo.setDelayed(delayed(jedis, queueName)); queueInfos.add(queueInfo); } Collections.sort(queueInfos); @@ -159,6 +160,7 @@ public QueueInfo doWork(final Jedis jedis) throws Exception { final QueueInfo queueInfo = new QueueInfo(); queueInfo.setName(name); queueInfo.setSize(size(jedis, name)); + queueInfo.setDelayed(delayed(jedis, name)); final Collection payloads = paylods(jedis, name, jobOffset, jobCount); final List jobs = new ArrayList(payloads.size()); for (final String payload : payloads) { @@ -170,6 +172,11 @@ public QueueInfo doWork(final Jedis jedis) throws Exception { }); } + private boolean delayed(Jedis jedis, String queueName) { + final String key = key(QUEUE, queueName); + return JedisUtils.isDelayedQueue(jedis, key); + } + /** * {@inheritDoc} */ diff --git a/src/test/java/net/greghaines/jesque/meta/TestQueueInfo.java b/src/test/java/net/greghaines/jesque/meta/TestQueueInfo.java index be1917ab..40768d4c 100644 --- a/src/test/java/net/greghaines/jesque/meta/TestQueueInfo.java +++ b/src/test/java/net/greghaines/jesque/meta/TestQueueInfo.java @@ -23,6 +23,9 @@ public void testProperties() { final List jobs = Arrays.asList(new Job()); qInfo.setJobs(jobs); Assert.assertEquals(jobs, qInfo.getJobs()); + final boolean delayed = true; + qInfo.setDelayed(delayed); + Assert.assertEquals(delayed, qInfo.isDelayed()); } @Test diff --git a/src/test/java/net/greghaines/jesque/meta/dao/impl/TestQueueInfoDAORedisImpl.java b/src/test/java/net/greghaines/jesque/meta/dao/impl/TestQueueInfoDAORedisImpl.java index 93d5a795..e04780c1 100644 --- a/src/test/java/net/greghaines/jesque/meta/dao/impl/TestQueueInfoDAORedisImpl.java +++ b/src/test/java/net/greghaines/jesque/meta/dao/impl/TestQueueInfoDAORedisImpl.java @@ -164,7 +164,7 @@ public void testGetQueueInfos() { oneOf(jedis).smembers(QUEUES_KEY); will(returnValue(queueCountMap.keySet())); for (final Entry e : queueTypeMap.entrySet()) { final String queueKey = "resque:queue:" + e.getKey(); - oneOf(jedis).type(queueKey); will(returnValue(e.getValue())); + exactly(2).of(jedis).type(queueKey); will(returnValue(e.getValue())); if (KeyType.ZSET.toString().equals(e.getValue())) { oneOf(jedis).zcard(queueKey); will(returnValue(queueCountMap.get(e.getKey()))); } else { @@ -194,7 +194,7 @@ public void testGetQueueInfo_List() throws JsonProcessingException { payloads.add(ObjectMapperFactory.get().writeValueAsString(new Job("bar"))); this.mockCtx.checking(new Expectations(){{ oneOf(pool).getResource(); will(returnValue(jedis)); - exactly(2).of(jedis).type(queueKey); will(returnValue(KeyType.LIST.toString())); + exactly(3).of(jedis).type(queueKey); will(returnValue(KeyType.LIST.toString())); oneOf(jedis).llen(queueKey); will(returnValue(size)); oneOf(jedis).lrange(queueKey, jobOffset, jobOffset + jobCount - 1); will(returnValue(payloads)); oneOf(jedis).close(); @@ -220,7 +220,7 @@ public void testGetQueueInfo_ZSet() throws JsonProcessingException { payloads.add(ObjectMapperFactory.get().writeValueAsString(new Job("bar"))); this.mockCtx.checking(new Expectations(){{ oneOf(pool).getResource(); will(returnValue(jedis)); - exactly(2).of(jedis).type(queueKey); will(returnValue(KeyType.ZSET.toString())); + exactly(3).of(jedis).type(queueKey); will(returnValue(KeyType.ZSET.toString())); oneOf(jedis).zcard(queueKey); will(returnValue(size)); oneOf(jedis).zrange(queueKey, jobOffset, jobOffset + jobCount - 1); will(returnValue(payloads)); oneOf(jedis).close();