can more visually check tracker consistency
authorthierry <thierry@41d37cc5-eb28-0410-a9bf-d37491348ade>
Fri, 5 Feb 2010 09:14:37 +0000 (09:14 +0000)
committerthierry <thierry@41d37cc5-eb28-0410-a9bf-d37491348ade>
Fri, 5 Feb 2010 09:14:37 +0000 (09:14 +0000)
scripts/manage-infrastructure.py

index 4445c40..d859270 100755 (executable)
@@ -55,22 +55,45 @@ class BuildBoxes:
         command=['ssh',self.root(box),'shutdown','-r','now']
         self.run (command,"Rebooting %s"%box)
 
-    def handle_tracker_file (self,filename):
+    def handle_tracker_plcs (self):
         box = self.fqdn (self.testmaster)
-        if self.options.probe:
-            command=['ssh',self.root(box),"head","-v","--lines=100",filename]
-            self.run(command,"++++++++++ Inspecting %s on %s"%(filename,box))
-        else:
+        filename="tracker-plcs"
+        if not self.options.probe:
             command=['ssh',self.root(box),"rm","-rf",filename]
             self.run(command,"Cleaning up %s on %s"%(filename,box))
+        else:
+            self.header ("++++++++++ Inspecting %s on %s"%(filename,box))
+            read_command = ['ssh',self.root(box),"cat",filename]
+            trackers=self.backquote(read_command)
+            for tracker in trackers.split('\n'):
+                if not tracker: continue
+                try:
+                    tracker=tracker.strip()
+                    [hostname,buildname]=tracker.split('@')
+                    [left,plcname]=buildname.rsplit('-',1)
+                    print self.margin_outline(plcname),tracker
+                except:
+                    print self.margin(""),tracker
 
-    def handle_tracker_plcs (self):
-        self.handle_tracker_file("tracker-plcs")
     def handle_tracker_qemus (self):
-        self.handle_tracker_file("tracker-qemus")
-    def handle_trackers (self):
-        self.handle_tracker_plcs()
-        self.handle_tracker_qemus()
+        box = self.fqdn (self.testmaster)
+        filename="tracker-qemus"
+        if not self.options.probe:
+            command=['ssh',self.root(box),"rm","-rf",filename]
+            self.run(command,"Cleaning up %s on %s"%(filename,box))
+        else:
+            self.header ("++++++++++ Inspecting %s on %s"%(filename,box))
+            read_command = ['ssh',self.root(box),"cat",filename]
+            trackers=self.backquote(read_command)
+            for tracker in trackers.split('\n'):
+                if not tracker: continue
+                try:
+                    tracker=tracker.strip()
+                    [hostname,buildname,nodename]=tracker.split('@')
+                    nodename=nodename.split('.')[0]
+                    print self.margin_outline(nodename),tracker
+                except:
+                    print self.margin(""),tracker
 
     def handle_build_box (self,box):
         if not self.options.probe:
@@ -96,6 +119,11 @@ class BuildBoxes:
         if match: return match.groups(0)
         else: return ""
 
+    margin_format="%-14s"
+    def margin(self,string): return self.margin_format%string
+    def outline (self, string): return '== %s =='%string
+    def margin_outline (self, string): return self.margin(self.outline(string))
+
     def handle_plc_box (self,box):
         if not self.options.probe:
             self.reboot(box)
@@ -120,17 +148,14 @@ class BuildBoxes:
                     # at this point ctx_id maps context id to vservername
 
                     vserver_stat = self.backquote (command)
-                    format="%-14s"
                     for vserver_line in vserver_stat.split("\n"):
                         if not vserver_line: continue
                         context=vserver_line.split()[0]
                         if context=="CTX": 
-                            print format%"",vserver_line
+                            print self.margin(""),vserver_line
                             continue
                         longname=ctx_dict[context]
-                        plcname=self.vplcname(longname)
-                        header="== %s =="%plcname
-                        print format%header,"%(vserver_line)s [=%(longname)s]"%locals()
+                        print self.margin_outline(self.vplcname(longname)),"%(vserver_line)s [=%(longname)s]"%locals()
                 except:
                     self.run(command,"Fine-grained method failed - fallback to plain vserver-stat")
 
@@ -153,14 +178,12 @@ class BuildBoxes:
                 if not pids:
                     self.header ('No qemu process on %s'%box)
                 else:
-                    format="%-14s"
                     self.header ("Active qemu processes on %s"%box)
                     command=['ssh',self.root(box),'ps','-o','pid,command'] + [ pid for pid in pids.split("\n") if pid]
                     ps_lines = self.backquote (command).split("\n")
                     for ps_line in ps_lines:
                         if not ps_line or ps_line.find('PID') >=0 : continue
-                        header=self.vnodename(ps_line)
-                        print format%header, ps_line
+                        print self.margin_outline(self.vnodename(ps_line)), ps_line
 
     def handle_box(self,box,type):
         if box in self.qemu_boxes: