From ded71bf4f120681295e7fe8a51f91b27194549ed Mon Sep 17 00:00:00 2001 From: benoit74 Date: Thu, 26 Oct 2023 17:18:46 +0200 Subject: [PATCH] Create a report of Youtube API keys usage --- .../list_youtube_api_keys_used.conf.json | 15 +++++ .../list_youtube_api_keys_used.py | 67 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 dispatcher/backend/maint-scripts/list_youtube_api_keys_used.conf.json create mode 100755 dispatcher/backend/maint-scripts/list_youtube_api_keys_used.py diff --git a/dispatcher/backend/maint-scripts/list_youtube_api_keys_used.conf.json b/dispatcher/backend/maint-scripts/list_youtube_api_keys_used.conf.json new file mode 100644 index 00000000..9fc7c26d --- /dev/null +++ b/dispatcher/backend/maint-scripts/list_youtube_api_keys_used.conf.json @@ -0,0 +1,15 @@ +{ + "cc319f3e8ee3f586646b98c55bc0a7b3d9f27ac3393d1bc982aaef5930cc313a": "large-crashcourse", + "9dc879afd8f9a95e7eb30167311dd7346bcc6bdfafc6bd1e217460830323c7ef": "large-mathtiques (benoit)", + "d48ebff8fa1891f9531ab21c3bbfd0d6f1c91b301addb2bda1cea48d52531ef6": "large-sorcier", + "79e8cfc372f6fb20769a8339eb606bb17ed6a480279ff02a50f41f6cf944efd4": "large-teded", + "480e51b5ee93ee2b209906c8bf8362ddac8bd6d543f87674144ce5e66d167ebb": "large-univers", + "659fec208e08d2c8edd96a4ae7a16e71bd824c2ce569a80918fa8f4ab8e06ad7": "madrasa", + "db29b7d06057fb992db99430ff19522e4781d88e2a2a2fbb2d3565296d45f722": "madrasa-playlists (benoit)", + "3e2413945d668d47ab151ee1df9cb51e65360ed57c1b89eb8ee435cd47f37baf": "medium-youtubes", + "1060528e283299cc54de2f67ea9ab918b1e1ddb461b12b25eff1aba135ea458e": "small-youtubes (old, KO)", + "99fe8cfb95cfcf9e8851f01e567d9dd2b246a708aa7fc6b1752feb7320725c0f": "small-youtubes (new)", + "6a0cfba941cfc1a4e85952bda5aff424cf95217d3b772777c60ec2d184112025": "madrasa-playlists (renaud, KO)", + "1c94fe405309067bd53b125f5f0c55e1640414a89e5f0075028bb313dde374eb": "large-mathtiques (renaud, KO)", + "0da9183bb0e127bb746ce77b27e1901b76c88370deeee52ec0898cb14be77c06": "unknown 1" +} \ No newline at end of file diff --git a/dispatcher/backend/maint-scripts/list_youtube_api_keys_used.py b/dispatcher/backend/maint-scripts/list_youtube_api_keys_used.py new file mode 100755 index 00000000..a705cc16 --- /dev/null +++ b/dispatcher/backend/maint-scripts/list_youtube_api_keys_used.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 + +"""List usage of API keys for youtube recipes + + ./list_youtube_api_keys_used.py + + Configuration file named "list_youtube_api_keys_used.conf.json" must be placed in + same folder as script and contain a dictionnary of sha256(api_key) => + api_key_display_name +""" + +import hashlib +import json +import pathlib + +import sqlalchemy as sa +import sqlalchemy.orm as so + +import db.models as dbm +from db import dbsession + + +@dbsession +def list_youtube_api_keys_used(session: so.Session, *, display_secrets=False): + known_api_keys = json.loads( + pathlib.Path("list_youtube_api_keys_used.conf.json").read_text() + ) + print("Listing schedules") + stmt = ( + sa.select(dbm.Schedule) + .where(dbm.Schedule.config["flags"]["api-key"].astext.is_not(None)) + .order_by(dbm.Schedule.config["flags"]["api-key"].astext) + ) + + schedules = list(session.execute(stmt).scalars()) + + print() + + schedules_by_api_key = {} + for schedule in schedules: + api_key = schedule.config["flags"]["api-key"] + hashed_api_key = hashlib.sha256(api_key.encode("utf-8")).hexdigest() + if hashed_api_key not in schedules_by_api_key.keys(): + schedules_by_api_key[hashed_api_key] = {"api_key": api_key, "schedules": []} + schedules_by_api_key[hashed_api_key]["schedules"].append(schedule.name) + + for hashed_api_key, data in schedules_by_api_key.items(): + if hashed_api_key in known_api_keys.keys(): + print(f"Key {known_api_keys[hashed_api_key]}:") + else: + print("Unknown key:") + if display_secrets: + print(f"API key: {data['api_key']}") + for schedule_name in sorted(data["schedules"]): + print(f"- {schedule_name}") + print() + + for hashed_key, key_name in known_api_keys.items(): + if hashed_key not in schedules_by_api_key.keys(): + print(f"Key {key_name} is not used") + + return + + +if __name__ == "__main__": + list_youtube_api_keys_used(display_secrets=False) + print("FINISH!")