better metrics

This commit is contained in:
Athou
2013-05-18 00:10:11 +02:00
parent 3fb5e1bfef
commit c6897eb357
3 changed files with 52 additions and 26 deletions

View File

@@ -2,19 +2,14 @@ package com.commafeed.backend;
import javax.ejb.Singleton; import javax.ejb.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton @Singleton
public class MetricsBean { 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 Metric lastHour = new Metric();
private int feedsRefreshedThisMinute; private Metric thisHour = new Metric();
private int feedsRefreshedLastHour;
private int feedsRefreshedThisHour;
private long minuteTimestamp; private long minuteTimestamp;
private long hourTimestamp; private long hourTimestamp;
@@ -22,28 +17,54 @@ public class MetricsBean {
public void feedRefreshed() { public void feedRefreshed() {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if (now - minuteTimestamp > 60000) { if (now - minuteTimestamp > 60000) {
feedsRefreshedLastMinute = feedsRefreshedThisMinute; lastMinute = thisMinute;
feedsRefreshedThisMinute = 0; thisMinute = new Metric();
minuteTimestamp = now; minuteTimestamp = now;
log.debug("** feeds per minute: {}", feedsRefreshedLastMinute);
} }
feedsRefreshedThisMinute++; thisMinute.feedsRefreshed++;
if (now - hourTimestamp > 60000 * 60) { if (now - hourTimestamp > 60000 * 60) {
feedsRefreshedLastHour = feedsRefreshedThisHour; lastHour = thisHour;
feedsRefreshedThisHour = 0; thisHour = new Metric();
hourTimestamp = now; hourTimestamp = now;
} }
feedsRefreshedThisHour++; thisHour.feedsRefreshed++;
} }
public int getFeedsRefreshedLastMinute() { public void feedUpdated() {
return feedsRefreshedLastMinute; thisHour.feedsRefreshed++;
thisMinute.feedsUpdated++;
} }
public int getFeedsRefreshedLastHour() { public Metric getLastMinute() {
return feedsRefreshedLastHour; 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;
}
} }
} }

View File

@@ -13,6 +13,7 @@ import javax.inject.Inject;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import com.commafeed.backend.MetricsBean;
import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryDAO;
import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO;
import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO;
@@ -36,6 +37,9 @@ public class FeedUpdateService {
@Inject @Inject
FeedEntryStatusDAO feedEntryStatusDAO; FeedEntryStatusDAO feedEntryStatusDAO;
@Inject
MetricsBean metricsBean;
@Lock(LockType.WRITE) @Lock(LockType.WRITE)
public void updateEntries(Feed feed, Collection<FeedEntry> entries) { public void updateEntries(Feed feed, Collection<FeedEntry> entries) {
@@ -91,6 +95,7 @@ public class FeedUpdateService {
feedEntryDAO.saveOrUpdate(entryUpdateList); feedEntryDAO.saveOrUpdate(entryUpdateList);
feedEntryStatusDAO.saveOrUpdate(statusUpdateList); feedEntryStatusDAO.saveOrUpdate(statusUpdateList);
metricsBean.feedUpdated();
} }
private FeedEntry findEntry(List<FeedEntry> existingEntries, FeedEntry entry) { private FeedEntry findEntry(List<FeedEntry> existingEntries, FeedEntry entry) {

View File

@@ -1,7 +1,5 @@
package com.commafeed.frontend.rest.resources; package com.commafeed.frontend.rest.resources;
import java.util.Arrays;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -14,6 +12,7 @@ import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import com.commafeed.backend.MetricsBean.Metric;
import com.commafeed.backend.StartupBean; import com.commafeed.backend.StartupBean;
import com.commafeed.backend.model.ApplicationSettings; import com.commafeed.backend.model.ApplicationSettings;
import com.commafeed.backend.model.User; 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.UserModel;
import com.commafeed.frontend.model.request.IDRequest; import com.commafeed.frontend.model.request.IDRequest;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.Api;
@@ -174,9 +174,9 @@ public class AdminREST extends AbstractResourceREST {
@Path("/metrics") @Path("/metrics")
@GET @GET
public Response getMetrics() { public Response getMetrics() {
List<Integer> list = Arrays.asList( Map<String, Metric> map = ImmutableMap.of("lastMinute",
metricsBean.getFeedsRefreshedLastMinute(), metricsBean.getLastMinute(), "lastHour",
metricsBean.getFeedsRefreshedLastHour()); metricsBean.getLastHour());
return Response.ok(list).build(); return Response.ok(map).build();
} }
} }