summaryrefslogtreecommitdiff
path: root/lisp/aws
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/aws')
-rw-r--r--lisp/aws/aws.lisp46
1 files changed, 31 insertions, 15 deletions
diff --git a/lisp/aws/aws.lisp b/lisp/aws/aws.lisp
index 6691650..642c7d9 100644
--- a/lisp/aws/aws.lisp
+++ b/lisp/aws/aws.lisp
@@ -25,6 +25,9 @@
((id :initarg :id
:initform nil
:accessor id)
+ (ip :initarg :ip
+ :initform nil
+ :accessor ip)
(launch-time :initarg :launch-time
:initform nil
:accessor launch-time))
@@ -46,6 +49,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 +155,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,27 +174,36 @@
(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 (handler-case
+ (setf (age asg) (/ (- (get-universal-time) (local-time:timestamp-to-universal (local-time:parse-timestring (launch-time (first (instances asg)))))) 86400.0))
+ (error (e)
+ (declare (ignore e))
+ (setf (age asg) -1))))
+ (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)))
(car (loop for instance in (cdr (assoc :*instances (cadar (run-aws-cli aws command))))
collect (make-instance 'aws-instance
:id (cdr (assoc :*instance-id instance))
+ :ip (first (loop for interface in (cdr (assoc :*network-interfaces instance))
+ collect (cdr (assoc :*private-ip-address interface))))
:launch-time (cdr (assoc :*launch-time instance)))))))
(defmethod get-targetgroups ((aws-targetgroup aws-targetgroup))