Show
Ignore:
Timestamp:
04/23/08 11:34:30 (2 years ago)
Author:
JensDiemer
Message:
  • autoamtic plugin menu:
  • first updates for show_internals (but only "system_info" updated)
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pylucid/PyLucid/plugins_internal/show_internals/system_info.py

    r1154 r1535  
    2121 
    2222 
    23 import sys, os, locale 
    24  
     23import sys, os, locale, subprocess 
     24 
     25from PyLucid.tools.subprocess2 import Subprocess2 
    2526from PyLucid.system.BasePlugin import PyLucidBasePlugin 
    2627 
     
    3132        self.PyLucid_info() 
    3233        self.system_info() 
     34        self.cmd_info() 
     35        self.proc_info() 
    3336        self.encoding_info() 
    3437        self.envion_info() 
    35         self.colubrid_debug_link() 
    3638 
    3739    #_________________________________________________________________________ 
     
    4345        self.response.write('<legend>PyLucid["URLs"]:</legend>') 
    4446        self.response.write("<pre>") 
    45         for k,v in self.URLs.items(): 
    46             self.response.write("%15s: '%s'\n" % (k,v)) 
    47         self.response.write("</pre>") 
    48         self.response.write("</fieldset>") 
    49  
    50         self.response.write('<fieldset id="system_info">') 
    51         self.response.write('<legend>self.i18n.debug():</legend>') 
    52         self.response.write("<pre>") 
    53         self.i18n.debug(response_out=True) 
     47 
     48        data = [(len(v), k, v) for k,v in self.URLs.items()] 
     49 
     50        max_len = max([len(k) for k in self.URLs]) 
     51        line = "%%%ss: '%%s'\n" % max_len 
     52 
     53        for _,k,v in sorted(data): 
     54            self.response.write(line % (k,v)) 
     55 
    5456        self.response.write("</pre>") 
    5557        self.response.write("</fieldset>") 
     
    6567            self.response.write("<dd>%s</dd>" % " - ".join( os.uname() )) 
    6668 
     69        try: 
     70            loadavg = os.getloadavg() 
     71            loadavg = ", ".join([str(round(i,2)) for i in loadavg]) 
     72            self.response.write("<dt>load average:</dt>") 
     73            self.response.write("<dd>%s</dd>" % loadavg) 
     74        except OSError: 
     75            # Not available 
     76            pass 
     77 
    6778        self.response.write("<dt>sys.version:</dt>") 
    6879        self.response.write("<dd>Python v%s</dd>" % sys.version) 
     
    7788        self.response.write("</dl>") 
    7889 
    79         #_____________________________________________________________________ 
    80  
    81         self.cmd_info( "uptime", "uptime" ) 
    82         self.cmd_info( "lokal Angemeldete Benutzer", "who -H -u --lookup" ) 
    83         self.cmd_info( "disk", "df -T -h" ) 
    84         self.cmd_info( "RAM", "free -m" ) 
     90 
     91 
     92    def proc_info(self): 
     93        """ 
     94        Dispaly some proc files 
     95        """ 
     96        files = ["/proc/meminfo", "/proc/stat", "/proc/loadavg"] 
     97 
     98        self.response.write("<h3>proc info</h3>") 
     99 
     100        self.response.write('<dl id="system_info">') 
     101        for proc_file in files: 
     102            self.response.write("<dt>'%s':</dt>" % proc_file) 
     103            try: 
     104                f = file(proc_file, "r") 
     105            except Exception, e: 
     106                self.response.write("<dd>Error: %s</dd>" % e) 
     107            else: 
     108                for line in f: 
     109                    self.response.write("<dd>%s</dd>" % line) 
     110                f.close() 
     111        self.response.write("</dl>") 
    85112 
    86113    #_________________________________________________________________________ 
     
    170197    #_________________________________________________________________________ 
    171198 
    172     def cmd_info(self, info, command, cwd="/"): 
    173         self.response.write( 
    174             '<fieldset id="system_info"><legend>%s:</legend>' % info 
    175         ) 
    176         try: 
    177             process = self.tools.subprocess2(command, cwd, 5) 
    178         except Exception,e: 
    179             self.response.write("Can't get: %s" % e) 
    180         else: 
    181             self.response.write("<pre>%s</pre>" % process.out_data) 
    182         self.response.write("</fieldset>") 
    183  
    184  
    185  
    186  
    187  
    188  
    189  
    190  
     199    def cmd_info(self): 
     200        """ 
     201        Use some commandline programms and display the output 
     202        """ 
     203        commands = ("uptime", "who -H -u --lookup", "df -T -h", "free -m") 
     204 
     205        for command in commands: 
     206            self.response.write( 
     207                """<fieldset><legend>'%s':</legend>""" % command 
     208            ) 
     209            try: 
     210                p = Subprocess2(command, 
     211                    stdout=subprocess.PIPE, 
     212                    shell = True, 
     213                    timeout = 1 
     214                ) 
     215            except Exception, e: 
     216                self.response.write("Error: %s" % e) 
     217            else: 
     218                if not p.killed: 
     219                    # read only if process ended normaly, otherwise it blocked! 
     220                    msg = "<pre>%s</pre>" % p.process.stdout.read() 
     221                else: 
     222                    msg = "Proecess was killed. Returncode: %s" % ( 
     223                        p.process.returncode 
     224                    ) 
     225                self.response.write(msg) 
     226 
     227            self.response.write("</fieldset>") 
     228 
     229 
     230 
     231 
     232 
     233 
     234 
     235