annotate commons/tools/CleanClusterNodesAfterRepet.py @ 19:9bcfa7936eec

Deleted selected files
author m-zytnicki
date Mon, 29 Apr 2013 03:23:29 -0400
parents 94ab73e8a190
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
1 #!/usr/bin/env python
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
2
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
3 ## @file
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
4 # Clean the cluster nodes after REPET was used.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
5 #
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
6 # usage: CleanClusterNodesAfterRepet.py [ options ]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
7 # options:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
8 # -h: this help
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
9 # -n: node to clean (otherwise all nodes will be cleaned)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
10 # -t: temporary directory (e.g. '/tmp')
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
11 # -p: pattern (e.g. 'DmelChr4*')
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
12 # -v: verbosity level (default=0/1/2)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
13
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
14 import os
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
15 import sys
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
16 import getopt
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
17
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
18 class CleanClusterNodesAfterRepet( object ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
19 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
20 Clean the cluster nodes after REPET was used.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
21 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
22
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
23 def __init__( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
24 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
25 Constructor.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
26 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
27 self._lNodes = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
28 self._tmpDir = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
29 self._pattern = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
30 self._verbose = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
31 self._lNodesToExcept = ["compute-2-46", "compute-2-47"]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
32
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
33 def help( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
34 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
35 Display the help on stdout.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
36 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
37 print
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
38 print "usage: %s.py [ options ]" % ( type(self).__name__ )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
39 print "options:"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
40 print " -h: this help"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
41 print " -n: node to clean (otherwise all nodes will be cleaned)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
42 print " -t: temporary directory (e.g. '/tmp')"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
43 print " -p: pattern (e.g. 'DmelChr4*')"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
44 print " -v: verbosity level (default=0/1/2)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
45 print
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
46
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
47 def setAttributesFromCmdLine( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
48 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
49 Set the attributes from the command-line.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
50 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
51 try:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
52 opts, args = getopt.getopt(sys.argv[1:],"hi:n:t:p:v:")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
53 except getopt.GetoptError, err:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
54 print str(err); self.help(); sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
55 for o,a in opts:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
56 if o == "-h":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
57 self.help(); sys.exit(0)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
58 elif o == "-n":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
59 self.setLNodes( a.split(" ") )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
60 elif o == "-t":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
61 self.setTempDirectory( a )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
62 elif o == "-p":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
63 self.setPattern( a )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
64 elif o == "-v":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
65 self.setVerbosityLevel( a )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
66
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
67 def setLNodes( self, a ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
68 self._lNodes = a
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
69
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
70 def setTempDirectory( self, a ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
71 if a[-1] == "/":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
72 self._tmpDir = a[:-1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
73 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
74 self._tmpDir = a
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
75
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
76 def setPattern( self, a ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
77 self._pattern = a
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
78
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
79 def setVerbosityLevel( self, verbose ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
80 self._verbose = int(verbose)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
81
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
82 def checkAttributes( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
83 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
84 Before running, check the required attributes are properly filled.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
85 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
86 if self._tmpDir == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
87 print "ERROR: need a valid temporary directory"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
88 self.help(); sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
89
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
90 def getAllNodesList( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
91 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
92 Return the list of the names of each node.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
93 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
94 lNodes = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
95 log = os.system( "qhost > qhost.txt" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
96 if log != 0: print "ERROR with qhost"; sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
97 inF = open( "qhost.txt", "r" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
98 line = inF.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
99 line = inF.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
100 line = inF.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
101 while True:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
102 if line == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
103 break
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
104 tokens = line.split()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
105 if tokens[3] == "-":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
106 line = inF.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
107 continue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
108 lNodes.append( tokens[0] )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
109 line = inF.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
110 inF.close()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
111 #Remove nodes to avoid from the nodes list
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
112 for node in self._lNodesToExcept:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
113 if node in lNodes:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
114 lNodes.remove(node)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
115 return lNodes
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
116
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
117 def showNodeList( self, lNodes ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
118 print "nb of nodes: %i" % ( len(lNodes) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
119 for i in range(0,len(lNodes)):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
120 print " %i: %s" % ( i+1, lNodes[i] )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
121
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
122 def cleanNodes( self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
123 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
124 Connect to each job and clean the temporary directory.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
125 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
126 nbNodes = len(self._lNodes)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
127 nodeCount = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
128 for node in self._lNodes:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
129 nodeCount += 1
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
130 if self._verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
131 print "connect to node '%s' (%i/%i)..." % ( node, nodeCount, nbNodes )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
132 sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
133 cmd = "ssh"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
134 cmd += " -q %s " % ( node )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
135 cmd += "'find %s" % ( self._tmpDir )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
136 cmd += " -user %s" % ( os.environ["USER"] )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
137 if self._pattern != "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
138 cmd += " -name '%s'" % ( self._pattern )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
139 cmd += " 2> /dev/null -exec rm -rf {} \; ; exit'"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
140 if self._verbose > 0: print cmd; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
141 os.system( cmd ) # warning, even if everything goes right, ssh returns an error code, i.e. different than 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
142
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
143 def clean( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
144 if os.path.exists( "qhost.txt" ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
145 os.remove( "qhost.txt" )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
146
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
147 def start( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
148 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
149 Useful commands before running the program.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
150 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
151 if self._verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
152 print "START %s" % ( type(self).__name__ ); sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
153 self.checkAttributes()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
154
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
155 def end( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
156 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
157 Useful commands before ending the program.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
158 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
159 self.clean()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
160 if self._verbose > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
161 print "END %s" % ( type(self).__name__ ); sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
162
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
163 def run( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
164 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
165 Run the program.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
166 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
167 self.start()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
168 if self._lNodes == []:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
169 self._lNodes = self.getAllNodesList()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
170 if self._verbose > 0: self.showNodeList( self._lNodes )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
171 self.cleanNodes()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
172 self.end()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
173
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
174 if __name__ == "__main__":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
175 i = CleanClusterNodesAfterRepet()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
176 i.setAttributesFromCmdLine()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
177 i.run()