aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/xmpp/s2s/CleaningUp.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/CleaningUp.java')
-rw-r--r--src/main/java/com/juick/xmpp/s2s/CleaningUp.java102
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>&nbsp;</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) {
+ }
+ }
+ }
+}