/usr/share/pyshared/MoinMoin/macro/SystemInfo.py is in python-moinmoin 1.9.3-1ubuntu2.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | # -*- coding: iso-8859-1 -*-
"""
MoinMoin - SystemInfo Macro
This macro shows some info about your wiki, wiki software and your system.
@copyright: 2006-2008 MoinMoin:ThomasWaldmann,
2007 MoinMoin:ReimarBauer
@license: GNU GPL, see COPYING for details.
"""
Dependencies = ['pages']
import sys, os
from StringIO import StringIO
from MoinMoin import wikiutil, version
from MoinMoin import action, macro, parser
from MoinMoin.logfile import editlog, eventlog
from MoinMoin.Page import Page
class SystemInfo:
def __init__(self, macro):
self.macro = macro
self.request = macro.request
self.formatter = macro.formatter
def formatInReadableUnits(self, size):
size = float(size)
unit = u' Byte'
if size > 9999:
unit = u' KiB'
size /= 1024
if size > 9999:
unit = u' MiB'
size /= 1024
if size > 9999:
unit = u' GiB'
size /= 1024
return u"%.1f %s" % (size, unit)
def getDirectorySize(self, path):
try:
dirsize = 0
for root, dummy, files in os.walk(path):
dirsize += sum([os.path.getsize(os.path.join(root, name)) for name in files])
except EnvironmentError:
dirsize = -1
return dirsize
def render(self):
_ = self.request.getText
return self.formatter.rawHTML(self.getInfo())
def getInfo(self):
_ = self.request.getText
request = self.request
buf = StringIO()
row = lambda label, value, buf=buf: buf.write(u'<dt>%s</dt><dd>%s</dd>' % (label, value))
buf.write(u'<dl>')
row(_('Python Version'), sys.version)
row(_('MoinMoin Version'), _('Release %s [Revision %s]') % (version.release, version.revision))
if not request.user.valid:
# for an anonymous user it ends here.
buf.write(u'</dl>')
return buf.getvalue()
if request.user.isSuperUser():
# superuser gets all page dependent stuff only
try:
import Ft
ftversion = Ft.__version__
except ImportError:
ftversion = None
except AttributeError:
ftversion = 'N/A'
if ftversion:
row(_('4Suite Version'), ftversion)
# TODO add python-xml check and display it
# Get the full pagelist of the wiki
pagelist = request.rootpage.getPageList(user='')
systemPages = []
totalsize = 0
for page in pagelist:
if wikiutil.isSystemPage(request, page):
systemPages.append(page)
totalsize += Page(request, page).size()
row(_('Number of pages'), str(len(pagelist)-len(systemPages)))
row(_('Number of system pages'), str(len(systemPages)))
row(_('Accumulated page sizes'), self.formatInReadableUnits(totalsize))
data_dir = request.cfg.data_dir
row(_('Disk usage of %(data_dir)s/pages/') % {'data_dir': data_dir},
self.formatInReadableUnits(self.getDirectorySize(os.path.join(data_dir, 'pages'))))
row(_('Disk usage of %(data_dir)s/') % {'data_dir': data_dir},
self.formatInReadableUnits(self.getDirectorySize(data_dir)))
edlog = editlog.EditLog(request)
row(_('Entries in edit log'), "%s (%s)" % (edlog.lines(), self.formatInReadableUnits(edlog.size())))
# This puts a heavy load on the server when the log is large
eventlogger = eventlog.EventLog(request)
row('Event log', self.formatInReadableUnits(eventlogger.size()))
nonestr = _("NONE")
# a valid user gets info about all installed extensions
row(_('Global extension macros'), ', '.join(macro.modules) or nonestr)
row(_('Local extension macros'),
', '.join(wikiutil.wikiPlugins('macro', self.macro.cfg)) or nonestr)
glob_actions = [x for x in action.modules
if not x in request.cfg.actions_excluded]
row(_('Global extension actions'), ', '.join(glob_actions) or nonestr)
loc_actions = [x for x in wikiutil.wikiPlugins('action', self.macro.cfg)
if not x in request.cfg.actions_excluded]
row(_('Local extension actions'), ', '.join(loc_actions) or nonestr)
row(_('Global parsers'), ', '.join(parser.modules) or nonestr)
row(_('Local extension parsers'),
', '.join(wikiutil.wikiPlugins('parser', self.macro.cfg)) or nonestr)
try:
import xapian
xapVersion = 'Xapian %s' % xapian.version_string()
except ImportError:
xapian = None
xapVersion = _('Xapian and/or Python Xapian bindings not installed')
xapian_enabled = request.cfg.xapian_search
xapState = (_('Disabled'), _('Enabled'))
xapRow = '%s, %s' % (xapState[xapian_enabled], xapVersion)
if xapian and xapian_enabled:
from MoinMoin.search.Xapian.indexing import XapianIndex
idx = XapianIndex(request)
idxState = (_('index unavailable'), _('index available'))
idx_exists = idx.exists()
xapRow += ', %s' % idxState[idx_exists]
if idx_exists:
xapRow += ', %s' % (_('last modified: %s') %
request.user.getFormattedDateTime(idx.mtime()))
row(_('Xapian search'), xapRow)
if xapian and xapian_enabled:
stems = xapian.Stem.get_available_languages()
row(_('Stemming for Xapian'), xapState[request.cfg.xapian_stemming] +
" (%s)" % (stems or nonestr))
try:
from threading import activeCount
t_count = activeCount()
except ImportError:
t_count = None
row(_('Active threads'), t_count or _('N/A'))
buf.write(u'</dl>')
return buf.getvalue()
def macro_SystemInfo(macro):
if macro.request.isSpiderAgent: # reduce bot cpu usage
return ''
return SystemInfo(macro).render()
|