package page.tools.stats;

import java.lang.management.LockInfo;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

import org.wikiwebserver.core.WareHouse;
import org.wikiwebserver.handler.http.HTTPException;
import org.wikiwebserver.handler.http.interfaces.HTTPResponder;
import page.config.SiteTemplatedPage;

import static org.wikiwebserver.html.HTMLHelper.*;

public class ThreadStatus extends SiteTemplatedPage implements HTTPResponder {
	
    public void generate() throws HTTPException {
        
        setTitle("Thread Status - WikiWebServer.org");
        
        append(h(1, "Thread Status") +
               p("WikiWebServer active thread status."));
        
        ThreadMXBean tm = ManagementFactory.getThreadMXBean();
        
        ThreadInfo[] threadsInfo = tm.dumpAllThreads(true, true);
        
        for (ThreadInfo threadInfo : threadsInfo) {
            displayThreadInfo(threadInfo);
        }
    }
    
    public void displayThreadInfo(ThreadInfo info) {
        append(h(2, info.getThreadName()));
        append(p("State: <b>" + info.getThreadState().toString() + "</b>"));
        
        LockInfo lockInfo = info.getLockInfo();
        if (lockInfo != null) append(p("Locked: <b>" + lockInfo.toString() + "</b>"));
        
        append(p(WareHouse.formatStackTrace(info.getStackTrace(), true, false)));
    }
    
    @Override
    public String getCacheKey() {
    	return null;
    }
}
