From 470aa21fd58d825392694f785672eee374e0bb93 Mon Sep 17 00:00:00 2001 From: Allan Chua Date: Thu, 21 Dec 2023 23:59:42 +0800 Subject: [PATCH] Started adding code for `ddb-stream-status-distribution` --- cli/commands/dynamodb/ddb.mjs | 8 +++ .../distribution/by-stream-status.mjs | 50 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 cli/commands/dynamodb/distribution/by-stream-status.mjs diff --git a/cli/commands/dynamodb/ddb.mjs b/cli/commands/dynamodb/ddb.mjs index e2dd486..26fe4c5 100644 --- a/cli/commands/dynamodb/ddb.mjs +++ b/cli/commands/dynamodb/ddb.mjs @@ -7,6 +7,7 @@ import { getDDBDistributionByRegion } from "./distribution/by-region.mjs"; import { getDDBDistributionByDeleteProtection } from "./distribution/by-delete-protection.mjs"; import { getDDBDistributionByTableStatus } from "./distribution/by-status.mjs"; import { getDDBDistributionByBillingMode } from "./distribution/by-billing-mode.mjs"; +import { getDDBDistributionByStreamStatus } from "./distribution/by-stream-status.mjs"; // Aliases import { runFullDynamoDBAnalysis } from "./ddb-all.mjs"; @@ -52,6 +53,13 @@ export const DYNAMO_STRATEGIES = [ extractorKey: DYNAMO_DB_TABLE_META_EXTRACTOR, execute: getDDBDistributionByTableStatus, }, + { + key: "ddb-stream-status-distribution", + desc: "DynamoDB table distribution by stream status.", + extractorKey: DYNAMO_DB_TABLE_META_EXTRACTOR, + execute: getDDBDistributionByStreamStatus, + }, + // Alias { key: "ddb", desc: "Run full analysis on DynamoDB tables", diff --git a/cli/commands/dynamodb/distribution/by-stream-status.mjs b/cli/commands/dynamodb/distribution/by-stream-status.mjs new file mode 100644 index 0000000..5360662 --- /dev/null +++ b/cli/commands/dynamodb/distribution/by-stream-status.mjs @@ -0,0 +1,50 @@ +import { reduceByProp } from "#helpers/reducers/reduce-by-prop.mjs"; +import { synthesizeDistribution } from "#synthesizers/distribution/synthesize-distribution.mjs"; +import ENTITIES from "#constants/entities.mjs"; +const BUCKETS = ["Enabled", "Disabled"]; +const OUTPUT_LABEL = "DynamoDB Table Distribution by DynamoDB Stream Status"; + +/** + * @async + * @function getDDBDistributionByStreamStatus + * @description Method used for retrieving DynamoDB table distribution by stream status (Enabled | Disabled) + * @param {object} params CLI-parameters (For future enhancements) + * @param {object[]} tables DynamoDB tables + * @param {object} logger Logger instance + */ +export async function getDDBDistributionByStreamStatus( + params, + tables = [], + logger +) { + tables.map((t) => console.log(t)); + const temp = reduceByProp( + tables, + "sana.table.StreamSpecification.StreamEnabled" + ).map((cat) => { + return { + ...cat, + lbl: cat.lbl ? "Enabled" : "Disabled", + }; + }); + const distribution = BUCKETS.map((b) => { + const bucketRow = temp.find((t) => t.lbl.toString() === b); + + return { + lbl: b, + pct: bucketRow ? bucketRow.pct : 0, + count: bucketRow ? bucketRow.count : 0, + }; + }); + + synthesizeDistribution({ + title: OUTPUT_LABEL, + distribution, + array: tables, + logger, + entity: ENTITIES.DYNAMODB_TABLES, + output: params.output, + }); + + return distribution; +}