@l-v-yonsama/multi-platform-database-drivers 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/built/schema/log-parse-config.schema.json +4 -4
- package/built/src/drivers/AwsDriver.d.ts +25 -1
- package/built/src/drivers/AwsDriver.js +189 -0
- package/built/src/drivers/AwsDriver.js.map +1 -1
- package/built/src/drivers/BaseDriver.js.map +1 -1
- package/built/src/drivers/DBDriverResolver.js.map +1 -1
- package/built/src/drivers/KeycloakDriver.js.map +1 -1
- package/built/src/drivers/MqttDriver.js.map +1 -1
- package/built/src/drivers/MySQLDriver.d.ts +10 -1
- package/built/src/drivers/MySQLDriver.js +130 -0
- package/built/src/drivers/MySQLDriver.js.map +1 -1
- package/built/src/drivers/OracleDriver.d.ts +14 -1
- package/built/src/drivers/OracleDriver.js +217 -2
- package/built/src/drivers/OracleDriver.js.map +1 -1
- package/built/src/drivers/PostgresDriver.d.ts +9 -1
- package/built/src/drivers/PostgresDriver.js +90 -2
- package/built/src/drivers/PostgresDriver.js.map +1 -1
- package/built/src/drivers/RDSBaseDriver.d.ts +26 -1
- package/built/src/drivers/RDSBaseDriver.js +601 -0
- package/built/src/drivers/RDSBaseDriver.js.map +1 -1
- package/built/src/drivers/RedisDriver.js.map +1 -1
- package/built/src/drivers/SQLServerDriver.d.ts +18 -1
- package/built/src/drivers/SQLServerDriver.js +282 -6
- package/built/src/drivers/SQLServerDriver.js.map +1 -1
- package/built/src/drivers/SQLiteDriver.d.ts +7 -1
- package/built/src/drivers/SQLiteDriver.js +33 -1
- package/built/src/drivers/SQLiteDriver.js.map +1 -1
- package/built/src/drivers/aws/AwsCloudFormationServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsDynamoServiceClient.d.ts +61 -5
- package/built/src/drivers/aws/AwsDynamoServiceClient.js +404 -108
- package/built/src/drivers/aws/AwsDynamoServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsS3ServiceClient.js +18 -6
- package/built/src/drivers/aws/AwsS3ServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSQSServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSecretsManagerServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSsmServiceClient.js.map +1 -1
- package/built/src/drivers/aws/dynamoDbRdhSummary.d.ts +16 -0
- package/built/src/drivers/aws/dynamoDbRdhSummary.js +81 -0
- package/built/src/drivers/aws/dynamoDbRdhSummary.js.map +1 -0
- package/built/src/drivers/aws/dynamoDbResultMetadata.d.ts +9 -0
- package/built/src/drivers/aws/dynamoDbResultMetadata.js +71 -0
- package/built/src/drivers/aws/dynamoDbResultMetadata.js.map +1 -0
- package/built/src/drivers/index.d.ts +1 -0
- package/built/src/drivers/index.js +1 -0
- package/built/src/drivers/index.js.map +1 -1
- package/built/src/drivers/keycloak/resourceTreeBuilder.js.map +1 -1
- package/built/src/drivers/keycloak/scanResultBuilder.js.map +1 -1
- package/built/src/drivers/memcache/helper.js.map +1 -1
- package/built/src/drivers/providers/index.d.ts +3 -0
- package/built/src/drivers/providers/index.js +7 -0
- package/built/src/drivers/providers/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbMetricServiceAdapter.d.ts +8 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbMetricServiceAdapter.js +421 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbOverviewMetricServiceAdapter.d.ts +7 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbOverviewMetricServiceAdapter.js +84 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbOverviewMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/index.d.ts +2 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/index.js +6 -0
- package/built/src/drivers/providers/metrics/adapters/dynamodb/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/index.d.ts +6 -0
- package/built/src/drivers/providers/metrics/adapters/index.js +10 -0
- package/built/src/drivers/providers/metrics/adapters/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/logs/CloudWatchLogsMetricServiceAdapter.d.ts +7 -0
- package/built/src/drivers/providers/metrics/adapters/logs/CloudWatchLogsMetricServiceAdapter.js +132 -0
- package/built/src/drivers/providers/metrics/adapters/logs/CloudWatchLogsMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/logs/index.d.ts +1 -0
- package/built/src/drivers/providers/metrics/adapters/logs/index.js +5 -0
- package/built/src/drivers/providers/metrics/adapters/logs/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/overview/index.d.ts +1 -0
- package/built/src/drivers/providers/metrics/adapters/overview/index.js +5 -0
- package/built/src/drivers/providers/metrics/adapters/overview/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/overview/overviewMetricAdapterUtils.d.ts +26 -0
- package/built/src/drivers/providers/metrics/adapters/overview/overviewMetricAdapterUtils.js +80 -0
- package/built/src/drivers/providers/metrics/adapters/overview/overviewMetricAdapterUtils.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/s3/S3MetricServiceAdapter.d.ts +21 -0
- package/built/src/drivers/providers/metrics/adapters/s3/S3MetricServiceAdapter.js +478 -0
- package/built/src/drivers/providers/metrics/adapters/s3/S3MetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/s3/S3OverviewMetricServiceAdapter.d.ts +13 -0
- package/built/src/drivers/providers/metrics/adapters/s3/S3OverviewMetricServiceAdapter.js +172 -0
- package/built/src/drivers/providers/metrics/adapters/s3/S3OverviewMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/s3/index.d.ts +2 -0
- package/built/src/drivers/providers/metrics/adapters/s3/index.js +6 -0
- package/built/src/drivers/providers/metrics/adapters/s3/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/ses/SesMetricServiceAdapter.d.ts +13 -0
- package/built/src/drivers/providers/metrics/adapters/ses/SesMetricServiceAdapter.js +183 -0
- package/built/src/drivers/providers/metrics/adapters/ses/SesMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/ses/index.d.ts +1 -0
- package/built/src/drivers/providers/metrics/adapters/ses/index.js +5 -0
- package/built/src/drivers/providers/metrics/adapters/ses/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/SqsMetricServiceAdapter.d.ts +7 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/SqsMetricServiceAdapter.js +174 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/SqsMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/SqsOverviewMetricServiceAdapter.d.ts +7 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/SqsOverviewMetricServiceAdapter.js +81 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/SqsOverviewMetricServiceAdapter.js.map +1 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/index.d.ts +2 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/index.js +6 -0
- package/built/src/drivers/providers/metrics/adapters/sqs/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsAvailability.d.ts +23 -0
- package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsAvailability.js +69 -0
- package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsAvailability.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsCollector.d.ts +24 -0
- package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsCollector.js +49 -0
- package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsCollector.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/alignSeriesByTimestamp.d.ts +2 -0
- package/built/src/drivers/providers/metrics/cloudwatch/alignSeriesByTimestamp.js +16 -0
- package/built/src/drivers/providers/metrics/cloudwatch/alignSeriesByTimestamp.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/cloudWatchMetricsTransport.d.ts +21 -0
- package/built/src/drivers/providers/metrics/cloudwatch/cloudWatchMetricsTransport.js +193 -0
- package/built/src/drivers/providers/metrics/cloudwatch/cloudWatchMetricsTransport.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/collectAcrossMetricEndpoints.d.ts +6 -0
- package/built/src/drivers/providers/metrics/cloudwatch/collectAcrossMetricEndpoints.js +99 -0
- package/built/src/drivers/providers/metrics/cloudwatch/collectAcrossMetricEndpoints.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/deriveMetricSeries.d.ts +2 -0
- package/built/src/drivers/providers/metrics/cloudwatch/deriveMetricSeries.js +100 -0
- package/built/src/drivers/providers/metrics/cloudwatch/deriveMetricSeries.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/index.d.ts +7 -0
- package/built/src/drivers/providers/metrics/cloudwatch/index.js +11 -0
- package/built/src/drivers/providers/metrics/cloudwatch/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/cloudwatch/metricPeriod.d.ts +2 -0
- package/built/src/drivers/providers/metrics/cloudwatch/metricPeriod.js +16 -0
- package/built/src/drivers/providers/metrics/cloudwatch/metricPeriod.js.map +1 -0
- package/built/src/drivers/providers/metrics/index.d.ts +3 -0
- package/built/src/drivers/providers/metrics/index.js +7 -0
- package/built/src/drivers/providers/metrics/index.js.map +1 -0
- package/built/src/drivers/providers/metrics/metricServiceAdapterRegistry.d.ts +8 -0
- package/built/src/drivers/providers/metrics/metricServiceAdapterRegistry.js +27 -0
- package/built/src/drivers/providers/metrics/metricServiceAdapterRegistry.js.map +1 -0
- package/built/src/drivers/providers/performance/DynamoDbPerformanceTuningProvider.d.ts +60 -0
- package/built/src/drivers/providers/performance/DynamoDbPerformanceTuningProvider.js +751 -0
- package/built/src/drivers/providers/performance/DynamoDbPerformanceTuningProvider.js.map +1 -0
- package/built/src/drivers/providers/performance/MySQLPerformanceTuningProvider.d.ts +29 -0
- package/built/src/drivers/providers/performance/MySQLPerformanceTuningProvider.js +350 -0
- package/built/src/drivers/providers/performance/MySQLPerformanceTuningProvider.js.map +1 -0
- package/built/src/drivers/providers/performance/OraclePerformanceTuningProvider.d.ts +37 -0
- package/built/src/drivers/providers/performance/OraclePerformanceTuningProvider.js +393 -0
- package/built/src/drivers/providers/performance/OraclePerformanceTuningProvider.js.map +1 -0
- package/built/src/drivers/providers/performance/PerformanceTuningContextProvider.d.ts +57 -0
- package/built/src/drivers/providers/performance/PerformanceTuningContextProvider.js +3 -0
- package/built/src/drivers/providers/performance/PerformanceTuningContextProvider.js.map +1 -0
- package/built/src/drivers/providers/performance/PostgresPerformanceTuningProvider.d.ts +24 -0
- package/built/src/drivers/providers/performance/PostgresPerformanceTuningProvider.js +328 -0
- package/built/src/drivers/providers/performance/PostgresPerformanceTuningProvider.js.map +1 -0
- package/built/src/drivers/providers/performance/SQLServerPerformanceTuningProvider.d.ts +29 -0
- package/built/src/drivers/providers/performance/SQLServerPerformanceTuningProvider.js +420 -0
- package/built/src/drivers/providers/performance/SQLServerPerformanceTuningProvider.js.map +1 -0
- package/built/src/drivers/providers/performance/dynamoDbCapacity.d.ts +38 -0
- package/built/src/drivers/providers/performance/dynamoDbCapacity.js +111 -0
- package/built/src/drivers/providers/performance/dynamoDbCapacity.js.map +1 -0
- package/built/src/drivers/providers/performance/dynamoDbCloudWatchMetrics.d.ts +20 -0
- package/built/src/drivers/providers/performance/dynamoDbCloudWatchMetrics.js +221 -0
- package/built/src/drivers/providers/performance/dynamoDbCloudWatchMetrics.js.map +1 -0
- package/built/src/drivers/providers/performance/dynamoPartiqlAccessPattern.d.ts +18 -0
- package/built/src/drivers/providers/performance/dynamoPartiqlAccessPattern.js +736 -0
- package/built/src/drivers/providers/performance/dynamoPartiqlAccessPattern.js.map +1 -0
- package/built/src/drivers/providers/performance/index.d.ts +23 -0
- package/built/src/drivers/providers/performance/index.js +27 -0
- package/built/src/drivers/providers/performance/index.js.map +1 -0
- package/built/src/drivers/providers/performance/mysqlActualPlanTextParser.d.ts +26 -0
- package/built/src/drivers/providers/performance/mysqlActualPlanTextParser.js +181 -0
- package/built/src/drivers/providers/performance/mysqlActualPlanTextParser.js.map +1 -0
- package/built/src/drivers/providers/performance/mysqlCatalogMapper.d.ts +11 -0
- package/built/src/drivers/providers/performance/mysqlCatalogMapper.js +218 -0
- package/built/src/drivers/providers/performance/mysqlCatalogMapper.js.map +1 -0
- package/built/src/drivers/providers/performance/mysqlPlanParser.d.ts +11 -0
- package/built/src/drivers/providers/performance/mysqlPlanParser.js +209 -0
- package/built/src/drivers/providers/performance/mysqlPlanParser.js.map +1 -0
- package/built/src/drivers/providers/performance/oracleActualPlanTextParser.d.ts +10 -0
- package/built/src/drivers/providers/performance/oracleActualPlanTextParser.js +245 -0
- package/built/src/drivers/providers/performance/oracleActualPlanTextParser.js.map +1 -0
- package/built/src/drivers/providers/performance/oracleCatalogMapper.d.ts +11 -0
- package/built/src/drivers/providers/performance/oracleCatalogMapper.js +226 -0
- package/built/src/drivers/providers/performance/oracleCatalogMapper.js.map +1 -0
- package/built/src/drivers/providers/performance/oraclePlanParser.d.ts +18 -0
- package/built/src/drivers/providers/performance/oraclePlanParser.js +223 -0
- package/built/src/drivers/providers/performance/oraclePlanParser.js.map +1 -0
- package/built/src/drivers/providers/performance/performanceTuningDiagnosticHelpers.d.ts +2 -0
- package/built/src/drivers/providers/performance/performanceTuningDiagnosticHelpers.js +13 -0
- package/built/src/drivers/providers/performance/performanceTuningDiagnosticHelpers.js.map +1 -0
- package/built/src/drivers/providers/performance/planNodeMath.d.ts +20 -0
- package/built/src/drivers/providers/performance/planNodeMath.js +82 -0
- package/built/src/drivers/providers/performance/planNodeMath.js.map +1 -0
- package/built/src/drivers/providers/performance/postgresCatalogMapper.d.ts +20 -0
- package/built/src/drivers/providers/performance/postgresCatalogMapper.js +287 -0
- package/built/src/drivers/providers/performance/postgresCatalogMapper.js.map +1 -0
- package/built/src/drivers/providers/performance/postgresPlanParser.d.ts +13 -0
- package/built/src/drivers/providers/performance/postgresPlanParser.js +258 -0
- package/built/src/drivers/providers/performance/postgresPlanParser.js.map +1 -0
- package/built/src/drivers/providers/performance/sqlServerActualPlanXmlParser.d.ts +10 -0
- package/built/src/drivers/providers/performance/sqlServerActualPlanXmlParser.js +252 -0
- package/built/src/drivers/providers/performance/sqlServerActualPlanXmlParser.js.map +1 -0
- package/built/src/drivers/providers/performance/sqlServerCatalogMapper.d.ts +20 -0
- package/built/src/drivers/providers/performance/sqlServerCatalogMapper.js +254 -0
- package/built/src/drivers/providers/performance/sqlServerCatalogMapper.js.map +1 -0
- package/built/src/drivers/providers/performance/sqlServerPlanParser.d.ts +10 -0
- package/built/src/drivers/providers/performance/sqlServerPlanParser.js +199 -0
- package/built/src/drivers/providers/performance/sqlServerPlanParser.js.map +1 -0
- package/built/src/drivers/providers/performance/vendorRowCoercion.d.ts +6 -0
- package/built/src/drivers/providers/performance/vendorRowCoercion.js +42 -0
- package/built/src/drivers/providers/performance/vendorRowCoercion.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/RdbDashboardProvider.d.ts +8 -0
- package/built/src/drivers/providers/rdbDashboard/RdbDashboardProvider.js +3 -0
- package/built/src/drivers/providers/rdbDashboard/RdbDashboardProvider.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/RdbSampleAccumulator.d.ts +22 -0
- package/built/src/drivers/providers/rdbDashboard/RdbSampleAccumulator.js +331 -0
- package/built/src/drivers/providers/rdbDashboard/RdbSampleAccumulator.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/index.d.ts +9 -0
- package/built/src/drivers/providers/rdbDashboard/index.js +13 -0
- package/built/src/drivers/providers/rdbDashboard/index.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/rdbDashboardErrors.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/rdbDashboardErrors.js +10 -0
- package/built/src/drivers/providers/rdbDashboard/rdbDashboardErrors.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/rdbDashboardValueUtils.d.ts +7 -0
- package/built/src/drivers/providers/rdbDashboard/rdbDashboardValueUtils.js +31 -0
- package/built/src/drivers/providers/rdbDashboard/rdbDashboardValueUtils.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/validateRdbDashboard.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/validateRdbDashboard.js +73 -0
- package/built/src/drivers/providers/rdbDashboard/validateRdbDashboard.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/MySQLRdbDashboardProvider.d.ts +16 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/MySQLRdbDashboardProvider.js +247 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/MySQLRdbDashboardProvider.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/index.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/index.js +7 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/index.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardCatalog.d.ts +4 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardCatalog.js +279 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardCatalog.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardQueries.d.ts +5 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardQueries.js +41 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardQueries.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/OracleRdbDashboardProvider.d.ts +21 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/OracleRdbDashboardProvider.js +420 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/OracleRdbDashboardProvider.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/index.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/index.js +7 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/index.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardCatalog.d.ts +12 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardCatalog.js +117 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardCatalog.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardQueries.d.ts +8 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardQueries.js +60 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardQueries.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/PostgresRdbDashboardProvider.d.ts +13 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/PostgresRdbDashboardProvider.js +216 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/PostgresRdbDashboardProvider.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/index.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/index.js +7 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/index.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardCatalog.d.ts +4 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardCatalog.js +218 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardCatalog.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardQueries.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardQueries.js +70 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardQueries.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/SQLiteRdbDashboardProvider.d.ts +20 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/SQLiteRdbDashboardProvider.js +259 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/SQLiteRdbDashboardProvider.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/index.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/index.js +7 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/index.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardCatalog.d.ts +5 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardCatalog.js +135 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardCatalog.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardQueries.d.ts +4 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardQueries.js +14 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardQueries.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/SQLServerRdbDashboardProvider.d.ts +16 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/SQLServerRdbDashboardProvider.js +301 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/SQLServerRdbDashboardProvider.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/index.d.ts +3 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/index.js +7 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/index.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardCatalog.d.ts +4 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardCatalog.js +130 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardCatalog.js.map +1 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardQueries.d.ts +6 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardQueries.js +91 -0
- package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardQueries.js.map +1 -0
- package/built/src/helpers/ProposalHelper.js.map +1 -1
- package/built/src/helpers/SQLHelper.d.ts +1 -1
- package/built/src/helpers/SQLHelper.js +3 -1
- package/built/src/helpers/SQLHelper.js.map +1 -1
- package/built/src/helpers/dynamoDbBillingMode.d.ts +6 -0
- package/built/src/helpers/dynamoDbBillingMode.js +16 -0
- package/built/src/helpers/dynamoDbBillingMode.js.map +1 -0
- package/built/src/helpers/index.d.ts +1 -0
- package/built/src/helpers/index.js +1 -0
- package/built/src/helpers/index.js.map +1 -1
- package/built/src/helpers/prompts/Auth0PromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/AwsPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/KeycloakPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/MemcachePromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/MqttPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/RdsPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/RedisPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/SchemaPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/promptFormatUtils.js.map +1 -1
- package/built/src/helpers/sql/mutationQuery.js.map +1 -1
- package/built/src/helpers/sql/parameterNormalizer.js +2 -2
- package/built/src/helpers/sql/parameterNormalizer.js.map +1 -1
- package/built/src/helpers/sql/queryParser.js +272 -48
- package/built/src/helpers/sql/queryParser.js.map +1 -1
- package/built/src/helpers/sql/quote.d.ts +2 -0
- package/built/src/helpers/sql/quote.js +9 -2
- package/built/src/helpers/sql/quote.js.map +1 -1
- package/built/src/helpers/sql/selectQuery.js.map +1 -1
- package/built/src/resource/aws.d.ts +2 -1
- package/built/src/resource/aws.js +76 -2
- package/built/src/resource/aws.js.map +1 -1
- package/built/src/resource/base.d.ts +2 -1
- package/built/src/resource/base.js.map +1 -1
- package/built/src/resource/fromJson.js.map +1 -1
- package/built/src/resource/iam.js.map +1 -1
- package/built/src/resource/index.js.map +1 -1
- package/built/src/resource/keyValue.js.map +1 -1
- package/built/src/types/drivers/EstimatedBindParameter.d.ts +12 -0
- package/built/src/types/drivers/EstimatedBindParameter.js +3 -0
- package/built/src/types/drivers/EstimatedBindParameter.js.map +1 -0
- package/built/src/types/drivers/StatementStatistics.d.ts +13 -0
- package/built/src/types/drivers/StatementStatistics.js +10 -0
- package/built/src/types/drivers/StatementStatistics.js.map +1 -0
- package/built/src/types/drivers/index.d.ts +5 -0
- package/built/src/types/drivers/index.js +5 -0
- package/built/src/types/drivers/index.js.map +1 -1
- package/built/src/types/drivers/metrics/CloudWatchMetrics.d.ts +168 -0
- package/built/src/types/drivers/metrics/CloudWatchMetrics.js +3 -0
- package/built/src/types/drivers/metrics/CloudWatchMetrics.js.map +1 -0
- package/built/src/types/drivers/metrics/index.d.ts +1 -0
- package/built/src/types/drivers/metrics/index.js +5 -0
- package/built/src/types/drivers/metrics/index.js.map +1 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningCapabilities.d.ts +12 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningCapabilities.js +3 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningCapabilities.js.map +1 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningContext.d.ts +302 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningContext.js +7 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningContext.js.map +1 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningDiagnostic.d.ts +13 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningDiagnostic.js +3 -0
- package/built/src/types/drivers/performance/DynamoDbPerformanceTuningDiagnostic.js.map +1 -0
- package/built/src/types/drivers/performance/PerformanceTuningCapabilities.d.ts +17 -0
- package/built/src/types/drivers/performance/PerformanceTuningCapabilities.js +3 -0
- package/built/src/types/drivers/performance/PerformanceTuningCapabilities.js.map +1 -0
- package/built/src/types/drivers/performance/PerformanceTuningContext.d.ts +263 -0
- package/built/src/types/drivers/performance/PerformanceTuningContext.js +3 -0
- package/built/src/types/drivers/performance/PerformanceTuningContext.js.map +1 -0
- package/built/src/types/drivers/performance/PerformanceTuningDiagnostic.d.ts +28 -0
- package/built/src/types/drivers/performance/PerformanceTuningDiagnostic.js +3 -0
- package/built/src/types/drivers/performance/PerformanceTuningDiagnostic.js.map +1 -0
- package/built/src/types/drivers/performance/PlanNode.d.ts +37 -0
- package/built/src/types/drivers/performance/PlanNode.js +3 -0
- package/built/src/types/drivers/performance/PlanNode.js.map +1 -0
- package/built/src/types/drivers/performance/index.d.ts +7 -0
- package/built/src/types/drivers/performance/index.js +11 -0
- package/built/src/types/drivers/performance/index.js.map +1 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardCapabilities.d.ts +30 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardCapabilities.js +3 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardCapabilities.js.map +1 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardDefinition.d.ts +134 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardDefinition.js +14 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardDefinition.js.map +1 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardSample.d.ts +69 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardSample.js +3 -0
- package/built/src/types/drivers/rdbDashboard/RdbDashboardSample.js.map +1 -0
- package/built/src/types/drivers/rdbDashboard/index.d.ts +3 -0
- package/built/src/types/drivers/rdbDashboard/index.js +7 -0
- package/built/src/types/drivers/rdbDashboard/index.js.map +1 -0
- package/built/src/types/helpers/index.js.map +1 -1
- package/built/src/types/index.d.ts +1 -0
- package/built/src/types/index.js +1 -0
- package/built/src/types/index.js.map +1 -1
- package/built/src/types/observability/dashboardLaunchCapability.d.ts +11 -0
- package/built/src/types/observability/dashboardLaunchCapability.js +22 -0
- package/built/src/types/observability/dashboardLaunchCapability.js.map +1 -0
- package/built/src/types/observability/index.d.ts +1 -0
- package/built/src/types/observability/index.js +5 -0
- package/built/src/types/observability/index.js.map +1 -0
- package/built/src/types/resource/AwsCfnStackAttributes.js.map +1 -1
- package/built/src/types/resource/AwsDynamoTableAttributes.d.ts +13 -0
- package/built/src/types/resource/AwsServiceType.d.ts +1 -1
- package/built/src/types/resource/AwsSupplyCredentialType.js.map +1 -1
- package/built/src/types/resource/ConnectionSetting.js.map +1 -1
- package/built/src/types/resource/OracleColumnType.js.map +1 -1
- package/built/src/types/resource/RedisKeyType.d.ts +1 -1
- package/built/src/types/resource/ResourceType.js.map +1 -1
- package/built/src/types/resource/SQLServerColumnType.js.map +1 -1
- package/built/src/utils/bindParameterEstimator.d.ts +22 -0
- package/built/src/utils/bindParameterEstimator.js +400 -0
- package/built/src/utils/bindParameterEstimator.js.map +1 -0
- package/built/src/utils/cfn/applicationDiagram.js.map +1 -1
- package/built/src/utils/cfn/applicationRelations.js.map +1 -1
- package/built/src/utils/cfn/cfnDependencyGraphDiagram.js.map +1 -1
- package/built/src/utils/cfn/deploymentTopology.js.map +1 -1
- package/built/src/utils/cfn/diagramFileModel.js.map +1 -1
- package/built/src/utils/cfn/drawio/cfnDependencyGraphDiagram.js.map +1 -1
- package/built/src/utils/cfn/drawio/commonCells.js.map +1 -1
- package/built/src/utils/cfn/drawio/multiAzInfrastructureDiagram.js.map +1 -1
- package/built/src/utils/cfn/drawioApplicationDiagram.js.map +1 -1
- package/built/src/utils/cfn/drawioInfrastructureDiagrams.js.map +1 -1
- package/built/src/utils/cfn/drawioXml.js.map +1 -1
- package/built/src/utils/cfn/generateDiagram.js.map +1 -1
- package/built/src/utils/cfn/icons.js.map +1 -1
- package/built/src/utils/cfn/index.js.map +1 -1
- package/built/src/utils/cfn/intrinsics.js.map +1 -1
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtection.js.map +1 -1
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtectionDiagram.js.map +1 -1
- package/built/src/utils/cfn/naming.js.map +1 -1
- package/built/src/utils/cfn/resourceDependencies.js.map +1 -1
- package/built/src/utils/cfn/templateParsing.js.map +1 -1
- package/built/src/utils/cfn/viewpoints.js.map +1 -1
- package/built/src/utils/csv.js.map +1 -1
- package/built/src/utils/dbType.js.map +1 -1
- package/built/src/utils/diagramLayout/elkLayoutEngine.js.map +1 -1
- package/built/src/utils/diagramLayout/index.js.map +1 -1
- package/built/src/utils/diagramLayout/normalizeLayout.js.map +1 -1
- package/built/src/utils/drawio/drawioXml.js.map +1 -1
- package/built/src/utils/drawio/index.js.map +1 -1
- package/built/src/utils/dynamoDbPerformanceTuningContextValidator.d.ts +3 -0
- package/built/src/utils/dynamoDbPerformanceTuningContextValidator.js +440 -0
- package/built/src/utils/dynamoDbPerformanceTuningContextValidator.js.map +1 -0
- package/built/src/utils/er/erDiagramDrawioGenerator.js.map +1 -1
- package/built/src/utils/er/erDiagramDrawioGeneratorAuto.js.map +1 -1
- package/built/src/utils/er/erDiagramGenerator.js.map +1 -1
- package/built/src/utils/er/index.d.ts +1 -0
- package/built/src/utils/er/index.js +3 -1
- package/built/src/utils/er/index.js.map +1 -1
- package/built/src/utils/er/performanceQueryDiagram.d.ts +18 -0
- package/built/src/utils/er/performanceQueryDiagram.js +381 -0
- package/built/src/utils/er/performanceQueryDiagram.js.map +1 -0
- package/built/src/utils/index.d.ts +5 -0
- package/built/src/utils/index.js +5 -0
- package/built/src/utils/index.js.map +1 -1
- package/built/src/utils/log/buildSqlExecutions.js.map +1 -1
- package/built/src/utils/log/constant/base.js.map +1 -1
- package/built/src/utils/log/constant/logEventSplitPreset.js.map +1 -1
- package/built/src/utils/log/constant/sqlLogParsePreset.js.map +1 -1
- package/built/src/utils/log/detect/presetDetector.js.map +1 -1
- package/built/src/utils/log/extract/runExtractors.js.map +1 -1
- package/built/src/utils/log/logSummary.js.map +1 -1
- package/built/src/utils/log/rdh/convertExtractedSqlRdhResult.js.map +1 -1
- package/built/src/utils/log/sql/removeSqlComments.js.map +1 -1
- package/built/src/utils/log/validator.js.map +1 -1
- package/built/src/utils/performanceTuningContext.d.ts +45 -0
- package/built/src/utils/performanceTuningContext.js +149 -0
- package/built/src/utils/performanceTuningContext.js.map +1 -0
- package/built/src/utils/performanceTuningContextValidator.d.ts +3 -0
- package/built/src/utils/performanceTuningContextValidator.js +364 -0
- package/built/src/utils/performanceTuningContextValidator.js.map +1 -0
- package/built/src/utils/statementStatistics.d.ts +11 -0
- package/built/src/utils/statementStatistics.js +39 -0
- package/built/src/utils/statementStatistics.js.map +1 -0
- package/package.json +37 -31
|
@@ -0,0 +1,751 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DynamoDbPerformanceTuningProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const dynamoPartiqlAccessPattern_1 = require("./dynamoPartiqlAccessPattern");
|
|
6
|
+
const dynamoDbBillingMode_1 = require("../../../helpers/dynamoDbBillingMode");
|
|
7
|
+
const DEFAULT_MAX_PAYLOAD_BYTES = 200000;
|
|
8
|
+
const MAX_MAX_PAYLOAD_BYTES = 2000000;
|
|
9
|
+
const DEFAULT_MAX_INDEXES = 20;
|
|
10
|
+
const MAX_MAX_INDEXES = 100;
|
|
11
|
+
const DEFAULT_MAX_EVALUATED_ITEMS = 100;
|
|
12
|
+
const HIGH_SCANNED_TO_RETURNED_MIN_SCANNED = 100;
|
|
13
|
+
const HIGH_SCANNED_TO_RETURNED_MAX_PASS_RATE = 0.1;
|
|
14
|
+
function monitoringUnavailableMessage(mode) {
|
|
15
|
+
return mode === 'cloudWatchNotSelected'
|
|
16
|
+
? 'CloudWatch metrics and Contributor Insights are not collected because CloudWatch is not enabled for this connection.'
|
|
17
|
+
: 'CloudWatch metrics and Contributor Insights are outside the scope of local/custom DynamoDB endpoints.';
|
|
18
|
+
}
|
|
19
|
+
function toCloudWatchOperation(operation) {
|
|
20
|
+
return operation === 'PartiQLSelect' ? 'ExecuteStatement' : operation;
|
|
21
|
+
}
|
|
22
|
+
function mapKeySchema(keySchema, attributeDefinitions) {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
const partitionKeyName = (_a = keySchema === null || keySchema === void 0 ? void 0 : keySchema.find((k) => k.KeyType === 'HASH')) === null || _a === void 0 ? void 0 : _a.AttributeName;
|
|
25
|
+
if (!partitionKeyName)
|
|
26
|
+
return undefined;
|
|
27
|
+
const typeOf = (name) => {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
return (_b = (_a = attributeDefinitions === null || attributeDefinitions === void 0 ? void 0 : attributeDefinitions.find((a) => a.AttributeName === name)) === null || _a === void 0 ? void 0 : _a.AttributeType) !== null && _b !== void 0 ? _b : 'S';
|
|
30
|
+
};
|
|
31
|
+
const sortKeyName = (_b = keySchema === null || keySchema === void 0 ? void 0 : keySchema.find((k) => k.KeyType === 'RANGE')) === null || _b === void 0 ? void 0 : _b.AttributeName;
|
|
32
|
+
return {
|
|
33
|
+
partitionKey: {
|
|
34
|
+
attributeName: partitionKeyName,
|
|
35
|
+
attributeType: typeOf(partitionKeyName),
|
|
36
|
+
},
|
|
37
|
+
sortKey: sortKeyName
|
|
38
|
+
? { attributeName: sortKeyName, attributeType: typeOf(sortKeyName) }
|
|
39
|
+
: undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function mapProjection(projection) {
|
|
43
|
+
var _a;
|
|
44
|
+
const type = projection === null || projection === void 0 ? void 0 : projection.ProjectionType;
|
|
45
|
+
return {
|
|
46
|
+
projectionType: type === 'ALL' || type === 'KEYS_ONLY' || type === 'INCLUDE'
|
|
47
|
+
? type
|
|
48
|
+
: 'unknown',
|
|
49
|
+
nonKeyAttributes: type === 'INCLUDE' ? (_a = projection === null || projection === void 0 ? void 0 : projection.NonKeyAttributes) !== null && _a !== void 0 ? _a : [] : undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function mapThroughput(t) {
|
|
53
|
+
if (!t ||
|
|
54
|
+
(t.ReadCapacityUnits === undefined && t.WriteCapacityUnits === undefined))
|
|
55
|
+
return undefined;
|
|
56
|
+
return {
|
|
57
|
+
readCapacityUnits: t.ReadCapacityUnits,
|
|
58
|
+
writeCapacityUnits: t.WriteCapacityUnits,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function mapWarmThroughput(w) {
|
|
62
|
+
if (!w ||
|
|
63
|
+
(w.ReadUnitsPerSecond === undefined && w.WriteUnitsPerSecond === undefined))
|
|
64
|
+
return undefined;
|
|
65
|
+
return {
|
|
66
|
+
readCapacityUnits: w.ReadUnitsPerSecond,
|
|
67
|
+
writeCapacityUnits: w.WriteUnitsPerSecond,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function mapIndex(index, indexType, tableAttributeDefinitions) {
|
|
71
|
+
var _a, _b, _c, _d;
|
|
72
|
+
if (!index.IndexName)
|
|
73
|
+
return undefined;
|
|
74
|
+
const gsi = indexType === 'GSI'
|
|
75
|
+
? index
|
|
76
|
+
: undefined;
|
|
77
|
+
return {
|
|
78
|
+
indexName: index.IndexName,
|
|
79
|
+
indexType,
|
|
80
|
+
status: gsi === null || gsi === void 0 ? void 0 : gsi.IndexStatus,
|
|
81
|
+
keySchema: (_a = mapKeySchema(index.KeySchema, tableAttributeDefinitions)) !== null && _a !== void 0 ? _a : {
|
|
82
|
+
partitionKey: {
|
|
83
|
+
attributeName: (_d = (_c = (_b = index.KeySchema) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.AttributeName) !== null && _d !== void 0 ? _d : 'unknown',
|
|
84
|
+
attributeType: 'S',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
projection: mapProjection(index.Projection),
|
|
88
|
+
itemCount: index.ItemCount !== undefined
|
|
89
|
+
? {
|
|
90
|
+
value: index.ItemCount,
|
|
91
|
+
estimated: true,
|
|
92
|
+
source: 'DescribeTable.ItemCount',
|
|
93
|
+
}
|
|
94
|
+
: undefined,
|
|
95
|
+
indexSizeBytes: index.IndexSizeBytes !== undefined
|
|
96
|
+
? {
|
|
97
|
+
value: index.IndexSizeBytes,
|
|
98
|
+
estimated: true,
|
|
99
|
+
source: 'DescribeTable.IndexSizeBytes',
|
|
100
|
+
}
|
|
101
|
+
: undefined,
|
|
102
|
+
provisionedThroughput: gsi
|
|
103
|
+
? mapThroughput(gsi.ProvisionedThroughput)
|
|
104
|
+
: undefined,
|
|
105
|
+
onDemandThroughput: (gsi === null || gsi === void 0 ? void 0 : gsi.OnDemandThroughput)
|
|
106
|
+
? {
|
|
107
|
+
maxReadRequestUnits: gsi.OnDemandThroughput.MaxReadRequestUnits,
|
|
108
|
+
maxWriteRequestUnits: gsi.OnDemandThroughput.MaxWriteRequestUnits,
|
|
109
|
+
}
|
|
110
|
+
: undefined,
|
|
111
|
+
warmThroughput: gsi ? mapWarmThroughput(gsi.WarmThroughput) : undefined,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function mapTableContext(table, ttl, contributorInsights) {
|
|
115
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
116
|
+
const keySchema = (_a = mapKeySchema(table.KeySchema, table.AttributeDefinitions)) !== null && _a !== void 0 ? _a : {
|
|
117
|
+
partitionKey: {
|
|
118
|
+
attributeName: (_d = (_c = (_b = table.KeySchema) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.AttributeName) !== null && _d !== void 0 ? _d : 'unknown',
|
|
119
|
+
attributeType: 'S',
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
tableName: (_e = table.TableName) !== null && _e !== void 0 ? _e : '',
|
|
124
|
+
status: table.TableStatus,
|
|
125
|
+
billingMode: (0, dynamoDbBillingMode_1.resolveDynamoDbBillingMode)({
|
|
126
|
+
billingMode: (_f = table.BillingModeSummary) === null || _f === void 0 ? void 0 : _f.BillingMode,
|
|
127
|
+
readCapacityUnits: (_g = table.ProvisionedThroughput) === null || _g === void 0 ? void 0 : _g.ReadCapacityUnits,
|
|
128
|
+
writeCapacityUnits: (_h = table.ProvisionedThroughput) === null || _h === void 0 ? void 0 : _h.WriteCapacityUnits,
|
|
129
|
+
}),
|
|
130
|
+
keySchema,
|
|
131
|
+
attributeDefinitions: ((_j = table.AttributeDefinitions) !== null && _j !== void 0 ? _j : [])
|
|
132
|
+
.filter((a) => !!a.AttributeName)
|
|
133
|
+
.map((a) => ({
|
|
134
|
+
attributeName: a.AttributeName,
|
|
135
|
+
attributeType: a.AttributeType,
|
|
136
|
+
})),
|
|
137
|
+
localSecondaryIndexes: ((_k = table.LocalSecondaryIndexes) !== null && _k !== void 0 ? _k : [])
|
|
138
|
+
.map((i) => mapIndex(i, 'LSI', table.AttributeDefinitions))
|
|
139
|
+
.filter((i) => !!i),
|
|
140
|
+
globalSecondaryIndexes: ((_l = table.GlobalSecondaryIndexes) !== null && _l !== void 0 ? _l : [])
|
|
141
|
+
.map((i) => mapIndex(i, 'GSI', table.AttributeDefinitions))
|
|
142
|
+
.filter((i) => !!i),
|
|
143
|
+
provisionedThroughput: mapThroughput(table.ProvisionedThroughput),
|
|
144
|
+
onDemandThroughput: table.OnDemandThroughput
|
|
145
|
+
? {
|
|
146
|
+
maxReadRequestUnits: table.OnDemandThroughput.MaxReadRequestUnits,
|
|
147
|
+
maxWriteRequestUnits: table.OnDemandThroughput.MaxWriteRequestUnits,
|
|
148
|
+
}
|
|
149
|
+
: undefined,
|
|
150
|
+
warmThroughput: mapWarmThroughput(table.WarmThroughput),
|
|
151
|
+
itemCount: table.ItemCount !== undefined
|
|
152
|
+
? {
|
|
153
|
+
value: table.ItemCount,
|
|
154
|
+
estimated: true,
|
|
155
|
+
source: 'DescribeTable.ItemCount',
|
|
156
|
+
}
|
|
157
|
+
: undefined,
|
|
158
|
+
tableSizeBytes: table.TableSizeBytes !== undefined
|
|
159
|
+
? {
|
|
160
|
+
value: table.TableSizeBytes,
|
|
161
|
+
estimated: true,
|
|
162
|
+
source: 'DescribeTable.TableSizeBytes',
|
|
163
|
+
}
|
|
164
|
+
: undefined,
|
|
165
|
+
tableClass: (_m = table.TableClassSummary) === null || _m === void 0 ? void 0 : _m.TableClass,
|
|
166
|
+
ttl: (ttl === null || ttl === void 0 ? void 0 : ttl.TimeToLiveStatus) !== undefined
|
|
167
|
+
? { status: ttl.TimeToLiveStatus, attributeName: ttl.AttributeName }
|
|
168
|
+
: undefined,
|
|
169
|
+
contributorInsights,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function resolveTargetKeySchema(table, indexName) {
|
|
173
|
+
if (!indexName)
|
|
174
|
+
return { keySchema: table.keySchema };
|
|
175
|
+
const gsi = table.globalSecondaryIndexes.find((i) => i.indexName === indexName);
|
|
176
|
+
if (gsi)
|
|
177
|
+
return { keySchema: gsi.keySchema, indexType: 'GSI' };
|
|
178
|
+
const lsi = table.localSecondaryIndexes.find((i) => i.indexName === indexName);
|
|
179
|
+
if (lsi)
|
|
180
|
+
return { keySchema: lsi.keySchema, indexType: 'LSI' };
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
function diag(code, severity, affectsCompleteness, scope, message, extra) {
|
|
184
|
+
return Object.assign({ code, severity, affectsCompleteness, scope, message }, extra);
|
|
185
|
+
}
|
|
186
|
+
class DynamoDbPerformanceTuningProvider {
|
|
187
|
+
constructor(driver) {
|
|
188
|
+
this.driver = driver;
|
|
189
|
+
}
|
|
190
|
+
checkCapabilities(params) {
|
|
191
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
192
|
+
const monitoringMode = this.driver.monitoringMode;
|
|
193
|
+
const monitoringAvailable = monitoringMode === 'enabled';
|
|
194
|
+
const monitoringMessage = monitoringMode === 'enabled'
|
|
195
|
+
? undefined
|
|
196
|
+
: monitoringUnavailableMessage(monitoringMode);
|
|
197
|
+
const capabilities = {
|
|
198
|
+
staticAccessPattern: {
|
|
199
|
+
available: true,
|
|
200
|
+
source: 'PartiQL/KeyCondition static parse against DescribeTable key schema',
|
|
201
|
+
},
|
|
202
|
+
tableDefinition: {
|
|
203
|
+
available: true,
|
|
204
|
+
source: 'dynamodb:DescribeTable',
|
|
205
|
+
requiredPermissions: ['dynamodb:DescribeTable'],
|
|
206
|
+
},
|
|
207
|
+
cloudWatchMetrics: monitoringAvailable
|
|
208
|
+
? {
|
|
209
|
+
available: true,
|
|
210
|
+
source: 'cloudwatch:GetMetricData',
|
|
211
|
+
requiredPermissions: ['cloudwatch:GetMetricData'],
|
|
212
|
+
}
|
|
213
|
+
: { available: false, message: monitoringMessage },
|
|
214
|
+
contributorInsightsStatus: Object.assign({}, (monitoringAvailable
|
|
215
|
+
? {
|
|
216
|
+
available: true,
|
|
217
|
+
source: 'dynamodb:DescribeContributorInsights',
|
|
218
|
+
requiredPermissions: ['dynamodb:DescribeContributorInsights'],
|
|
219
|
+
}
|
|
220
|
+
: { available: false, message: monitoringMessage })),
|
|
221
|
+
observedRead: {
|
|
222
|
+
available: true,
|
|
223
|
+
message: 'IAM permission for a Run Observed Read is not pre-verified; an AccessDenied surfaces only after the user confirms it.',
|
|
224
|
+
requiredPermissions: ['dynamodb:PartiQLSelect', 'dynamodb:Query'],
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
return { ok: true, message: '', result: capabilities };
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
collect(params, options) {
|
|
231
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
232
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
233
|
+
const limits = {
|
|
234
|
+
maxPayloadBytes: clamp((_a = params.limits) === null || _a === void 0 ? void 0 : _a.maxPayloadBytes, DEFAULT_MAX_PAYLOAD_BYTES, 1, MAX_MAX_PAYLOAD_BYTES),
|
|
235
|
+
maxIndexes: clamp((_b = params.limits) === null || _b === void 0 ? void 0 : _b.maxIndexes, DEFAULT_MAX_INDEXES, 1, MAX_MAX_INDEXES),
|
|
236
|
+
};
|
|
237
|
+
const mode = (_d = (_c = params.observation) === null || _c === void 0 ? void 0 : _c.mode) !== null && _d !== void 0 ? _d : 'static';
|
|
238
|
+
const request = params.statement.request;
|
|
239
|
+
let tableName;
|
|
240
|
+
let indexName;
|
|
241
|
+
let statementText;
|
|
242
|
+
if (request.kind === 'partiql') {
|
|
243
|
+
const extracted = (0, dynamoPartiqlAccessPattern_1.extractDynamoPartiqlTarget)(request.text);
|
|
244
|
+
if (!extracted) {
|
|
245
|
+
return {
|
|
246
|
+
ok: false,
|
|
247
|
+
message: 'The PartiQL statement could not be parsed as a single SELECT.',
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (params.target &&
|
|
251
|
+
(params.target.tableName !== extracted.tableName ||
|
|
252
|
+
params.target.indexName !== extracted.indexName)) {
|
|
253
|
+
return {
|
|
254
|
+
ok: false,
|
|
255
|
+
message: 'The explicit target does not match the table/index the statement references.',
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
tableName = extracted.tableName;
|
|
259
|
+
indexName = extracted.indexName;
|
|
260
|
+
statementText = request.text;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
if (!request.input.tableName) {
|
|
264
|
+
return {
|
|
265
|
+
ok: false,
|
|
266
|
+
message: 'A native Query analysis input requires tableName.',
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
tableName = request.input.tableName;
|
|
270
|
+
indexName = request.input.indexName;
|
|
271
|
+
}
|
|
272
|
+
let rawTable;
|
|
273
|
+
try {
|
|
274
|
+
rawTable = yield this.driver.describeTable(tableName);
|
|
275
|
+
}
|
|
276
|
+
catch (_u) {
|
|
277
|
+
rawTable = undefined;
|
|
278
|
+
}
|
|
279
|
+
if (!rawTable || !rawTable.TableName) {
|
|
280
|
+
return {
|
|
281
|
+
ok: false,
|
|
282
|
+
message: `Table "${tableName}" could not be described.`,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
const diagnostics = [];
|
|
286
|
+
const unavailableSections = [];
|
|
287
|
+
const monitoringMode = this.driver.monitoringMode;
|
|
288
|
+
const monitoringEnabled = monitoringMode === 'enabled';
|
|
289
|
+
if (monitoringMode !== 'enabled') {
|
|
290
|
+
diagnostics.push(diag('DYNAMODB_MONITORING_COLLECTION_SKIPPED', 'info', false, 'collection', monitoringUnavailableMessage(monitoringMode), { tableName }));
|
|
291
|
+
}
|
|
292
|
+
let ttl;
|
|
293
|
+
try {
|
|
294
|
+
ttl = yield this.driver.describeTimeToLive(tableName);
|
|
295
|
+
}
|
|
296
|
+
catch (e) {
|
|
297
|
+
unavailableSections.push({
|
|
298
|
+
section: 'tableDefinition',
|
|
299
|
+
tableName,
|
|
300
|
+
reason: describeError(e, 'DescribeTimeToLive failed.'),
|
|
301
|
+
requiredPermissions: ['dynamodb:DescribeTimeToLive'],
|
|
302
|
+
});
|
|
303
|
+
diagnostics.push(diag('DYNAMODB_SECTION_COLLECTION_FAILED', 'warning', true, 'tableDefinition', 'Time to live status could not be collected.', {
|
|
304
|
+
tableName,
|
|
305
|
+
}));
|
|
306
|
+
}
|
|
307
|
+
const contributorInsights = [];
|
|
308
|
+
if (monitoringEnabled) {
|
|
309
|
+
const ciTargets = [
|
|
310
|
+
{ resource: 'table' },
|
|
311
|
+
...((_e = rawTable.GlobalSecondaryIndexes) !== null && _e !== void 0 ? _e : [])
|
|
312
|
+
.filter((i) => !!i.IndexName)
|
|
313
|
+
.map((i) => ({ resource: 'gsi', indexName: i.IndexName })),
|
|
314
|
+
];
|
|
315
|
+
const ciResults = yield Promise.all(ciTargets.map((target) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
316
|
+
try {
|
|
317
|
+
const res = yield this.driver.describeContributorInsights(tableName, target.indexName);
|
|
318
|
+
return { target, res, error: undefined };
|
|
319
|
+
}
|
|
320
|
+
catch (e) {
|
|
321
|
+
return { target, res: undefined, error: e };
|
|
322
|
+
}
|
|
323
|
+
})));
|
|
324
|
+
for (const { target, res, error } of ciResults) {
|
|
325
|
+
if (error || !res) {
|
|
326
|
+
unavailableSections.push({
|
|
327
|
+
section: 'contributorInsights',
|
|
328
|
+
tableName,
|
|
329
|
+
indexName: target.indexName,
|
|
330
|
+
reason: describeError(error, 'DescribeContributorInsights failed.'),
|
|
331
|
+
requiredPermissions: ['dynamodb:DescribeContributorInsights'],
|
|
332
|
+
});
|
|
333
|
+
diagnostics.push(diag('DYNAMODB_SECTION_COLLECTION_FAILED', 'warning', true, 'contributorInsights', 'Contributor Insights status could not be collected.', {
|
|
334
|
+
tableName,
|
|
335
|
+
indexName: target.indexName,
|
|
336
|
+
}));
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
contributorInsights.push({
|
|
340
|
+
resource: target.resource,
|
|
341
|
+
status: (_f = res.status) !== null && _f !== void 0 ? _f : 'UNKNOWN',
|
|
342
|
+
mode: res.mode,
|
|
343
|
+
indexName: target.indexName,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
const table = mapTableContext(rawTable, ttl, contributorInsights);
|
|
348
|
+
const resolvedTarget = resolveTargetKeySchema(table, indexName);
|
|
349
|
+
if (!resolvedTarget) {
|
|
350
|
+
return {
|
|
351
|
+
ok: false,
|
|
352
|
+
message: `Index "${indexName}" was not found on table "${tableName}".`,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
let observationEligibility = {
|
|
356
|
+
allowed: true,
|
|
357
|
+
};
|
|
358
|
+
let accessPattern;
|
|
359
|
+
if (request.kind === 'partiql') {
|
|
360
|
+
if (containsUnresolvedBindMarker(statementText)) {
|
|
361
|
+
observationEligibility = {
|
|
362
|
+
allowed: false,
|
|
363
|
+
reason: 'The statement contains an unresolved bind marker (?); Run Observed Read is not available for parameterized PartiQL in v1.',
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
accessPattern = (0, dynamoPartiqlAccessPattern_1.analyzeDynamoPartiqlAccessPattern)({
|
|
367
|
+
sql: statementText,
|
|
368
|
+
keySchema: resolvedTarget.keySchema,
|
|
369
|
+
tableName,
|
|
370
|
+
indexName,
|
|
371
|
+
indexType: resolvedTarget.indexType,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
accessPattern = (0, dynamoPartiqlAccessPattern_1.analyzeDynamoNativeQueryAccessPattern)({
|
|
376
|
+
input: request.input,
|
|
377
|
+
keySchema: resolvedTarget.keySchema,
|
|
378
|
+
indexType: resolvedTarget.indexType,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
if (accessPattern.confidence === 'unknown') {
|
|
382
|
+
diagnostics.push(diag('DYNAMODB_ACCESS_PATTERN_UNRESOLVED', 'warning', true, 'accessPattern', 'The statement could not be classified as Query or Scan safely.', {
|
|
383
|
+
tableName,
|
|
384
|
+
indexName,
|
|
385
|
+
}));
|
|
386
|
+
unavailableSections.push({
|
|
387
|
+
section: 'accessPattern',
|
|
388
|
+
tableName,
|
|
389
|
+
indexName,
|
|
390
|
+
reason: 'The statement could not be parsed.',
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
else if (accessPattern.accessPath === 'tableScan') {
|
|
394
|
+
diagnostics.push(diag('DYNAMODB_FULL_TABLE_SCAN', 'warning', false, 'accessPattern', 'This statement performs a full table scan.', { tableName }));
|
|
395
|
+
}
|
|
396
|
+
else if (accessPattern.accessPath === 'indexScan') {
|
|
397
|
+
diagnostics.push(diag('DYNAMODB_FULL_INDEX_SCAN', 'warning', false, 'accessPattern', 'This statement performs a full index scan.', { tableName, indexName }));
|
|
398
|
+
}
|
|
399
|
+
if (accessPattern.postReadFilter.present) {
|
|
400
|
+
diagnostics.push(diag('DYNAMODB_POST_READ_FILTER', 'info', false, 'accessPattern', 'A non-key predicate is evaluated after each item is read.', {
|
|
401
|
+
tableName,
|
|
402
|
+
indexName,
|
|
403
|
+
}));
|
|
404
|
+
}
|
|
405
|
+
if (table.itemCount !== undefined || table.tableSizeBytes !== undefined) {
|
|
406
|
+
diagnostics.push(diag('DYNAMODB_APPROXIMATE_TABLE_METADATA', 'info', false, 'tableDefinition', 'ItemCount/TableSizeBytes are AWS approximations, updated roughly every six hours.', { tableName }));
|
|
407
|
+
}
|
|
408
|
+
let cloudWatch;
|
|
409
|
+
if (monitoringEnabled) {
|
|
410
|
+
const cwResult = yield this.driver.collectCloudWatchMetrics({
|
|
411
|
+
tableName,
|
|
412
|
+
indexName,
|
|
413
|
+
indexType: resolvedTarget.indexType,
|
|
414
|
+
operation: toCloudWatchOperation(accessPattern.operation),
|
|
415
|
+
billingMode: table.billingMode,
|
|
416
|
+
hasOnDemandMaxLimit: ((_g = table.onDemandThroughput) === null || _g === void 0 ? void 0 : _g.maxReadRequestUnits) !== undefined,
|
|
417
|
+
lookbackMinutes: (_h = params.metrics) === null || _h === void 0 ? void 0 : _h.lookbackMinutes,
|
|
418
|
+
periodSeconds: (_j = params.metrics) === null || _j === void 0 ? void 0 : _j.periodSeconds,
|
|
419
|
+
signal: options === null || options === void 0 ? void 0 : options.signal,
|
|
420
|
+
});
|
|
421
|
+
if (cwResult.ok && cwResult.result) {
|
|
422
|
+
cloudWatch = cwResult.result;
|
|
423
|
+
for (const series of cloudWatch.series) {
|
|
424
|
+
if (series.noData) {
|
|
425
|
+
diagnostics.push(diag('DYNAMODB_CLOUDWATCH_NO_DATA', 'info', false, 'cloudWatchMetrics', `No CloudWatch datapoints for ${series.metricName} (${series.statistic}).`, {
|
|
426
|
+
tableName,
|
|
427
|
+
indexName: series.scope === 'gsi' ? series.indexName : undefined,
|
|
428
|
+
metricName: series.metricName,
|
|
429
|
+
}));
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
applyThrottleDiagnostics(cloudWatch, diagnostics, tableName);
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
unavailableSections.push({
|
|
436
|
+
section: 'cloudWatchMetrics',
|
|
437
|
+
tableName,
|
|
438
|
+
reason: cwResult.message || 'CloudWatch metrics could not be collected.',
|
|
439
|
+
requiredPermissions: ['cloudwatch:GetMetricData'],
|
|
440
|
+
});
|
|
441
|
+
diagnostics.push(diag('DYNAMODB_SECTION_COLLECTION_FAILED', 'warning', true, 'cloudWatchMetrics', 'CloudWatch metrics could not be collected.', { tableName }));
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
let observation = params.statement.previousObservation;
|
|
445
|
+
const workload = params.statement.workload;
|
|
446
|
+
if (mode === 'executeOnce' || mode === 'executeComplete') {
|
|
447
|
+
if (((_k = params.observation) === null || _k === void 0 ? void 0 : _k.allowExecution) !== true) {
|
|
448
|
+
return {
|
|
449
|
+
ok: false,
|
|
450
|
+
message: `observation.mode is ${mode} but observation.allowExecution was not explicitly true. A measured read requires explicit, host-confirmed authorization.`,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
if (!(options === null || options === void 0 ? void 0 : options.execution)) {
|
|
454
|
+
return {
|
|
455
|
+
ok: false,
|
|
456
|
+
message: `observation.mode is ${mode} but no execution options were supplied.`,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
if (!observationEligibility.allowed) {
|
|
460
|
+
return {
|
|
461
|
+
ok: false,
|
|
462
|
+
message: (_l = observationEligibility.reason) !== null && _l !== void 0 ? _l : 'This statement is not eligible for Run Observed Read.',
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
const maxEvaluatedItems = mode === 'executeComplete'
|
|
466
|
+
? clamp((_m = params.observation) === null || _m === void 0 ? void 0 : _m.maxEvaluatedItems, 1000, 1, 1000)
|
|
467
|
+
: clamp((_o = params.observation) === null || _o === void 0 ? void 0 : _o.maxEvaluatedItems, DEFAULT_MAX_EVALUATED_ITEMS, 1, DEFAULT_MAX_EVALUATED_ITEMS);
|
|
468
|
+
const maxPages = clamp((_p = params.observation) === null || _p === void 0 ? void 0 : _p.maxPages, 10, 1, 10);
|
|
469
|
+
if (mode === 'executeComplete' &&
|
|
470
|
+
((options.execution.kind === 'partiql' &&
|
|
471
|
+
!this.driver.observePartiqlReadComplete) ||
|
|
472
|
+
(options.execution.kind === 'query' &&
|
|
473
|
+
!this.driver.observeNativeQueryReadComplete))) {
|
|
474
|
+
return {
|
|
475
|
+
ok: false,
|
|
476
|
+
message: 'Complete-result Benchmark is not supported by this DynamoDB driver.',
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
try {
|
|
480
|
+
const observed = mode === 'executeComplete'
|
|
481
|
+
? options.execution.kind === 'partiql'
|
|
482
|
+
? yield this.driver.observePartiqlReadComplete({
|
|
483
|
+
statement: statementText,
|
|
484
|
+
parameters: options.execution.parameters,
|
|
485
|
+
maxPages,
|
|
486
|
+
timeoutMs: (_q = params.observation) === null || _q === void 0 ? void 0 : _q.timeoutMs,
|
|
487
|
+
signal: options.signal,
|
|
488
|
+
})
|
|
489
|
+
: yield this.driver.observeNativeQueryReadComplete({
|
|
490
|
+
input: options.execution.input,
|
|
491
|
+
maxEvaluatedItems,
|
|
492
|
+
maxPages,
|
|
493
|
+
timeoutMs: (_r = params.observation) === null || _r === void 0 ? void 0 : _r.timeoutMs,
|
|
494
|
+
signal: options.signal,
|
|
495
|
+
})
|
|
496
|
+
: options.execution.kind === 'partiql'
|
|
497
|
+
? yield this.driver.observePartiqlRead({
|
|
498
|
+
statement: statementText,
|
|
499
|
+
parameters: options.execution.parameters,
|
|
500
|
+
maxEvaluatedItems,
|
|
501
|
+
timeoutMs: (_s = params.observation) === null || _s === void 0 ? void 0 : _s.timeoutMs,
|
|
502
|
+
signal: options.signal,
|
|
503
|
+
})
|
|
504
|
+
: yield this.driver.observeNativeQueryRead({
|
|
505
|
+
input: options.execution.input,
|
|
506
|
+
maxEvaluatedItems,
|
|
507
|
+
timeoutMs: (_t = params.observation) === null || _t === void 0 ? void 0 : _t.timeoutMs,
|
|
508
|
+
signal: options.signal,
|
|
509
|
+
});
|
|
510
|
+
observation = buildObservation(observed, mode, request.kind);
|
|
511
|
+
if (observed.hasMorePages) {
|
|
512
|
+
diagnostics.push(diag('DYNAMODB_OBSERVATION_BOUNDED', 'info', false, 'observation', mode === 'executeComplete'
|
|
513
|
+
? `Complete-result Benchmark reached its safety limit (${maxPages} pages / ${maxEvaluatedItems} evaluated items).`
|
|
514
|
+
: `Run Observed Read stopped after one response / ${maxEvaluatedItems} evaluated items.`, {
|
|
515
|
+
tableName,
|
|
516
|
+
indexName,
|
|
517
|
+
}));
|
|
518
|
+
}
|
|
519
|
+
if (observed.scannedItemCount !== undefined &&
|
|
520
|
+
observed.scannedItemCount >= HIGH_SCANNED_TO_RETURNED_MIN_SCANNED &&
|
|
521
|
+
observed.scannedItemCount > 0 &&
|
|
522
|
+
observed.returnedItemCount / observed.scannedItemCount <
|
|
523
|
+
HIGH_SCANNED_TO_RETURNED_MAX_PASS_RATE) {
|
|
524
|
+
diagnostics.push(diag('DYNAMODB_HIGH_SCANNED_TO_RETURNED', 'warning', false, 'observation', 'A large fraction of evaluated items were filtered out after being read.', {
|
|
525
|
+
tableName,
|
|
526
|
+
indexName,
|
|
527
|
+
}));
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
catch (e) {
|
|
531
|
+
return {
|
|
532
|
+
ok: false,
|
|
533
|
+
message: describeError(e, 'Run Observed Read failed.'),
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
let context = {
|
|
538
|
+
formatVersion: 1,
|
|
539
|
+
engine: 'dynamodb',
|
|
540
|
+
service: {
|
|
541
|
+
provider: 'AWS',
|
|
542
|
+
service: 'DynamoDB',
|
|
543
|
+
region: this.driver.region,
|
|
544
|
+
endpointKind: this.driver.endpointKind,
|
|
545
|
+
tableName,
|
|
546
|
+
indexName,
|
|
547
|
+
},
|
|
548
|
+
statement: {
|
|
549
|
+
language: request.kind === 'partiql' ? 'partiql' : 'dynamodb-query',
|
|
550
|
+
text: statementText,
|
|
551
|
+
source: params.statement.source,
|
|
552
|
+
kind: request.kind === 'partiql' ? 'select' : 'query',
|
|
553
|
+
observationEligibility,
|
|
554
|
+
},
|
|
555
|
+
accessPattern,
|
|
556
|
+
table: limitIndexes(table, indexName, limits.maxIndexes, diagnostics),
|
|
557
|
+
workload,
|
|
558
|
+
observation,
|
|
559
|
+
cloudWatch,
|
|
560
|
+
collection: {
|
|
561
|
+
collectedAt: new Date().toISOString(),
|
|
562
|
+
status: unavailableSections.length > 0 ||
|
|
563
|
+
diagnostics.some((d) => d.affectsCompleteness)
|
|
564
|
+
? 'partial'
|
|
565
|
+
: 'complete',
|
|
566
|
+
diagnostics,
|
|
567
|
+
unavailableSections,
|
|
568
|
+
},
|
|
569
|
+
};
|
|
570
|
+
const limited = applyPayloadLimit(context, limits.maxPayloadBytes);
|
|
571
|
+
if (!limited.ok) {
|
|
572
|
+
return {
|
|
573
|
+
ok: false,
|
|
574
|
+
message: 'The collected context exceeds the configured payload limit even after truncation.',
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
context = limited.context;
|
|
578
|
+
return { ok: true, message: '', result: context };
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
exports.DynamoDbPerformanceTuningProvider = DynamoDbPerformanceTuningProvider;
|
|
583
|
+
function clamp(value, fallback, min, max) {
|
|
584
|
+
const n = Number(value);
|
|
585
|
+
if (!Number.isFinite(n))
|
|
586
|
+
return fallback;
|
|
587
|
+
return Math.min(max, Math.max(min, Math.floor(n)));
|
|
588
|
+
}
|
|
589
|
+
function describeError(e, fallback) {
|
|
590
|
+
const name = e instanceof Error ? e.name : undefined;
|
|
591
|
+
if (name === 'AccessDeniedException')
|
|
592
|
+
return `${fallback} (access denied)`;
|
|
593
|
+
if (name === 'ResourceNotFoundException')
|
|
594
|
+
return `${fallback} (resource not found)`;
|
|
595
|
+
return fallback;
|
|
596
|
+
}
|
|
597
|
+
function containsUnresolvedBindMarker(sql) {
|
|
598
|
+
let inSingle = false;
|
|
599
|
+
let inDouble = false;
|
|
600
|
+
for (let i = 0; i < sql.length; i++) {
|
|
601
|
+
const ch = sql[i];
|
|
602
|
+
if (inSingle) {
|
|
603
|
+
if (ch === "'" && sql[i + 1] === "'")
|
|
604
|
+
i++;
|
|
605
|
+
else if (ch === "'")
|
|
606
|
+
inSingle = false;
|
|
607
|
+
continue;
|
|
608
|
+
}
|
|
609
|
+
if (inDouble) {
|
|
610
|
+
if (ch === '"' && sql[i + 1] === '"')
|
|
611
|
+
i++;
|
|
612
|
+
else if (ch === '"')
|
|
613
|
+
inDouble = false;
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
if (ch === "'") {
|
|
617
|
+
inSingle = true;
|
|
618
|
+
continue;
|
|
619
|
+
}
|
|
620
|
+
if (ch === '"') {
|
|
621
|
+
inDouble = true;
|
|
622
|
+
continue;
|
|
623
|
+
}
|
|
624
|
+
if (ch === '?')
|
|
625
|
+
return true;
|
|
626
|
+
}
|
|
627
|
+
return false;
|
|
628
|
+
}
|
|
629
|
+
function buildObservation(observed, mode, requestKind) {
|
|
630
|
+
const filterPassRate = observed.scannedItemCount !== undefined && observed.scannedItemCount > 0
|
|
631
|
+
? observed.returnedItemCount / observed.scannedItemCount
|
|
632
|
+
: undefined;
|
|
633
|
+
const bounded = observed.hasMorePages;
|
|
634
|
+
return {
|
|
635
|
+
source: 'observedRead',
|
|
636
|
+
observedAt: new Date().toISOString(),
|
|
637
|
+
clientElapsedTimeMs: observed.clientElapsedTimeMs,
|
|
638
|
+
requestCount: observed.requestCount,
|
|
639
|
+
retryCount: observed.retryCount,
|
|
640
|
+
returnedItemCount: observed.returnedItemCount,
|
|
641
|
+
evaluatedItemCount: requestKind === 'partiql' ? undefined : observed.scannedItemCount,
|
|
642
|
+
filterPassRate: requestKind === 'partiql' ? undefined : filterPassRate,
|
|
643
|
+
consumedCapacity: observed.capacityBreakdown,
|
|
644
|
+
hasMorePages: observed.hasMorePages,
|
|
645
|
+
bounded,
|
|
646
|
+
completeness: bounded ? 'bounded' : 'complete',
|
|
647
|
+
boundDescription: bounded
|
|
648
|
+
? mode === 'executeComplete'
|
|
649
|
+
? 'Complete-result Benchmark reached its safety limit; a continuation key remains.'
|
|
650
|
+
: `Limited to ${mode === 'executeOnce'
|
|
651
|
+
? 'a single API response'
|
|
652
|
+
: 'the source evidence'} by Run Observed Read; a continuation key remains.`
|
|
653
|
+
: undefined,
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
function applyThrottleDiagnostics(cloudWatch, diagnostics, tableName) {
|
|
657
|
+
const hasActivity = (metricName) => cloudWatch.series.find((s) => s.metricName === metricName && !s.noData && s.values.some((v) => v > 0));
|
|
658
|
+
const checks = [
|
|
659
|
+
['ReadThrottleEvents', 'DYNAMODB_READ_THROTTLING_OBSERVED'],
|
|
660
|
+
[
|
|
661
|
+
'ReadKeyRangeThroughputThrottleEvents',
|
|
662
|
+
'DYNAMODB_KEY_RANGE_THROTTLING_OBSERVED',
|
|
663
|
+
],
|
|
664
|
+
[
|
|
665
|
+
'ReadProvisionedThroughputThrottleEvents',
|
|
666
|
+
'DYNAMODB_PROVISIONED_THROTTLING_OBSERVED',
|
|
667
|
+
],
|
|
668
|
+
[
|
|
669
|
+
'ReadMaxOnDemandThroughputThrottleEvents',
|
|
670
|
+
'DYNAMODB_ON_DEMAND_LIMIT_THROTTLING_OBSERVED',
|
|
671
|
+
],
|
|
672
|
+
[
|
|
673
|
+
'ReadAccountLimitThrottleEvents',
|
|
674
|
+
'DYNAMODB_ACCOUNT_LIMIT_THROTTLING_OBSERVED',
|
|
675
|
+
],
|
|
676
|
+
];
|
|
677
|
+
for (const [metricName, code] of checks) {
|
|
678
|
+
const series = hasActivity(metricName);
|
|
679
|
+
if (series) {
|
|
680
|
+
diagnostics.push(diag(code, 'warning', false, 'cloudWatchMetrics', `${metricName} was observed in the collection window.`, { tableName, metricName }));
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
function limitIndexes(table, targetIndexName, maxIndexes, diagnostics) {
|
|
685
|
+
const total = table.localSecondaryIndexes.length + table.globalSecondaryIndexes.length;
|
|
686
|
+
if (total <= maxIndexes)
|
|
687
|
+
return table;
|
|
688
|
+
diagnostics.push(diag('DYNAMODB_COLLECTION_TRUNCATED', 'warning', true, 'tableDefinition', `Index list truncated to ${maxIndexes} entries.`, { tableName: table.tableName }));
|
|
689
|
+
const target = [];
|
|
690
|
+
const restLsi = [];
|
|
691
|
+
const restGsi = [];
|
|
692
|
+
for (const index of table.localSecondaryIndexes) {
|
|
693
|
+
(index.indexName === targetIndexName ? target : restLsi).push({
|
|
694
|
+
index,
|
|
695
|
+
kind: 'LSI',
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
for (const index of table.globalSecondaryIndexes) {
|
|
699
|
+
(index.indexName === targetIndexName ? target : restGsi).push({
|
|
700
|
+
index,
|
|
701
|
+
kind: 'GSI',
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
const kept = [...target, ...restGsi, ...restLsi].slice(0, Math.max(0, maxIndexes));
|
|
705
|
+
return Object.assign(Object.assign({}, table), { localSecondaryIndexes: kept
|
|
706
|
+
.filter((e) => e.kind === 'LSI')
|
|
707
|
+
.map((e) => e.index), globalSecondaryIndexes: kept
|
|
708
|
+
.filter((e) => e.kind === 'GSI')
|
|
709
|
+
.map((e) => e.index) });
|
|
710
|
+
}
|
|
711
|
+
function byteSize(value) {
|
|
712
|
+
var _a;
|
|
713
|
+
return Buffer.byteLength((_a = JSON.stringify(value)) !== null && _a !== void 0 ? _a : '', 'utf8');
|
|
714
|
+
}
|
|
715
|
+
function applyPayloadLimit(context, maxPayloadBytes) {
|
|
716
|
+
if (byteSize(context) <= maxPayloadBytes)
|
|
717
|
+
return { context, ok: true };
|
|
718
|
+
let next = context;
|
|
719
|
+
const truncatedDiag = diag('DYNAMODB_COLLECTION_TRUNCATED', 'warning', true, 'collection', 'The context was reduced to fit the payload limit.');
|
|
720
|
+
if (next.cloudWatch) {
|
|
721
|
+
next = Object.assign(Object.assign({}, next), { cloudWatch: Object.assign(Object.assign({}, next.cloudWatch), { series: next.cloudWatch.series.map((s) => (Object.assign(Object.assign({}, s), { timestamps: s.timestamps.slice(-60), values: s.values.slice(-60) }))) }) });
|
|
722
|
+
}
|
|
723
|
+
if (byteSize(next) <= maxPayloadBytes) {
|
|
724
|
+
return { context: withDiagnostic(next, truncatedDiag), ok: true };
|
|
725
|
+
}
|
|
726
|
+
const targetIndexName = next.service.indexName;
|
|
727
|
+
const stripSize = (i) => i.indexName === targetIndexName
|
|
728
|
+
? i
|
|
729
|
+
: Object.assign(Object.assign({}, i), { itemCount: undefined, indexSizeBytes: undefined });
|
|
730
|
+
next = Object.assign(Object.assign({}, next), { table: Object.assign(Object.assign({}, next.table), { localSecondaryIndexes: next.table.localSecondaryIndexes.map(stripSize), globalSecondaryIndexes: next.table.globalSecondaryIndexes.map(stripSize) }) });
|
|
731
|
+
if (byteSize(next) <= maxPayloadBytes) {
|
|
732
|
+
return { context: withDiagnostic(next, truncatedDiag), ok: true };
|
|
733
|
+
}
|
|
734
|
+
if (next.cloudWatch) {
|
|
735
|
+
const priority = (s) => s.scope === 'operation' ? 0 : s.scope === 'table' ? 1 : 2;
|
|
736
|
+
const ordered = [...next.cloudWatch.series].sort((a, b) => priority(b) - priority(a));
|
|
737
|
+
while (ordered.length > 0 &&
|
|
738
|
+
byteSize(Object.assign(Object.assign({}, next), { cloudWatch: Object.assign(Object.assign({}, next.cloudWatch), { series: ordered }) })) > maxPayloadBytes) {
|
|
739
|
+
ordered.shift();
|
|
740
|
+
}
|
|
741
|
+
next = Object.assign(Object.assign({}, next), { cloudWatch: Object.assign(Object.assign({}, next.cloudWatch), { series: ordered }) });
|
|
742
|
+
}
|
|
743
|
+
if (byteSize(next) <= maxPayloadBytes) {
|
|
744
|
+
return { context: withDiagnostic(next, truncatedDiag), ok: true };
|
|
745
|
+
}
|
|
746
|
+
return { context: next, ok: false };
|
|
747
|
+
}
|
|
748
|
+
function withDiagnostic(context, d) {
|
|
749
|
+
return Object.assign(Object.assign({}, context), { collection: Object.assign(Object.assign({}, context.collection), { status: 'partial', diagnostics: [...context.collection.diagnostics, d] }) });
|
|
750
|
+
}
|
|
751
|
+
//# sourceMappingURL=DynamoDbPerformanceTuningProvider.js.map
|