clearer names for actions, and infer actions better
[monitor.git] / monitor / scanapi.py
index 327b2b4..177affc 100644 (file)
@@ -184,10 +184,10 @@ class ScanNodeInternal(ScanInterface):
                #               commands at once.
                values = {}
                nmap = command.CMD()
-               print "nmap -oG - -P0 -p22,80,806 %s | grep Host:" % nodename
-               (oval1,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,80,806 %s | grep Host:" % nodename)
-               (oval2,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,80,806 %s | grep Host:" % nodename)
-               (oval3,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,80,806 %s | grep Host:" % nodename)
+               print "nmap -oG - -P0 -p22,80,806 %s | grep -v Down | grep Ports:" % nodename
+               (oval1,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,80,806 %s | grep -v Down | grep Ports:" % nodename)
+               (oval2,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,80,806 %s | grep -v Down | grep Ports:" % nodename)
+               (oval3,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,80,806 %s | grep -v Down | grep Ports:" % nodename)
                # NOTE: an empty / error value for oval, will still work.
                values['port_status'] = {}
                (o1,continue_probe) = nmap_port_status(oval1)
@@ -235,9 +235,10 @@ class ScanNodeInternal(ScanInterface):
                                (oval, errval) = ssh.run_noexcept2(""" <<\EOF
                                        echo "{"
                                        echo '  "kernel_version":"'`uname -a`'",'
-                                       echo '  "bmlog":"'`ls /tmp/bm.log`'",'
-                                       echo '  "bootcd_version":"'`cat /mnt/cdrom/bootme/ID`'",'
+                                       echo '  "bmlog":"'`ls /tmp/bm.log || ls /tmp/source/BootManager.py`'",'
+                                       echo '  "bootcd_version":"'`cat /mnt/cdrom/bootme/ID || cat /usr/bootme/ID`'",'
                                        echo '  "boot_server":"'`cat /mnt/cdrom/bootme/BOOTSERVER`'",'
+                                       echo '  "install_date":"'`python -c "import os,time,stat; print time.ctime(os.stat('/usr/boot/plnode.txt')[stat.ST_CTIME])" || python -c "import os,time,stat; print  time.ctime(os.stat('/usr/boot/cacert.pem')[stat.ST_CTIME])"`'",'
                                        echo '  "nm_status":"'`ps ax | grep nm.py | grep -v grep`'",'
                                        echo '  "dns_status":"'`host boot.planet-lab.org 2>&1`'",'
                                        echo '  "iptables_status":"'`iptables -t mangle -nL | awk '$1~/^[A-Z]+$/ {modules[$1]=1;}END{for (k in modules) {if (k) printf "%s ",k;}}'`'",'
@@ -248,8 +249,11 @@ class ScanNodeInternal(ScanInterface):
                                        echo '  "princeton_comon_running":"'`ls -d /proc/virtual/$ID`'",'
                                        echo '  "princeton_comon_procs":"'`vps ax | grep $ID | grep -v grep | wc -l`'",'
                                        echo '  "fs_status":"'`grep proc /proc/mounts | grep ro, ; if [ -x /usr/bin/timeout.pl ] ; then timeout.pl 20 touch /var/log/monitor 2>&1 ; if [ -d /vservers/ ] ; then timeout.pl 20 touch /vservers/monitor.log 2>&1  ; fi ; fi`'",'
-                                       echo '  "rpm_version":"'`if [ -x /usr/bin/timeout.pl ] ; then timeout.pl 30 rpm -q NodeManager ; fi`'",'
-                                       echo '  "rpm_versions":"'`if [ -x /usr/bin/timeout.pl ] ; then timeout.pl 45 rpm -q -a ; fi`'",'
+                                       echo '  "rpm_version":"'`if [ -x /usr/bin/timeout.pl ] ; then /usr/bin/timeout.pl 30 rpm -q NodeManager ; fi`'",'
+                                       echo '  "rpm_versions":"'`if [ -x /usr/bin/timeout.pl ] ; then /usr/bin/timeout.pl 45 rpm -q -a | sort ; fi`'",'
+                                       echo '  "md5sums":"'`md5sum /etc/yum.conf /etc/yum.myplc.d/myplc.repo /etc/yum.myplc.d/stock.repo  | awk '{print $1}'`'",'
+                                       echo '  "md5sum_yum":"'`grep -v -E "^#" /etc/yum.myplc.d/myplc.repo | md5sum`'",'
+                                       echo '  "nada":"'``'",'
                                        echo "}"
 EOF                    """)
 
@@ -262,10 +266,13 @@ EOF                       """)
                                else:
                                        values.update({'kernel_version': "", 'bmlog' : "", 'bootcd_version' : '', 
                                                                         'boot_server' : '',
+                                                                        'install_date' : '',
                                                                        'nm_status' : '', 
                                                                        'fs_status' : '',
                                                                        'uptime' : '',
                                                                        'dns_status' : '',
+                                                                       'md5sums' : '',
+                                                                       'md5sum_yum' : '',
                                                                        'rpm_version' : '',
                                                                        'rpm_versions' : '',
                                                                        'princeton_comon_dir' : "", 
@@ -344,7 +351,7 @@ EOF                 """)
                values['ssh_status'] = True
                if "2.6.17" in oval or "2.6.2" in oval:
                        values['observed_category'] = 'PROD'
-                       if "bm.log" in values['bmlog']:
+                       if "bm.log" in values['bmlog'] or "BootManager" in values['bmlog']:
                                values['observed_status'] = 'DEBUG'
                        else:
                                values['observed_status'] = 'BOOT'
@@ -377,6 +384,7 @@ EOF                 """)
 
                values['firewall'] = False
 
+               #print "BEFORE:%s" % values
                # NOTE: A node is down if some of the public ports are not open
                if values['observed_status'] == "BOOT":
                        # verify that all ports are open.  Else, report node as down.
@@ -459,8 +467,11 @@ EOF                        """)
                        print "ALLVERSIONS: %s %s" % (nodename, values['rpm_versions'])
                        print "RPMVERSION: %s %s" % (nodename, values['rpm_version'])
                        print "UPTIME: %s %s" % (nodename, values['uptime'])
+                       print "MD5SUMS: %s %s" % (nodename, values['md5sums'])
+                       print "MD5SUM_YUM: %s %s" % (nodename, values['md5sum_yum'])
 
                        values = self.evaluate(nodename, values)
+                       #print "%s %s" % (nodename, values)
                        values['date_checked'] = datetime.now()
 
                except:
@@ -518,13 +529,13 @@ class ScanPCU(ScanInterface):
                                traceback.print_exc()
                                continue_probe = False
 
-                       if b_except or not continue_probe: return (None, None, None)
+                       if b_except or not continue_probe: return (None, None)
 
                        #### RUN NMAP ###############################
                        if continue_probe:
                                nmap = command.CMD()
-                               print "nmap -oG - -P0 -p22,23,80,443,5869,9100,16992 %s | grep Host:" % reboot.pcu_name(values['plc_pcu_stats'])
-                               (oval,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,23,80,443,5869,9100,16992 %s | grep Host:" % reboot.pcu_name(values['plc_pcu_stats']))
+                               print "nmap -oG - -P0 -p22,23,80,443,623,5869,9100,16992 %s | grep -v Down | grep Ports:" % reboot.pcu_name(values['plc_pcu_stats'])
+                               (oval,eval) = nmap.run_noexcept("nmap -oG - -P0 -p22,23,80,443,623,5869,9100,16992 %s | grep -v Down | grep Ports:" % reboot.pcu_name(values['plc_pcu_stats']))
                                # NOTE: an empty / error value for oval, will still work.
                                (values['port_status'], continue_probe) = nmap_port_status(oval)
                        else: