From 7cd507faf0654d11062c42ae80c57d90799e84cf Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Wed, 24 Dec 2025 13:36:18 -0700 Subject: [INF-18470] Add age column for easier uptime analysis --- lisp/aws/aws.lisp | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'lisp/aws') 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))) -- cgit v1.3 From 052ac28410a0b6377c39edc1407fb0da0bd40341 Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Wed, 24 Dec 2025 14:04:59 -0700 Subject: edge case: no instances --- lisp/aws/aws.lisp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lisp/aws') diff --git a/lisp/aws/aws.lisp b/lisp/aws/aws.lisp index 05a5dea..b96d768 100644 --- a/lisp/aws/aws.lisp +++ b/lisp/aws/aws.lisp @@ -187,7 +187,11 @@ (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))) + 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) 999999)))) (sort asgs (lambda (x y) (> (age x) (age y)))))) (defmethod get-instance ((aws aws) instance-id) -- cgit v1.3 From dc8e498d4b95f66898ee1d85e49e86c016938e3b Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Wed, 24 Dec 2025 14:20:53 -0700 Subject: UI bug when first row of data has no instances --- lisp/aws/aws.lisp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lisp/aws') diff --git a/lisp/aws/aws.lisp b/lisp/aws/aws.lisp index b96d768..74d1c54 100644 --- a/lisp/aws/aws.lisp +++ b/lisp/aws/aws.lisp @@ -191,7 +191,7 @@ (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) 999999)))) + (setf (age asg) -1)))) (sort asgs (lambda (x y) (> (age x) (age y)))))) (defmethod get-instance ((aws aws) instance-id) -- cgit v1.3 From 662c3bb66f3ce14faed859a29ffde1379ad78cb4 Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Wed, 24 Dec 2025 16:01:05 -0700 Subject: add private IP to output --- lisp/aws/aws.lisp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'lisp/aws') diff --git a/lisp/aws/aws.lisp b/lisp/aws/aws.lisp index 74d1c54..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)) @@ -199,6 +202,8 @@ (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)) -- cgit v1.3