1
2
3
4 """
5 Monitors system load and usage.
6
7 @author: E.T.W. Sutorius
8 @org: WFAU, IfA, University of Edinburgh
9
10 @newfield contributors: Contributors, Contributors (Alphabetical Order)
11 @contributors: J. Bryant
12 """
13
14 import getopt
15 import os
16 from random import randint
17 import sys
18 from time import sleep
19
20 from wsatools.Logger import Logger
21 import wsatools.SystemConstants as sysc
22 import wsatools.Utilities as utils
23
24
26 print("""Usage:
27 Monitor.py [-l/--load][-p/--ps][-t/--trace] [size]
28 [-l/--load] invokes 'top' to get the load average
29 [-p/--ps] invokes 'ps'
30 [-t/--trace] invokes 'traceroute' with [size] (def: 1024)
31 [-w/--writes] writes to the screen called without any of l/p/t invokes all
32 """)
33
34
35
37 """traceroute -l -z 1000 apm7.ast.cam.ac.uk 1024
38 """
39 Logger.addMessage("running traceroute to " + connection.split('@')[1],
40 alwaysLog=False)
41
42 cmd = "/khufu/scos/sandbox/WSA/src/curation/invocations/monitoring/trac.sh"
43
44 return os.popen(cmd + " %s" % packetsize).readlines()
45
46
47
49 """ps -e -o pid,user,pcpu,etime,comm --sort pcpu
50 """
51 Logger.addMessage("running ps at " + connection, alwaysLog=False)
52
53 cmd = "ssh %s 'ps -e -o user,pcpu,etime,comm --sort pcpu'" % connection
54
55 return os.popen(cmd).readlines()
56
57
58
65
66
67
68
69
70 if __name__ == "__main__":
71 Logger.isVerbose = False
72
73
74 try:
75 opts, args = getopt.getopt(sys.argv[1:], "lptw",
76 ["load","ps","trace","write"])
77 if len(args) > 1:
78 raise getopt.GetoptError
79 except getopt.GetoptError:
80
81 print("getopt Error: " + repr(sys.argv))
82 usage()
83 exit()
84
85 packetsize = (args[0] if len(args) == 1 else 1024)
86 lflag = any(o in ("-l", "--load") for o, a in opts)
87 pflag = any(o in ("-p", "--ps") for o, a in opts)
88 tflag = any(o in ("-t", "--trace") for o, a in opts)
89 allflag = not any((lflag, pflag, tflag))
90 screenflag = any(o in ("-w", "--write") for o, a in opts)
91
92 timestamp = utils.makeMssqlTimeStamp()
93 logFile = os.path.join(sysc.logFilePath(), "monitor",
94 "monitor_" + timestamp[:timestamp.find(':')]+".log")
95
96 connectto = sysc.scp_user() + "@" + sysc.scp_server()
97
98 toff = randint(0,2700)
99 sleep(toff)
100
101
102 if tflag or allflag:
103 trace = traceroute(connectto, packetsize)
104
105
106 if pflag or allflag:
107 ps = get_ps(connectto)
108
109
110 if lflag or allflag:
111 load = get_load(connectto)
112
113
114 if not screenflag:
115 fobj = open(logFile, mode='a')
116 fobj.write("# "+utils.makeMssqlTimeStamp()+"\n")
117 if tflag or allflag:
118 fobj.write("# traceroute\n")
119 for line in trace:
120 fobj.write(line)
121 if pflag or allflag:
122 fobj.write("# ps\n")
123 for line in ps:
124 fobj.write(line)
125 if lflag or allflag:
126 fobj.write("# uptime\n")
127 for line in load:
128 fobj.write(line)
129 fobj.close()
130 else:
131 if tflag or allflag:
132 for line in trace:
133 print line[:-1]
134 if pflag or allflag:
135 for line in ps:
136 print line[:-1]
137 if lflag or allflag:
138 for line in load:
139 print line[:-1]
140
141
142
143
144
145
146
147
148
149
150