Index: megatest.scm ================================================================== --- megatest.scm +++ megatest.scm @@ -982,18 +982,18 @@ (begin (adjutant-run) (set! *didsomething* #t))) (if (args:get-arg "-list-servers") - (let* ((tl (launch:setup)) + (let* ((tl (launch:setup)) ;; need this to initialize *toppath* (servdir (tt:get-servinfo-dir *toppath*)) (servfiles (glob (conc servdir "/*:*.db"))) - (fmtstr "~10a~22a~10a~13a~25a~8a\n") + (fmtstr "~10a~22a~10a~25a~25a~8a\n") (dbfiles (glob (conc *toppath* "/.mtdb/*.db"))) (ttdat (make-tt areapath: *toppath*)) ) - (format #t fmtstr "DB" "host:port" "PID" "age (hms)" "last mod" "state") + (format #t fmtstr "DB" "host:port" "PID" "age" "last mod" "state") (for-each (lambda (dbfile) (let* ( (dbfname (conc (pathname-file dbfile) ".db")) (sfiles (tt:find-server *toppath* dbfname)) @@ -1008,14 +1008,19 @@ (let* ( (db (list-ref sinfo 5)) (pid (list-ref sinfo 4)) (host (list-ref sinfo 0)) (port (list-ref sinfo 1)) - (age (seconds->time-string(- (current-seconds) (list-ref sinfo 2)))) + (server-id (list-ref sinfo 3)) + (age (seconds->hr-min-sec (- (current-seconds) (list-ref sinfo 2)))) (last-mod (seconds->string (list-ref sinfo 2))) - (state (if (system (conc "ssh " host " ps " pid " > /dev/null")) "alive" "dead")) - ) + (status (system (conc "ssh " host " ps " pid " > /dev/null"))) + (state (if (> status 0) + "dead" + (tt:ping host port server-id 0) + )) + ) (format #t fmtstr db (conc host ":" port) pid age last-mod state) ) ) sinfos ) @@ -1029,15 +1034,65 @@ ) (set! *didsomething* #t) (exit) ) ) + + + (if (args:get-arg "-kill-servers") - (begin - (debug:print 0 *default-log-port* "-kill-servers not implemented yet in Megatest 1.80") - (exit) + + (let* ((tl (launch:setup)) ;; need this to initialize *toppath* + (servdir (tt:get-servinfo-dir *toppath*)) + (servfiles (glob (conc servdir "/*:*.db"))) + (fmtstr "~10a~22a~10a~25a~25a~8a\n") + (dbfiles (glob (conc *toppath* "/.mtdb/*.db"))) + (ttdat (make-tt areapath: *toppath*)) + ) + (format #t fmtstr "DB" "host:port" "PID" "age" "last mod" "state") + (for-each + (lambda (dbfile) + (let* ( + (dbfname (conc (pathname-file dbfile) ".db")) + (sfiles (tt:find-server *toppath* dbfname)) + ) + (for-each + (lambda (sfile) + (let ( + (sinfos (tt:get-server-info-sorted ttdat dbfname)) + ) + (for-each + (lambda (sinfo) + (let* ( + (db (list-ref sinfo 5)) + (pid (list-ref sinfo 4)) + (host (list-ref sinfo 0)) + (port (list-ref sinfo 1)) + (server-id (list-ref sinfo 3)) + (age (seconds->hr-min-sec (- (current-seconds) (list-ref sinfo 2)))) + (last-mod (seconds->string (list-ref sinfo 2))) + (killed (system (conc "ssh " host " kill " pid " > /dev/null"))) + (dummy2 (sleep 1)) + (state (if (> (system (conc "ssh " host " ps " pid " > /dev/null")) 0) "dead" "alive")) + ) + (format #t fmtstr db (conc host ":" port) pid age last-mod state) + (system (conc "rm " dbfile)) + ) + ) + sinfos + ) + ) + ) + sfiles + ) + ) + ) + dbfiles + ) + (set! *didsomething* #t) + (exit) ) ) ;;====================================================================== ;; Weird special calls that need to run *after* the server has started?