Overview
Comment: | Basics for test control panel refactored |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | refactor-dashboard |
Files: | files | file ages | folders |
SHA1: |
42696898422e8a78530e5f6d90f7c780 |
User & Date: | mrwellan on 2011-06-25 20:45:39 |
Other Links: | branch diff | manifest | tags |
Context
2011-06-26
| ||
00:26 | Basics for test control panel refactored check-in: b3b5a35df9 user: mrwellan tags: refactor-dashboard | |
2011-06-25
| ||
20:45 | Basics for test control panel refactored check-in: 4269689842 user: mrwellan tags: refactor-dashboard | |
17:46 | Merged bogus non-real branch check-in: 438155a337 user: mrwellan tags: refactor-dashboard | |
Changes
Modified dashboard-tests.scm from [d249feea17] to [85c9231672].
︙ | ︙ | |||
8 9 10 11 12 13 14 | ;; implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ;; PURPOSE. ;;====================================================================== ;;====================================================================== ;; ;;====================================================================== | | | | > | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > | > > > | > > | > | < > | < < < | > | < < > > | | > > > | < | > | | | > > | < | | | | > > > > > > > > > > > > | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | ;; implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ;; PURPOSE. ;;====================================================================== ;;====================================================================== ;; ;;====================================================================== (define (examine-test db test-id other-thread) ;; run-id run-key origtest) (let* ((testdat (db:get-test-data-by-id db test-id)) (run-id (if testdat (db:test-get-run_id testdat) #f)) (keydat (if testdat (keys:get-key-val-pairs db run-id) #f)) (rundat (if testdat (db:get-run-info db run-id) #f)) (runname (if testdat (db:get-value-by-header (db:get-row rundat) (db:get-header rundat) "runname") #f)) (teststeps (if testdat (db:get-steps-for-test db test-id) #f)) (logfile "/this/dir/better/not/exist") (rundir logfile) (testfullname (if testdat (db:test-get-fullname testdat) "Gathering data ...")) (viewlog (lambda (x) (if (file-exists? logfile) (system (conc "firefox " logfile "&")) (message-window (conc "File " logfile " not found"))))) (xterm (lambda (x) (if (directory-exists? rundir) (let ((shell (if (get-environment-variable "SHELL") (conc "-e " (get-environment-variable "SHELL")) ""))) (system (conc "cd " rundir ";xterm -T \"" (string-translate testfullname "()" " ") "\" " shell "&"))) (message-window (conc "Directory " rundir " not found"))))) (refreshdat (lambda () (set! testdat (db:get-test-data-by-id db test-id)) (set! teststeps (db:get-steps-for-test db test-id)) (set! logfile (conc (db:test-get-rundir testdat) "/" (db:test-get-final_logf testdat))) (set! rundir (db:test-get-rundir testdat)) (set! testfullname (db:test-get-fullname testdat)))) (widgets (make-hash-table)) (self #f) (store-label (lambda (name lbl cmd) (hash-table-set! widgets name (lambda () (iup:attribute-set! lbl "TITLE" (cmd)))) lbl)) (store-button (lambda (name btn cmd) (hash-table-set! widgets name (lambda (cmd) (iup:attribute-set! btn "TITLE" (cmd)))) btn)) ) (cond ((not testdat)(begin (print "ERROR: bad test info for " test-id)(exit 1))) ((not rundat)(begin (print "ERROR: found test info but there is a problem with the run info for " run-id)(exit 1))) (else ;; (test-set-status! db run-id test-name state status itemdat) (set! self (iup:dialog #:title testfullname (iup:hbox #:expand "BOTH" ;; Need a full height box for all the test steps (iup:vbox #:expand "BOTH" (iup:hbox #:expand "BOTH" (iup:frame #:title "Run Info" #:expand "VERTICAL" (iup:hbox #:expand "BOTH" (apply iup:vbox #:expand "BOTH" (append (map (lambda (keyval) (iup:label (conc (car keyval) " ") #:expand "HORIZONTAL")) keydat) (list (iup:label "runname ")))) (apply iup:vbox (append (map (lambda (keyval) (iup:label (cadr keyval) #:expand "HORIZONTAL")) keydat) (list (iup:label runname)))))) (iup:frame #:title "Test Info" #:expand "VERTICAL" (iup:hbox #:expand "BOTH" (apply iup:vbox #:expand "BOTH" (map (lambda (val) (iup:label val #:expand "HORIZONTAL")) (list "Testname: " "Item path: " "Current state: " "Current status: " "Test comment: "))) (apply iup:vbox #:expand "BOTH" (list (iup:label (db:test-get-testname testdat) #:expand "BOTH") (iup:label (db:test-get-item-path testdat) #:expand "BOTH") (store-label "teststate" (iup:label "TestState" #:expand "BOTH") (lambda () (db:test-get-state testdat))) (store-label "teststatus" (iup:label "TestStatus" #:expand "BOTH") (lambda () (db:test-get-status testdat))) (store-label "testcomment" (iup:label "TestComment" #:expand "BOTH") (lambda () (db:test-get-comment testdat)))))))))))) (iup:show self) ;; Now start keeping the gui updated from the db (let loop ((i 0)) (thread-sleep! 0.1) (refreshdat) ;; update from the db here (thread-suspend! other-thread) ;; update the gui elements here (for-each (lambda (key) (print "Updating " key) ((hash-table-ref widgets key))) (hash-table-keys widgets)) (thread-resume! other-thread) (loop i)))))) ;; ;; (iup:frame (iup:label (conc "TESTNAME:\n" testfullname) #:expand "YES"))) ;; (iup:frame #:title "Actions" #:expand "YES" ;; (iup:hbox ;; the actions box ;; (iup:button "View Log" #:action viewlog #:expand "YES") ;; (iup:button "Start Xterm" #:action xterm #:expand "YES"))) |
︙ | ︙ |
Modified dashboard.scm from [a8e4a74418] to [007854e6c0].
︙ | ︙ | |||
116 117 118 119 120 121 122 | (define (update-rundat runnamepatt numruns testnamepatt itemnamepatt) (let* ((allruns (db-get-runs *db* runnamepatt numruns *start-run-offset*)) (header (db:get-header allruns)) (runs (db:get-rows allruns)) (result '()) (maxtests 0)) (for-each (lambda (run) | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | (define (update-rundat runnamepatt numruns testnamepatt itemnamepatt) (let* ((allruns (db-get-runs *db* runnamepatt numruns *start-run-offset*)) (header (db:get-header allruns)) (runs (db:get-rows allruns)) (result '()) (maxtests 0)) (for-each (lambda (run) (let* ((run-id (db:get-value-by-header run header "id")) (tests (db-get-tests-for-run *db* run-id testnamepatt itemnamepatt)) (key-vals (get-key-vals *db* run-id))) (if (> (length tests) maxtests) (set! maxtests (length tests))) (set! result (cons (vector run tests key-vals) result)))) runs) (set! *header* header) |
︙ | ︙ | |||
400 401 402 403 404 405 406 | (thread-sleep! 0.1) (thread-suspend! other-thread) (update-buttons uidat *num-runs* *num-tests*) (update-rundat (hash-table-ref/default *searchpatts* "runname" "%") *num-runs* (hash-table-ref/default *searchpatts* "test-name" "%") (hash-table-ref/default *searchpatts* "item-name" "%")) (thread-resume! other-thread) | | | | 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | (thread-sleep! 0.1) (thread-suspend! other-thread) (update-buttons uidat *num-runs* *num-tests*) (update-rundat (hash-table-ref/default *searchpatts* "runname" "%") *num-runs* (hash-table-ref/default *searchpatts* "test-name" "%") (hash-table-ref/default *searchpatts* "item-name" "%")) (thread-resume! other-thread) (loop i))) (define *job* #f) (cond ((args:get-arg "-run") (let ((runid (string->number (args:get-arg "-run")))) (if runid (set! *job* (lambda (thr)(examine-run *db* runid))) (begin (print "ERROR: runid is not a number " (args:get-arg "-run")) (exit 1))))) ((args:get-arg "-test") (let ((testid (string->number (args:get-arg "-test")))) (if testid (set! *job* (lambda (thr)(examine-test *db* testid thr))) (begin (print "ERROR: testid is not a number " (args:get-arg "-test")) (exit 1))))) (else (set! uidat (make-dashboard-buttons *num-runs* *num-tests* dbkeys)) (set! *job* (lambda (thr)(run-update thr))))) (let* ((th2 (make-thread iup:main-loop)) (th1 (make-thread (*job* th2)))) (thread-start! th1) (thread-start! th2) (thread-join! th2)) |
Modified db.scm from [c2bf40a5ae] to [588f74bb33].
︙ | ︙ | |||
98 99 100 101 102 103 104 | "SELECT fieldname,fieldtype FROM keys ORDER BY id DESC;") res)) (define-inline (db:get-header vec)(vector-ref vec 0)) (define-inline (db:get-rows vec)(vector-ref vec 1)) | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | "SELECT fieldname,fieldtype FROM keys ORDER BY id DESC;") res)) (define-inline (db:get-header vec)(vector-ref vec 0)) (define-inline (db:get-rows vec)(vector-ref vec 1)) (define (db:get-value-by-header row header 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))))))) |
︙ | ︙ | |||
189 190 191 192 193 194 195 196 197 198 199 200 201 202 | (define-inline (db:test-get-diskfree vec) (vector-ref vec 8)) (define-inline (db:test-get-uname vec) (vector-ref vec 9)) (define-inline (db:test-get-rundir vec) (vector-ref vec 10)) (define-inline (db:test-get-item-path vec) (vector-ref vec 11)) (define-inline (db:test-get-run_duration vec) (vector-ref vec 12)) (define-inline (db:test-get-final_logf vec) (vector-ref vec 13)) (define-inline (db:test-get-comment vec) (vector-ref vec 14)) (define (db-get-tests-for-run db run-id . params) (let ((res '()) (testpatt (if (or (null? params)(not (car params))) "%" (car params))) (itempatt (if (> (length params) 1)(cadr params) "%"))) (sqlite3:for-each-row (lambda (id run-id testname state status event-time host cpuload diskfree uname rundir item-path run-duration final-logf comment) | > > | 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | (define-inline (db:test-get-diskfree vec) (vector-ref vec 8)) (define-inline (db:test-get-uname vec) (vector-ref vec 9)) (define-inline (db:test-get-rundir vec) (vector-ref vec 10)) (define-inline (db:test-get-item-path vec) (vector-ref vec 11)) (define-inline (db:test-get-run_duration vec) (vector-ref vec 12)) (define-inline (db:test-get-final_logf vec) (vector-ref vec 13)) (define-inline (db:test-get-comment vec) (vector-ref vec 14)) (define-inline (db:test-get-fullname vec) (conc (db:test-get-testname vec) "/" (db:test-get-item-path vec))) (define (db-get-tests-for-run db run-id . params) (let ((res '()) (testpatt (if (or (null? params)(not (car params))) "%" (car params))) (itempatt (if (> (length params) 1)(cadr params) "%"))) (sqlite3:for-each-row (lambda (id run-id testname state status event-time host cpuload diskfree uname rundir item-path run-duration final-logf comment) |
︙ | ︙ |
Modified keys.scm from [b6f3133402] to [6a5ee98f22].
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | (lambda (key) (let ((qry (conc "SELECT " (key:get-fieldname key) " FROM runs WHERE id=?;"))) ;; (print "qry: " qry) (sqlite3:for-each-row (lambda (key-val) (set! res (cons key-val res))) db qry run-id))) keys) (reverse res))) (define (keys->keystr keys) ;; => key1,key2,key3,additiona1, ... (string-intersperse (map key:get-fieldname keys) ",")) (define-inline (keys->valslots keys) ;; => ?,?,? .... | > > > > > > > > > > > > > > > > > | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | (lambda (key) (let ((qry (conc "SELECT " (key:get-fieldname key) " FROM runs WHERE id=?;"))) ;; (print "qry: " qry) (sqlite3:for-each-row (lambda (key-val) (set! res (cons key-val res))) db qry run-id))) keys) (reverse res))) ;; get key val pairs for a given run-id ;; ( (FIELDNAME1 keyval1) (FIELDNAME2 keyval2) ... ) (define (keys:get-key-val-pairs db run-id) (let* ((keys (get-keys db)) (res '())) ;; (print "keys: " keys " run-id: " run-id) (for-each (lambda (key) (let ((qry (conc "SELECT " (key:get-fieldname key) " FROM runs WHERE id=?;"))) ;; (print "qry: " qry) (sqlite3:for-each-row (lambda (key-val) (set! res (cons (list (key:get-fieldname key) key-val) res))) db qry run-id))) keys) (reverse res))) (define (keys->keystr keys) ;; => key1,key2,key3,additiona1, ... (string-intersperse (map key:get-fieldname keys) ",")) (define-inline (keys->valslots keys) ;; => ?,?,? .... |
︙ | ︙ |
Modified launch.scm from [ee8a66020f] to [7a359a3ccb].
︙ | ︙ | |||
70 71 72 73 74 75 76 | (map car disks))) best)) (define (create-work-area db run-id test-path disk-path testname itemdat) (let* ((run-info (db:get-run-info db run-id)) (item-path (let ((ip (item-list->path itemdat))) (if (equal? ip "") "" (conc "/" ip)))) | | | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | (map car disks))) best)) (define (create-work-area db run-id test-path disk-path testname itemdat) (let* ((run-info (db:get-run-info db run-id)) (item-path (let ((ip (item-list->path itemdat))) (if (equal? ip "") "" (conc "/" ip)))) (runname (db:get-value-by-header (db:get-row run-info) (db:get-header run-info) "runname")) (key-vals (get-key-vals db run-id)) (key-str (string-intersperse key-vals "/")) (dfullp (conc disk-path "/" key-str "/" runname "/" testname item-path)) (toptest-path (conc disk-path "/" key-str "/" runname "/" testname)) |
︙ | ︙ |
Modified megatest.scm from [7f265d3900] to [14746c53af].
︙ | ︙ | |||
173 174 175 176 177 178 179 | (keys (db-get-keys db)) (keynames (map key:get-fieldname keys))) ;; Each run (for-each (lambda (run) (print "Run: " (string-intersperse (map (lambda (x) | | | | | 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | (keys (db-get-keys db)) (keynames (map key:get-fieldname keys))) ;; Each run (for-each (lambda (run) (print "Run: " (string-intersperse (map (lambda (x) (db:get-value-by-header run header x)) keynames) "/") "/" (db:get-value-by-header run header "runname")) (let ((run-id (db:get-value-by-header run header "id"))) (let ((tests (db-get-tests-for-run db run-id testpatt itempatt))) ;; Each test (for-each (lambda (test) (format #t " Test: ~25a State: ~15a Status: ~15a Runtime: ~5@as Time: ~22a Host: ~10a\n" (conc (db:test-get-testname test) |
︙ | ︙ |
Modified runs.scm from [75f08f0e3f] to [b2c0b4b627].
︙ | ︙ | |||
465 466 467 468 469 470 471 | (rundat (runs:get-runs-by-patt db keys runnamepatt)) (header (vector-ref rundat 0)) (runs (vector-ref rundat 1))) (print "Header: " header) (for-each (lambda (run) (let ((runkey (string-intersperse (map (lambda (k) | | | | | | | | 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 | (rundat (runs:get-runs-by-patt db keys runnamepatt)) (header (vector-ref rundat 0)) (runs (vector-ref rundat 1))) (print "Header: " header) (for-each (lambda (run) (let ((runkey (string-intersperse (map (lambda (k) (db:get-value-by-header run header (vector-ref k 0))) keys) "/"))) (let* ((run-id (db:get-value-by-header run header "id") ) (tests (db-get-tests-for-run db (db:get-value-by-header run header "id") testpatt itempatt)) (lasttpath "/does/not/exist/I/hope")) (if (not (null? tests)) (begin (print "Removing tests for run: " runkey " " (db:get-value-by-header run header "runname")) (for-each (lambda (test) (print " " (db:test-get-testname test) " id: " (db:test-get-id test) " " (db:test-get-item-path test)) (db:delete-test-records db (db:test-get-id test)) (if (> (string-length (db:test-get-rundir test)) 5) ;; bad heuristic but should prevent /tmp /home etc. (let ((fullpath (db:test-get-rundir test))) ;; "/" (db:test-get-item-path test)))) (set! lasttpath fullpath) (print "rm -rf " fullpath) (system (conc "rm -rf " fullpath)) (let ((cmd (conc "rmdir -p " (get-dir-up-one fullpath)))) (print cmd) (system cmd)) ))) tests))) (let ((remtests (db-get-tests-for-run db (db:get-value-by-header run header "id")))) (if (null? remtests) ;; no more tests remaining (let* ((dparts (string-split lasttpath "/")) (runpath (conc "/" (string-intersperse (take dparts (- (length dparts) 1)) "/")))) (print "Removing run: " runkey " " (db:get-value-by-header run header "runname")) (db:delete-run db run-id) ;; need to figure out the path to the run dir and remove it if empty ;; (if (null? (glob (conc runpath "/*"))) ;; (begin ;; (print "Removing run dir " runpath) ;; (system (conc "rmdir -p " runpath)))) ))) ))) runs))) |