yacy_search_server/htroot/PeerLoadPicture.java
Michael Peter Christen 9116013c64 - allow lazy initialization of solr value (if using 'lazy', then no
0-values and no empty strings are written). This may save a lot of
memory (in ram and on disc) if excessive 0-values or empty strings
appear)
- do not allow default boolean values for checkboxes because that does
not make sense: browsers may omit the checkbox attribute name if the box
is not checked. A default value 'true' would not comply with the
semantic of the browsers response.
- add a checkbox in IndexFederated_p for the lazy initialization of solr
fields.
2012-06-27 12:17:58 +02:00

87 lines
3.2 KiB
Java

import java.awt.Color;
import java.awt.Image;
import java.util.HashMap;
import java.util.Iterator;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.kelondro.workflow.BusyThread;
import net.yacy.peers.graphics.NetworkGraph;
import net.yacy.peers.graphics.NetworkGraph.CircleThreadPiece;
import net.yacy.search.SwitchboardConstants;
import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch;
public class PeerLoadPicture {
public static Image respond(final RequestHeader header, final serverObjects post, final serverSwitch env) {
int width = 800;
int height = 600;
boolean showidle = true;
if (post != null) {
width = post.getInt("width", 800);
height = post.getInt("height", 600);
showidle = post.getBoolean("showidle");
}
final CircleThreadPiece idle = new CircleThreadPiece("Idle", new Color(170, 255, 170));
final CircleThreadPiece misc = new CircleThreadPiece("Misc.", new Color(190, 50, 180));
final HashMap<String, CircleThreadPiece> pieces = new HashMap<String, CircleThreadPiece>();
pieces.put(null, idle);
pieces.put(SwitchboardConstants.INDEX_DIST, new CircleThreadPiece("DHT-Distribution", new Color(119, 136, 153)));
pieces.put(SwitchboardConstants.PEER_PING, new CircleThreadPiece("YaCy Core", new Color(255, 230, 160)));
final Iterator<String> threads = env.threadNames();
String threadname;
BusyThread thread;
long busy_time = 0;
//Iterate over threads
while (threads.hasNext()) {
threadname = threads.next();
thread = env.getThread(threadname);
//count total times
busy_time += thread.getBlockTime();
busy_time += thread.getExecTime();
if (showidle) idle.addExecTime(thread.getSleepTime());
//count threadgroup-specific times
final CircleThreadPiece piece = pieces.get(threadname);
if (piece == null) {
misc.addExecTime(thread.getBlockTime()+thread.getExecTime());
} else {
piece.addExecTime(thread.getBlockTime()+thread.getExecTime());
}
}
busy_time += idle.getExecTime();
// set respective angles
final Iterator<CircleThreadPiece> it = pieces.values().iterator();
CircleThreadPiece current;
while (it.hasNext()) {
current = it.next();
current.setFraction(busy_time);
//remove unneccessary elements
if(current.getAngle() == 0) it.remove();
}
misc.setFraction(busy_time);
// too small values lead to an error, too big to huge CPU/memory consumption,
// resulting in possible DOS.
if (width < 40) width = 40;
if (width > 1920) width = 1920;
if (height < 30) height = 30;
if (height > 1440) height = 1440;
return NetworkGraph.getPeerLoadPicture(
5000,
width,
height,
pieces.values().toArray(new CircleThreadPiece[pieces.size()]),
misc
);
}
}