From 30d79d69a6441a1ed0c4da8517eada92c6ff2c2e Mon Sep 17 00:00:00 2001 From: orbiter Date: Thu, 8 Feb 2007 10:42:35 +0000 Subject: [PATCH] fix for wrong display of search statistics see http://www.yacy-forum.de/viewtopic.php?p=31242#31242 git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3352 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/SearchStatistics_p.java | 47 +++++++++---------- htroot/yacy/search.java | 3 +- .../de/anomic/plasma/plasmaSwitchboard.java | 10 ++-- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/htroot/SearchStatistics_p.java b/htroot/SearchStatistics_p.java index 4d514c888..8d6a8fd2c 100644 --- a/htroot/SearchStatistics_p.java +++ b/htroot/SearchStatistics_p.java @@ -24,6 +24,7 @@ // 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.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -52,20 +53,17 @@ public class SearchStatistics_p { prop.put("page", page); int maxCount = 100; - int entCount = 0; boolean dark = true; - Map.Entry entry; if ((page == 1) || (page == 3)) { - Iterator i = (page == 1) ? switchboard.localSearches.entrySet().iterator() : switchboard.remoteSearches.entrySet().iterator(); + ArrayList array = (page == 1) ? switchboard.localSearches : switchboard.remoteSearches; Long trackerHandle; HashMap searchProfile; StringBuffer a = null; - int m = Math.min(maxCount, (page == 1) ? switchboard.localSearches.size(): switchboard.remoteSearches.size()) - 1; - while ((entCount < maxCount) && (i.hasNext())) { - entry = (Map.Entry) i.next(); - trackerHandle = (Long) entry.getKey(); - searchProfile = (HashMap) entry.getValue(); - + int m = Math.min(maxCount, array.size()); + for (int entCount = 0; entCount < m; entCount++) { + searchProfile = (HashMap) array.get(array.size() - entCount - 1); + trackerHandle = (Long) searchProfile.get("time"); + if (page == 1) { Iterator wi = ((Set) searchProfile.get("querywords")).iterator(); a = new StringBuffer(); @@ -73,34 +71,33 @@ public class SearchStatistics_p { } // put values in template - prop.put("page_list_" + (m - entCount) + "_dark", ((dark) ? 1 : 0) ); dark =! dark; - prop.put("page_list_" + (m - entCount) + "_host", (String) searchProfile.get("host")); - prop.put("page_list_" + (m - entCount) + "_date", yacyCore.universalDateShortString(new Date(trackerHandle.longValue()))); + 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", yacyCore.universalDateShortString(new Date(trackerHandle.longValue()))); if (page == 1) { // local search - prop.put("page_list_" + (m - entCount) + "_offset", ((Integer) searchProfile.get("offset")).toString()); - prop.put("page_list_" + (m - entCount) + "_querywords", new String(a)); + prop.put("page_list_" + entCount + "_offset", ((Integer) searchProfile.get("offset")).toString()); + prop.put("page_list_" + entCount + "_querywords", new String(a)); } else { // remote search - prop.put("page_list_" + (m - entCount) + "_peername", (String) searchProfile.get("peername")); - prop.put("page_list_" + (m - entCount) + "_queryhashes", plasmaSearchQuery.anonymizedQueryHashes((Set) searchProfile.get("queryhashes"))); + prop.put("page_list_" + entCount + "_peername", (String) searchProfile.get("peername")); + prop.put("page_list_" + entCount + "_queryhashes", plasmaSearchQuery.anonymizedQueryHashes((Set) searchProfile.get("queryhashes"))); } - prop.put("page_list_" + (m - entCount) + "_querycount", ((Integer) searchProfile.get("querycount")).toString()); - prop.put("page_list_" + (m - entCount) + "_querytime", ((Long) searchProfile.get("querytime")).toString()); - prop.put("page_list_" + (m - entCount) + "_resultcount", ((Integer) searchProfile.get("resultcount")).toString()); - prop.put("page_list_" + (m - entCount) + "_resulttime", ((Long) searchProfile.get("resulttime")).toString()); - - // next - entCount++; + 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()); } - prop.put("page_list", entCount); - prop.put("page_num", entCount); + prop.put("page_list", m); + prop.put("page_num", m); prop.put("page_total", (page == 1) ? switchboard.localSearches.size() : switchboard.remoteSearches.size()); } if ((page == 2) || (page == 4)) { Iterator i = (page == 2) ? switchboard.localSearchTracker.entrySet().iterator() : switchboard.remoteSearchTracker.entrySet().iterator(); String host, handlestring; TreeSet handles; + int entCount = 0; + Map.Entry entry; while ((entCount < maxCount) && (i.hasNext())) { entry = (Map.Entry) i.next(); host = (String) entry.getKey(); diff --git a/htroot/yacy/search.java b/htroot/yacy/search.java index 880a36c82..373bec079 100644 --- a/htroot/yacy/search.java +++ b/htroot/yacy/search.java @@ -252,7 +252,8 @@ public final class search { searchProfile.put("host", client); yacySeed remotepeer = yacyCore.seedDB.lookupByIP(natLib.getInetAddress(client), true, false, false); searchProfile.put("peername", (remotepeer == null) ? "unknown" : remotepeer.getName()); - sb.remoteSearches.put(trackerHandle, searchProfile); + searchProfile.put("time", trackerHandle); + sb.remoteSearches.add(searchProfile); TreeSet handles = (TreeSet) sb.remoteSearchTracker.get(client); if (handles == null) handles = new TreeSet(); handles.add(trackerHandle); diff --git a/source/de/anomic/plasma/plasmaSwitchboard.java b/source/de/anomic/plasma/plasmaSwitchboard.java index c7771c3a8..4be071231 100644 --- a/source/de/anomic/plasma/plasmaSwitchboard.java +++ b/source/de/anomic/plasma/plasmaSwitchboard.java @@ -118,7 +118,6 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.TreeMap; import java.util.TreeSet; import de.anomic.data.blogBoard; @@ -239,7 +238,7 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser public dbImportManager dbImportManager; public plasmaDHTFlush transferIdxThread = null; private plasmaDHTChunk dhtTransferChunk = null; - public TreeMap localSearches, remoteSearches; + public ArrayList localSearches, remoteSearches; public HashMap localSearchTracker, remoteSearchTracker; public long startupTime = 0; public long lastseedcheckuptime = -1; @@ -1126,8 +1125,8 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser // init search history trackers this.localSearchTracker = new HashMap(); // String:TreeSet - IP:set of Long(accessTime) this.remoteSearchTracker = new HashMap(); - this.localSearches = new TreeMap(); // Long:HashMap - Long(accessTime):properties - this.remoteSearches = new TreeMap(); + this.localSearches = new ArrayList(); // contains search result properties as HashMaps + this.remoteSearches = new ArrayList(); // init messages: clean up message symbol File notifierSource = new File(getRootPath(), getConfig(HTROOT_PATH, HTROOT_PATH_DEFAULT) + "/env/grafics/empty.gif"); @@ -2807,10 +2806,11 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser // prepare search statistics Long trackerHandle = new Long(System.currentTimeMillis()); HashMap searchProfile = theSearch.resultProfile(); + searchProfile.put("time", trackerHandle); searchProfile.put("host", client); searchProfile.put("offset", new Integer(0)); searchProfile.put("results", results); - this.localSearches.put(trackerHandle, searchProfile); + this.localSearches.add(searchProfile); TreeSet handles = (TreeSet) this.localSearchTracker.get(client); if (handles == null) handles = new TreeSet(); handles.add(trackerHandle);