* Queries NM for: "nm_net_max_byte",
[mom.git] / nm_mom.py
1 #!/usr/bin/python
2
3 # Restarts NM if NM does not respond to periodic probes.
4 #
5 # Faiyaz Ahmed <faiyaza@cs.princeton.edu>
6 # Copyright (C) 2006 The Trustees of Princeton University
7 #
8 # $Id: nm_mom.py,v 1.2 2006/08/17 20:12:09 faiyaza Exp $
9
10
11 import syslog
12 import os
13 import sys
14 import time
15
16 import socket
17 import xmlrpclib
18 import bwlimit
19
20 from sets import Set
21
22 # Utility functions
23 from pl_mom import *
24
25
26 def restartNM():
27         try:
28                 pid = os.fork()
29                 if pid == 0:
30                         bwlimit.run("/etc/init.d/pl_nm stop")
31                         time.sleep(10)
32                         try:
33                                 nmpid = bwlimit.run("/bin/ps -e -o pid,cmd | grep nm.py")[0].split(" ")[0]
34                                 os.kill(int(nmpid), 9)
35                                 time.sleep(3)
36                                 print "NM  %s forcefully killed." %nmpid
37                         except:
38                                 print "NM %s killed." %nmpid
39                         bwlimit.run("/etc/init.d/pl_nm restart")
40                         print "NM restarted."
41                         os._exit(0)
42                 else:
43                         os.waitpid(pid,0)
44         except Exception, err:
45                 print "Warning: Exception received while restarting NM:  %s" % err
46
47
48 def main():
49         syslog.openlog("nm_mom")
50         sys.stdout = sys.stderr = Logger()
51         
52         nm = NM()
53         last_maxrate = 0 
54         try:
55                 # Query something.  If it doesnt come back...
56                 vals = nm.query("pl_netflow", [('nm_net_max_rate', last_maxrate)])
57
58         except Exception, err:
59                 print "Warning: Exception received while querying NM:", err
60                 restartNM()
61
62 if __name__ == '__main__':
63     main()