diff options
| author | Carlos Konstanski <carlos.konstanski@olo.com> | 2025-12-28 10:13:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-28 10:13:44 -0700 |
| commit | 85d525bb728953d02a22bfdfd7bb0bb53504b3fa (patch) | |
| tree | 251d8cb39948ac507d55f74827df9cd0b7a6b4a1 /lisp/aws | |
| parent | 7fc3138cebc1172362431d20f4f8cee0d9067ec9 (diff) | |
| parent | 662c3bb66f3ce14faed859a29ffde1379ad78cb4 (diff) | |
Merge pull request #13 from ololabs/inf-18470-add-age-column-for-easier-uptime-analysis
[INF-18470] Add age column for easier uptime analysis
Diffstat (limited to 'lisp/aws')
| -rw-r--r-- | lisp/aws/aws.lisp | 46 |
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)) |
