From c6897eb357eb7531e26b6ba4b5cd400c43818554 Mon Sep 17 00:00:00 2001 From: Athou Date: Sat, 18 May 2013 00:10:11 +0200 Subject: [PATCH] better metrics --- .../com/commafeed/backend/MetricsBean.java | 61 +++++++++++++------ .../backend/services/FeedUpdateService.java | 5 ++ .../frontend/rest/resources/AdminREST.java | 12 ++-- 3 files changed, 52 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/commafeed/backend/MetricsBean.java b/src/main/java/com/commafeed/backend/MetricsBean.java index bf0af314..9279e56e 100644 --- a/src/main/java/com/commafeed/backend/MetricsBean.java +++ b/src/main/java/com/commafeed/backend/MetricsBean.java @@ -2,19 +2,14 @@ package com.commafeed.backend; import javax.ejb.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - @Singleton public class MetricsBean { - private static Logger log = LoggerFactory.getLogger(MetricsBean.class); + private Metric lastMinute = new Metric(); + private Metric thisMinute = new Metric(); - private int feedsRefreshedLastMinute; - private int feedsRefreshedThisMinute; - - private int feedsRefreshedLastHour; - private int feedsRefreshedThisHour; + private Metric lastHour = new Metric(); + private Metric thisHour = new Metric(); private long minuteTimestamp; private long hourTimestamp; @@ -22,28 +17,54 @@ public class MetricsBean { public void feedRefreshed() { long now = System.currentTimeMillis(); if (now - minuteTimestamp > 60000) { - feedsRefreshedLastMinute = feedsRefreshedThisMinute; - feedsRefreshedThisMinute = 0; + lastMinute = thisMinute; + thisMinute = new Metric(); minuteTimestamp = now; - log.debug("** feeds per minute: {}", feedsRefreshedLastMinute); } - feedsRefreshedThisMinute++; + thisMinute.feedsRefreshed++; if (now - hourTimestamp > 60000 * 60) { - feedsRefreshedLastHour = feedsRefreshedThisHour; - feedsRefreshedThisHour = 0; + lastHour = thisHour; + thisHour = new Metric(); hourTimestamp = now; } - feedsRefreshedThisHour++; + thisHour.feedsRefreshed++; } - public int getFeedsRefreshedLastMinute() { - return feedsRefreshedLastMinute; + public void feedUpdated() { + thisHour.feedsRefreshed++; + thisMinute.feedsUpdated++; } - public int getFeedsRefreshedLastHour() { - return feedsRefreshedLastHour; + public Metric getLastMinute() { + return lastMinute; + } + + public Metric getLastHour() { + return lastHour; + } + + public static class Metric { + private int feedsRefreshed; + private int feedsUpdated; + + public int getFeedsRefreshed() { + return feedsRefreshed; + } + + public void setFeedsRefreshed(int feedsRefreshed) { + this.feedsRefreshed = feedsRefreshed; + } + + public int getFeedsUpdated() { + return feedsUpdated; + } + + public void setFeedsUpdated(int feedsUpdated) { + this.feedsUpdated = feedsUpdated; + } + } } diff --git a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java index f7287680..6fe3d517 100644 --- a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java +++ b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java @@ -13,6 +13,7 @@ import javax.inject.Inject; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; +import com.commafeed.backend.MetricsBean; import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; @@ -36,6 +37,9 @@ public class FeedUpdateService { @Inject FeedEntryStatusDAO feedEntryStatusDAO; + @Inject + MetricsBean metricsBean; + @Lock(LockType.WRITE) public void updateEntries(Feed feed, Collection entries) { @@ -91,6 +95,7 @@ public class FeedUpdateService { feedEntryDAO.saveOrUpdate(entryUpdateList); feedEntryStatusDAO.saveOrUpdate(statusUpdateList); + metricsBean.feedUpdated(); } private FeedEntry findEntry(List existingEntries, FeedEntry entry) { diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java index 294b65e3..ec76cae5 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -1,7 +1,5 @@ package com.commafeed.frontend.rest.resources; -import java.util.Arrays; -import java.util.List; import java.util.Map; import java.util.Set; @@ -14,6 +12,7 @@ import javax.ws.rs.core.Response.Status; import org.apache.commons.lang.StringUtils; +import com.commafeed.backend.MetricsBean.Metric; import com.commafeed.backend.StartupBean; import com.commafeed.backend.model.ApplicationSettings; import com.commafeed.backend.model.User; @@ -23,6 +22,7 @@ import com.commafeed.frontend.SecurityCheck; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.IDRequest; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.wordnik.swagger.annotations.Api; @@ -174,9 +174,9 @@ public class AdminREST extends AbstractResourceREST { @Path("/metrics") @GET public Response getMetrics() { - List list = Arrays.asList( - metricsBean.getFeedsRefreshedLastMinute(), - metricsBean.getFeedsRefreshedLastHour()); - return Response.ok(list).build(); + Map map = ImmutableMap.of("lastMinute", + metricsBean.getLastMinute(), "lastHour", + metricsBean.getLastHour()); + return Response.ok(map).build(); } }