diff --git a/samples/features/azure-arc/dashboard/Arc - Deployment Progress.json b/samples/features/azure-arc/dashboard/Arc - Deployment Progress.json
index b3df74aa80..df957d956f 100644
--- a/samples/features/azure-arc/dashboard/Arc - Deployment Progress.json
+++ b/samples/features/azure-arc/dashboard/Arc - Deployment Progress.json
@@ -1,10 +1,10 @@
{
"properties": {
- "lenses": {
- "0": {
+ "lenses": [
+ {
"order": 0,
- "parts": {
- "0": {
+ "parts": [
+ {
"position": {
"x": 0,
"y": 0,
@@ -25,7 +25,7 @@
}
}
},
- "1": {
+ {
"position": {
"x": 0,
"y": 2,
@@ -77,7 +77,7 @@
}
}
},
- "2": {
+ {
"position": {
"x": 3,
"y": 2,
@@ -129,7 +129,7 @@
}
}
},
- "3": {
+ {
"position": {
"x": 7,
"y": 2,
@@ -181,7 +181,7 @@
}
}
},
- "4": {
+ {
"position": {
"x": 11,
"y": 2,
@@ -233,7 +233,7 @@
}
}
},
- "5": {
+ {
"position": {
"x": 14,
"y": 2,
@@ -254,7 +254,7 @@
}
}
},
- "6": {
+ {
"position": {
"x": 0,
"y": 4,
@@ -294,7 +294,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - used to count Windows Servers\n//Can be used in other queries, pulls out the most important properties for Arc VMs and related SQL Server instances\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n| where osType == \"windows\"\n| summarize windowsCount = count()",
+ "value": "//Standard VM Query - used to count Windows Servers\n//Can be used in other queries, pulls out the most important properties for Arc VMs and related SQL Server instances\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n| where osType == \"windows\"\n| summarize windowsCount = count()",
"isOptional": true
}
],
@@ -302,11 +302,11 @@
"settings": {},
"partHeader": {
"title": "Windows Servers",
- "subtitle": "Count of Windws Servers registered to Arc"
+ "subtitle": "Count of Windows Servers registered to Arc"
}
}
},
- "7": {
+ {
"position": {
"x": 3,
"y": 4,
@@ -346,7 +346,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - used to count Windows Servers\n//Can be used in other queries, pulls out the most important properties for Arc VMs and related SQL Server instances\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n| where osType == \"windows\"\n| summarize windowsCoreCount = sum(coreCount)",
+ "value": "//Standard VM Query - used to count Windows Servers\n//Can be used in other queries, pulls out the most important properties for Arc VMs and related SQL Server instances\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n| where osType == \"windows\"\n| summarize windowsCoreCount = sum(coreCount)",
"isOptional": true
}
],
@@ -354,11 +354,11 @@
"settings": {},
"partHeader": {
"title": "Windows Servers Core Count",
- "subtitle": "Count of Windws Servers Cores registered to Arc"
+ "subtitle": "Count of Windows Servers Cores registered to Arc"
}
}
},
- "8": {
+ {
"position": {
"x": 7,
"y": 4,
@@ -406,11 +406,11 @@
"settings": {},
"partHeader": {
"title": "Provisioned Windows Server Servers",
- "subtitle": "Windows Server servers where Provisioning State = \"Succeded\""
+ "subtitle": "Windows Server servers where Provisioning State = \"Succeeded\""
}
}
},
- "9": {
+ {
"position": {
"x": 11,
"y": 4,
@@ -462,7 +462,7 @@
}
}
},
- "10": {
+ {
"position": {
"x": 0,
"y": 6,
@@ -514,7 +514,7 @@
}
}
},
- "11": {
+ {
"position": {
"x": 3,
"y": 6,
@@ -566,7 +566,7 @@
}
}
},
- "12": {
+ {
"position": {
"x": 7,
"y": 6,
@@ -618,7 +618,7 @@
}
}
},
- "13": {
+ {
"position": {
"x": 11,
"y": 6,
@@ -639,7 +639,7 @@
}
}
},
- "14": {
+ {
"position": {
"x": 0,
"y": 8,
@@ -691,7 +691,7 @@
}
}
},
- "15": {
+ {
"position": {
"x": 3,
"y": 8,
@@ -739,11 +739,11 @@
"settings": {},
"partHeader": {
"title": "Servers with SQL Server Ent/Std Edition",
- "subtitle": "Servers with at least one instance of Standard or Enterprisre Edition"
+ "subtitle": "Servers with at least one instance of Standard or Enterprise Edition"
}
}
},
- "16": {
+ {
"position": {
"x": 7,
"y": 8,
@@ -795,7 +795,7 @@
}
}
},
- "17": {
+ {
"position": {
"x": 11,
"y": 8,
@@ -816,7 +816,7 @@
}
}
},
- "18": {
+ {
"position": {
"x": 16,
"y": 8,
@@ -868,7 +868,7 @@
}
}
},
- "19": {
+ {
"position": {
"x": 0,
"y": 10,
@@ -908,19 +908,19 @@
},
{
"name": "query",
- "value": "resources\n| where type == 'microsoft.azurearcdata/sqlserverinstances'\n| extend provisioningState = tostring(properties.provisioningState)\n| extend status = tostring(properties.status)\n| where provisioningState == \"Succeeded\"\n| summarize succeedededProvisioningInstanceCount = count()",
+ "value": "resources\n| where type == 'microsoft.azurearcdata/sqlserverinstances'\n| extend provisioningState = tostring(properties.provisioningState)\n| extend status = tostring(properties.status)\n| where provisioningState == \"Succeeded\"\n| summarize succeededProvisioningInstanceCount = count()",
"isOptional": true
}
],
"type": "Extension/HubsExtension/PartType/ArgQuerySingleValueTile",
"settings": {},
"partHeader": {
- "title": "Provisioned SQL Server Instasnces",
+ "title": "Provisioned SQL Server Instances",
"subtitle": "Count of SQL Server instances provisioned"
}
}
},
- "20": {
+ {
"position": {
"x": 3,
"y": 10,
@@ -972,7 +972,7 @@
}
}
},
- "21": {
+ {
"position": {
"x": 7,
"y": 10,
@@ -984,7 +984,7 @@
"type": "Extension/HubsExtension/PartType/MarkdownPart",
"settings": {
"content": {
- "content": "
\nConnected and Provisioned Instances\nWindows & Linux VMs can host multiple SQL Server Instances and so the total number of SQL Server Instances can exceed the number of SQL Server servers (servers with SQL Server discovered). Some servers may have SQL Sewrver discovered but there are no SQL Server engine instances and only other SQL Server roles such as Analysis Services, Reporting Services, or Integration Services are installed. \nTotal Connected & Provisioned instances should ideally equal Total SQL Server instances\n
\n",
+ "content": "\nConnected and Provisioned Instances\nWindows & Linux VMs can host multiple SQL Server Instances and so the total number of SQL Server Instances can exceed the number of SQL Server servers (servers with SQL Server discovered). Some servers may have SQL Server discovered but there are no SQL Server engine instances and only other SQL Server roles such as Analysis Services, Reporting Services, or Integration Services are installed. \nTotal Connected & Provisioned instances should ideally equal Total SQL Server instances\n
\n",
"title": "",
"subtitle": "",
"markdownSource": 1,
@@ -993,7 +993,7 @@
}
}
},
- "22": {
+ {
"position": {
"x": 0,
"y": 12,
@@ -1046,7 +1046,7 @@
}
}
},
- "23": {
+ {
"position": {
"x": 13,
"y": 12,
@@ -1099,7 +1099,7 @@
}
}
},
- "24": {
+ {
"position": {
"x": 0,
"y": 18,
@@ -1152,7 +1152,7 @@
}
}
},
- "25": {
+ {
"position": {
"x": 0,
"y": 24,
@@ -1205,7 +1205,7 @@
}
}
},
- "26": {
+ {
"position": {
"x": 0,
"y": 31,
@@ -1258,7 +1258,7 @@
}
}
},
- "27": {
+ {
"position": {
"x": 9,
"y": 31,
@@ -1310,7 +1310,7 @@
}
}
},
- "28": {
+ {
"position": {
"x": 0,
"y": 38,
@@ -1359,11 +1359,11 @@
"settings": {},
"partHeader": {
"title": "SQL Server Instances by Version",
- "subtitle": "SQL Server instasnces enabled by Azure Arc by SQL Server version"
+ "subtitle": "SQL Server instances enabled by Azure Arc by SQL Server version"
}
}
},
- "29": {
+ {
"position": {
"x": 9,
"y": 38,
@@ -1416,7 +1416,7 @@
}
}
},
- "30": {
+ {
"position": {
"x": 0,
"y": 45,
@@ -1468,7 +1468,7 @@
}
}
},
- "31": {
+ {
"position": {
"x": 0,
"y": 51,
@@ -1520,7 +1520,7 @@
}
}
},
- "32": {
+ {
"position": {
"x": 0,
"y": 56,
@@ -1572,7 +1572,7 @@
}
}
},
- "33": {
+ {
"position": {
"x": 0,
"y": 61,
@@ -1612,7 +1612,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - VM alone\r\n//Can be used in other queries, pulls out the most important properties for Arc VMs\r\n//Main Table - All Arc Virtual Machines\r\nresources\r\n//Arc registered VMs (Windows & linux)\r\n| where type == \"microsoft.hybridcompute/machines\"\r\n//Boolean - SQL installed (true/false)\r\n| extend mssqlDiscovered = properties.mssqlDiscovered\r\n//Machine Characteristics\r\n| extend coreCount = toint(properties.detectedProperties.coreCount)\r\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\r\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\r\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\r\n//Machine ID & Name\r\n| extend machineId = tolower(tostring(id))\r\n| extend machineName = name\r\n//Operating System\r\n| extend osSku = tostring(properties.osSku)\r\n| extend osName = tostring(properties.osName)\r\n| extend osVersion = tostring(properties.osVersion)\r\n//Windows or Linux\r\n| extend osType = tostring(properties.osType)\r\n//OS Edition (Datacenter or Standard) \r\n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\r\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\r\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\r\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\r\n//Type of ESU assigned (Standard/Data center)\r\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\r\n//\r\n//Include below if Subscription Name needed\r\n| join kind=inner (\r\n resourcecontainers\r\n | where type == 'microsoft.resources/subscriptions'\r\n | project subscriptionId, subscriptionName = name)\r\n on subscriptionId\r\n//Agent Status\r\n| join kind=leftouter (\r\n\t//Provisioned Servers\r\n\t//It is possible for a Server to be known to Arc but not fully provisioned - this query checks that state\r\n\tresources\r\n\t//Machine extensions resource type\r\n\t| where type == \"microsoft.hybridcompute/machines/extensions\"\r\n\t//Search for Approriate Agent\r\n\t| where properties.['type'] in (\"AzureMonitorWindowsAgent\", \"AzureMonitorLinuxAgent\")\r\n\t//extract Machine name from ID\r\n\t| extend machineIdHasAgentExtensionInstalled = tolower(iff(id contains \"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/extensions/AzureMonitorWindowsAgent\" or id contains \"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/extensions/AzureMonitorLinuxAgent\", substring(id, 0, indexof(id, \"/extensions/\")), \"\"))\r\n\t| extend provisioningState = properties.provisioningState\r\n\t| extend status = properties.instanceView.status.message\r\n\t)\r\non $left.machineId == $right.machineIdHasAgentExtensionInstalled",
+ "value": "//Standard VM Query - VM alone\r\n//Can be used in other queries, pulls out the most important properties for Arc VMs\r\n//Main Table - All Arc Virtual Machines\r\nresources\r\n//Arc registered VMs (Windows & linux)\r\n| where type == \"microsoft.hybridcompute/machines\"\r\n//Boolean - SQL installed (true/false)\r\n| extend mssqlDiscovered = properties.mssqlDiscovered\r\n//Machine Characteristics\r\n| extend coreCount = toint(properties.detectedProperties.coreCount)\r\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\r\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\r\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\r\n//Machine ID & Name\r\n| extend machineId = tolower(tostring(id))\r\n| extend machineName = name\r\n//Operating System\r\n| extend osSku = tostring(properties.osSku)\r\n| extend osName = tostring(properties.osName)\r\n| extend osVersion = tostring(properties.osVersion)\r\n//Windows or Linux\r\n| extend osType = tostring(properties.osType)\r\n//OS Edition (Datacenter or Standard) \r\n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\r\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\r\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\r\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\r\n//Type of ESU assigned (Standard/Data center)\r\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\r\n//\r\n//Include below if Subscription Name needed\r\n| join kind=inner (\r\n resourcecontainers\r\n | where type == 'microsoft.resources/subscriptions'\r\n | project subscriptionId, subscriptionName = name)\r\n on subscriptionId\r\n//Agent Status\r\n| join kind=leftouter (\r\n\t//Provisioned Servers\r\n\t//It is possible for a Server to be known to Arc but not fully provisioned - this query checks that state\r\n\tresources\r\n\t//Machine extensions resource type\r\n\t| where type == \"microsoft.hybridcompute/machines/extensions\"\r\n\t//Search for Appropriate Agent\r\n\t| where properties.['type'] in (\"AzureMonitorWindowsAgent\", \"AzureMonitorLinuxAgent\")\r\n\t//extract Machine name from ID\r\n\t| extend machineIdHasAgentExtensionInstalled = tolower(iff(id contains \"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/extensions/AzureMonitorWindowsAgent\" or id contains \"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/extensions/AzureMonitorLinuxAgent\", substring(id, 0, indexof(id, \"/extensions/\")), \"\"))\r\n\t| extend provisioningState = properties.provisioningState\r\n\t| extend status = properties.instanceView.status.message\r\n\t)\r\non $left.machineId == $right.machineIdHasAgentExtensionInstalled",
"isOptional": true
}
],
@@ -1624,7 +1624,7 @@
}
}
},
- "34": {
+ {
"position": {
"x": 0,
"y": 67,
@@ -1664,7 +1664,7 @@
},
{
"name": "query",
- "value": "//All Servers and all SQL Server Instances\r\n//version 1 - Comprehensive query which returns all VMs and also all SQL instances on\r\n//those VMs if they exist.\r\n//used to diagnose missing Agents, License type etc\r\n//Complex Query which operates across 3 resource types\r\n//\r\n//Resource Types used\r\n//1) resources where type == \"microsoft.hybridcompute/machines\" - All VMs\r\n//2) resourcecontainers where type == 'microsoft.resources/subscriptions' - Owning subscription for VMs\r\n//3) resources where type == 'microsoft.azurearcdata/sqlserverinstances' - collection of SQL Server instances on VM if they exist (outer join used)\r\n//4) resources where type == \"microsoft.hybridcompute/machines/extensions\" and properties.type in (\"WindowsAgent.SqlServer\",\"LinuxAgent.SqlServer\") - Extension holding SQLServer Agent for Server if it exists (again, outer join used)\r\n//\r\n// 1) gives us the underlying VM\r\n// 2) gives us the owning subscription\r\n// 3) Selects all Instances\r\n// 4) gets the license status (paid etc) & ESU Status\r\n//\r\n// 1) VMs with SQL\r\nresources \r\n//Arc registered VMs (Windows & linux)\r\n| where type == \"microsoft.hybridcompute/machines\"\r\n| extend mssqlDiscovered = properties.mssqlDiscovered\r\n//Machine Characteristics\r\n| extend coreCount = toint(properties.detectedProperties.coreCount)\r\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\r\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\r\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\r\n//Machine ID & Name\r\n| extend machineId = tolower(tostring(id))\r\n| extend machineName = name\r\n//Operating System\r\n| extend osSku = tostring(properties.osSku)\r\n| extend osName = tostring(properties.osName)\r\n| extend osVersion = tostring(properties.osVersion)\r\n//Windows or Linux\r\n| extend osType = tostring(properties.osType)\r\n//OS Edition (Datacenter or Standard) \r\n| extend osEdition = iff(osType == \"linux\", \"N/A\",iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\"))\r\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\r\n| extend osESU = properties.licenseProfile.esuProfile.licenseAssignmentState\r\n| extend osEsuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\r\n//Type of ESU assigned (Standard/Data center)\r\n| extend osESUServerType = tostring(properties.licenseProfile.esuProfile.serverType)\r\n//\r\n// 2) Subscription Name\r\n| join kind=inner (\r\n resourcecontainers\r\n | where type == 'microsoft.resources/subscriptions'\r\n | project subscriptionId, subscriptionName = name)\r\n on subscriptionId\r\n//\r\n// 3) Does the VM host at least 1 instance of SQL Server Standard or Enterprise\r\n| join kind = leftouter (\r\n resources\r\n | where type == 'microsoft.azurearcdata/sqlserverinstances'\r\n //SQL Server Version & Edition\r\n | extend sqlVersion = tostring(properties.version)\r\n | extend sqlEdition = tostring(properties.edition)\r\n | extend sqlInstance = name\r\n | extend provisioningState = tostring(properties.provisioningState)\r\n | extend status = tostring(properties.status)\r\n | extend sqlID = ['id']\r\n //needed for join - container is \"owning\" VM hosting SQL\r\n | extend containerId = tolower(tostring (properties.containerResourceId))\r\n | where isnotempty(containerId)\r\n | extend sqlSku = sku\r\n | extend sqlLocation = location\r\n | extend sqlTags = ['tags']\r\n | extend sqlProperties = properties\r\n | project-away subscriptionId, resourceGroup, ['type'], tenantId, name, ['id'], kind, location, ['tags'], properties\r\n)\r\non $left.machineId == $right.containerId\r\n//\r\n//4) Join for SQL Server Agent to retrieve Server Level License Type\r\n| join kind=leftouter (\r\n resources\r\n //Machine extensions resource type\r\n | where type == \"microsoft.hybridcompute/machines/extensions\"\r\n //Machine has SQL Server extension\r\n | where properties.type in (\"WindowsAgent.SqlServer\",\"LinuxAgent.SqlServer\")\r\n | extend sqlAgentInstalled = \"Yes\"\r\n | extend licenseType = tostring(properties.settings.LicenseType)\r\n | extend agentName = name\r\n //extract Machine name from ID\r\n | extend machineIdHasSQLServerExtensionInstalled = tolower(iff(id contains \"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/extensions/WindowsAgent.SqlServer\" or id contains \"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/extensions/LinuxAgent.SqlServer\", substring(id, 0, indexof(id, \"/extensions/\")), \"\"))\r\n | extend sqlEnableExtendedSecurityUpdates = properties.settings.enableExtendedSecurityUpdates\r\n | extend sqlESU = iff(notnull(sqlEnableExtendedSecurityUpdates), iff(sqlEnableExtendedSecurityUpdates == true,\"enabled\",\"disabled\"), \"N/A\")\r\n | project-away name, resourceGroup, subscriptionId\r\n )\r\non $left.machineId == $right.machineIdHasSQLServerExtensionInstalled\r\n| join kind=leftouter (\r\n\t//Provisioned Servers\r\n\t//It is possible for a Server to be known to Arc but not fully provisioned - this query checks that state\r\n\tresources\r\n\t//Machine extensions resource type\r\n\t| where type == \"microsoft.hybridcompute/machines/extensions\"\r\n\t//Search for Approriate Agent\r\n\t| where properties.['type'] in (\"AzureMonitorWindowsAgent\", \"AzureMonitorLinuxAgent\")\r\n\t//extract Machine name from ID\r\n\t| extend machineIdHasAgentExtensionInstalled = tolower(iff(id contains \"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/extensions/AzureMonitorWindowsAgent\" or id contains \"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/extensions/AzureMonitorLinuxAgent\", substring(id, 0, indexof(id, \"/extensions/\")), \"\"))\r\n\t| extend provisioningState = properties.provisioningState\r\n\t| extend status = properties.instanceView.status.message\r\n\t)\r\non $left.machineId == $right.machineIdHasAgentExtensionInstalled",
+ "value": "//All Servers and all SQL Server Instances\r\n//version 1 - Comprehensive query which returns all VMs and also all SQL instances on\r\n//those VMs if they exist.\r\n//used to diagnose missing Agents, License type etc\r\n//Complex Query which operates across 3 resource types\r\n//\r\n//Resource Types used\r\n//1) resources where type == \"microsoft.hybridcompute/machines\" - All VMs\r\n//2) resourcecontainers where type == 'microsoft.resources/subscriptions' - Owning subscription for VMs\r\n//3) resources where type == 'microsoft.azurearcdata/sqlserverinstances' - collection of SQL Server instances on VM if they exist (outer join used)\r\n//4) resources where type == \"microsoft.hybridcompute/machines/extensions\" and properties.type in (\"WindowsAgent.SqlServer\",\"LinuxAgent.SqlServer\") - Extension holding SQLServer Agent for Server if it exists (again, outer join used)\r\n//\r\n// 1) gives us the underlying VM\r\n// 2) gives us the owning subscription\r\n// 3) Selects all Instances\r\n// 4) gets the license status (paid etc) & ESU Status\r\n//\r\n// 1) VMs with SQL\r\nresources \r\n//Arc registered VMs (Windows & linux)\r\n| where type == \"microsoft.hybridcompute/machines\"\r\n| extend mssqlDiscovered = properties.mssqlDiscovered\r\n//Machine Characteristics\r\n| extend coreCount = toint(properties.detectedProperties.coreCount)\r\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\r\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\r\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\r\n//Machine ID & Name\r\n| extend machineId = tolower(tostring(id))\r\n| extend machineName = name\r\n//Operating System\r\n| extend osSku = tostring(properties.osSku)\r\n| extend osName = tostring(properties.osName)\r\n| extend osVersion = tostring(properties.osVersion)\r\n//Windows or Linux\r\n| extend osType = tostring(properties.osType)\r\n//OS Edition (Datacenter or Standard) \r\n| extend osEdition = iff(osType == \"linux\", \"N/A\",iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\"))\r\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\r\n| extend osESU = properties.licenseProfile.esuProfile.licenseAssignmentState\r\n| extend osEsuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\r\n//Type of ESU assigned (Standard/Data center)\r\n| extend osESUServerType = tostring(properties.licenseProfile.esuProfile.serverType)\r\n//\r\n// 2) Subscription Name\r\n| join kind=inner (\r\n resourcecontainers\r\n | where type == 'microsoft.resources/subscriptions'\r\n | project subscriptionId, subscriptionName = name)\r\n on subscriptionId\r\n//\r\n// 3) Does the VM host at least 1 instance of SQL Server Standard or Enterprise\r\n| join kind = leftouter (\r\n resources\r\n | where type == 'microsoft.azurearcdata/sqlserverinstances'\r\n //SQL Server Version & Edition\r\n | extend sqlVersion = tostring(properties.version)\r\n | extend sqlEdition = tostring(properties.edition)\r\n | extend sqlInstance = name\r\n | extend provisioningState = tostring(properties.provisioningState)\r\n | extend status = tostring(properties.status)\r\n | extend sqlID = ['id']\r\n //needed for join - container is \"owning\" VM hosting SQL\r\n | extend containerId = tolower(tostring (properties.containerResourceId))\r\n | where isnotempty(containerId)\r\n | extend sqlSku = sku\r\n | extend sqlLocation = location\r\n | extend sqlTags = ['tags']\r\n | extend sqlProperties = properties\r\n | project-away subscriptionId, resourceGroup, ['type'], tenantId, name, ['id'], kind, location, ['tags'], properties\r\n)\r\non $left.machineId == $right.containerId\r\n//\r\n//4) Join for SQL Server Agent to retrieve Server Level License Type\r\n| join kind=leftouter (\r\n resources\r\n //Machine extensions resource type\r\n | where type == \"microsoft.hybridcompute/machines/extensions\"\r\n //Machine has SQL Server extension\r\n | where properties.type in (\"WindowsAgent.SqlServer\",\"LinuxAgent.SqlServer\")\r\n | extend sqlAgentInstalled = \"Yes\"\r\n | extend licenseType = tostring(properties.settings.LicenseType)\r\n | extend agentName = name\r\n //extract Machine name from ID\r\n | extend machineIdHasSQLServerExtensionInstalled = tolower(iff(id contains \"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/extensions/WindowsAgent.SqlServer\" or id contains \"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/extensions/LinuxAgent.SqlServer\", substring(id, 0, indexof(id, \"/extensions/\")), \"\"))\r\n | extend sqlEnableExtendedSecurityUpdates = properties.settings.enableExtendedSecurityUpdates\r\n | extend sqlESU = iff(notnull(sqlEnableExtendedSecurityUpdates), iff(sqlEnableExtendedSecurityUpdates == true,\"enabled\",\"disabled\"), \"N/A\")\r\n | project-away name, resourceGroup, subscriptionId\r\n )\r\non $left.machineId == $right.machineIdHasSQLServerExtensionInstalled\r\n| join kind=leftouter (\r\n\t//Provisioned Servers\r\n\t//It is possible for a Server to be known to Arc but not fully provisioned - this query checks that state\r\n\tresources\r\n\t//Machine extensions resource type\r\n\t| where type == \"microsoft.hybridcompute/machines/extensions\"\r\n\t//Search for Appropriate Agent\r\n\t| where properties.['type'] in (\"AzureMonitorWindowsAgent\", \"AzureMonitorLinuxAgent\")\r\n\t//extract Machine name from ID\r\n\t| extend machineIdHasAgentExtensionInstalled = tolower(iff(id contains \"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/extensions/AzureMonitorWindowsAgent\" or id contains \"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/extensions/AzureMonitorLinuxAgent\", substring(id, 0, indexof(id, \"/extensions/\")), \"\"))\r\n\t| extend provisioningState = properties.provisioningState\r\n\t| extend status = properties.instanceView.status.message\r\n\t)\r\non $left.machineId == $right.machineIdHasAgentExtensionInstalled",
"isOptional": true
}
],
@@ -1678,9 +1678,9 @@
}
}
}
- }
+ ]
}
- },
+ ],
"metadata": {
"model": {
"timeRange": {
diff --git a/samples/features/azure-arc/dashboard/Arc - ESU.json b/samples/features/azure-arc/dashboard/Arc - ESU.json
index b42ac4d951..5cfd0e324f 100644
--- a/samples/features/azure-arc/dashboard/Arc - ESU.json
+++ b/samples/features/azure-arc/dashboard/Arc - ESU.json
@@ -1,10 +1,10 @@
{
"properties": {
- "lenses": {
- "0": {
+ "lenses": [
+ {
"order": 0,
- "parts": {
- "0": {
+ "parts": [
+ {
"position": {
"x": 0,
"y": 0,
@@ -25,7 +25,7 @@
}
}
},
- "1": {
+ {
"position": {
"x": 0,
"y": 2,
@@ -46,7 +46,7 @@
}
}
},
- "2": {
+ {
"position": {
"x": 6,
"y": 2,
@@ -67,7 +67,7 @@
}
}
},
- "3": {
+ {
"position": {
"x": 12,
"y": 2,
@@ -88,7 +88,7 @@
}
}
},
- "4": {
+ {
"position": {
"x": 0,
"y": 3,
@@ -141,7 +141,7 @@
}
}
},
- "5": {
+ {
"position": {
"x": 6,
"y": 3,
@@ -194,7 +194,7 @@
}
}
},
- "6": {
+ {
"position": {
"x": 12,
"y": 3,
@@ -247,7 +247,7 @@
}
}
},
- "7": {
+ {
"position": {
"x": 0,
"y": 8,
@@ -288,19 +288,19 @@
},
{
"name": "query",
- "value": "//Windows 2012 Servers with no ESU license by Application\n//Applicaton breakdown requires tagging of resources\nResources\n| where type == \"microsoft.hybridcompute/machines\"\n| extend application = tostring(tags.Application)\n| extend osSku = tostring(properties.osSku)\n| extend esuLicense= tostring(properties.licenseProfile.esuProfile.licenseAssignmentState)\n//Change to Windows Server 2012 for live version\n| where osSku contains \"Windows Server 2012\"\n//Select Servers with no license\n| where esuLicense == \"NotAssigned\"\n| summarize ServerCount = count() by application",
+ "value": "//Windows 2012 Servers with no ESU license by Application\n//Application breakdown requires tagging of resources\nResources\n| where type == \"microsoft.hybridcompute/machines\"\n| extend application = tostring(tags.Application)\n| extend osSku = tostring(properties.osSku)\n| extend esuLicense= tostring(properties.licenseProfile.esuProfile.licenseAssignmentState)\n//Change to Windows Server 2012 for live version\n| where osSku contains \"Windows Server 2012\"\n//Select Servers with no license\n| where esuLicense == \"NotAssigned\"\n| summarize ServerCount = count() by application",
"isOptional": true
}
],
"type": "Extension/HubsExtension/PartType/ArgQueryChartTile",
"settings": {},
"partHeader": {
- "title": "Windows Server 2012 ESU not assigned by appllication",
+ "title": "Windows Server 2012 ESU not assigned by application",
"subtitle": "Windows Server 2012 servers with no ESU active by application"
}
}
},
- "8": {
+ {
"position": {
"x": 6,
"y": 8,
@@ -348,12 +348,12 @@
"type": "Extension/HubsExtension/PartType/ArgQueryChartTile",
"settings": {},
"partHeader": {
- "title": "SQL Server 2012 ESU not assigned by appllication",
+ "title": "SQL Server 2012 ESU not assigned by application",
"subtitle": "SQL Server 2012 servers with no ESU active by application"
}
}
},
- "9": {
+ {
"position": {
"x": 12,
"y": 8,
@@ -406,7 +406,7 @@
}
}
},
- "10": {
+ {
"position": {
"x": 0,
"y": 13,
@@ -458,7 +458,7 @@
}
}
},
- "11": {
+ {
"position": {
"x": 12,
"y": 13,
@@ -511,7 +511,7 @@
}
}
},
- "12": {
+ {
"position": {
"x": 0,
"y": 18,
@@ -564,7 +564,7 @@
}
}
},
- "13": {
+ {
"position": {
"x": 0,
"y": 24,
@@ -616,7 +616,7 @@
}
}
},
- "14": {
+ {
"position": {
"x": 12,
"y": 24,
@@ -669,7 +669,7 @@
}
}
},
- "15": {
+ {
"position": {
"x": 0,
"y": 29,
@@ -721,7 +721,7 @@
}
}
},
- "16": {
+ {
"position": {
"x": 12,
"y": 29,
@@ -774,9 +774,9 @@
}
}
}
- }
+ ]
}
- },
+ ],
"metadata": {
"model": {
"timeRange": {
diff --git a/samples/features/azure-arc/dashboard/Arc - Estate Profile.json b/samples/features/azure-arc/dashboard/Arc - Estate Profile.json
index b6df9548e0..4dc34a20f0 100644
--- a/samples/features/azure-arc/dashboard/Arc - Estate Profile.json
+++ b/samples/features/azure-arc/dashboard/Arc - Estate Profile.json
@@ -1,10 +1,10 @@
{
"properties": {
- "lenses": {
- "0": {
+ "lenses": [
+ {
"order": 0,
- "parts": {
- "0": {
+ "parts": [
+ {
"position": {
"x": 0,
"y": 0,
@@ -25,7 +25,7 @@
}
}
},
- "1": {
+ {
"position": {
"x": 0,
"y": 2,
@@ -77,7 +77,7 @@
}
}
},
- "2": {
+ {
"position": {
"x": 2,
"y": 2,
@@ -117,7 +117,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| summarize windowsServerCount = count()",
+ "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| summarize windowsServerCount = count()",
"isOptional": true
}
],
@@ -129,7 +129,7 @@
}
}
},
- "3": {
+ {
"position": {
"x": 4,
"y": 2,
@@ -169,7 +169,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| where osEdition == \"Datacenter\" \n| summarize windowsDCServerCount = count()",
+ "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| where osEdition == \"Datacenter\" \n| summarize windowsDCServerCount = count()",
"isOptional": true
}
],
@@ -181,7 +181,7 @@
}
}
},
- "4": {
+ {
"position": {
"x": 6,
"y": 2,
@@ -221,7 +221,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| where osEdition == \"Standard\" \n| summarize windowsStdServerCount = count()",
+ "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| where osEdition == \"Standard\" \n| summarize windowsStdServerCount = count()",
"isOptional": true
}
],
@@ -233,7 +233,7 @@
}
}
},
- "5": {
+ {
"position": {
"x": 8,
"y": 2,
@@ -273,7 +273,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n| where mssqlDiscovered == \"true\"\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| summarize SQLServerCount = count()",
+ "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n| where mssqlDiscovered == \"true\"\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| summarize SQLServerCount = count()",
"isOptional": true
}
],
@@ -285,7 +285,7 @@
}
}
},
- "6": {
+ {
"position": {
"x": 10,
"y": 2,
@@ -337,7 +337,7 @@
}
}
},
- "7": {
+ {
"position": {
"x": 12,
"y": 2,
@@ -389,7 +389,7 @@
}
}
},
- "8": {
+ {
"position": {
"x": 14,
"y": 2,
@@ -441,7 +441,7 @@
}
}
},
- "9": {
+ {
"position": {
"x": 16,
"y": 2,
@@ -481,7 +481,7 @@
},
{
"name": "query",
- "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processerNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| where osSku contains \"Windows Server 2012\" \n| summarize windowsServerCount = count()",
+ "value": "//Standard VM Query - VM alone\n//Can be used in other queries, pulls out the most important properties for Arc VMs\n//Main Table - All Arc Virtual Machines\nresources\n//Arc registered VMs (Windows & linux)\n| where type == \"microsoft.hybridcompute/machines\"\n//Boolean - SQL installed (true/false)\n| extend mssqlDiscovered = properties.mssqlDiscovered\n//Machine Characteristics\n| extend coreCount = toint(properties.detectedProperties.coreCount)\n| extend logicalCoreCount = toint(properties.detectedProperties.logicalcoreCount)\n| extend processorNames = tostring(properties.detectedProperties.processorNames)\n| extend totalPhysicalMemory = toint(properties.detectedProperties.totalPhysicalMemoryInGigabytes)\n//Machine ID & Name\n| extend machineId = tolower(tostring(id))\n| extend machineName = name\n//Operating System\n| extend osSku = tostring(properties.osSku)\n| extend osName = tostring(properties.osName)\n| extend osVersion = tostring(properties.osVersion)\n//Windows or Linux\n| extend osType = tostring(properties.osType)\n| where osType == \"windows\"\n//OS Edition (Datacenter or Standard) \n| extend osEdition = iff(properties.osSku contains \"Datacenter\", \"Datacenter\", \"Standard\")\n//ESU Assignment (esu eligibility - OS is ESU capable, License Assignment State - OS does/does not have ESU assigned\n| extend ESU = properties.licenseProfile.esuProfile.licenseAssignmentState\n| extend esuEligibility = tostring(properties.licenseProfile.esuProfile.esuEligibility)\n//Type of ESU assigned (Standard/Data center)\n| extend serverType = tostring(properties.licenseProfile.esuProfile.serverType)\n| where osSku contains \"Windows Server 2012\" \n| summarize windowsServerCount = count()",
"isOptional": true
}
],
@@ -493,7 +493,7 @@
}
}
},
- "10": {
+ {
"position": {
"x": 18,
"y": 2,
@@ -545,7 +545,7 @@
}
}
},
- "11": {
+ {
"position": {
"x": 21,
"y": 2,
@@ -597,7 +597,7 @@
}
}
},
- "12": {
+ {
"position": {
"x": 0,
"y": 5,
@@ -650,7 +650,7 @@
}
}
},
- "13": {
+ {
"position": {
"x": 0,
"y": 11,
@@ -698,12 +698,12 @@
"type": "Extension/HubsExtension/PartType/ArgQueryChartTile",
"settings": {},
"partHeader": {
- "title": "Linix Servers by OS",
+ "title": "Linux Servers by OS",
"subtitle": "Linux servers by OS Version"
}
}
},
- "14": {
+ {
"position": {
"x": 0,
"y": 17,
@@ -756,7 +756,7 @@
}
}
},
- "15": {
+ {
"position": {
"x": 9,
"y": 17,
@@ -811,7 +811,7 @@
}
}
},
- "16": {
+ {
"position": {
"x": 18,
"y": 17,
@@ -864,7 +864,7 @@
}
}
},
- "17": {
+ {
"position": {
"x": 0,
"y": 23,
@@ -916,7 +916,7 @@
}
}
},
- "18": {
+ {
"position": {
"x": 13,
"y": 23,
@@ -966,11 +966,11 @@
},
"partHeader": {
"title": "Distinct Windows OS SKUs",
- "subtitle": "Count of distinct Wndows OS SKUs deployed"
+ "subtitle": "Count of distinct Windows OS SKUs deployed"
}
}
},
- "19": {
+ {
"position": {
"x": 16,
"y": 23,
@@ -1022,7 +1022,7 @@
}
}
},
- "20": {
+ {
"position": {
"x": 13,
"y": 26,
@@ -1074,7 +1074,7 @@
}
}
},
- "21": {
+ {
"position": {
"x": 0,
"y": 29,
@@ -1127,7 +1127,7 @@
}
}
},
- "22": {
+ {
"position": {
"x": 0,
"y": 34,
@@ -1180,7 +1180,7 @@
}
}
},
- "23": {
+ {
"position": {
"x": 0,
"y": 39,
@@ -1201,7 +1201,7 @@
}
}
},
- "24": {
+ {
"position": {
"x": 0,
"y": 40,
@@ -1254,7 +1254,7 @@
}
}
},
- "25": {
+ {
"position": {
"x": 0,
"y": 46,
@@ -1307,7 +1307,7 @@
}
}
},
- "26": {
+ {
"position": {
"x": 0,
"y": 52,
@@ -1356,11 +1356,11 @@
"settings": {},
"partHeader": {
"title": "Server Distribution by Business Unit",
- "subtitle": "All Servers by Business Unir tag value"
+ "subtitle": "All Servers by Business Unit tag value"
}
}
},
- "27": {
+ {
"position": {
"x": 0,
"y": 59,
@@ -1413,7 +1413,7 @@
}
}
},
- "28": {
+ {
"position": {
"x": 13,
"y": 59,
@@ -1466,7 +1466,7 @@
}
}
},
- "29": {
+ {
"position": {
"x": 0,
"y": 65,
@@ -1519,7 +1519,7 @@
}
}
},
- "30": {
+ {
"position": {
"x": 0,
"y": 71,
@@ -1572,7 +1572,7 @@
}
}
},
- "31": {
+ {
"position": {
"x": 0,
"y": 77,
@@ -1620,14 +1620,14 @@
"type": "Extension/HubsExtension/PartType/ArgQueryChartTile",
"settings": {},
"partHeader": {
- "title": "SQL Server Distibution by Data Center",
+ "title": "SQL Server Distribution by Data Center",
"subtitle": "Count of SQL Servers discovered for each Data Center"
}
}
}
- }
+ ]
}
- },
+ ],
"metadata": {
"model": {
"timeRange": {
diff --git a/samples/features/azure-arc/dashboard/Arc - Server Deployment.json b/samples/features/azure-arc/dashboard/Arc - Server Deployment.json
index a6033ae83d..e88b014235 100644
--- a/samples/features/azure-arc/dashboard/Arc - Server Deployment.json
+++ b/samples/features/azure-arc/dashboard/Arc - Server Deployment.json
@@ -1,10 +1,10 @@
{
"properties": {
- "lenses": {
- "0": {
+ "lenses": [
+ {
"order": 0,
- "parts": {
- "0": {
+ "parts": [
+ {
"position": {
"x": 0,
"y": 0,
@@ -56,7 +56,7 @@
}
}
},
- "1": {
+ {
"position": {
"x": 3,
"y": 0,
@@ -108,7 +108,7 @@
}
}
},
- "2": {
+ {
"position": {
"x": 0,
"y": 4,
@@ -161,7 +161,7 @@
}
}
},
- "3": {
+ {
"position": {
"x": 3,
"y": 4,
@@ -213,7 +213,7 @@
}
}
},
- "4": {
+ {
"position": {
"x": 0,
"y": 8,
@@ -266,7 +266,7 @@
}
}
},
- "5": {
+ {
"position": {
"x": 3,
"y": 8,
@@ -318,7 +318,7 @@
}
}
},
- "6": {
+ {
"position": {
"x": 0,
"y": 12,
@@ -371,7 +371,7 @@
}
}
},
- "7": {
+ {
"position": {
"x": 3,
"y": 12,
@@ -424,7 +424,7 @@
}
}
},
- "8": {
+ {
"position": {
"x": 0,
"y": 16,
@@ -477,7 +477,7 @@
}
}
},
- "9": {
+ {
"position": {
"x": 10,
"y": 16,
@@ -531,7 +531,7 @@
}
}
},
- "10": {
+ {
"position": {
"x": 0,
"y": 20,
@@ -584,7 +584,7 @@
}
}
},
- "11": {
+ {
"position": {
"x": 10,
"y": 20,
@@ -638,7 +638,7 @@
}
}
},
- "12": {
+ {
"position": {
"x": 0,
"y": 24,
@@ -690,7 +690,7 @@
}
}
},
- "13": {
+ {
"position": {
"x": 0,
"y": 28,
@@ -744,7 +744,7 @@
}
}
},
- "14": {
+ {
"position": {
"x": 6,
"y": 28,
@@ -797,7 +797,7 @@
}
}
},
- "15": {
+ {
"position": {
"x": 12,
"y": 28,
@@ -851,7 +851,7 @@
}
}
},
- "16": {
+ {
"position": {
"x": 0,
"y": 33,
@@ -905,7 +905,7 @@
}
}
},
- "17": {
+ {
"position": {
"x": 6,
"y": 33,
@@ -959,7 +959,7 @@
}
}
},
- "18": {
+ {
"position": {
"x": 12,
"y": 33,
@@ -1012,7 +1012,7 @@
}
}
},
- "19": {
+ {
"position": {
"x": 0,
"y": 38,
@@ -1066,9 +1066,9 @@
}
}
}
- }
+ ]
}
- },
+ ],
"metadata": {
"model": {
"timeRange": {
diff --git a/samples/features/azure-arc/dashboard/SQL Server Instances.json b/samples/features/azure-arc/dashboard/SQL Server Instances.json
index 886cc07157..e20d25c506 100644
--- a/samples/features/azure-arc/dashboard/SQL Server Instances.json
+++ b/samples/features/azure-arc/dashboard/SQL Server Instances.json
@@ -1,10 +1,10 @@
{
"properties": {
- "lenses": {
- "0": {
+ "lenses": [
+ {
"order": 0,
- "parts": {
- "0": {
+ "parts": [
+ {
"position": {
"x": 0,
"y": 0,
@@ -56,7 +56,7 @@
}
}
},
- "1": {
+ {
"position": {
"x": 3,
"y": 0,
@@ -109,7 +109,7 @@
}
}
},
- "2": {
+ {
"position": {
"x": 9,
"y": 0,
@@ -161,7 +161,7 @@
}
}
},
- "3": {
+ {
"position": {
"x": 12,
"y": 0,
@@ -214,7 +214,7 @@
}
}
},
- "4": {
+ {
"position": {
"x": 0,
"y": 5,
@@ -254,7 +254,7 @@
},
{
"name": "query",
- "value": "resources\r\n| where type == \"microsoft.hybridcompute/machines\"\r\n| where properties.detectedProperties.mssqldiscovered == \"true\"\r\n| extend machineIdHasSQLServerDiscovered = id\r\n| project name, machineIdHasSQLServerDiscovered, resourceGroup, subscriptionId\r\n| join kind= leftouter (\r\n resources\r\n | where type == \"microsoft.hybridcompute/machines/extensions\"\r\n | where properties.type in (\"WindowsAgent.SqlServer\",\"LinuxAgent.SqlServer\")\r\n | extend machineIdHasSQLServerExtensionInstalled = iff(id contains \"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/extensions/WindowsAgent.SqlServer\" or id contains \"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/extensions/LinuxAgent.SqlServer\", substring(id, 0, indexof(id, \"/extensions/\")), \"\")\r\n | project Provisioning_State = properties.provisioningState,\r\n License_Type = properties.settings.LicenseType,\r\n ESU = iff(notnull(properties.settings.enableExtendedSecurityUpdates), \"enabled\", \"\"),\r\n Extension_Version = properties.instanceView.typeHandlerVersion,\r\n Exlcuded_instaces = properties.ExcludedSqlInstances,\r\n Purview = iff(notnull(properties.settings.ExternalPolicyBasedAuthorization),\"enabled\",\"\"),\r\n Entra = iff(notnull(properties.settings.AzureAD),\"enabled\",\"\"),\r\n BPA = iff(notnull(properties.settings.AssessmentSettings),\"enabled\",\"\"),\r\n machineIdHasSQLServerExtensionInstalled)\r\non $left.machineIdHasSQLServerDiscovered == $right.machineIdHasSQLServerExtensionInstalled\r\n| where isnotempty(machineIdHasSQLServerExtensionInstalled)\r\n| project-away machineIdHasSQLServerDiscovered, machineIdHasSQLServerExtensionInstalled",
+ "value": "resources\r\n| where type == \"microsoft.hybridcompute/machines\"\r\n| where properties.detectedProperties.mssqldiscovered == \"true\"\r\n| extend machineIdHasSQLServerDiscovered = id\r\n| project name, machineIdHasSQLServerDiscovered, resourceGroup, subscriptionId\r\n| join kind= leftouter (\r\n resources\r\n | where type == \"microsoft.hybridcompute/machines/extensions\"\r\n | where properties.type in (\"WindowsAgent.SqlServer\",\"LinuxAgent.SqlServer\")\r\n | extend machineIdHasSQLServerExtensionInstalled = iff(id contains \"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/extensions/WindowsAgent.SqlServer\" or id contains \"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/extensions/LinuxAgent.SqlServer\", substring(id, 0, indexof(id, \"/extensions/\")), \"\")\r\n | project Provisioning_State = properties.provisioningState,\r\n License_Type = properties.settings.LicenseType,\r\n ESU = iff(notnull(properties.settings.enableExtendedSecurityUpdates), \"enabled\", \"\"),\r\n Extension_Version = properties.instanceView.typeHandlerVersion,\r\n Excluded_instances = properties.ExcludedSqlInstances,\r\n Purview = iff(notnull(properties.settings.ExternalPolicyBasedAuthorization),\"enabled\",\"\"),\r\n Entra = iff(notnull(properties.settings.AzureAD),\"enabled\",\"\"),\r\n BPA = iff(notnull(properties.settings.AssessmentSettings),\"enabled\",\"\"),\r\n machineIdHasSQLServerExtensionInstalled)\r\non $left.machineIdHasSQLServerDiscovered == $right.machineIdHasSQLServerExtensionInstalled\r\n| where isnotempty(machineIdHasSQLServerExtensionInstalled)\r\n| project-away machineIdHasSQLServerDiscovered, machineIdHasSQLServerExtensionInstalled",
"isOptional": true
}
],
@@ -266,7 +266,7 @@
}
}
},
- "5": {
+ {
"position": {
"x": 0,
"y": 9,
@@ -318,7 +318,7 @@
}
}
},
- "6": {
+ {
"position": {
"x": 0,
"y": 13,
@@ -371,7 +371,7 @@
}
}
},
- "7": {
+ {
"position": {
"x": 6,
"y": 13,
@@ -424,7 +424,7 @@
}
}
},
- "8": {
+ {
"position": {
"x": 13,
"y": 13,
@@ -477,7 +477,7 @@
}
}
},
- "9": {
+ {
"position": {
"x": 0,
"y": 19,
@@ -530,7 +530,7 @@
}
}
},
- "10": {
+ {
"position": {
"x": 6,
"y": 19,
@@ -571,7 +571,7 @@
},
{
"name": "query",
- "value": "resources\n| where ['type'] ==\"microsoft.azurearcdata/sqlserverinstances/databases\"\n| summarize Count=count() by Encrypte=iif(tostring(properties['databaseOptions'].isEncrypted)==\"false\",\"No\", \"Yes\")",
+ "value": "resources\n| where ['type'] ==\"microsoft.azurearcdata/sqlserverinstances/databases\"\n| summarize Count=count() by Encrypted=iif(tostring(properties['databaseOptions'].isEncrypted)==\"false\",\"No\", \"Yes\")",
"isOptional": true
}
],
@@ -583,7 +583,7 @@
}
}
},
- "11": {
+ {
"position": {
"x": 12,
"y": 19,
@@ -636,7 +636,7 @@
}
}
},
- "12": {
+ {
"position": {
"x": 0,
"y": 25,
@@ -689,7 +689,7 @@
}
}
},
- "13": {
+ {
"position": {
"x": 6,
"y": 25,
@@ -742,7 +742,7 @@
}
}
},
- "14": {
+ {
"position": {
"x": 0,
"y": 30,
@@ -796,9 +796,9 @@
}
}
}
- }
+ ]
}
- },
+ ],
"metadata": {
"model": {
"timeRange": {