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
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)