diff --git a/plugins/Stats/StatsPlugin.py b/plugins/Stats/StatsPlugin.py
index f164ce8f..536719c9 100644
--- a/plugins/Stats/StatsPlugin.py
+++ b/plugins/Stats/StatsPlugin.py
@@ -2,7 +2,8 @@ import time
import html
import os
import json
-from collections import OrderedDict
+import sys
+import itertools
from Plugin import PluginManager
from Config import config
@@ -35,40 +36,9 @@ class UiRequestPlugin(object):
else:
return 0
- # /Stats entry point
- @helper.encodeResponse
- def actionStats(self):
- import gc
- import sys
- from Ui import UiRequest
- from Crypt import CryptConnection
+ def renderHead(self):
import main
-
-
- hpy = None
- if self.get.get("size") == "1": # Calc obj size
- try:
- import guppy
- hpy = guppy.hpy()
- except:
- pass
- self.sendHeader()
-
- if "Multiuser" in PluginManager.plugin_manager.plugin_names and not config.multiuser_local:
- yield "This function is disabled on this proxy"
- return
-
- s = time.time()
-
- # Style
- yield """
-
- """
+ from Crypt import CryptConnection
# Memory
yield "rev%s | " % config.rev
@@ -99,9 +69,13 @@ class UiRequestPlugin(object):
pass
yield "
"
+ def renderConnectionsTable(self):
+ import main
+
# Connections
yield "Connections (%s, total made: %s, in: %s, out: %s):
" % (
- len(main.file_server.connections), main.file_server.last_connection_id, main.file_server.num_incoming, main.file_server.num_outgoing
+ len(main.file_server.connections), main.file_server.last_connection_id,
+ main.file_server.num_incoming, main.file_server.num_outgoing
)
yield "
id | type | ip | open | crypt | ping | "
yield "buff | bad | idle | open | delay | cpu | out | in | last sent | "
@@ -140,10 +114,11 @@ class UiRequestPlugin(object):
])
yield "
"
+ def renderTrackers(self):
# Trackers
yield "
Trackers:
"
yield " address | request | successive errors | last_request |
"
- from Site import SiteAnnouncer # importing at the top of the file breaks plugins
+ from Site import SiteAnnouncer # importing at the top of the file breaks plugins
for tracker_address, tracker_stat in sorted(SiteAnnouncer.global_stats.items()):
yield self.formatTableRow([
("%s", tracker_address),
@@ -168,12 +143,13 @@ class UiRequestPlugin(object):
])
yield "
"
- # Tor hidden services
+ def renderTor(self):
+ import main
yield "
Tor hidden services (status: %s):
" % main.file_server.tor_manager.status
for site_address, onion in list(main.file_server.tor_manager.site_onions.items()):
yield "- %-34s: %s
" % (site_address, onion)
- # Db
+ def renderDbStats(self):
yield "
Db:
"
for db in Db.opened_dbs:
tables = [row["name"] for row in db.execute("SELECT name FROM sqlite_master WHERE type = 'table'").fetchall()]
@@ -185,8 +161,7 @@ class UiRequestPlugin(object):
time.time() - db.last_query_time, db.db_path, db_size, json.dumps(table_rows, sort_keys=True)
)
-
- # Sites
+ def renderSites(self):
yield "
Sites:"
yield ""
yield "address | connected | peers | content.json | out | in |
"
@@ -226,7 +201,7 @@ class UiRequestPlugin(object):
yield "
"
yield "
"
- # Big files
+ def renderBigfiles(self):
yield "
Big files:
"
for site in list(self.server.sites.values()):
if not site.settings.get("has_bigfile"):
@@ -250,7 +225,8 @@ class UiRequestPlugin(object):
yield ""
yield ""
- # Cmd stats
+ def renderRequests(self):
+ import main
yield ""
yield "
Sent commands:
"
yield "
"
@@ -268,9 +244,18 @@ class UiRequestPlugin(object):
yield ""
yield ""
- # No more if not in debug mode
- if not config.debug:
- return
+ def renderMemory(self):
+ import gc
+ from Ui import UiRequest
+
+ hpy = None
+ if self.get.get("size") == "1": # Calc obj size
+ try:
+ import guppy
+ hpy = guppy.hpy()
+ except Exception:
+ pass
+ self.sendHeader()
# Object types
@@ -371,6 +356,48 @@ class UiRequestPlugin(object):
for module_name, module in objs:
yield " - %.3fkb: %s %s
" % (self.getObjSize(module, hpy), module_name, html.escape(repr(module)))
+ # /Stats entry point
+ @helper.encodeResponse
+ def actionStats(self):
+ import gc
+
+ self.sendHeader()
+
+ if "Multiuser" in PluginManager.plugin_manager.plugin_names and not config.multiuser_local:
+ yield "This function is disabled on this proxy"
+ return
+
+ s = time.time()
+
+ # Style
+ yield """
+
+ """
+
+ renderers = [
+ self.renderHead(),
+ self.renderConnectionsTable(),
+ self.renderTrackers(),
+ self.renderTor(),
+ self.renderDbStats(),
+ self.renderSites(),
+ self.renderBigfiles(),
+ self.renderRequests()
+
+ ]
+
+ for part in itertools.chain(*renderers):
+ yield part
+
+ if config.debug:
+ for part in self.renderMemory():
+ yield part
+
gc.collect() # Implicit grabage collection
yield "Done in %.1f" % (time.time() - s)
@@ -457,7 +484,7 @@ class UiRequestPlugin(object):
yield "%.1fkb %s... " % (
float(sys.getsizeof(obj)) / 1024, html.escape(str(obj)), html.escape(str(obj)[0:100].ljust(100))
)
- except:
+ except Exception:
continue
for ref in refs:
yield " ["