Megatest

Diff
Login

Differences From Artifact [0b83b5ae2b]:

To Artifact [f2f99ff8c5]:


2065
2066
2067
2068
2069
2070
2071
2072
2073




2074
2075
2076
2077
2078
2079
2080
2065
2066
2067
2068
2069
2070
2071


2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082







-
-
+
+
+
+







      (if (file-exists? gzfile) (delete-file gzfile))
      (system (conc "gzip " logfile))
      
      (unsetenv "TARGETHOST_LOGF")
      (unsetenv "TARGETHOST"))))

(define (server:get-logs-list area-path)
  (let* ((server-logs-cmd  (conc "grep -iL exiting " area-path "/logs/server-*-*.log"))
	 (server-logs   (string-split (string-chomp (with-input-from-pipe server-logs-cmd read-string)))))
  (let* (;; (server-logs-cmd  (conc "grep -iL exiting " area-path "/logs/server-*-*.log"))
	 ;; (server-logs   (string-split (string-chomp (with-input-from-pipe server-logs-cmd read-string))))
	 (server-logs      (glob (conc area-path"/logs/server-*-*.log")))
	 )
    server-logs))
  
;; get a list of servers with all relevant data
;; ( mod-time host port start-time pid )
;;
(define (server:get-list areapath #!key (limit #f))
  (let ((fname-rx    (regexp "^(|.*/)server-(\\d+)-(\\S+).log$"))
2217
2218
2219
2220
2221
2222
2223
2224
2225




2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241





2242
2243
2244
2245
2246
2247
2248


2249
2250
2251
2252
2253
2254
2255



2256
2257
2258
2259
2260








2261
2262

2263
2264
2265
2266
2267
2268
2269
2219
2220
2221
2222
2223
2224
2225


2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240





2241
2242
2243
2244
2245

2246
2247
2248
2249


2250
2251
2252
2253
2254
2255
2256


2257
2258
2259





2260
2261
2262
2263
2264
2265
2266
2267


2268
2269
2270
2271
2272
2273
2274
2275







-
-
+
+
+
+











-
-
-
-
-
+
+
+
+
+
-




-
-
+
+





-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+







    (or ns numservers)))

;; given a path to a server log return: host port startseconds
;; any changes to number of elements returned by this fuction will dirctly affect server:record->url,server:record->id,server:kill,server:get-num-alive which uses match let 

(define (server:logf-get-start-info logf)
  (let ((server-rx (regexp "^SERVER STARTED: (\\S+):(\\d+) AT ([\\d\\.]+) server-id: (\\S+)")) ;; SERVER STARTED: host:port AT timesecs server id
        (dbprep-rx (regexp "^SERVER: dbprep"))
        (dbprep-found 0)) 
        (dbprep-rx     (regexp "^SERVER: dbprep"))
	(exiting-rx    (regexp ".*exiting promptly.*"))
        (dbprep-found  #f)
	(exiting-found #f))
    (handle-exceptions
	exn
      (begin
	(debug:print-info 0 *default-log-port* "Unable to get server info from " logf ", exn=" exn)
	(list #f #f #f #f)) ;; no idea what went wrong, call it a bad server
      (with-input-from-file
	  logf
	(lambda ()
	  (let loop ((inl  (read-line))
		     (lnum 0))
	    (if (not (eof-object? inl))
		(let ((mlst (string-match server-rx inl))
                      (dbprep (string-match dbprep-rx inl))
                      )
                  (if dbprep
                    (set! dbprep-found 1)
		(let ((mlst    (string-match server-rx inl))
                      (dbprep  (string-match dbprep-rx inl))
		      (exiting (string-match exiting-rx inl)))
                  (if dbprep  (set! dbprep-found #t))
		  (if exiting (set! exiting-found #t))
                  )
		  (if (not mlst)
		      (if (< lnum 500) ;; give up if more than 500 lines of server log read
			  (loop (read-line)(+ lnum 1))
			  (begin 
                           (debug:print-info 0 *default-log-port* "Unable to get server info from first 500 lines of " logf )
                           (list #f #f #f #f)))
			    (debug:print-info 0 *default-log-port* "Unable to get server info from first 500 lines of " logf )
			    (list #f #f #f #f)))
		      (let ((dat  (cdr mlst)))
			(list (car dat) ;; host
			      (string->number (cadr dat)) ;; port
			      (string->number (caddr dat))
                              (cadr (cddr dat))))))
                (begin 
                   (if dbprep-found
		(begin
		  (cond
		   (dbprep-found
                      (begin
                         (debug:print-info 0 *default-log-port* "Server is in dbprep at " (current-seconds))
                         (thread-sleep! 25)
                      )
                      (debug:print-info 0 *default-log-port* "Unable to get server info from " logf " at " (current-seconds))
		    (debug:print-info 0 *default-log-port* "Server is in dbprep at " (current-seconds))
		    (thread-sleep! 25))
		   (exiting-found
		    (debug:print-info 0 *default-log-port* "Removing server log "logf" as the server exited due to signal")
		    (delete-file* logf)
		    (thread-sleep! 1))
		   (else
		    (debug:print-info 0 *default-log-port* "Unable to get server info from " logf " at " (current-seconds))))
                   )
		   (list #f #f #f #f)))))))))
		  (list #f #f #f #f)))))))))


;;======================================================================
;; DO NOT CALL THIS DIRECTLY. It is called from common:wait-for-normalized-load
;;
;; (define (common:wait-for-cpuload maxload-in numcpus-in waitdelay #!key (count 1000) (msg #f)(remote-host #f)(force-maxload #f)(num-tries 5))
;;   (let* ((loadavg (common:get-cpu-load remote-host))