@@ -95,10 +95,12 @@ -env2file fname : write the environment to fname.csh and fname.sh -setvars VAR1=val1,VAR2=val2 : Add environment variables to a run NB// these are overwritten by values set in config files. -server -|hostname : start the server (reduces contention on megatest.db), use - to automatically figure out hostname + -listservers : list the servers + -killserver host:port|pid : kill server specified by host:port or pid, use % to kill all -repl : start a repl (useful for extending megatest) Spreadsheet generation -extract-ods fname.ods : extract an open document spreadsheet from the database -pathmod path : insert path, i.e. path/runame/itempath/logfile.html @@ -153,10 +155,11 @@ ":expected" ":tol" ":units" ;; misc "-server" + "-killserver" "-extract-ods" "-pathmod" "-env2file" "-setvars" "-set-state-status" @@ -178,10 +181,11 @@ ;; misc "-archive" "-repl" "-lock" "-unlock" + "-listservers" ;; queries "-test-paths" ;; get path(s) to a test, ordered by youngest first "-runall" ;; run all tests "-remove-runs" @@ -260,10 +264,42 @@ ;; we start the server if not running else start the client thread ;;====================================================================== (if (args:get-arg "-server") (server:launch)) + +(define *logged-in-clients* (make-hash-table)) + +(if (or (args:get-arg "-listservers") + (args:get-arg "-killserver")) + (let ((tl (setup-for-run))) + (if tl + (let ((servers (open-run-close tasks:get-all-servers tasks:open-db)) + (fmtstr "~5a~8a~20a~5a~20a~8a~10a\n")) + (format #t fmtstr "Id" "Pid" "Host" "Port" "Time" "Priority" "State") + (format #t fmtstr "==" "===" "====" "====" "====" "========" "=====") + (for-each + (lambda (server) + (let* ((id (vector-ref server 0)) + (pid (vector-ref server 1)) + (hostname (vector-ref server 2)) + (port (vector-ref server 3)) + (start-time (vector-ref server 4)) + (priority (vector-ref server 5)) + (state (vector-ref server 6)) + (accessible (handle-exceptions + exn + #f + (let ((zmq-socket (server:client-login hostname port))) + (if zmq-socket + (server:client-logout zmq-socket) + #f))))) + (format #t fmtstr id pid hostname port start-time priority + (cond + (accessible "ACCESSIBLE") + (else "DEAD"))))) + servers))))) (if (or (let ((res #f)) (for-each (lambda (key) (if (args:get-arg key)(set! res #t)))