web/views/debug.py
author Aurelien Campeas <aurelien.campeas@logilab.fr>
Wed, 04 Jun 2014 18:21:24 +0200
changeset 10336 9c38f674e36f
parent 10330 6c12264b3f18
child 10574 6a07c2dc3d85
permissions -rw-r--r--
[dbapi] retire repo.execute, which was used by the dbapi We will retire or reform pieces, mostly of the Repository class, that were related to the old dbapi way of life. Related to #3933480.
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
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7810
diff changeset
    27
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
    28
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
    29
from cubicweb.web.views import actions, tabs
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
def dict_to_html(w, dict):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
    # XHTML doesn't allow emtpy <ul> nodes
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
    if dict:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
        w(u'<ul>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
        for key in sorted(dict):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
            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
    37
                xml_escape(str(key)), xml_escape(repr(dict[key]))))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
        w(u'</ul>')
635
305da8d6aa2d require_group/match_user_group -> match_user_groups
sylvain.thenault@logilab.fr
parents: 0
diff changeset
    39
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 981
diff changeset
    40
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
    41
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
    42
    __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
    43
    __select__ = match_user_groups('users','managers')
7810
21683b1975e3 [i18n] tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7428
diff changeset
    44
    title = _('Site information')
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    45
    category = 'manage'
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    46
    order = 1000
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    47
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
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
    50
    __regid__ = 'siteinfo'
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    51
    title = _('Site information')
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    52
    tabs = [_('info'), _('registry'), _('gc')]
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    53
    default_tab = 'info'
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    54
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    55
    def call(self, **kwargs):
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    56
        """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
    57
        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
    58
        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
    59
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
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    61
class ProcessInformationView(StartupView):
4865
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
    62
    """display various web server /repository information"""
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    63
    __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
    64
    __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
    65
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    66
    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
    67
    cache_max_age = 0
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
    def call(self, **kwargs):
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    70
        req = self._cw
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    71
        dtformat = req.property_value('ui.datetime-format')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    72
        _ = req._
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
        w = self.w
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    74
        # generic instance information
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
    75
        w(u'<h2>%s</h2>' % _('Instance'))
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    76
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    77
        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
    78
            _('config type'), self._cw.vreg.config.name))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    79
        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
    80
            _('config mode'), self._cw.vreg.config.mode))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    81
        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
    82
            _('instance home'), self._cw.vreg.config.apphome))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    83
        w(u'</table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    84
        vcconf = req.vreg.config.vc_config()
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    85
        w(u'<h3>%s</h3>' % _('versions configuration'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    86
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    87
        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
    88
            'CubicWeb', vcconf.get('cubicweb', _('no version information'))))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    89
        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
    90
            cubeversion = vcconf.get(cube, _('no version information'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    91
            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
    92
                cube, cubeversion))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    93
        w(u'</table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    94
        # repository information
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    95
        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
    96
        w(u'<h2>%s</h2>' % _('Repository'))
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    97
        w(u'<h3>%s</h3>' % _('resources usage'))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    98
        w(u'<table>')
9034
cc3442054e48 [repo] move repo stats to Service (closes #2951067)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8718
diff changeset
    99
        stats = self._cw.call_service('repo_stats')
10309
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   100
        stats['looping_tasks'] = ', '.join('%s (%s seconds)' % (n, i) for n, i in stats['looping_tasks'])
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   101
        stats['threads'] = ', '.join(sorted(stats['threads']))
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   102
        for k in stats:
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   103
            if k in ('extid_cache_size', 'type_source_cache_size'):
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   104
                continue
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   105
            if k.endswith('_cache_size'):
35bf741203d6 [services] Prevent 'repo_stats' service from aggregating information
David Douard <david.douard@logilab.fr>
parents: 9671
diff changeset
   106
                stats[k] = '%s / %s' % (stats[k]['size'], stats[k]['maxsize'])
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   107
        for element in sorted(stats):
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   108
            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
   109
                   % (element, xml_escape(unicode(stats[element])),
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   110
                      element.endswith('percent') and '%' or '' ))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   111
        w(u'</table>')
8669
62213a34726e [db-api/configuration] simplify db-api and configuration so that all the connection information is in the repository url, closes #2521848
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8190
diff changeset
   112
        if req.cnx.is_repo_in_memory 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
   113
            w(u'<h3>%s</h3>' % _('opened sessions'))
9670
5b661f58978c [web/debug] Fix check for open sessions
Julien Cristau <julien.cristau@logilab.fr>
parents: 9034
diff changeset
   114
            sessions = repo._sessions.values()
4714
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   115
            if sessions:
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   116
                w(u'<ul>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   117
                for session in sessions:
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   118
                    w(u'<li>%s (%s: %s)<br/>' % (
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   119
                        xml_escape(unicode(session)),
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   120
                        _('last usage'),
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   121
                        strftime(dtformat, localtime(session.timestamp))))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   122
                    dict_to_html(w, session.data)
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   123
                    w(u'</li>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   124
                w(u'</ul>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   125
            else:
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   126
                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
   127
        # web server information
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   128
        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
   129
        w(u'<table>')
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   130
        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
   131
            _('base url'), req.base_url()))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   132
        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
   133
            _('data directory url'), req.datadir_url))
fccda6dd91bf merge debug and info views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   134
        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
   135
        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
   136
            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
   137
            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
   138
            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
   139
            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
   140
                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
   141
                for session in sessions:
9671
a16fcf064323 [web/debug] remove code broken by session refactoring
Julien Cristau <julien.cristau@logilab.fr>
parents: 9670
diff changeset
   142
                    last_usage_time = session.mtime
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
   143
                    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
   144
                        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
   145
                        _('last usage'),
6020
6f3b4f20ee9f backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6012 6016
diff changeset
   146
                        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
   147
                    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
   148
                    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
   149
                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
   150
            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
   151
                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
   152
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   153
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
class RegistryView(StartupView):
4865
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   156
    """display vregistry content"""
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   157
    __regid__ = 'registry'
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   158
    __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
   159
    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
   160
    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
   161
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   162
    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
   163
        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
   164
        keys = sorted(self._cw.vreg)
4916
4b8cdda342ae fix tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4873
diff changeset
   165
        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
   166
        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
   167
                                           % (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
   168
        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
   169
            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
   170
                continue
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   171
            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
   172
            if self._cw.vreg[key]:
90ad729d3540 [debug] minor improvments to the registry view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4725
diff changeset
   173
                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
   174
                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
   175
                                                  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
   176
            else:
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2312
diff changeset
   177
                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
   178
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
class GCView(StartupView):
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   181
    """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
   182
    __regid__ = 'gc'
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   183
    __select__ = StartupView.__select__ & match_user_groups('managers')
