Index: dashboard-tests.scm ================================================================== --- dashboard-tests.scm +++ dashboard-tests.scm @@ -329,28 +329,50 @@ #:expand "YES" #:size "200x150" #:alignment "ALEFT:ATOP"))) (hash-table-set! widgets "Test Steps" (lambda (testdat) (let* ((currval (iup:attribute stepsdat "TITLE")) - (fmtstr "~15a~8a~8a~20a") + (fmtstr "~15a~8a~8a~8a~20a") + (steps (db:get-steps-for-test db test-id)) + ;; organise the steps for better readability + (comprsteps (let ((res (make-hash-table))) + (for-each + (lambda (step) + (let ((record (hash-table-ref/default + res + (db:step-get-stepname step) + ;; stepname start end status + (vector (db:step-get-stepname step) "" "" "" "")))) + (case (string->symbol (db:step-get-state step)) + ((start)(vector-set! record 1 (db:step-get-event_time step)) + (vector-set! record 3 (db:step-get-status step))) + ((end) (vector-set! record 2 (db:step-get-event_time step)) + (vector-set! record 3 (db:step-get-status step))) + (else (vector-set! record 1 (db:step-get-event_time step))) + (vector-set! record 2 (db:step-get-state step)) + (vector-set! record 3 (db:step-get-status step)) + (vector-set! record 4 (db:step-get-event_time step))) + (hash-table-set! res (db:step-get-stepname step) record))) + steps) + res)) (newval (string-intersperse (append (list - (format #f fmtstr "Stepname" "State" "Status" "Event Time") - (format #f fmtstr "========" "=====" "======" "==========")) + (format #f fmtstr "Stepname" "Start" "End" "Status" "Time") + (format #f fmtstr "========" "=====" "======" "======" "==========")) (map (lambda (x) ;; take advantage of the \n on time->string (format #f fmtstr - (db:step-get-stepname x) - (db:step-get-state x) - (db:step-get-status x) - (time->string - (seconds->local-time - (db:step-get-event_time x))))) - (db:get-steps-for-test db test-id))) + (vector-ref x 0) + (seconds->time-string (vector-ref x 1)) + (vector-ref x 2) + (vector-ref x 3) + (vector-ref x 4))) + (sort (hash-table-values comprsteps) + (lambda (a b)(< (vector-ref 1 a)(vector-ref 1 b)))))) "\n"))) - (if (not (equal? currval newval)) + (if (not (equal? currval newval)) (iup:attribute-set! stepsdat "TITLE" newval))))) stepsdat))))) (iup:show self) (iup:callback-set! *tim* "ACTION_CB" (lambda (x) Index: db.scm ================================================================== --- db.scm +++ db.scm @@ -413,10 +413,17 @@ (define-inline (db:step-set-test_id! vec val)(vector-set! vec 1 val)) (define-inline (db:step-set-stepname! vec val)(vector-set! vec 2 val)) (define-inline (db:step-set-state! vec val)(vector-set! vec 3 val)) (define-inline (db:step-set-status! vec val)(vector-set! vec 4 val)) (define-inline (db:step-set-event_time! vec val)(vector-set! vec 5 val)) + +(define (db:step-get-time-as-string vec) + (seconds->time-string (db:step-get-event_time vec))) + +(define (seconds->time-string sec) + (time->string + (seconds->local-time sec))) ;; db-get-test-steps-for-run (define (db:get-steps-for-test db test-id) (let ((res '())) (sqlite3:for-each-row