diff options
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/CleaningUp.java')
-rw-r--r-- | src/main/java/com/juick/xmpp/s2s/CleaningUp.java | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/main/java/com/juick/xmpp/s2s/CleaningUp.java b/src/main/java/com/juick/xmpp/s2s/CleaningUp.java new file mode 100644 index 00000000..48771580 --- /dev/null +++ b/src/main/java/com/juick/xmpp/s2s/CleaningUp.java @@ -0,0 +1,102 @@ +package com.juick.xmpp.s2s; + +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.Iterator; + +/** + * + * @author ugnich + */ +public class CleaningUp implements Runnable { + + @Override + public void run() { + while (true) { + try { + PrintWriter statsFile = new PrintWriter(XMPPComponent.STATSFILE, "UTF-8"); + statsFile.write("<html><body><h2>Threads: " + Thread.activeCount() + "</h2>"); + statsFile.write("<h2>Out (" + XMPPComponent.outConnections.size() + ")</h2><table border=1><tr><th>to</th><th>sid</th><th>inactive</th><th>out packets</th><th>out bytes</th></tr>"); + + long now = System.currentTimeMillis(); + + synchronized (XMPPComponent.outConnections) { + for (Iterator<ConnectionOut> i = XMPPComponent.outConnections.iterator(); i.hasNext();) { + ConnectionOut c = i.next(); + int inactive = (int) ((double) (now - c.tsLocalData) / 1000.0); + if (inactive > 900) { + c.closeConnection(); + i.remove(); + } else { + statsFile.write(" <tr>"); + statsFile.write(" <td>" + c.to + "</td>\n"); + statsFile.write(" <td>" + c.streamID + "</td>\n"); + statsFile.write(" <td>" + inactive + "</td>\n"); + statsFile.write(" <td>" + c.packetsLocal + "</td>\n"); + statsFile.write(" <td>" + c.bytesLocal + "</td>\n"); + statsFile.write(" <tr>"); + } + } + } + + statsFile.write("</table><h2>In (" + XMPPComponent.inConnections.size() + ")</h2><table border=1><tr><th>from</th><th>sid</th><th>inactive</th><th>in packets</th></tr>"); + + synchronized (XMPPComponent.inConnections) { + for (Iterator<ConnectionIn> i = XMPPComponent.inConnections.iterator(); i.hasNext();) { + ConnectionIn c = i.next(); + int inactive = (int) ((double) (now - c.tsRemoteData) / 1000.0); + if (inactive > 900) { + c.closeConnection(); + i.remove(); + } else { + statsFile.write(" <tr>"); + if (c.from.isEmpty()) { + statsFile.write(" <td> </td>\n"); + } else if (c.from.size() == 1) { + statsFile.write(" <td>" + c.from.get(0) + "</td>\n"); + } else { + String out = " <td>"; + for (int n = 0; n < c.from.size(); n++) { + if (n > 0) { + out += "<br/>"; + } + out += c.from.get(n); + } + statsFile.write(out + "</td>\n"); + } + statsFile.write(" <td>" + c.streamID + "</td>\n"); + statsFile.write(" <td>" + inactive + "</td>\n"); + statsFile.write(" <td>" + c.packetsRemote + "</td>\n"); + statsFile.write(" <tr>"); + } + } + } + + statsFile.write("</table><h2>Cache (" + XMPPComponent.outCache.size() + ")</h2><table border=1><tr><th>host</th><th>live</th><th>size</th></tr>"); + + synchronized (XMPPComponent.outCache) { + for (Iterator<CacheEntry> i = XMPPComponent.outCache.iterator(); i.hasNext();) { + CacheEntry c = i.next(); + int inactive = (int) ((double) (now - c.tsCreated) / 1000.0); + if (inactive > 600) { + i.remove(); + } else { + statsFile.write("<tr><td>" + c.hostname + "</td><td>" + inactive + "</td><td>" + c.xml.length() + "</td></tr>"); + } + } + } + + statsFile.write("</table></body></html>"); + statsFile.close(); + + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + } + } catch (FileNotFoundException e) { + } catch (UnsupportedEncodingException e) { + } + } + } +} |