diff --git a/htroot/SearchStatisticsLocal_p.html b/htroot/SearchStatisticsLocal_p.html
deleted file mode 100644
index 48b5d6a26..000000000
--- a/htroot/SearchStatisticsLocal_p.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- YaCy '#[clientname]#': Local Search Statistics
- #%env/templates/metas.template%#
-
-
- #%env/templates/header.template%#
- #%env/templates/submenuSearchStatistics.template%#
- Search Statistics: Local Searches
- This is a list of searches that had been requested from this' peer search interface
- Showing #[num]# entries from a total of #[total]# Requests.
-
-
- #{list}#
-
- #[host]# |
- #[date]# |
- #[querycount]# |
- #[resultcount]# |
- #[querytime]# |
- #[resulttime]# |
- #[querywords]# |
-
- #{/list}#
-
- #%env/templates/footer.template%#
-
-
diff --git a/htroot/SearchStatisticsLocal_p.java b/htroot/SearchStatisticsLocal_p.java
deleted file mode 100644
index d894e0d6f..000000000
--- a/htroot/SearchStatisticsLocal_p.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// SearchStatisticsLocal_p.java
-// (C) 2006 by Michael Peter Christen; mc@anomic.de, Frankfurt a. M., Germany
-// first published 14.01.2007 on http://www.anomic.de
-//
-// This is a part of YaCy, a peer-to-peer based web search engine
-//
-// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
-// $LastChangedRevision: 1986 $
-// $LastChangedBy: orbiter $
-//
-// LICENSE
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import de.anomic.http.httpHeader;
-import de.anomic.plasma.plasmaSwitchboard;
-import de.anomic.server.serverObjects;
-import de.anomic.server.serverSwitch;
-
-public class SearchStatisticsLocal_p {
-
- public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch sb) {
- plasmaSwitchboard switchboard = (plasmaSwitchboard) sb;
-
- // return variable that accumulates replacements
- serverObjects prop = new serverObjects();
-
- int maxCount = 100;
- int entCount = 0;
- boolean dark = true;
- Iterator i = switchboard.localSearches.entrySet().iterator();
- Map.Entry entry;
- Long trackerHandle;
- HashMap searchProfile;
- while ((entCount < maxCount) && (i.hasNext())) {
- entry = (Map.Entry) i.next();
- trackerHandle = (Long) entry.getKey();
- searchProfile = (HashMap) entry.getValue();
-
- Iterator wi = ((Set) searchProfile.get("querywords")).iterator();
- StringBuffer a = new StringBuffer();
- while (wi.hasNext()) a.append((String) wi.next()).append(' ');
-
- // put values in template
- prop.put("list_" + entCount + "_dark", ((dark) ? 1 : 0) ); dark =! dark;
- prop.put("list_" + entCount + "_host", (String) searchProfile.get("host"));
- prop.put("list_" + entCount + "_date", (new Date(trackerHandle.longValue())).toString());
- prop.put("list_" + entCount + "_querywords", new String(a));
- prop.put("list_" + entCount + "_querycount", ((Integer) searchProfile.get("querycount")).toString());
- prop.put("list_" + entCount + "_querytime", ((Long) searchProfile.get("querytime")).toString());
- prop.put("list_" + entCount + "_resultcount", ((Integer) searchProfile.get("resultcount")).toString());
- prop.put("list_" + entCount + "_resulttime", ((Long) searchProfile.get("resulttime")).toString());
-
- // next
- entCount++;
- }
- prop.put("list", entCount);
- prop.put("num", entCount);
- prop.put("total", switchboard.localSearches.size());
- // return rewrite properties
- return prop;
- }
-
-}
diff --git a/htroot/SearchStatisticsRemote_p.html b/htroot/SearchStatisticsRemote_p.html
deleted file mode 100644
index 6537973d7..000000000
--- a/htroot/SearchStatisticsRemote_p.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- YaCy '#[clientname]#': Remote Search Statistics
- #%env/templates/metas.template%#
-
-
- #%env/templates/header.template%#
- #%env/templates/submenuSearchStatistics.template%#
- Search Statistics: Remote Searches
- This is a list of searches that had been requested from remote peer search interface
- Showing #[num]# entries from a total of #[total]# Requests.
-
-
- #{list}#
-
- #[host]# |
- #[date]# |
- #[querycount]# |
- #[resultcount]# |
- #[querytime]# |
- #[resulttime]# |
- #[queryhashes]# |
-
- #{/list}#
-
- #%env/templates/footer.template%#
-
-
diff --git a/htroot/SearchStatisticsRemote_p.java b/htroot/SearchStatisticsRemote_p.java
deleted file mode 100644
index 7829f82ca..000000000
--- a/htroot/SearchStatisticsRemote_p.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// SearchStatisticsRemote_p.java
-// (C) 2006 by Michael Peter Christen; mc@anomic.de, Frankfurt a. M., Germany
-// first published 14.01.2007 on http://www.anomic.de
-//
-// This is a part of YaCy, a peer-to-peer based web search engine
-//
-// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
-// $LastChangedRevision: 1986 $
-// $LastChangedBy: orbiter $
-//
-// LICENSE
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import de.anomic.http.httpHeader;
-import de.anomic.plasma.plasmaSearchQuery;
-import de.anomic.plasma.plasmaSwitchboard;
-import de.anomic.server.serverObjects;
-import de.anomic.server.serverSwitch;
-
-public class SearchStatisticsRemote_p {
-
- public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch sb) {
- plasmaSwitchboard switchboard = (plasmaSwitchboard) sb;
-
- // return variable that accumulates replacements
- serverObjects prop = new serverObjects();
-
- int maxCount = 100;
- int entCount = 0;
- boolean dark = true;
- Iterator i = switchboard.remoteSearches.entrySet().iterator();
- Map.Entry entry;
- Long trackerHandle;
- HashMap searchProfile;
- while ((entCount < maxCount) && (i.hasNext())) {
- entry = (Map.Entry) i.next();
- trackerHandle = (Long) entry.getKey();
- searchProfile = (HashMap) entry.getValue();
-
- // put values in template
- prop.put("list_" + entCount + "_dark", ((dark) ? 1 : 0) ); dark =! dark;
- prop.put("list_" + entCount + "_host", (String) searchProfile.get("host"));
- prop.put("list_" + entCount + "_date", (new Date(trackerHandle.longValue())).toString());
- prop.put("list_" + entCount + "_queryhashes", plasmaSearchQuery.anonymizedQueryHashes((Set) searchProfile.get("queryhashes")));
- prop.put("list_" + entCount + "_querycount", ((Integer) searchProfile.get("querycount")).toString());
- prop.put("list_" + entCount + "_querytime", ((Long) searchProfile.get("querytime")).toString());
- prop.put("list_" + entCount + "_resultcount", ((Integer) searchProfile.get("resultcount")).toString());
- prop.put("list_" + entCount + "_resulttime", ((Long) searchProfile.get("resulttime")).toString());
-
- // next
- entCount++;
- }
- prop.put("list", entCount);
- prop.put("num", entCount);
- prop.put("total", switchboard.remoteSearches.size());
- // return rewrite properties
- return prop;
- }
-
-}
-
diff --git a/htroot/SearchStatistics_p.html b/htroot/SearchStatistics_p.html
new file mode 100644
index 000000000..c71659a80
--- /dev/null
+++ b/htroot/SearchStatistics_p.html
@@ -0,0 +1,78 @@
+
+
+
+ YaCy '#[clientname]#': Search Statistics
+ #%env/templates/metas.template%#
+
+
+ #%env/templates/header.template%#
+
+ #(page)#
+ Search Statistics
+ You can monitor search attempts at your own peer.
+ Local statistics apply for search attempts at your own search portal,
+ and remote statistics show search requests form other peer. Not all remote peers ask your peer during a global search,
+ therefore your cannot have a global view over all search requests within the complete YaCy network.
+ ::
+ Search Statistics: Local Searches
+ This is a list of searches that had been requested from this' peer search interface
+ Showing #[num]# entries from a total of #[total]# Requests.
+
+
+ #{list}#
+
+ #[host]# |
+ #[date]# |
+ #[querycount]# |
+ #[resultcount]# |
+ #[querytime]# |
+ #[resulttime]# |
+ #[querywords]# |
+
+ #{/list}#
+
+ ::
+ ::
+ Search Statistics: Remote Searches
+ This is a list of searches that had been requested from remote peer search interface
+ Showing #[num]# entries from a total of #[total]# Requests.
+
+
+ #{list}#
+
+ #[host]# |
+ #[date]# |
+ #[querycount]# |
+ #[resultcount]# |
+ #[querytime]# |
+ #[resulttime]# |
+ #[queryhashes]# |
+
+ #{/list}#
+
+ #(/page)#
+ #%env/templates/footer.template%#
+
+
diff --git a/htroot/SearchStatistics_p.java b/htroot/SearchStatistics_p.java
new file mode 100644
index 000000000..32b3bc029
--- /dev/null
+++ b/htroot/SearchStatistics_p.java
@@ -0,0 +1,93 @@
+// SearchStatisticsLocal_p.java
+// (C) 2006 by Michael Peter Christen; mc@anomic.de, Frankfurt a. M., Germany
+// first published 14.01.2007 on http://www.anomic.de
+//
+// This is a part of YaCy, a peer-to-peer based web search engine
+//
+// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
+// $LastChangedRevision: 1986 $
+// $LastChangedBy: orbiter $
+//
+// LICENSE
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import de.anomic.http.httpHeader;
+import de.anomic.plasma.plasmaSearchQuery;
+import de.anomic.plasma.plasmaSwitchboard;
+import de.anomic.server.serverObjects;
+import de.anomic.server.serverSwitch;
+
+public class SearchStatistics_p {
+
+ public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch sb) {
+ plasmaSwitchboard switchboard = (plasmaSwitchboard) sb;
+
+ // return variable that accumulates replacements
+ serverObjects prop = new serverObjects();
+ int page = 0;
+ if (post != null) page = post.getInt("page", 0);
+ prop.put("page", page);
+
+ int maxCount = 100;
+ int entCount = 0;
+ boolean dark = true;
+ Iterator i = (page <= 2) ? switchboard.localSearches.entrySet().iterator() : switchboard.remoteSearches.entrySet().iterator() ;
+ Map.Entry entry;
+ Long trackerHandle;
+ HashMap searchProfile;
+ StringBuffer a = null;
+ while ((entCount < maxCount) && (i.hasNext())) {
+ entry = (Map.Entry) i.next();
+ trackerHandle = (Long) entry.getKey();
+ searchProfile = (HashMap) entry.getValue();
+
+ if (page <= 2) {
+ Iterator wi = ((Set) searchProfile.get("querywords")).iterator();
+ a = new StringBuffer();
+ while (wi.hasNext()) a.append((String) wi.next()).append(' ');
+ }
+
+ // put values in template
+ prop.put("page_list_" + entCount + "_dark", ((dark) ? 1 : 0) ); dark =! dark;
+ prop.put("page_list_" + entCount + "_host", (String) searchProfile.get("host"));
+ prop.put("page_list_" + entCount + "_date", (new Date(trackerHandle.longValue())).toString());
+ if (page <= 2) {
+ prop.put("page_list_" + entCount + "_querywords", new String(a));
+ } else {
+ prop.put("page_list_" + entCount + "_queryhashes", plasmaSearchQuery.hashSet2hashString((Set) searchProfile.get("queryhashes")));
+ }
+ prop.put("page_list_" + entCount + "_querycount", ((Integer) searchProfile.get("querycount")).toString());
+ prop.put("page_list_" + entCount + "_querytime", ((Long) searchProfile.get("querytime")).toString());
+ prop.put("page_list_" + entCount + "_resultcount", ((Integer) searchProfile.get("resultcount")).toString());
+ prop.put("page_list_" + entCount + "_resulttime", ((Long) searchProfile.get("resulttime")).toString());
+
+ // next
+ entCount++;
+ }
+ prop.put("page_list", entCount);
+ prop.put("page_num", entCount);
+ prop.put("page_total", (page <= 2) ? switchboard.localSearches.size() : switchboard.remoteSearches.size());
+ // return rewrite properties
+ return prop;
+ }
+
+}
diff --git a/htroot/env/templates/header.template b/htroot/env/templates/header.template
index 05b280c4f..68990d591 100644
--- a/htroot/env/templates/header.template
+++ b/htroot/env/templates/header.template
@@ -10,7 +10,7 @@
-
+