Пример #1
0
class ApplicationManager(Folder, CacheManager):
    """System management
    """
    __roles__ = ('Manager',)
    isPrincipiaFolderish = 1
    Database = DatabaseChooser('Database') #DatabaseManager()
    DebugInfo = DebugManager()
    DavLocks = DavLockManager()

    manage = manage_main = DTMLFile('dtml/cpContents', globals())
    manage_main._setName('manage_main')

    _objects=(
        {'id': 'Database',
         'meta_type': Database.meta_type},
        {'id': 'DavLocks',
         'meta_type': DavLocks.meta_type},
        {'id': 'DebugInfo',
         'meta_type': DebugInfo.meta_type},
        )

    manage_options=(
        ({'label':'Contents', 'action':'manage_main'}, ) +
        UndoSupport.manage_options
        )

    id = 'Control_Panel'
    name = title = 'Control Panel'
    meta_type = 'Control Panel'

    process_id = os.getpid()
    process_start = int(time.time())

    # Disable some inappropriate operations
    manage_addObject = None
    manage_delObjects = None
    manage_addProperty = None
    manage_editProperties = None
    manage_delProperties = None

    def _canCopy(self, op=0):
        return 0

    def _init(self):
        pass

    def version_txt(self):
        if not hasattr(self, '_v_version_txt'):
            self._v_version_txt = version_txt()

        return self._v_version_txt

    def sys_version(self):
        return sys.version

    def sys_platform(self):
        return sys.platform

    def manage_app(self, URL2):
        """Return to the main management screen"""
        raise Redirect, URL2+'/manage'

    def process_time(self, _when=None):
        if _when is None:
            _when = time.time()
        s = int(_when) - self.process_start
        d = int(s / 86400)
        s = s - (d * 86400)
        h = int(s / 3600)
        s = s -(h * 3600)
        m = int(s / 60)
        s = s - (m * 60)
        d = d and ('%d day%s' % (d, (d != 1 and 's' or ''))) or ''
        h = h and ('%d hour%s' % (h, (h != 1 and 's' or ''))) or ''
        m = m and ('%d min' % m) or ''
        s = '%d sec' % s
        return '%s %s %s %s' % (d, h, m, s)

    def thread_get_ident(self):
        return get_ident()

    def db_name(self):
        return self._p_jar.db().getName()

    def db_size(self):
        s = self._p_jar.db().getSize()
        if type(s) is type(''):
            return s

        if s >= 1048576.0:
            return '%.1fM' % (s/1048576.0)
        return '%.1fK' % (s/1024.0)

    @requestmethod('POST')
    def manage_pack(self, days=0, REQUEST=None, _when=None):
        """Pack the database"""

        if _when is None:
            _when = time.time()

        t = _when - (days * 86400)

        db = self._p_jar.db()
        t = db.pack(t)
        if REQUEST is not None:
            REQUEST['RESPONSE'].redirect(
                REQUEST['URL1'] + '/manage_workspace')
        return t

    def getINSTANCE_HOME(self):
        return getConfiguration().instancehome

    def getCLIENT_HOME(self):
        return getConfiguration().clienthome

    def getServers(self):
        # used only for display purposes
        # return a sequence of two-tuples.  The first element of
        # each tuple is the service name, the second is a string repr. of
        # the port/socket/other on which it listens
        from asyncore import socket_map
        l = []
        for k,v in socket_map.items():
            # this is only an approximation
            if hasattr(v, 'port'):
                type = str(getattr(v, '__class__', 'unknown'))
                port = v.port
                l.append((str(type), 'Port: %s' % port))
        return l
