summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/aws/aws.lisp37
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)))