File: sysinfo.py

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (160 lines) | stat: -rwxr-xr-x 3,323 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/usr/bin/python
# Copyright (c) 2011 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.


"""Simple system info tool for bug reports, etc.

"""



# More info at:
#
# http://code.activestate.com/recipes/511491/
# http://www.koders.com/python/fidB436B8043AA994C550C0961247DACC3E04E84734.aspx?s=config
# http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/sysctl.8.html

# imports
import os
import sys
import time


VERBOSE = 0


def Banner(text):
  print '=' * 70
  print text
  print '=' * 70
  # quick hack to keep banner in sync with os.system output
  sys.stdout.flush()


def InfoLinux():
  Banner('OS:')
  os.system('uname -a')

  Banner('CPU:')
  if VERBOSE:
    os.system('cat /proc/cpuinfo')
  else:
    os.system("egrep 'name|MHz|stepping' /proc/cpuinfo")

  Banner('RAM:')
  if VERBOSE:
    os.system('cat /proc/meminfo')
  else:
    os.system('cat /proc/meminfo | egrep Mem')

  Banner('LOAD:')
  os.system('cat /proc/loadavg')

  Banner('UPTIME:')
  os.system('cat /proc/uptime')


def InfoDarwin():
  Banner('OS:')
  os.system('sysctl kern | egrep "kern\.os|version"')

  Banner('CPU:')
  os.system('sysctl hw.machine')
  os.system('sysctl hw.model')
  os.system('sysctl hw.ncpu')
  if VERBOSE:
    os.system("sysctl hw")
  else:
    os.system("sysctl hw | egrep 'cpu'")

  Banner('RAM:')
  if VERBOSE:
    os.system("sysctl hw")
  else:
    os.system("sysctl hw | egrep 'mem'")

  Banner('LOAD:')
  print 'TBD'

  Banner('UPTIME:')
  os.system('sysctl kern | egrep "kern\.boottime"')


def InfoWin32():
  import _winreg

  def GetRegistryOS( value):
    db = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
                         'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion')

    return _winreg.QueryValueEx(db, value)[0]

  Banner('OS:')
  for key in ['ProductName',
              'CSDVersion',
              'CurrentBuildNumber']:
    print  GetRegistryOS(key)

  Banner('CPU:')
  db = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
                       'HARDWARE\\DESCRIPTION\\System\\CentralProcessor')
  for n in range(0, 1000):
     try:
       cpu = _winreg.EnumKey(db, n)
     except Exception:
       break
     print "\nProcessor :", cpu
     db_cpu = _winreg.OpenKey(db, cpu)
     for i in range(0, 1000):
       try:
         name, value, type =_winreg.EnumValue(db_cpu, i)
       except Exception:
         break
       # skip binary data
       if type == _winreg.REG_BINARY: continue
       if type == _winreg.REG_FULL_RESOURCE_DESCRIPTOR: continue
       print name, type, value

  Banner('RAM:')
  print 'TBD'
  # TODO: this is currently broken since ctypes is not available

  Banner('LOAD:')
  print 'TBD'

  Banner('UPTIME:')
  print 'TBD'


PLATFORM_INFO = {
    'linux2': InfoLinux,
    'linux3': InfoLinux,
    'darwin': InfoDarwin,
    'win32': InfoWin32,
    }


def main():
  Banner('Python Info:')
  print sys.platform
  print sys.version

  Banner('ENV:')
  for e in ['PATH']:
    print e, os.getenv(e)


  if sys.platform in PLATFORM_INFO:
    try:
      PLATFORM_INFO[sys.platform]()
    except Exception, err:
      print 'ERRROR: processing sys info', str(err)
  else:
    print 'ERROR: unknwon platform', system.platform

  return 0


sys.exit(main())