Пример #2
0
class ApplicationManager(Persistent, Tabs, Traversable, Implicit):
    """System management
    """
    __allow_access_to_unprotected_subobjects__ = 1
    __roles__ = ('Manager', )

    id = 'Control_Panel'
    name = title = 'Control Panel'
    meta_type = 'Control Panel'
    zmi_icon = 'fa fa-cog'
    process_start = int(time.time())

    Database = DatabaseChooser()
    Configuration = ConfigurationViewer()
    DavLocks = DavLockManager()

    manage = manage_main = DTMLFile('dtml/cpContents', globals())
    manage_main._setName('manage_main')
    manage_options = (
        {
            'label': 'Control Panel',
            'action': 'manage_main'
        },
        {
            'label': 'Databases',
            'action': 'Database/manage_main'
        },
        {
            'label': 'Configuration',
            'action': 'Configuration/manage_main'
        },
        {
            'label': 'DAV Locks',
            'action': 'DavLocks/manage_main'
        },
    )
    MANAGE_TABS_NO_BANNER = True

    def version_txt(self):
        if not hasattr(self, '_v_version_txt'):
            self._v_version_txt = version_txt()

        return self._v_version_txt

    def process_id(self):
        return os.getpid()

    def process_time(self, _when=None):
        if _when is None:
            _when = time.time()
        s = int(_when) - self.process_start
        d = int(s / 86400)
        s = s - (d * 86400)
        h = int(s / 3600)
        s = s - (h * 3600)
        m = int(s / 60)
        s = s - (m * 60)
        d = d and ('%d day%s' % (d, (d != 1 and 's' or ''))) or ''
        h = h and ('%d hour%s' % (h, (h != 1 and 's' or ''))) or ''
        m = m and ('%d min' % m) or ''
        s = '%d sec' % s
        return '%s %s %s %s' % (d, h, m, s)

    def sys_version(self):
        return sys.version

    def sys_platform(self):
        return sys.platform

    def debug_mode(self):
        return getConfiguration().debug_mode

    def getINSTANCE_HOME(self):
        return getConfiguration().instancehome

    def getCLIENT_HOME(self):
        return getConfiguration().clienthome
