diff --git a/src/main/java/com/commafeed/backend/MetricsBean.java b/src/main/java/com/commafeed/backend/MetricsBean.java new file mode 100644 index 00000000..34b5d3b6 --- /dev/null +++ b/src/main/java/com/commafeed/backend/MetricsBean.java @@ -0,0 +1,43 @@ +package com.commafeed.backend; + +import javax.ejb.Singleton; + +@Singleton +public class MetricsBean { + + private int feedsRefreshedLastMinute; + private int feedsRefreshedThisMinute; + + private int feedsRefreshedLastHour; + private int feedsRefreshedThisHour; + + private long minuteTimestamp; + private long hourTimestamp; + + public void feedRefreshed() { + long now = System.currentTimeMillis(); + if (now - minuteTimestamp > 60000) { + feedsRefreshedLastMinute = feedsRefreshedThisMinute; + feedsRefreshedThisMinute = 0; + minuteTimestamp = now; + + } + feedsRefreshedThisMinute++; + + if (now - hourTimestamp > 60000 * 60) { + feedsRefreshedLastHour = feedsRefreshedThisHour; + feedsRefreshedThisHour = 0; + hourTimestamp = now; + + } + feedsRefreshedThisHour++; + } + + public int getFeedsRefreshedLastMinute() { + return feedsRefreshedLastMinute; + } + + public int getFeedsRefreshedLastHour() { + return feedsRefreshedLastHour; + } +} diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java index eba81e39..064ac87c 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshTaskGiver.java @@ -10,6 +10,7 @@ import javax.ejb.LockType; import javax.ejb.Singleton; import javax.inject.Inject; +import com.commafeed.backend.MetricsBean; import com.commafeed.backend.StartupBean; import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.model.Feed; @@ -28,6 +29,9 @@ public class FeedRefreshTaskGiver { @Inject StartupBean startupBean; + @Inject + MetricsBean metricsBean; + private Queue queue = Queues.newConcurrentLinkedQueue(); @Lock(LockType.WRITE) @@ -49,6 +53,7 @@ public class FeedRefreshTaskGiver { } feedDAO.update(feeds); } + metricsBean.feedRefreshed(); return queue.poll(); } diff --git a/src/main/java/com/commafeed/frontend/rest/RESTApplication.java b/src/main/java/com/commafeed/frontend/rest/RESTApplication.java index a74b9657..94c0ed4e 100644 --- a/src/main/java/com/commafeed/frontend/rest/RESTApplication.java +++ b/src/main/java/com/commafeed/frontend/rest/RESTApplication.java @@ -5,6 +5,7 @@ import java.util.Set; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; +import com.commafeed.frontend.rest.resources.AdminMetricsREST; import com.commafeed.frontend.rest.resources.AdminSettingsREST; import com.commafeed.frontend.rest.resources.AdminUsersREST; import com.commafeed.frontend.rest.resources.EntriesREST; @@ -33,6 +34,7 @@ public class RESTApplication extends Application { set.add(SettingsREST.class); set.add(AdminUsersREST.class); set.add(AdminSettingsREST.class); + set.add(AdminMetricsREST.class); set.add(SessionREST.class); return set; } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminMetricsREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminMetricsREST.java new file mode 100644 index 00000000..277275b1 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminMetricsREST.java @@ -0,0 +1,25 @@ +package com.commafeed.frontend.rest.resources; + +import javax.inject.Inject; +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +import com.commafeed.backend.MetricsBean; +import com.commafeed.backend.model.UserRole.Role; +import com.commafeed.frontend.SecurityCheck; + +@SecurityCheck(Role.ADMIN) +@Path("admin/metrics") +public class AdminMetricsREST extends AbstractREST { + + @Inject + MetricsBean metricsBean; + + @Path("/get") + @GET + public int[] get() { + return new int[] { metricsBean.getFeedsRefreshedLastMinute(), + metricsBean.getFeedsRefreshedLastHour() }; + } + +}