Index: dashboard.scm ================================================================== --- dashboard.scm +++ dashboard.scm @@ -2639,19 +2639,20 @@ (lambda (fieldname) ;; fields (let ((all-dat-qrystr (conc "SELECT " timef "," varfn "," valfn " FROM " tablen " WHERE " varfn "='" fieldname "' AND " timef " >= " tstart " AND " timef " <= " tend " ORDER BY " timef " ASC")) (zeroth-point (conc "SELECT " timef "," varfn "," valfn " FROM " tablen " WHERE " varfn "='" fieldname "' AND " timef " < " tstart " LIMIT 1"))) (print "all-dat-qrystr: " all-dat-qrystr) (hash-table-set! res-ht fieldname ;; (fetch-rows (sql db qrystr))))) - (sqlite3:fold-row - (lambda (res t var val) - (cons (vector t var val) res)) - '() db all-dat-qrystr)) + (reverse + (sqlite3:fold-row + (lambda (res t var val) + (cons (vector t var val) res)) + '() db all-dat-qrystr))) (let ((zeropt (handle-exceptions exn #f (sqlite3:first-row db all-dat-qrystr)))) - (if zeropt + (if zeropt ;; NOTE: Add zeropt to the beginning of the list as the list was reversed above. (hash-table-set! res-ht fieldname (cons (apply vector tstart (cdr zeropt)) (hash-table-ref/default res-ht fieldname '()))))))) @@ -2667,11 +2668,11 @@ (lib (vg:get/create-lib dwg "runslib")) (cnv (dboard:tabdat-cnv tabdat)) (dur (- tstart tend)) ;; time duration (cmp (vg:get-component dwg "runslib" compname)) (cfg (configf:get-section *configdat* "graph")) - (stdcolor (vg:rgb->number 20 30 40))) + (stdcolor (vg:rgb->number 120 130 140))) (vg:add-obj-to-comp cmp (vg:make-rect-obj llx lly ulx uly)) (for-each (lambda (cf) @@ -2680,27 +2681,46 @@ (for-each (lambda (fieldn) (let* ((dat (hash-table-ref alldat fieldn )) (vals (map (lambda (x)(vector-ref x 2)) dat))) (if (not (null? vals)) - (let* ((maxval (apply max vals)) - (minval (apply min vals)) - (yoff (- lly minval)) - (yscale (/ (- maxval minval)(- uly lly))) - (yfunc (lambda (y)(* (+ y yoff) yscale)))) + (let* ((maxval (apply max vals)) + (minval (apply min vals)) + (yoff (- lly minval)) + (deltaval (- maxval minval)) + (yscale (/ (- uly lly)(if (eq? deltaval 0) 1 deltaval))) + (yfunc (lambda (y)(* (+ y yoff) yscale)))) ;; (print (car cf) ": " (hash-table->alist - (for-each - (lambda (dpt) - (let* ((tval (vector-ref dpt 0)) - (yval (vector-ref dpt 2)) - (stval (tfn tval)) - (syval (yfunc yval))) - (vg:add-obj-to-comp - cmp - (vg:make-rect-obj (- stval 2) lly (+ stval 2)(+ lly (* yval yscale)) - fill-color: stdcolor)))) - dat))))) ;; for each data point in the series + (fold + (lambda (next prev) ;; #(time ? val) #(time ? val) + (if prev + (let* ((last-tval (tfn (vector-ref prev 0))) + (last-yval (+ lly (* yscale (vector-ref prev 2)))) + (curr-tval (tfn (vector-ref next 0)))) + (if (> curr-tval last-tval) + (vg:add-obj-to-comp + cmp + (vg:make-rect-obj last-tval lly curr-tval last-yval ;; (- stval 2) lly (+ stval 2)(+ lly (* yval yscale)) + fill-color: stdcolor + line-color: stdcolor)) + (print "ERROR: curr-tval is not > last-tval; curr-tval " curr-tval ", last-tval " last-tval)))) + next) + ;; for init create vector tstart,0 + #f ;; (vector tstart minval minval) + dat) + ;; (for-each + ;; (lambda (dpt) + ;; (let* ((tval (vector-ref dpt 0)) + ;; (yval (vector-ref dpt 2)) + ;; (stval (tfn tval)) + ;; (syval (yfunc yval))) + ;; (vg:add-obj-to-comp + ;; cmp + ;; (vg:make-rect-obj (- stval 2) lly (+ stval 2)(+ lly (* yval yscale)) + ;; fill-color: stdcolor)))) + ;; dat) + )))) ;; for each data point in the series (hash-table-keys alldat))))) cfg))) ;; run times tab Index: gen-data-for-graph.scm ================================================================== --- gen-data-for-graph.scm +++ gen-data-for-graph.scm @@ -21,11 +21,11 @@ (if (> sec lastsec) (exec (sql db "INSERT INTO alldat (event_time,var,val) VALUES (?,?,?)") (+ thetime sec) ;; (* sec 60)) "stuff" (if (even? thehour) - (random 100) + (random 1000) (random 6)))) (if (< count 20) (loop (max sec lastsec)(random 60)(+ count 1)))))))) (close-database db)