Overview
Comment: | Monitor based runs working well |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a1371db27aa42d132a7a06bd46089de7 |
User & Date: | matt on 2011-10-23 23:03:46 |
Other Links: | manifest | tags |
Context
2011-10-24
| ||
03:36 | Added missing dashboard-guimonitor.scm file check-in: 7ee9f12f63 user: matt tags: trunk | |
2011-10-23
| ||
23:03 | Monitor based runs working well check-in: a1371db27a user: matt tags: trunk | |
20:42 | Lots of little bugs fixed related to monitor. Note that now multiple runs must be accomodated from the same launcher check-in: 98de2c2f8d user: matt tags: trunk | |
Changes
Modified Makefile from [d16e947139] to [56afbe1a91].
︙ | ︙ | |||
18 19 20 21 22 23 24 | megatest: $(OFILES) megatest.o csc $(OFILES) megatest.o -o megatest dboard : $(OFILES) $(GOFILES) csc $(OFILES) $(GOFILES) -o dboard # Special dependencies for the includes | | | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | megatest: $(OFILES) megatest.o csc $(OFILES) megatest.o -o megatest dboard : $(OFILES) $(GOFILES) csc $(OFILES) $(GOFILES) -o dboard # Special dependencies for the includes db.o launch.o runs.o dashboard-tests.o dashboard-guimonitor.o monitor.o dashboard.o megatest.o : db_records.scm runs.o dashboard.o dashboard-tests.o : run_records.scm keys.o db.o runs.o launch.o megatest.o : key_records.scm tasks.o dashboard-tasks.o : task_records.scm $(OFILES) $(GOFILES) : common_records.scm %.o : %.scm |
︙ | ︙ |
Modified db.scm from [a288398d2a] to [f088a0a421].
︙ | ︙ | |||
280 281 282 283 284 285 286 | "SELECT fieldname,fieldtype FROM keys ORDER BY id DESC;") (set! *db-keys* res) res))) (define db:get-keys db-get-keys) (define (db:get-value-by-header row header field) | | | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | "SELECT fieldname,fieldtype FROM keys ORDER BY id DESC;") (set! *db-keys* res) res))) (define db:get-keys db-get-keys) (define (db:get-value-by-header row header field) ;; (debug:print 2 "db:get-value-by-header row: " row " header: " header " field: " field) (if (null? header) #f (let loop ((hed (car header)) (tal (cdr header)) (n 0)) (if (equal? hed field) (vector-ref row n) (if (null? tal) #f (loop (car tal)(cdr tal)(+ n 1))))))) |
︙ | ︙ | |||
363 364 365 366 367 368 369 | (let* ((res #f) (keys (db-get-keys db)) (remfields (list "id" "runname" "state" "status" "owner" "event_time")) (header (append (map key:get-fieldname keys) remfields)) (keystr (conc (keys->keystr keys) "," (string-intersperse remfields ",")))) | | | 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | (let* ((res #f) (keys (db-get-keys db)) (remfields (list "id" "runname" "state" "status" "owner" "event_time")) (header (append (map key:get-fieldname keys) remfields)) (keystr (conc (keys->keystr keys) "," (string-intersperse remfields ",")))) ;; (debug:print 0 "db:get-run-info run-id: " run-id " header: " header " keystr: " keystr) (sqlite3:for-each-row (lambda (a . x) (set! res (apply vector a x))) db (conc "SELECT " keystr " FROM runs WHERE id=?;") run-id) (vector header res))) |
︙ | ︙ |
Modified runs.scm from [9af3e39a19] to [cff48b30cc].
︙ | ︙ | |||
218 219 220 221 222 223 224 | ;; if status is "AUTO" then call rollup (if (and test-id state status (equal? status "AUTO")) (db:test-data-rollup db test-id)) ;; add metadata (need to do this way to avoid SQL injection issues) ;; :first_err | | | | | | | | | | 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | ;; if status is "AUTO" then call rollup (if (and test-id state status (equal? status "AUTO")) (db:test-data-rollup db test-id)) ;; add metadata (need to do this way to avoid SQL injection issues) ;; :first_err ;; (let ((val (hash-table-ref/default otherdat ":first_err" #f))) ;; (if val ;; (sqlite3:execute db "UPDATE tests SET first_err=? WHERE run_id=? AND testname=? AND item_path=?;" val run-id test-name item-path))) ;; ;; ;; :first_warn ;; (let ((val (hash-table-ref/default otherdat ":first_warn" #f))) ;; (if val ;; (sqlite3:execute db "UPDATE tests SET first_warn=? WHERE run_id=? AND testname=? AND item_path=?;" val run-id test-name item-path))) (let ((category (hash-table-ref/default otherdat ":category" "")) (variable (hash-table-ref/default otherdat ":variable" "")) (value (hash-table-ref/default otherdat ":value" #f)) (expected (hash-table-ref/default otherdat ":expected" #f)) (tol (hash-table-ref/default otherdat ":tol" #f)) (units (hash-table-ref/default otherdat ":units" "")) |
︙ | ︙ | |||
636 637 638 639 640 641 642 | (num-running (db:get-count-tests-running db)) (max-concurrent-jobs (config-lookup *configdat* "setup" "max_concurrent_jobs")) (parent-test (and (not (null? items))(equal? item-path ""))) (single-test (and (null? items) (equal? item-path ""))) (item-test (not (equal? item-path ""))) (item-patt (args:get-arg "-itempatt")) (patt-match (if item-patt | | | 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 | (num-running (db:get-count-tests-running db)) (max-concurrent-jobs (config-lookup *configdat* "setup" "max_concurrent_jobs")) (parent-test (and (not (null? items))(equal? item-path ""))) (single-test (and (null? items) (equal? item-path ""))) (item-test (not (equal? item-path ""))) (item-patt (args:get-arg "-itempatt")) (patt-match (if item-patt (string-search (glob->regexp (string-translate item-patt "%" "*")) item-path) #t))) (debug:print 3 "max-concurrent-jobs: " max-concurrent-jobs ", num-running: " num-running) (if (and patt-match (runs:can-run-more-tests db)) (begin (let loop2 ((ts (db:get-test-info db run-id test-name item-path)) ;; #f) |
︙ | ︙ | |||
942 943 944 945 946 947 948 | (single-test (and (null? items) (equal? item-path ""))) (item-test (not (equal? item-path ""))) ;; look through all the item-patts if defined, format is patt1,patt2,patt3 ... wildcard is % (item-matches (if item-patts (let ((res #f)) (for-each (lambda (patt) | | | | | > | | 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 | (single-test (and (null? items) (equal? item-path ""))) (item-test (not (equal? item-path ""))) ;; look through all the item-patts if defined, format is patt1,patt2,patt3 ... wildcard is % (item-matches (if item-patts (let ((res #f)) (for-each (lambda (patt) (if (string-search (glob->regexp (string-translate patt "%" "*")) item-path) (set! res #t))) (string-split item-patts ",")) res) #t))) (debug:print 3 "max-concurrent-jobs: " max-concurrent-jobs ", num-running: " num-running) (if (and item-matches (runs:can-run-more-tests db)) (begin (let loop2 ((ts (db:get-test-info db run-id test-name item-path)) ;; #f) (ct 0)) (if (and (not ts) (< ct 10)) |
︙ | ︙ | |||
1244 1245 1246 1247 1248 1249 1250 | (full-name (conc testname "/" item-path)) (prev-test-dat (hash-table-ref/default curr-tests-hash full-name #f)) (test-steps (db:get-steps-for-test db (db:test-get-id testdat))) (new-test-record #f)) ;; replace these with insert ... select (apply sqlite3:execute db | | | | 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 | (full-name (conc testname "/" item-path)) (prev-test-dat (hash-table-ref/default curr-tests-hash full-name #f)) (test-steps (db:get-steps-for-test db (db:test-get-id testdat))) (new-test-record #f)) ;; replace these with insert ... select (apply sqlite3:execute db (conc "INSERT OR REPLACE INTO tests (run_id,testname,state,status,event_time,host,cpuload,diskfree,uname,rundir,item_path,run_duration,final_logf,comment) " "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);") new-run-id (cddr (vector->list testdat))) (set! new-testdat (car (db-get-tests-for-run db new-run-id testname item-path '() '()))) (hash-table-set! curr-tests-hash full-name new-testdat) ;; this could be confusing, which record should go into the lookup table? ;; Now duplicate the test steps (debug:print 4 "Copying records in test_steps from test_id=" (db:test-get-id testdat) " to " (db:test-get-id new-testdat)) (sqlite3:execute db |
︙ | ︙ |
Modified tasks.scm from [cdc34b2110] to [d5fdccfca8].
︙ | ︙ | |||
88 89 90 91 92 93 94 | db (lambda () ;; execution time is updated with every snag, wait 10 secs before doing anything with the queue (sqlite3:for-each-row (lambda (id . rem) (set! res (apply vector id rem))) db | | | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | db (lambda () ;; execution time is updated with every snag, wait 10 secs before doing anything with the queue (sqlite3:for-each-row (lambda (id . rem) (set! res (apply vector id rem))) db "SELECT id,action,owner,state,target,name,test,item,creation_time,execution_time FROM tasks_queue WHERE state='new' OR (state='waiting' AND (strftime('%s','now')-execution_time) > 10) OR state='reset' ORDER BY execution_time ASC LIMIT 1;") (if res ;; yep, have work to be done (begin (sqlite3:execute db "UPDATE tasks_queue SET state='inprogress',execution_time=strftime('%s','now') WHERE id=?;" (tasks:task-get-id res)) res) #f))))) |
︙ | ︙ | |||
152 153 154 155 156 157 158 159 160 161 162 163 164 165 | (tasks:monitors-update db) (loop (+ count 1)(+ (current-seconds) 240))) (loop (+ count 1) next-touch))))))) (define (tasks:process-queue db megatestdbpath) (let* ((task (tasks:snag-a-task db)) (action (if task (tasks:task-get-action task) #f))) (if action (case (string->symbol action) ((run) (tasks:start-run db task)) ((remove) (tasks:remove-runs db task)) ((lock) (tasks:lock-runs db task)) ;; ((monitor) (tasks:start-monitor db task)) ((rollup) (tasks:rollup-runs db task)) | > | 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | (tasks:monitors-update db) (loop (+ count 1)(+ (current-seconds) 240))) (loop (+ count 1) next-touch))))))) (define (tasks:process-queue db megatestdbpath) (let* ((task (tasks:snag-a-task db)) (action (if task (tasks:task-get-action task) #f))) (print "tasks:process-queue task: " task) (if action (case (string->symbol action) ((run) (tasks:start-run db task)) ((remove) (tasks:remove-runs db task)) ((lock) (tasks:lock-runs db task)) ;; ((monitor) (tasks:start-monitor db task)) ((rollup) (tasks:rollup-runs db task)) |
︙ | ︙ | |||
230 231 232 233 234 235 236 | (define (tasks:set-state db task-id state) (sqlite3:execute db "UPDATE tasks_queue SET state=? WHERE id=?;" state task-id)) (define (tasks:start-run db task) | | | | | | | | | | | | | < | 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | (define (tasks:set-state db task-id state) (sqlite3:execute db "UPDATE tasks_queue SET state=? WHERE id=?;" state task-id)) (define (tasks:start-run db task) (let ((flags (make-hash-table))) (hash-table-set! flags "-rerun" "NOT_STARTED") (print "Starting run " task) ;; sillyness, just call the damn routine with the task vector and be done with it. FIXME SOMEDAY (runs:run-tests db (tasks:task-get-target task) (tasks:task-get-name task) (tasks:task-get-test task) (tasks:task-get-item task) (tasks:task-get-owner task) flags) (tasks:set-state db (tasks:task-get-id task) "waiting"))) |
Modified tests/Makefile from [65f4045670] to [0ebf03c262].
︙ | ︙ | |||
11 12 13 14 15 16 17 | test : csi -b -I .. ../megatest.scm -- -runall :sysname ubuntu :fsname afs :datapath tmp :runname blah cd ../;make test make runall dashboard : cd ../;make dboard | | | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | test : csi -b -I .. ../megatest.scm -- -runall :sysname ubuntu :fsname afs :datapath tmp :runname blah cd ../;make test make runall dashboard : cd ../;make dboard $(BINPATH)/dboard & remove : (cd ../;make);$(MEGATEST) -remove-runs :runname $(RUN) -testpatt % -itempatt % :sysname % :fsname % :datapath % runforever : while(ls); do runname=`date +%F-%R:%S`;$(MEGATEST) -runall :sysname ubuntu :fsname nfs :datapath none :runname $$runname;/home/matt/data/megatest/megatest -runall :sysname ubuntu :fsname nfs :datapath none :runname $$runname;/home/matt/data/megatest/megatest -runall :sysname ubuntu :fsname nfs :datapath none :runname $$runname;done |
Modified tests/megatest.config from [afd6a74f3f] to [a543ba73e0].
︙ | ︙ | |||
9 10 11 12 13 14 15 | runsdir /tmp/runs [jobtools] # useshell yes # ## launcher launches jobs, the job is managed on the target host ## by megatest, comment out launcher to run local # workhosts localhost hermes | | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | runsdir /tmp/runs [jobtools] # useshell yes # ## launcher launches jobs, the job is managed on the target host ## by megatest, comment out launcher to run local # workhosts localhost hermes launcher nbfake # launcher nodanggood ## use "xterm -e csi -- " as a launcher to examine the launch environment. ## exit with (exit) ## get a shell with (system "bash") # launcher xterm -e csi -- [validvalues] state start end completed 0 status pass fail n/a 0 1 # These are set before all tests, override them # in the testconfig [pre-launch-env-overrides] section [env-override] SPECIAL_ENV_VARS overide them here - should be seen at launch and in the runs TESTVAR [system realpath .] |
︙ | ︙ |