File: gr_free

package info (click to toggle)
grmonitor 0.81-4.2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 1,556 kB
  • ctags: 1,767
  • sloc: ansic: 12,657; python: 186; makefile: 175
file content (136 lines) | stat: -rwxr-xr-x 3,262 bytes parent folder | download | duplicates (5)
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
#!/usr/bin/python
import string, os, time, sys, socket

#
# Gather free disk and memory info an output as an XML document.
#
# See gr_monitor license in the gr_monitor.1 man page for licensing.
#
# michael@actrix.gen.nz, Nov 1999 (for Gentoo South Pacific Limited).
#

def printdtd():
    print '''<?xml version="1.0"?>
    <!DOCTYPE datastream [
    <!ELEMENT datastream (dataset)*>
    <!ELEMENT dataset (group)*>
    <!ATTLIST dataset
              id      CDATA   #REQUIRED>
    <!ELEMENT group (item)*>
    <!ATTLIST group
              id      CDATA   #REQUIRED>
    <!ELEMENT item (total, used, free, cached, buffers)>
    <!ATTLIST item
              id      CDATA   #REQUIRED>
    <!ELEMENT size EMPTY>
    <!ATTLIST size
              data    CDATA   #REQUIRED>
    <!ELEMENT used EMPTY>
    <!ATTLIST used
              data    CDATA   #REQUIRED>
    <!ELEMENT avail EMPTY>
    <!ATTLIST avail
              data    CDATA   #REQUIRED>
    ]>'''

def printdf():

    print '<group id="Disk Space">'
    dfInput = os.popen("df -k", "r");
    colnames = string.split(dfInput.readline());
    biggest = 0
    dflist = []
    
    for line in dfInput.readlines(): 
	cols = string.split(line)
	(size, used, avail) = map(int, cols[1:4])
	filesys = string.join(cols[5:])
	dflist.append((filesys, size, used, avail))
	if size > biggest:
	    biggest = size
    dfInput.close()
    for data in dflist:
	(filesys, size, used, avail) = data;
	if string.strip(filesys) != "/":
	    filesys = filesys[string.rfind(filesys,"/") + 1:]
	print '''
	<item id="%s">
	  <free data="%f"/>
	  <used data="%f"/>
	  <total data="%f"/>
	</item>
	''' % ( filesys, 
		100.0 * avail / biggest,
		100.0 * used / biggest, 
		100.0 * size / biggest )
    print '</group>'

def printfree():

    print '<group id="Memory">'
    procMeminfo = open("/proc/meminfo", "r");
    procMeminfo.readline();
    line = procMeminfo.readline();
    (total, used, free, 
     shared, buffers, cached) = map(int, string.split(line)[1:])
    line = procMeminfo.readline();
    (swapTotal, swapUsed, swapFree) = map(int, string.split(line)[1:])
    procMeminfo.close();

    print '''
    <item id="RAM">
      <free data="%f"/>
      <cached data="%f"/>
      <buffers data="%f"/>
      <used data="%f"/>
      <total data="100.0"/>
    </item>
    ''' % ( 
	    (100.0 * free) / total,
	    (100.0 * cached) / total,
	    (100.0 * buffers) / total,
	    (100.0 * used - buffers) / total
	    )
	    
    print '</group>'
    print '<group id="Swap">'
    print '''
    <item id="Swap">
      <free data="%f"/>
      <used data="%f"/>
      <total data="%f"/>
    </item>
    ''' % ( 
	    (100.0 * swapFree) / total,
	    (100.0 * swapUsed) / total,
	    (100.0 * swapTotal) / total,
	    )
    print '</group>'


# Main Program starts here 

if len(sys.argv) > 1 and sys.argv[1] == "-sleep":
    sleepSecs = int(sys.argv[2])
else:
    sleepSecs = 5

hostname = socket.gethostname()

try:
    printdtd()
    print "<datastream>"
    
    while 1:
	when = time.asctime(time.localtime(time.time()))
	print '<dataset id="%s %s">' % (hostname, when)
	printdf()
	printfree()
	print '</dataset>'
	sys.stdout.flush()
	time.sleep(sleepSecs)
    
    print "</datastream>"
except IOError:
    sys.exit(-1)