cleanup, moved to net.wpitchoune package
[pnews.git] / war / src / main / java / net / wpitchoune / pnews / servlet / JSON.java
diff --git a/war/src/main/java/net/wpitchoune/pnews/servlet/JSON.java b/war/src/main/java/net/wpitchoune/pnews/servlet/JSON.java
new file mode 100644 (file)
index 0000000..70b1c24
--- /dev/null
@@ -0,0 +1,60 @@
+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);                
+        }
+}