diff --git a/build/template_kql/common/calculate_score.kql b/build/template_kql/common/calculate_score.kql index bd93542..0398567 100644 --- a/build/template_kql/common/calculate_score.kql +++ b/build/template_kql/common/calculate_score.kql @@ -13,12 +13,14 @@ extend ReliabilityScore = case( Type == 'microsoft.containerservice/managedclusters', (AvZoneCount + AvSetCount + Gt1CapacityCount + PremorUltOSDiskCount) * 100 / (3 * ResourceTotal), // SQLDB - 4 checks // score = ("status" + "tier" + "storage acct. type" + "AZ")* 100 / (5 * ResourceTotal) //********* Future - "read replica count" Type == 'microsoft.sql/servers/databases', (DBOnlineStateCount + SqlPremiumOrBusinessCriticalOrDwh + DBGeoStorage + AvZoneCount + NAAvZoneCount) * 100 / (4 * ResourceTotal), - // CosmosDB - 4 checks // score = ( "readreplicacount" + "AZ" + "multiWrite" + "AutoFailover") * 100 / (4 * ResourceTotal) // included NA items to show compliance - Type == 'microsoft.documentdb/databaseaccounts', (Gt0DbReplica + AvZoneCount + NAAvZoneCount + EnabledDbMultiWrite + NADbMultiWrite + ConfiguredAutomaticFailover + NAAutomaticFailover) * 100 / (4 * ResourceTotal), + // CosmosDB - 4 checks // score = ("status" + "readreplicacount" + "AZ" + "multiWrite" + "AutoFailover") * 100 / (5 * ResourceTotal) // included NA items to show compliance + Type == 'microsoft.documentdb/databaseaccounts', (DBOnlineStateCount + Gt0DbReplica + AvZoneCount + NAAvZoneCount + EnabledDbMultiWrite + NADbMultiWrite + ConfiguredAutomaticFailover + NAAutomaticFailover) * 100 / (5 * ResourceTotal), // MySQL - 5 checks // score = ("status" + "sku" + "grsbackup" + "storageautogrow" + "replication") * 100 / (5 * ResourceTotal) //********* Future - "Sku family Gen5", read replica Type == 'microsoft.dbformysql/servers', (DBOnlineStateCount + OtherSku + HealthyBackupCount + EnabledStorageAutogrow + ReplicationEnabled) * 100 / (5 * ResourceTotal), // MySQL Flexible - 4 checks // score = ("status" + "sku" + "replication" + "HaEnabled") * 100 / (4 * ResourceTotal) // included NA items to show compliance //********* Future - "read replica", "automatic failover", "backup" Type == 'microsoft.dbformysql/flexibleservers', (DBOnlineStateCount + OtherSku + ReplicationEnabled + NAReplicationEnabled + AvZoneCount + NAAvZoneCount) * 100 / (4 * ResourceTotal), + // PostgreSQL Flexible - 5 Checks // score = ("status" + "sku" + "AZ" + "HA" + "Geo Backup") + Type == 'microsoft.dbforpostgresql/flexibleservers', (DBOnlineStateCount + OtherSku + (AvZoneCount + NAAvZoneCount) + (ConfiguredAutomaticFailover + NAAutomaticFailover) + (NABackupCount + EnabledBackupCount)) * 100 / (5 * ResourceTotal), // Redis - 4 checks // score = (state + sku + AZ + capacity) * 100 / (4 * ResourceTotal) Type == 'microsoft.cache/redis', (SucceededStateCount + OtherSku + AvZoneCount + NAAvZoneCount + RedisDedicatedCapacityCount) * 100 / (4 * ResourceTotal), // APIM - 5 checks // score = ("Tier" + state + "capacity" + AZ + stv2platform) * 100 / (5 * ResourceTotal) @@ -41,4 +43,4 @@ extend ReliabilityScore = case( Type == 'microsoft.network/virtualnetworkgateways', (AzVnetGwSkuCount + SucceededStateCount + Gt1CapacityCount + NACapacityCount + RouteVnetGwVpnTypeCount + Gen2VnetGwCount + NAGen2VnetGwCount + ActiveActiveVnetGwCount + NAActiveActiveVnetGwCount) * 100 / (6 * ResourceTotal), // ASR - 1 check // score = status * 100 / (1 * ResourceTotal) Type == 'microsoft.recoveryservices/vaults', (AsrSucceededState) * 100 / (1 * ResourceTotal), - 0) \ No newline at end of file + 0) diff --git a/build/template_kql/common/extend_resource.kql b/build/template_kql/common/extend_resource.kql index 86fb8aa..652dcfa 100644 --- a/build/template_kql/common/extend_resource.kql +++ b/build/template_kql/common/extend_resource.kql @@ -162,7 +162,7 @@ on id (type == 'microsoft.dbforpostgresql/servers'), "Not Applicable", (type == 'microsoft.dbforpostgresql/flexibleservers'),case( properties.highAvailability.mode == "ZoneRedundant", "Configured", - properties.replicationRole == "Replica", "Not Applicable", + properties.replicationRole contains "Replica", "Not Applicable", 'Not Configured' ), (type == 'microsoft.cache/redis'), coalesce(tostring(array_length(parse_json(zones))), 'Not Configured'), diff --git a/build/template_kql/common/summarize_score.kql b/build/template_kql/common/summarize_score.kql index fdfe2d0..902b95e 100644 --- a/build/template_kql/common/summarize_score.kql +++ b/build/template_kql/common/summarize_score.kql @@ -1,13 +1,13 @@ summarize ResourceTotal=count(Name), - OtherSku=dcountif(Name, ((SkuName !contains "shared") and (SkuName !contains "free") and (SkuName !contains "basic") and (SkuName !contains "develop") and (SkuName !contains "dynamic"))), + OtherSku=dcountif(Name, ((SkuName !contains "shared") and (SkuName !contains "free") and (SkuName !contains "basic") and (SkuName !contains "develop") and (SkuName !contains "dynamic") and (SkuName !contains "burstable"))), DevelopmentSkuCount=dcountif(Name, SkuName contains "develop"), SharedSkuCount=dcountif(Name, SkuName contains "shared"), FreeSkuCount=dcountif(Name, SkuName contains "free"), BasicSkuCount=dcountif(Name, SkuName contains "basic"), PremiumSkuCount=dcountif(Name, SkuName contains "premium"), EnterpriseSkuCount=dcountif(Name, SkuName contains "enterprise"), - SqlPremiumOrBusinessCriticalOrDwh=dcountif(Name, Type == 'microsoft.sql/servers/databases' and (SkuName contains "premium" or SkuName contains "businesscritical" or SkuName contains "datawarehouse")), + SqlPremiumOrBusinessCriticalOrDwh=dcountif(Name, Type == 'microsoft.sql/servers/databases' and (SkuName contains "premium" or SkuName contains "businesscritical" or SkuName contains "datawarehouse" or SkuName contains "generalpurpose")), VMDeallocatedStateCount=dcountif(Name, State contains "vm deallocated"), NoAvZoneCount=dcountif(Name, (AvailabilityZone contains "not configured")), NAAvZoneCount=dcountif(Name, (AvailabilityZone contains "not applicable") or (AvailabilityZone contains "az config")), @@ -30,11 +30,13 @@ summarize UnknownBackupCount=dcountif(Name, (Backup contains "Unknown")), HealthyBackupCount=dcountif(Name, (Backup == "healthy")), UnhealthyBackupCount=dcountif(Name, (Backup == "unhealthy")), + EnabledBackupCount=dcountif(Name, (Backup == "enabled")), + DisabledBackupCount=dcountif(Name, (Backup == "disabled")), RunningState=dcountif(Name, State contains "running" or State contains "ready"), DBOnlineStateCount=dcountif(Name, State contains "online" or State contains "ready"), // online - SQL, Ready - MySQL DBPausedStateCount=dcountif(Name, State contains "paused"), - DBGeoStorage=dcountif(Name, OSDisk == "grs"), - DBLrsStorage=dcountif(Name, OSDisk == "lrs"), + DBGeoStorage=dcountif(Name, OSDisk == "geo"), + DBLrsStorage=dcountif(Name, OSDisk != "geo"), Gt0DbReplica=dcountif(Name, (ReadReplica !contains "not applicable") and (ReadReplica !contains "1") and (ReadReplica !contains "undefined")), Lt1DbReplica=dcountif(Name, ReadReplica contains "0"), NotEnabledDbMultiWrite=dcountif(Name, MultipleWriteLocations contains "not enabled"),