--- /dev/null
+package net.wpitchoune.pnews.servlet;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.rometools.rome.io.FeedException;
+
+import net.wpitchoune.pnews.Article;
+import net.wpitchoune.pnews.ArticleStore;
+import net.wpitchoune.pnews.Category;
+import net.wpitchoune.pnews.Config;
+
+public class JSON {
+ private static final Logger LOG = Logger.getLogger(JSON.class.getName());
+
+ public static String getStats(ArticleProvider provider, Config config) {
+ JsonObject jstats, jreadcounts, jcategories, jmemory;
+ Runtime runtime;
+ List<Article> articles;
+ Article[] allArticles;
+
+ jstats = new JsonObject();
+
+ jstats.addProperty("articles-count", ArticleStore.singleton.size());
+
+ jreadcounts = new JsonObject();
+ jstats.add("read-counts", jreadcounts);
+
+ allArticles = ArticleStore.singleton.getArticles();
+ for (Article a: allArticles)
+ if (a.getReadCount() > 0)
+ jreadcounts.addProperty(a.getLink(), a.getReadCount());
+
+ jcategories = new JsonObject();
+ jstats.add("categories", jcategories);
+
+ for (Category cat: config.getCategories())
+ try {
+ articles = provider.getArticles(cat, null);
+ jcategories.addProperty(cat.getLabel(),
+ articles.size());
+ } catch (IllegalArgumentException | FeedException | IOException e) {
+ LOG.log(Level.SEVERE, "Fail to retrieve articles", e);
+ }
+
+ jmemory = new JsonObject();
+ jstats.add("memory", jmemory);
+
+ runtime = Runtime.getRuntime();
+ jmemory.addProperty("total", runtime.totalMemory());
+ jmemory.addProperty("max", runtime.maxMemory());
+ jmemory.addProperty("free", runtime.freeMemory());
+
+ return new Gson().toJson(jstats);
+ }
+}