diff options
Diffstat (limited to 'lisp/aws/aws.lisp')
| -rw-r--r-- | lisp/aws/aws.lisp | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/lisp/aws/aws.lisp b/lisp/aws/aws.lisp index 6691650..05a5dea 100644 --- a/lisp/aws/aws.lisp +++ b/lisp/aws/aws.lisp @@ -46,6 +46,9 @@ (count-desired :initarg :count-desired :initform nil :accessor count-desired) + (age :initarg :age + :initform nil + :accessor age) (instances :initarg :instances :initform nil :accessor instances) @@ -149,6 +152,7 @@ :count-min (count-min aws-asg) :count-max (count-max aws-asg) :count-desired (count-desired aws-asg) + :age (age aws-asg) :instances (instances aws-asg) :howmany nil)) @@ -167,21 +171,24 @@ (cl-json:decode-json-from-string output)))) (defmethod get-asgs ((aws aws) filter) - (let ((command "aws autoscaling describe-auto-scaling-groups")) - (loop for asg in (cdar (run-aws-cli aws command)) - when (org-ckons-core::match-it filter (cdr (assoc :*auto-scaling-group-name asg))) - collect (make-instance 'aws-asg - :profile (profile aws) - :region (region aws) - :name (cdr (assoc :*auto-scaling-group-name asg)) - :arn (cdr (assoc :*auto-scaling-group-+arn+ asg)) - :count-min (cdr (assoc :*min-size asg)) - :count-max (cdr (assoc :*max-size asg)) - :count-desired (cdr (assoc :*desired-capacity asg)) - :instances (sort (loop for instance in (cdr (assoc :*instances asg)) - collect (get-instance aws (cdr (assoc :*instance-id instance)))) - (lambda (x y) - (string> (launch-time x) (launch-time y)))))))) + (let* ((command "aws autoscaling describe-auto-scaling-groups") + (asgs (loop for asg in (cdar (run-aws-cli aws command)) + when (org-ckons-core::match-it filter (cdr (assoc :*auto-scaling-group-name asg))) + collect (make-instance 'aws-asg + :profile (profile aws) + :region (region aws) + :name (cdr (assoc :*auto-scaling-group-name asg)) + :arn (cdr (assoc :*auto-scaling-group-+arn+ asg)) + :count-min (cdr (assoc :*min-size asg)) + :count-max (cdr (assoc :*max-size asg)) + :count-desired (cdr (assoc :*desired-capacity asg)) + :instances (sort (loop for instance in (cdr (assoc :*instances asg)) + collect (get-instance aws (cdr (assoc :*instance-id instance)))) + (lambda (x y) + (string< (launch-time x) (launch-time y)))))))) + (loop for asg in asgs + do (setf (age asg) (/ (- (get-universal-time) (local-time:timestamp-to-universal (local-time:parse-timestring (launch-time (first (instances asg)))))) 86400.0))) + (sort asgs (lambda (x y) (> (age x) (age y)))))) (defmethod get-instance ((aws aws) instance-id) (let ((command (format nil "aws ec2 describe-instances --instance-ids ~a" instance-id))) |
