web/views/debug.py
author Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
Mon, 27 Feb 2012 17:02:31 +0100
changeset 8298 2a4bc6f75e9c
parent 8190 2a3c1b787688
child 8669 62213a34726e
child 8714 b70295aaed9d
permissions -rw-r--r--
[twisted] move out url logic from twisted (closes #2200593) Data, fck and static file are now served by cubicweb controller by default. Some hackish url rewriting is necessary to have them selected. This is necessary because cubicweb does not selection controller on multi level path. - 'Expires' header seems to conflict with Cache-Control set by HTTPCacheManger (don't know yet why HTTPCacheManager is involved here) mod_wsgi is now usable in simple cases (e.g. still requires persisten sessions).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7428
5338d895b891 [web session] fix session handling so we get a chance to have for instance the 'forgotpwd' feature working on a site where anonymous are not allowed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
     1
# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5248
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5824
de9b7e88660e cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    18
"""management and error screens"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
__docformat__ = "restructuredtext en"
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
    21
_ = unicode
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
from time import strftime, localtime
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    25
from logilab.mtconverter import xml_escape
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
    27
from cubicweb import BadConnectionId
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7810
diff changeset
    28
from cubicweb.predicates import none_rset, match_user_groups
981
d86d1ee3b60e fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents: 742
diff changeset
    29
from cubicweb.view import StartupView
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    30
from cubicweb.web.views import actions, tabs
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
def dict_to_html(w, dict):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
    # XHTML doesn't allow emtpy <ul> nodes
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
    if dict:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
        w(u'<ul>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
        for key in sorted(dict):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
            w(u'<li><span class="label">%s</span>: <span>%s</span></li>' % (
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    38
                xml_escape(str(key)), xml_escape(repr(dict[key]))))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
        w(u'</ul>')
635
305da8d6aa2d require_group/match_user_group -> match_user_groups
sylvain.thenault@logilab.fr
parents: 0
diff changeset
    40
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 981
diff changeset
    41
5963
4d75f743ed49 [actions] homogen action/view selectors. Move action together with associated view to avoid such thing in the future
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5825
diff changeset
    42
class SiteInfoAction(actions.ManagersAction):
4d75f743ed49 [actions] homogen action/view selectors. Move action together with associated view to avoid such thing in the future
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5825
diff changeset
    43
    __regid__ = 'siteinfo'
4d75f743ed49 [actions] homogen action/view selectors. Move action together with associated view to avoid such thing in the future
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5825
diff changeset
    44
    __select__ = match_user_groups('users','managers')
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7428
diff changeset
    45
    title = _('Site information')
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    46
    category = 'manage'
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    47
    order = 1000
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    48
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    49
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    50
class SiteInfoView(tabs.TabsMixin, StartupView):
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    51
    __regid__ = 'siteinfo'
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    52
    title = _('Site information')
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    53
    tabs = [_('info'), _('registry'), _('gc')]
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    54
    default_tab = 'info'
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    55
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    56
    def call(self, **kwargs):
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    57
        """The default view representing the instance's management"""
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    58
        self.w(u'<h1>%s</h1>' % self._cw._(self.title))
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    59
        self.render_tabs(self.tabs, self.default_tab)
5963
4d75f743ed49 [actions] homogen action/view selectors. Move action together with associated view to avoid such thing in the future
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5825
diff changeset
    60
4d75f743ed49 [actions] homogen action/view selectors. Move action together with associated view to avoid such thing in the future
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5825
diff changeset
    61
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    62
class ProcessInformationView(StartupView):
4865
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
    63
    """display various web server /repository information"""
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    64
    __regid__ = 'info'
5963
4d75f743ed49 [actions] homogen action/view selectors. Move action together with associated view to avoid such thing in the future
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5825
diff changeset
    65
    __select__ = none_rset() & match_user_groups('managers', 'users')
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    66
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    67
    title = _('server information')
5825
2daf1ac79d5c [debug views] set http cache max age to 0 on debug views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5824
diff changeset
    68
    cache_max_age = 0
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
    def call(self, **kwargs):
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    71
        req = self._cw
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    72
        dtformat = req.property_value('ui.datetime-format')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    73
        _ = req._
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    74
        w = self.w
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    75
        # generic instance information
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    76
        w(u'<h2>%s</h2>' % _('Instance'))
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    77
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    78
        w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    79
            _('config type'), self._cw.vreg.config.name))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    80
        w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    81
            _('config mode'), self._cw.vreg.config.mode))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    82
        w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    83
            _('instance home'), self._cw.vreg.config.apphome))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    84
        w(u'</table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    85
        vcconf = req.vreg.config.vc_config()
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    86
        w(u'<h3>%s</h3>' % _('versions configuration'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    87
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    88
        w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    89
            'CubicWeb', vcconf.get('cubicweb', _('no version information'))))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    90
        for cube in sorted(self._cw.vreg.config.cubes()):
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    91
            cubeversion = vcconf.get(cube, _('no version information'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    92
            w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    93
                cube, cubeversion))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    94
        w(u'</table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    95
        # repository information
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    96
        repo = req.vreg.config.repository(None)
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    97
        w(u'<h2>%s</h2>' % _('Repository'))
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    98
        w(u'<h3>%s</h3>' % _('resources usage'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    99
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   100
        stats = repo.stats()
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   101
        for element in sorted(stats):
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   102
            w(u'<tr><th align="left">%s</th><td>%s %s</td></tr>'
4725
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4723
diff changeset
   103
                   % (element, xml_escape(unicode(stats[element])),
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   104
                      element.endswith('percent') and '%' or '' ))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   105
        w(u'</table>')
6016
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   106
        if req.cnx._cnxtype == 'inmemory' and req.user.is_in_group('managers'):
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   107
            w(u'<h3>%s</h3>' % _('opened sessions'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   108
            sessions = repo._sessions.values()
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   109
            if sessions:
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   110
                w(u'<ul>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   111
                for session in sessions:
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   112
                    w(u'<li>%s (%s: %s)<br/>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   113
                        xml_escape(unicode(session)),
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   114
                        _('last usage'),
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   115
                        strftime(dtformat, localtime(session.timestamp))))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   116
                    dict_to_html(w, session.data)
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   117
                    w(u'</li>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   118
                w(u'</ul>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   119
            else:
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   120
                w(u'<p>%s</p>' % _('no repository sessions found'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   121
        # web server information
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   122
        w(u'<h2>%s</h2>' % _('Web server'))
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   123
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   124
        w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   125
            _('base url'), req.base_url()))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   126
        w(u'<tr><th align="left">%s</th><td>%s</td></tr>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   127
            _('data directory url'), req.datadir_url))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   128
        w(u'</table>')
6016
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   129
        if req.user.is_in_group('managers'):
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   130
            from cubicweb.web.application import SESSION_MANAGER
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   131
            sessions = SESSION_MANAGER.current_sessions()
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   132
            w(u'<h3>%s</h3>' % _('opened web sessions'))
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   133
            if sessions:
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   134
                w(u'<ul>')
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   135
                for session in sessions:
7428
5338d895b891 [web session] fix session handling so we get a chance to have for instance the 'forgotpwd' feature working on a site where anonymous are not allowed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   136
                    if not session.cnx:
5338d895b891 [web session] fix session handling so we get a chance to have for instance the 'forgotpwd' feature working on a site where anonymous are not allowed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   137
                        w(u'<li>%s (NO CNX)</li>' % session.sessionid)
5338d895b891 [web session] fix session handling so we get a chance to have for instance the 'forgotpwd' feature working on a site where anonymous are not allowed
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6961
diff changeset
   138
                        continue
6020
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   139
                    try:
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   140
                        last_usage_time = session.cnx.check()
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   141
                    except BadConnectionId:
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   142
                        w(u'<li>%s (INVALID)</li>' % session.sessionid)
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   143
                        continue
6016
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   144
                    w(u'<li>%s (%s: %s)<br/>' % (
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   145
                        session.sessionid,
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   146
                        _('last usage'),
6020
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   147
                        strftime(dtformat, localtime(last_usage_time))))
6016
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   148
                    dict_to_html(w, session.data)
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   149
                    w(u'</li>')
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   150
                w(u'</ul>')
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   151
            else:
0eabedcfb0a9 [security] do not show sessions information to non managers users. Close security ticket #38246
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5963
diff changeset
   152
                w(u'<p>%s</p>' % _('no web sessions found'))
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   153
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   154
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   155
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   156
class RegistryView(StartupView):
4865
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   157
    """display vregistry content"""
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   158
    __regid__ = 'registry'
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   159
    __select__ = StartupView.__select__ & match_user_groups('managers')
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   160
    title = _('registry')
5825
2daf1ac79d5c [debug views] set http cache max age to 0 on debug views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5824
diff changeset
   161
    cache_max_age = 0
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   162
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   163
    def call(self, **kwargs):
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   164
        self.w(u'<h2>%s</h2>' % self._cw._("Registry's content"))
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   165
        keys = sorted(self._cw.vreg)
4916
4b8cdda342ae fix tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4873
diff changeset
   166
        url = xml_escape(self._cw.url())
4865
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   167
        self.w(u'<p>%s</p>\n' % ' - '.join('<a href="%s#%s">%s</a>'
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   168
                                           % (url, key, key) for key in keys))
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   169
        for key in keys:
6141
b8287e54b528 [web api] unify 'contentnav' (VComponent) and 'boxes' registries as 'ctxcomponents' (CtxComponent)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6020
diff changeset
   170
            if key in ('boxes', 'contentnavigation'): # those are bw compat registries
b8287e54b528 [web api] unify 'contentnav' (VComponent) and 'boxes' registries as 'ctxcomponents' (CtxComponent)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6020
diff changeset
   171
                continue
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   172
            self.w(u'<h3 id="%s">%s</h3>' % (key, key))
4865
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   173
            if self._cw.vreg[key]:
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   174
                values = sorted(self._cw.vreg[key].iteritems())
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   175
                self.wview('pyvaltable', pyvalue=[(key, xml_escape(repr(val)))
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   176
                                                  for key, val in values])
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   177
            else:
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   178
                self.w(u'<p>Empty</p>\n')
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   179
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   180
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   181
class GCView(StartupView):
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   182
    """display garbage collector information"""
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   183
    __regid__ = 'gc'
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   184
    __select__ = StartupView.__select__ & match_user_groups('managers')
4873
bfebe3d14d53 i18nupdate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4866
diff changeset
   185
    title = _('memory leak debugging')
5825
2daf1ac79d5c [debug views] set http cache max age to 0 on debug views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5824
diff changeset
   186
    cache_max_age = 0
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   187
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   188
    def call(self, **kwargs):
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   189
        from cubicweb._gcdebug import gc_info
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   190
        from rql.stmts import Union
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   191
        from cubicweb.appobject import AppObject
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   192
        from cubicweb.rset import ResultSet
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   193
        from cubicweb.dbapi import Connection, Cursor
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   194
        from cubicweb.web.request import CubicWebRequestBase
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   195
        lookupclasses = (AppObject,
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   196
                         Union, ResultSet,
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   197
                         Connection, Cursor,
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   198
                         CubicWebRequestBase)
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   199
        try:
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
   200
            from cubicweb.server.session import Session, InternalSession
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
   201
            lookupclasses += (InternalSession, Session)
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   202
        except ImportError:
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   203
            pass # no server part installed
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   204
        self.w(u'<h2>%s</h2>' % _('Garbage collection information'))
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   205
        counters, ocounters, garbage = gc_info(lookupclasses,
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   206
                                               viewreferrersclasses=())
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
   207
        self.w(u'<h3>%s</h3>' % self._cw._('Looked up classes'))
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   208
        values = sorted(counters.iteritems(), key=lambda x: x[1], reverse=True)
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   209
        self.wview('pyvaltable', pyvalue=values)
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
   210
        self.w(u'<h3>%s</h3>' % self._cw._('Most referenced classes'))
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   211
        values = sorted(ocounters.iteritems(), key=lambda x: x[1], reverse=True)
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   212
        self.wview('pyvaltable', pyvalue=values[:self._cw.form.get('nb', 20)])
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   213
        if garbage:
6582
8eb7883b4223 [pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6141
diff changeset
   214
            self.w(u'<h3>%s</h3>' % self._cw._('Unreachable objects'))
5248
8f7843afb014 [views] fix bug on gc debugging view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4916
diff changeset
   215
            values = sorted(xml_escape(repr(o)) for o in garbage)
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   216
            self.wview('pyvallist', pyvalue=values)