Refactor /Stats page rendering to seprate functions
This commit is contained in:
parent
f6106be733
commit
b104d5dd41
1 changed files with 73 additions and 46 deletions
|
@ -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 """
|
||||
<style>
|
||||
* { font-family: monospace }
|
||||
table td, table th { text-align: right; padding: 0px 10px }
|
||||
.connections td { white-space: nowrap }
|
||||
.serving-False { opacity: 0.3 }
|
||||
</style>
|
||||
"""
|
||||
from Crypt import CryptConnection
|
||||
|
||||
# Memory
|
||||
yield "rev%s | " % config.rev
|
||||
|
@ -99,9 +69,13 @@ class UiRequestPlugin(object):
|
|||
pass
|
||||
yield "<br>"
|
||||
|
||||
def renderConnectionsTable(self):
|
||||
import main
|
||||
|
||||
# Connections
|
||||
yield "<b>Connections</b> (%s, total made: %s, in: %s, out: %s):<br>" % (
|
||||
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 "<table class='connections'><tr> <th>id</th> <th>type</th> <th>ip</th> <th>open</th> <th>crypt</th> <th>ping</th>"
|
||||
yield "<th>buff</th> <th>bad</th> <th>idle</th> <th>open</th> <th>delay</th> <th>cpu</th> <th>out</th> <th>in</th> <th>last sent</th>"
|
||||
|
@ -140,6 +114,7 @@ class UiRequestPlugin(object):
|
|||
])
|
||||
yield "</table>"
|
||||
|
||||
def renderTrackers(self):
|
||||
# Trackers
|
||||
yield "<br><br><b>Trackers:</b><br>"
|
||||
yield "<table class='trackers'><tr> <th>address</th> <th>request</th> <th>successive errors</th> <th>last_request</th></tr>"
|
||||
|
@ -168,12 +143,13 @@ class UiRequestPlugin(object):
|
|||
])
|
||||
yield "</table>"
|
||||
|
||||
# Tor hidden services
|
||||
def renderTor(self):
|
||||
import main
|
||||
yield "<br><br><b>Tor hidden services (status: %s):</b><br>" % main.file_server.tor_manager.status
|
||||
for site_address, onion in list(main.file_server.tor_manager.site_onions.items()):
|
||||
yield "- %-34s: %s<br>" % (site_address, onion)
|
||||
|
||||
# Db
|
||||
def renderDbStats(self):
|
||||
yield "<br><br><b>Db</b>:<br>"
|
||||
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 "<br><br><b>Sites</b>:"
|
||||
yield "<table>"
|
||||
yield "<tr><th>address</th> <th>connected</th> <th title='connected/good/total'>peers</th> <th>content.json</th> <th>out</th> <th>in</th> </tr>"
|
||||
|
@ -226,7 +201,7 @@ class UiRequestPlugin(object):
|
|||
yield "<br></td></tr>"
|
||||
yield "</table>"
|
||||
|
||||
# Big files
|
||||
def renderBigfiles(self):
|
||||
yield "<br><br><b>Big files</b>:<br>"
|
||||
for site in list(self.server.sites.values()):
|
||||
if not site.settings.get("has_bigfile"):
|
||||
|
@ -250,7 +225,8 @@ class UiRequestPlugin(object):
|
|||
yield "</table>"
|
||||
yield "</div>"
|
||||
|
||||
# Cmd stats
|
||||
def renderRequests(self):
|
||||
import main
|
||||
yield "<div style='float: left'>"
|
||||
yield "<br><br><b>Sent commands</b>:<br>"
|
||||
yield "<table>"
|
||||
|
@ -268,9 +244,18 @@ class UiRequestPlugin(object):
|
|||
yield "</div>"
|
||||
yield "<div style='clear: both'></div>"
|
||||
|
||||
# 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<br>" % (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 """
|
||||
<style>
|
||||
* { font-family: monospace }
|
||||
table td, table th { text-align: right; padding: 0px 10px }
|
||||
.connections td { white-space: nowrap }
|
||||
.serving-False { opacity: 0.3 }
|
||||
</style>
|
||||
"""
|
||||
|
||||
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 <span title=\"%s\">%s</span>... " % (
|
||||
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 " ["
|
||||
|
|
Loading…
Reference in a new issue