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
pull/1/head
orbiter 18 years ago
parent ac376662cc
commit 30d79d69a6

@ -24,6 +24,7 @@
// along with this program; if not, write to the Free Software // along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
@ -52,19 +53,16 @@ public class SearchStatistics_p {
prop.put("page", page); prop.put("page", page);
int maxCount = 100; int maxCount = 100;
int entCount = 0;
boolean dark = true; boolean dark = true;
Map.Entry entry;
if ((page == 1) || (page == 3)) { 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; Long trackerHandle;
HashMap searchProfile; HashMap searchProfile;
StringBuffer a = null; StringBuffer a = null;
int m = Math.min(maxCount, (page == 1) ? switchboard.localSearches.size(): switchboard.remoteSearches.size()) - 1; int m = Math.min(maxCount, array.size());
while ((entCount < maxCount) && (i.hasNext())) { for (int entCount = 0; entCount < m; entCount++) {
entry = (Map.Entry) i.next(); searchProfile = (HashMap) array.get(array.size() - entCount - 1);
trackerHandle = (Long) entry.getKey(); trackerHandle = (Long) searchProfile.get("time");
searchProfile = (HashMap) entry.getValue();
if (page == 1) { if (page == 1) {
Iterator wi = ((Set) searchProfile.get("querywords")).iterator(); Iterator wi = ((Set) searchProfile.get("querywords")).iterator();
@ -73,34 +71,33 @@ public class SearchStatistics_p {
} }
// put values in template // put values in template
prop.put("page_list_" + (m - entCount) + "_dark", ((dark) ? 1 : 0) ); dark =! dark; prop.put("page_list_" + entCount + "_dark", ((dark) ? 1 : 0) ); dark =! dark;
prop.put("page_list_" + (m - entCount) + "_host", (String) searchProfile.get("host")); prop.put("page_list_" + entCount + "_host", (String) searchProfile.get("host"));
prop.put("page_list_" + (m - entCount) + "_date", yacyCore.universalDateShortString(new Date(trackerHandle.longValue()))); prop.put("page_list_" + entCount + "_date", yacyCore.universalDateShortString(new Date(trackerHandle.longValue())));
if (page == 1) { if (page == 1) {
// local search // local search
prop.put("page_list_" + (m - entCount) + "_offset", ((Integer) searchProfile.get("offset")).toString()); prop.put("page_list_" + entCount + "_offset", ((Integer) searchProfile.get("offset")).toString());
prop.put("page_list_" + (m - entCount) + "_querywords", new String(a)); prop.put("page_list_" + entCount + "_querywords", new String(a));
} else { } else {
// remote search // remote search
prop.put("page_list_" + (m - entCount) + "_peername", (String) searchProfile.get("peername")); prop.put("page_list_" + entCount + "_peername", (String) searchProfile.get("peername"));
prop.put("page_list_" + (m - entCount) + "_queryhashes", plasmaSearchQuery.anonymizedQueryHashes((Set) searchProfile.get("queryhashes"))); 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_" + entCount + "_querycount", ((Integer) searchProfile.get("querycount")).toString());
prop.put("page_list_" + (m - entCount) + "_querytime", ((Long) searchProfile.get("querytime")).toString()); prop.put("page_list_" + entCount + "_querytime", ((Long) searchProfile.get("querytime")).toString());
prop.put("page_list_" + (m - entCount) + "_resultcount", ((Integer) searchProfile.get("resultcount")).toString()); prop.put("page_list_" + entCount + "_resultcount", ((Integer) searchProfile.get("resultcount")).toString());
prop.put("page_list_" + (m - entCount) + "_resulttime", ((Long) searchProfile.get("resulttime")).toString()); prop.put("page_list_" + entCount + "_resulttime", ((Long) searchProfile.get("resulttime")).toString());
// next
entCount++;
} }
prop.put("page_list", entCount); prop.put("page_list", m);
prop.put("page_num", entCount); prop.put("page_num", m);
prop.put("page_total", (page == 1) ? switchboard.localSearches.size() : switchboard.remoteSearches.size()); prop.put("page_total", (page == 1) ? switchboard.localSearches.size() : switchboard.remoteSearches.size());
} }
if ((page == 2) || (page == 4)) { if ((page == 2) || (page == 4)) {
Iterator i = (page == 2) ? switchboard.localSearchTracker.entrySet().iterator() : switchboard.remoteSearchTracker.entrySet().iterator(); Iterator i = (page == 2) ? switchboard.localSearchTracker.entrySet().iterator() : switchboard.remoteSearchTracker.entrySet().iterator();
String host, handlestring; String host, handlestring;
TreeSet handles; TreeSet handles;
int entCount = 0;
Map.Entry entry;
while ((entCount < maxCount) && (i.hasNext())) { while ((entCount < maxCount) && (i.hasNext())) {
entry = (Map.Entry) i.next(); entry = (Map.Entry) i.next();
host = (String) entry.getKey(); host = (String) entry.getKey();

@ -252,7 +252,8 @@ public final class search {
searchProfile.put("host", client); searchProfile.put("host", client);
yacySeed remotepeer = yacyCore.seedDB.lookupByIP(natLib.getInetAddress(client), true, false, false); yacySeed remotepeer = yacyCore.seedDB.lookupByIP(natLib.getInetAddress(client), true, false, false);
searchProfile.put("peername", (remotepeer == null) ? "unknown" : remotepeer.getName()); 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); TreeSet handles = (TreeSet) sb.remoteSearchTracker.get(client);
if (handles == null) handles = new TreeSet(); if (handles == null) handles = new TreeSet();
handles.add(trackerHandle); handles.add(trackerHandle);

@ -118,7 +118,6 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet; import java.util.TreeSet;
import de.anomic.data.blogBoard; import de.anomic.data.blogBoard;
@ -239,7 +238,7 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
public dbImportManager dbImportManager; public dbImportManager dbImportManager;
public plasmaDHTFlush transferIdxThread = null; public plasmaDHTFlush transferIdxThread = null;
private plasmaDHTChunk dhtTransferChunk = null; private plasmaDHTChunk dhtTransferChunk = null;
public TreeMap localSearches, remoteSearches; public ArrayList localSearches, remoteSearches;
public HashMap localSearchTracker, remoteSearchTracker; public HashMap localSearchTracker, remoteSearchTracker;
public long startupTime = 0; public long startupTime = 0;
public long lastseedcheckuptime = -1; public long lastseedcheckuptime = -1;
@ -1126,8 +1125,8 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
// init search history trackers // init search history trackers
this.localSearchTracker = new HashMap(); // String:TreeSet - IP:set of Long(accessTime) this.localSearchTracker = new HashMap(); // String:TreeSet - IP:set of Long(accessTime)
this.remoteSearchTracker = new HashMap(); this.remoteSearchTracker = new HashMap();
this.localSearches = new TreeMap(); // Long:HashMap - Long(accessTime):properties this.localSearches = new ArrayList(); // contains search result properties as HashMaps
this.remoteSearches = new TreeMap(); this.remoteSearches = new ArrayList();
// init messages: clean up message symbol // init messages: clean up message symbol
File notifierSource = new File(getRootPath(), getConfig(HTROOT_PATH, HTROOT_PATH_DEFAULT) + "/env/grafics/empty.gif"); 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 // prepare search statistics
Long trackerHandle = new Long(System.currentTimeMillis()); Long trackerHandle = new Long(System.currentTimeMillis());
HashMap searchProfile = theSearch.resultProfile(); HashMap searchProfile = theSearch.resultProfile();
searchProfile.put("time", trackerHandle);
searchProfile.put("host", client); searchProfile.put("host", client);
searchProfile.put("offset", new Integer(0)); searchProfile.put("offset", new Integer(0));
searchProfile.put("results", results); searchProfile.put("results", results);
this.localSearches.put(trackerHandle, searchProfile); this.localSearches.add(searchProfile);
TreeSet handles = (TreeSet) this.localSearchTracker.get(client); TreeSet handles = (TreeSet) this.localSearchTracker.get(client);
if (handles == null) handles = new TreeSet(); if (handles == null) handles = new TreeSet();
handles.add(trackerHandle); handles.add(trackerHandle);

Loading…
Cancel
Save