class ApplicationManager(Folder, CacheManager):
    """System management
    """
    __roles__ = ('Manager', )
    isPrincipiaFolderish = 1
    Database = DatabaseChooser('Database')  #DatabaseManager()
    DebugInfo = DebugManager()
    DavLocks = DavLockManager()

    manage = manage_main = DTMLFile('dtml/cpContents', globals())
    manage_main._setName('manage_main')

    _objects = (
        {
            'id': 'Database',
            'meta_type': Database.meta_type
        },
        {
            'id': 'DavLocks',
            'meta_type': DavLocks.meta_type
        },
        {
            'id': 'Products',
            'meta_type': 'Product Management'
        },
        {
            'id': 'DebugInfo',
            'meta_type': DebugInfo.meta_type
        },
    )

    manage_options = (({
        'label': 'Contents',
        'action': 'manage_main'
    }, ) + UndoSupport.manage_options)

    id = 'Control_Panel'
    name = title = 'Control Panel'
    meta_type = 'Control Panel'
    icon = 'p_/ControlPanel_icon'

    process_id = os.getpid()
    process_start = int(time.time())

    # Disable some inappropriate operations
    manage_addObject = None
    manage_delObjects = None
    manage_addProperty = None
    manage_editProperties = None
    manage_delProperties = None

    def __init__(self):
        self.Products = ProductFolder()

    def _canCopy(self, op=0):
        return 0

    def _init(self):
        pass

    def version_txt(self):
        if not hasattr(self, '_v_version_txt'):
            self._v_version_txt = version_txt()

        return self._v_version_txt

    def sys_version(self):
        return sys.version

    def sys_platform(self):
        return sys.platform

    def manage_app(self, URL2):
        """Return to the main management screen"""
        raise Redirect, URL2 + '/manage'

    def process_time(self, _when=None):
        if _when is None:
            _when = time.time()
        s = int(_when) - self.process_start
        d = int(s / 86400)
        s = s - (d * 86400)
        h = int(s / 3600)
        s = s - (h * 3600)
        m = int(s / 60)
        s = s - (m * 60)
        d = d and ('%d day%s' % (d, (d != 1 and 's' or ''))) or ''
        h = h and ('%d hour%s' % (h, (h != 1 and 's' or ''))) or ''
        m = m and ('%d min' % m) or ''
        s = '%d sec' % s
        return '%s %s %s %s' % (d, h, m, s)

    def thread_get_ident(self):
        return get_ident()

    def db_name(self):
        return self._p_jar.db().getName()

    def db_size(self):
        s = self._p_jar.db().getSize()
        if type(s) is str:
            return s

        if s >= 1048576.0:
            return '%.1fM' % (s / 1048576.0)
        return '%.1fK' % (s / 1024.0)

    if 'ZMANAGED' in os.environ:
        manage_restartable = 1

        @requestmethod('POST')
        def manage_restart(self, URL1, REQUEST=None):
            """ Shut down the application for restart.
            """
            try:
                user = '******' % getSecurityManager().getUser().getUserName()
            except:
                user = '******'
            LOG.info("Restart requested by %s" % user)
            shutdown(1)
            return """<html>
            <head><meta HTTP-EQUIV=REFRESH CONTENT="10; URL=%s/manage_main">
            </head>
            <body>Zope is restarting</body></html>
            """ % escape(URL1, 1)

    @requestmethod('POST')
    def manage_shutdown(self, REQUEST=None):
        """Shut down the application"""
        try:
            user = '******' % getSecurityManager().getUser().getUserName()
        except:
            user = '******'
        LOG.info("Shutdown requested by %s" % user)
        shutdown(0)
        return """<html>
        <head>
        </head>
        <body>Zope is shutting down</body></html>
        """

    @requestmethod('POST')
    def manage_pack(self, days=0, REQUEST=None, _when=None):
        """Pack the database"""

        if _when is None:
            _when = time.time()

        t = _when - (days * 86400)

        db = self._p_jar.db()
        t = db.pack(t)
        if REQUEST is not None:
            REQUEST['RESPONSE'].redirect(REQUEST['URL1'] + '/manage_workspace')
        return t

    def revert_points(self):
        return ()

    def version_list(self):
        # Return a list of currently installed products/versions
        cfg = getConfiguration()
        product_dir = os.path.join(cfg.softwarehome, 'Products')
        product_names = os.listdir(product_dir)
        product_names.sort()
        info = []
        for product_name in product_names:
            package_dir = os.path.join(product_dir, product_name)
            if not os.path.isdir(package_dir):
                continue
            version_txt = None
            for name in ('VERSION.TXT', 'VERSION.txt', 'version.txt'):
                v = os.path.join(package_dir, name)
                if os.path.exists(v):
                    version_txt = v
                    break
            if version_txt is not None:
                file = open(version_txt, 'r')
                data = file.readline()
                file.close()
                info.append(data.strip())
        return info

    def getSOFTWARE_HOME(self):
        cfg = getConfiguration()
        return getattr(cfg, 'softwarehome', None)

    def getZOPE_HOME(self):
        cfg = getConfiguration()
        return getattr(cfg, 'zopehome', None)

    def getINSTANCE_HOME(self):
        return getConfiguration().instancehome

    def getCLIENT_HOME(self):
        return getConfiguration().clienthome

    def getServers(self):
        # used only for display purposes
        # return a sequence of two-tuples.  The first element of
        # each tuple is the service name, the second is a string repr. of
        # the port/socket/other on which it listens
        from asyncore import socket_map
        l = []
        for k, v in socket_map.items():
            # this is only an approximation
            if hasattr(v, 'port'):
                type = str(getattr(v, '__class__', 'unknown'))
                port = v.port
                l.append((str(type), 'Port: %s' % port))
        return l

    def objectIds(self, spec=None):
        """ this is a patch for pre-2.4 Zope installations. Such
            installations don't have an entry for the WebDAV LockManager
            introduced in 2.4.
        """

        meta_types = [x.get('meta_type', None) for x in self._objects]

        if not self.DavLocks.meta_type in meta_types:

            lst = list(self._objects)
            lst.append({
                'id': 'DavLocks',
                'meta_type': self.DavLocks.meta_type
            })
            self._objects = tuple(lst)

        return Folder.objectIds(self, spec)