Skip to main content

link to the queue in the SQS console for SQS stats

ID
fb9e65d
date
2023-05-15 12:48:15+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
2bc5d69
message
link to the queue in the SQS console for SQS stats
changed files
2 files, 34 additions, 11 deletions

Changed files

aws/_common.py (1926) → aws/_common.py (2237)

diff --git a/aws/_common.py b/aws/_common.py
index 066099e..59b16be 100755
--- a/aws/_common.py
+++ b/aws/_common.py
@@ -44,6 +44,9 @@ def guess_account(s3_identifier):
         account_id = "299497370133"
     elif "wellcomecollection-storage" in s3_identifier:
         account_id = "975596993436"
+    elif "wellcomecollection-assets-workingstorage" in s3_identifier:
+
+        account_id = "760097843905"
     else:
         return None
 
@@ -74,3 +77,10 @@ def parse_s3_uri(s3_uri):
     prefix = "/".join(uri.path)
 
     return {"Bucket": bucket, "Prefix": prefix}
+
+
+def create_link_text(*, url, label):
+    # Based on https://stackoverflow.com/a/71309268/1558022
+
+    # OSC 8 ; params ; URI ST <name> OSC 8 ;; ST
+    return f"\033]8;;{url}\033\\{label}\033]8;;\033\\"

aws/sqs_stats (3003) → aws/sqs_stats (3623)

diff --git a/aws/sqs_stats b/aws/sqs_stats
index c95077c..e052d9e 100755
--- a/aws/sqs_stats
+++ b/aws/sqs_stats
@@ -21,11 +21,7 @@ import boto3
 import humanize
 import termcolor
 
-
-# See https://github.com/boto/botocore/issues/2705
-import warnings
-warnings.filterwarnings('ignore', category=FutureWarning, module='botocore.client')
-
+from _common import create_link_text
 
 
 def list_queue_urls_in_account(sess, *, prefixes):
@@ -66,14 +62,25 @@ def get_queue_stats(sess, *, queue_urls):
     }
 
 
-def print_number(value, color):
+def print_number(account_id, region_name, queue_name, *, value, color):
     if value is None:
         print("-".rjust(9, " "), end="")
     else:
-        print(termcolor.colored(humanize.intcomma(value).rjust(9, " "), color), end="")
+        spaces_required = 9 - len(humanize.intcomma(value))
+
+        print(
+            termcolor.colored(
+                " " * spaces_required + create_link_text(
+                    url=f"https://{region_name}.console.aws.amazon.com/sqs/v2/home?region={region_name}#/queues/https%3A%2F%2Fsqs.{region_name}.amazonaws.com%2F{account_id}%2F{queue_name}",
+                    label=humanize.intcomma(value),
+                ),
+                color,
+            ),
+            end="",
+        )
 
 
-def pprint_queue_stats(queue_stats):
+def pprint_queue_stats(account_id, region_name, queue_stats):
     interesting_queues = {
         q_url: q_size for q_url, q_size in queue_stats.items() if q_size > 0
     }
@@ -92,8 +99,10 @@ def pprint_queue_stats(queue_stats):
             paired_queues[q_name]["q"] = q_size
 
     for q_name, q_stats in sorted(paired_queues.items()):
-        print_number(q_stats["q"], "green")
-        print_number(q_stats["dlq"], "red")
+        print_number(account_id, region_name, q_name, value=q_stats["q"], color="green")
+        print_number(
+            account_id, region_name, q_name + "_dlq", value=q_stats["dlq"], color="red"
+        )
         print("\t", end="")
         print(q_name)
 
@@ -107,4 +116,8 @@ if __name__ == "__main__":
 
     queue_stats = get_queue_stats(sess, queue_urls=queue_urls)
 
-    pprint_queue_stats(queue_stats)
+    sts = sess.client("sts")
+    account_id = sts.get_caller_identity()["Account"]
+    region_name = sess.region_name
+
+    pprint_queue_stats(account_id, region_name, queue_stats)