|
| 1 | + |
| 2 | +(use json) |
| 3 | +(use ducttape-lib) |
| 4 | + |
| 5 | +(define (get-last-runname area-path target) |
| 6 | + (let* ((run-data (with-input-from-pipe (conc "megatest -list-runs % -target " target " -fields runs:runname,event_time -dumpmode sexpr -start-dir " area-path) |
| 7 | + read))) |
| 8 | + (if (or (not run-data) |
| 9 | + (null? run-data)) |
| 10 | + #f |
| 11 | + (let* ((name-time (let ((dat (map cdadr (alist-ref target run-data equal?)))) ;; (("runname" . "2017w07.0-0047") ("event_time" . "1487490424")) |
| 12 | + ;; (print "dat=" dat) |
| 13 | + (map (lambda (item) |
| 14 | + (cons (alist-ref "runname" item equal?) |
| 15 | + (string->number (alist-ref "event_time" item equal?)))) |
| 16 | + dat))) |
| 17 | + (sorted (sort name-time (lambda (a b)(> (cdr a)(cdr b))))) |
| 18 | + (last-name (if (null? sorted) |
| 19 | + #f |
| 20 | + (caar sorted)))) |
| 21 | + last-name)))) |
| 22 | + |
| 23 | +(define (str-first-char->number str) |
| 24 | + (char->integer (string-ref str 0))) |
| 25 | + |
| 26 | +;; example of how to set up and write target mappers |
| 27 | +;; |
| 28 | +(add-target-mapper 'prefix-contour |
| 29 | + (lambda (target run-name area area-path reason contour mode-patt) |
| 30 | + (conc contour "/" target))) |
| 31 | +(add-target-mapper 'prefix-area-contour |
| 32 | + (lambda (target run-name area area-path reason contour mode-patt) |
| 33 | + (conc area "/" contour "/" target))) |
| 34 | + |
| 35 | +(add-runname-mapper 'corporate-ww |
| 36 | + (lambda (target run-name area area-path reason contour mode-patt) |
| 37 | + (print "corporate-ww called with: target=" target " run-name=" run-name " area=" area " area-path=" area-path " reason=" reason " contour=" contour " mode-patt=" mode-patt) |
| 38 | + (let* ((last-name (get-last-runname area-path target)) |
| 39 | + (last-letter (let* ((ch (if (string? last-name) |
| 40 | + (let ((len (string-length last-name))) |
| 41 | + (substring last-name (- len 1) len)) |
| 42 | + "a")) |
| 43 | + (chnum (str-first-char->number ch)) |
| 44 | + (a (str-first-char->number "a")) |
| 45 | + (z (str-first-char->number "z"))) |
| 46 | + (if (and (>= chnum a)(<= chnum z)) |
| 47 | + chnum |
| 48 | + #f))) |
| 49 | + (next-letter (if last-letter |
| 50 | + (list->string |
| 51 | + (list |
| 52 | + (integer->char |
| 53 | + (+ last-letter 1)))) ;; surely there is an easier way? |
| 54 | + "a"))) |
| 55 | + ;; (print "last-name: " last-name " last-letter: " last-letter " next-letter: " next-letter) |
| 56 | + (conc (seconds->wwdate (current-seconds)) next-letter)))) |
| 57 | + |
| 58 | +(add-runname-mapper 'auto |
| 59 | + (lambda (target run-name area area-path reason contour mode-patt) |
| 60 | + "auto-eh")) |
| 61 | + |
| 62 | +;; run only areas where first letter of area name is "a" |
| 63 | +;; |
| 64 | +(add-area-checker 'first-letter-a |
| 65 | + (lambda (area target contour) |
| 66 | + (string-match "^a.*$" area))) |
| 67 | + |
| 68 | + |
0 commit comments