Megatest

Diff
Login

Differences From Artifact [23a8f08942]:

To Artifact [3a72bf4fd5]:


740
741
742
743
744
745
746
747

748
749
750

751
752

753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771



772
773
774
775
776
777
778
779
780
781
782
783
784
785


786
787
788


789
790

791
792

793
794
795
796
797
798
799
740
741
742
743
744
745
746

747
748


749

750
751
752
753
754
755
756


757
758
759
760
761
762

763
764
765
766

767
768
769
770
771
772
773
774
775
776
777
778
779
780
781


782
783
784


785
786
787

788
789

790
791
792
793
794
795
796
797







-
+

-
-
+
-

+





-
-






-




-
+
+
+












-
-
+
+

-
-
+
+

-
+

-
+







;; runspatt is a comma delimited list of run patterns
;; keypatt-alist must contain *all* keys with an associated pattern: '( ("KEY1" "%") .. )
(define (db:extract-ods-file db outputfile keypatt-alist runspatt)
  (let* ((keysstr  (string-intersperse (map car keypatt-alist) ","))
	 (keyqry   (string-intersperse (map (lambda (p)(conc (car p) " like ? ")) keypatt-alist) " AND "))
	 (test-ids '())
	 (tempdir  (conc "/tmp/" (current-user-name) "/" runspatt "_" (random 10000) "_" (current-process-id)))
	 (runsheader (append (list "Runname")
	 (runsheader (append (list "Run Id" "Runname")
			     (map car keypatt-alist)
			     (list "Run Id"
				   "Testname" 
			     (list "Testname" 
				   "Description"
				   "Item Path"
				   "Description"
				   "State"
				   "Status"
				   "Final Log"
				   "Run Duration"
				   "When Run"
				   "Error"
				   "Warn"
				   "Tags"
				   "Run Owner"
				   "Comment"
				   "Author"
				   "Test Owner"
				   "Reviewed"
				   "Iterated"
				   "Diskfree"
				   "Uname"
				   "Rundir"
				   "Host"
				   "Cpu Load")))
				   "Cpu Load"
                                   "Warn"
                                   "Error")))
	 (results (list runsheader))
	 (testdata-header (list "Run Id" "Testname" "Item Path" "Category" "Variable" "Value" "Expected" "Tol" "Units" "Status" "Comment")))
    (debug:print 2 "Using " tempdir " for constructing the ods file")
    ;; "Expected Value"
    ;; "Value Found"
    ;; "Tolerance"
    (apply sqlite3:for-each-row
     (lambda (test-id . b)
       (set! test-ids (cons test-id test-ids))   ;; test-id is now testname
       (set! results (append results (list b)))) ;; note, drop the test-id
     db
     (conc "SELECT
              t.testname,r.id,runname," keysstr ",t.testname,description,
              item_path,t.state,t.status,
              t.testname,r.id,runname," keysstr ",t.testname,
              t.item_path,tm.description,t.state,t.status,
              final_logf,run_duration, 
              strftime('%m/%d/%Y %H:%M:%S',datetime(t.event_time,'unixepoch'),'localtime')
              first_err,first_warn,tm.tags,r.owner,t.comment,
              strftime('%m/%d/%Y %H:%M:%S',datetime(t.event_time,'unixepoch'),'localtime'),
              tm.tags,r.owner,t.comment,
              author,
              tm.owner,reviewed,iterated,
              tm.owner,reviewed,
              diskfree,uname,rundir,
              host,cpuload,run_id
              host,cpuload,first_err,first_warn
            FROM tests AS t INNER JOIN runs AS r ON t.run_id=r.id INNER JOIN test_meta AS tm ON tm.testname=t.testname
            WHERE runname LIKE ? AND " keyqry ";")
     runspatt (map cadr keypatt-alist))
    (set! results (list (cons "Runs" results)))
    ;; now, for each test, collect the test_data info and add a new sheet
    (for-each
     (lambda (test-id)