Browse code
chore: rearrange to exclude things from lispworks, don't crash
extract-stack used to crash on unexpected data from AWS
Ed Langley authored on 08/10/2019 03:05:43Showing 4 changed files
... | ... |
@@ -91,6 +91,15 @@ |
91 | 91 |
(%template-description :initarg :template-description :reader template-description) |
92 | 92 |
(%parameters :initarg :parameters :reader parameters :initform (list)))) |
93 | 93 |
|
94 |
+(defmethod initialize-instance ((instance stack) &rest initargs &key &allow-other-keys) |
|
95 |
+ (let ((available-initargs (alexandria:mappend 'closer-mop:slot-definition-initargs |
|
96 |
+ (closer-mop:class-slots (find-class 'stack))))) |
|
97 |
+ (apply #'call-next-method |
|
98 |
+ instance |
|
99 |
+ (loop for (key value) on initargs by #'cddr |
|
100 |
+ when (member key available-initargs) |
|
101 |
+ nconc (list key value))))) |
|
102 |
+ |
|
94 | 103 |
(defclass timeline () |
95 | 104 |
((%start-date-time :initarg :start-date-time :reader start-date-time) |
96 | 105 |
(%end-date-time :initarg :end-date-time :reader end-date-time) |
... | ... |
@@ -113,11 +122,16 @@ |
113 | 122 |
aws-result) |
114 | 123 |
(make-hash-table))))) |
115 | 124 |
|
116 |
-(defun extract-list (aws-result) |
|
117 |
- (mapcar (destructuring-lambda ((list-item-marker . items)) |
|
118 |
- (if (string= list-item-marker "member") |
|
119 |
- items |
|
120 |
- (error 'invalid-result))) |
|
125 |
+(defun extract-list (aws-result &optional (extractor 'identity)) |
|
126 |
+ (mapcan (alexandria:compose (lambda (v) |
|
127 |
+ (loop (restart-case (return (list (funcall extractor v))) |
|
128 |
+ (skip () |
|
129 |
+ :report "Skip current item" |
|
130 |
+ (return ()))))) |
|
131 |
+ (destructuring-lambda ((list-item-marker . items)) |
|
132 |
+ (if (string= list-item-marker "member") |
|
133 |
+ items |
|
134 |
+ (error 'invalid-result)))) |
|
121 | 135 |
aws-result)) |
122 | 136 |
|
123 | 137 |
(defun extract-stack (aws-result) |
... | ... |
@@ -1,3 +1,6 @@ |
1 |
+(eval-when (:execute :load-toplevel :compile-toplevel) |
|
2 |
+ (net.didierverna.clon:nickname-package)) |
|
3 |
+ |
|
1 | 4 |
(defpackage :daydreamer.cli |
2 | 5 |
(:import-from :daydreamer.main :stack-parameters :stack-outputs :stack-for-name :stack-info) |
3 | 6 |
(:import-from :daydreamer.aws-result :start-date-time :end-date-time) |
... | ... |
@@ -71,7 +74,7 @@ |
71 | 74 |
(let* ((context (net.didierverna.clon:make-context :synopsis *daydreamer-synopsis*)) |
72 | 75 |
(files (clon:remainder :context context)) |
73 | 76 |
(region (clon:getopt :long-name "aws-region")) |
74 |
- (aws-sdk/api:*session* (aws-sdk/session:make-session :region region))) |
|
77 |
+ (aws-sdk:*session* (aws-sdk:make-session :region region))) |
|
75 | 78 |
|
76 | 79 |
(format *error-output* "~&IN REGION: ~a~%" region) |
77 | 80 |
|
... | ... |
@@ -84,6 +87,6 @@ |
84 | 87 |
((clon:getopt :long-name "self-test") (run-tests)) |
85 | 88 |
((clon:getopt :long-name "rebuild") |
86 | 89 |
(load (compile-file (load-time-value |
87 |
- (asdf:system-relative-pathname :daydreamer "cli.lisp")))) |
|
90 |
+ (asdf:system-relative-pathname :daydreamer "cli.lisp")))) |
|
88 | 91 |
(dump))))) |
89 | 92 |
|
... | ... |
@@ -5,36 +5,42 @@ |
5 | 5 |
(sb-posix:setenv "CC" "clang" 1) |
6 | 6 |
|
7 | 7 |
(defsystem :daydreamer |
8 |
- :description "" |
|
9 |
- :author "Ed L <gh@elangley.org>" |
|
10 |
- :license "MIT" |
|
11 |
- :defsystem-depends-on (#:cffi-grovel) |
|
12 |
- :depends-on (#:alexandria |
|
13 |
- #:uiop |
|
14 |
- #:serapeum |
|
15 |
- #:fwoar-lisputils |
|
16 |
- #:net.didierverna.clon |
|
17 |
- #:cl-base64 |
|
18 |
- #:local-time |
|
19 |
- #:osicat |
|
20 |
- #:local-time-duration |
|
21 |
- #:aws-sdk/services/cloudformation |
|
22 |
- #:aws-sdk/services/monitoring |
|
23 |
- #:aws-sdk/services/elasticmapreduce |
|
24 |
- #:should-test |
|
25 |
- #:yason |
|
26 |
- #:hunchentoot |
|
27 |
- #:data-lens |
|
28 |
- #:cffi) |
|
29 |
- :serial t |
|
30 |
- :components ((:file "aws-result") |
|
31 |
- (:file "main") |
|
32 |
- (:file "cli")) |
|
8 |
+ :description "" |
|
9 |
+ :author "Ed L <gh@elangley.org>" |
|
10 |
+ :license "MIT" |
|
11 |
+ :defsystem-depends-on (#:cffi-grovel) |
|
12 |
+ :depends-on (#:alexandria |
|
13 |
+ #:uiop |
|
14 |
+ #:serapeum |
|
15 |
+ #:fwoar-lisputils |
|
16 |
+ (:feature (:not :lispworks) |
|
17 |
+ #:net.didierverna.clon) |
|
18 |
+ #:cl-base64 |
|
19 |
+ #:local-time |
|
20 |
+ #:osicat |
|
21 |
+ #:local-time-duration |
|
22 |
+ #:closer-mop |
|
23 |
+ #:aws-sdk |
|
24 |
+ #:aws-sdk/services/cloudformation |
|
25 |
+ #:aws-sdk/services/monitoring |
|
26 |
+ #:aws-sdk/services/elasticmapreduce |
|
27 |
+ #:should-test |
|
28 |
+ #:yason |
|
29 |
+ #:hunchentoot |
|
30 |
+ #:data-lens |
|
31 |
+ #:cffi) |
|
32 |
+ :serial t |
|
33 |
+ :components ((:file "aws-result") |
|
34 |
+ (:file "main") |
|
35 |
+ (:file "cli" :if-feature (:not :lispworks))) |
|
33 | 36 |
|
34 |
- :entry-point "daydreamer.cli::main" |
|
35 |
- :output-files (cffi-toolchain:static-program-op (o c) |
|
36 |
- (format t "~&*dpd* ~s~%%" (merge-pathnames "daydreamer" |
|
37 |
- *default-pathname-defaults*)) |
|
38 |
- (list |
|
39 |
- (merge-pathnames "daydreamer" |
|
40 |
- *default-pathname-defaults*)))) |
|
37 |
+ :entry-point "daydreamer.cli::main" |
|
38 |
+ #-lispworks |
|
39 |
+ :output-files |
|
40 |
+ #-lispworks |
|
41 |
+ (cffi-toolchain:static-program-op (o c) |
|
42 |
+ (format t "~&*dpd* ~s~%%" (merge-pathnames "daydreamer" |
|
43 |
+ *default-pathname-defaults*)) |
|
44 |
+ (list |
|
45 |
+ (merge-pathnames "daydreamer" |
|
46 |
+ *default-pathname-defaults*)))) |