4873
bfebe3d14d53 i18nupdate
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4866
diff changeset
   184
    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
   185
    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
   186
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   187
    def call(self, **kwargs):
10311
4e9dcca71fad [views] Fix 'gc' view to use 'repo_gc_stats' service
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10309
diff changeset
   188
        stats = self._cw.call_service('repo_gc_stats')
6961
686c59dfc401 [manage view] cleanup manage view and user menu
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6582
diff changeset
   189
        self.w(u'<h2>%s</h2>' % _('Garbage collection information'))
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
   190
        self.w(u'<h3>%s</h3>' % self._cw._('Looked up classes'))
10311
4e9dcca71fad [views] Fix 'gc' view to use 'repo_gc_stats' service
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10309
diff changeset
   191
        self.wview('pyvaltable', pyvalue=stats['lookupclasses'])
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
   192
        self.w(u'<h3>%s</h3>' % self._cw._('Most referenced classes'))
10311
4e9dcca71fad [views] Fix 'gc' view to use 'repo_gc_stats' service
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10309
diff changeset
   193
        self.wview('pyvaltable', pyvalue=stats['referenced'])
4e9dcca71fad [views] Fix 'gc' view to use 'repo_gc_stats' service
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10309
diff changeset
   194
        if stats['unreachable']:
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
   195
            self.w(u'<h3>%s</h3>' % self._cw._('Unreachable objects'))
10311
4e9dcca71fad [views] Fix 'gc' view to use 'repo_gc_stats' service
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10309
diff changeset
   196
            values = [xml_escape(val) for val in stats['unreachable']]
4866
550e35a69b75 [debug] a new view to help debugging memory leaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4865
diff changeset
   197
            self.wview('pyvallist', pyvalue=values)