diff --git a/Workbooks/Virtual Machines/Availability/server availability.workbook b/Workbooks/Virtual Machines/Availability/server availability.workbook
new file mode 100644
index 0000000..fc845c7
--- /dev/null
+++ b/Workbooks/Virtual Machines/Availability/server availability.workbook
@@ -0,0 +1,258 @@
+{
+ "version": "Notebook/1.0",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Server Availability\r\n\r\n\r\n
"
+ },
+ "name": "text - 2"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ff24505c-2099-43a4-a8a3-3456bed78eb5",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "type": 4,
+ "isRequired": true,
+ "value": {
+ "durationMs": 604800000
+ },
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 3600000
+ },
+ {
+ "durationMs": 14400000
+ },
+ {
+ "durationMs": 43200000
+ },
+ {
+ "durationMs": 86400000
+ },
+ {
+ "durationMs": 172800000
+ },
+ {
+ "durationMs": 259200000
+ },
+ {
+ "durationMs": 604800000
+ },
+ {
+ "durationMs": 1209600000
+ },
+ {
+ "durationMs": 2419200000
+ },
+ {
+ "durationMs": 2592000000
+ },
+ {
+ "durationMs": 5184000000
+ },
+ {
+ "durationMs": 7776000000
+ }
+ ]
+ }
+ },
+ {
+ "id": "bfe50469-7469-4c4d-a33e-0edbb43546c4",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "value": [
+ "/subscriptions/64f9887b-aa93-4bc9-a8d7-56033998b7b1"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": true
+ }
+ },
+ {
+ "id": "fb861784-4609-49f2-9f58-427fcc547677",
+ "version": "KqlParameterItem/1.0",
+ "name": "Workspace",
+ "type": 5,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces'\r\n| order by name asc\r\n| summarize Selected = makelist(id, 10), All = makelist(id, 1000)\r\n| mvexpand All limit 200\r\n| project value = tostring(All), label = tostring(All), selected = iff(Selected contains All, true, false)",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "resourceTypeFilter": {
+ "microsoft.operationalinsights/workspaces": true
+ },
+ "additionalResourceOptions": [
+ "value::all"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 0
+ },
+ "timeContextFromParameter": "TimeRange",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "b2627475-cef7-4e91-97b9-b70bf00164e6",
+ "version": "KqlParameterItem/1.0",
+ "name": "Servers",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "Heartbeat\r\n| distinct Computer\r\n| order by Computer asc",
+ "crossComponentResources": [
+ "{Workspace}"
+ ],
+ "value": [
+ "adVM.Cloudwise.co.za",
+ "ULabDC.ulab.local"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 0
+ },
+ "timeContextFromParameter": "TimeRange",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - 1"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### This Workbook calculates availability of VM's based on the specified time period."
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "let timeRangeStart = {TimeRange:start};\r\nlet timeRangeEnd = {TimeRange:end};\r\nHeartbeat\r\n| where TimeGenerated > timeRangeStart and TimeGenerated < timeRangeEnd and Computer in ({Servers})\r\n| summarize heartbeat_per_hour=count() by bin_at(TimeGenerated, 1h, timeRangeStart), Computer\r\n| extend available_per_hour=iff(heartbeat_per_hour>0, true, false)\r\n| summarize total_available_hours=countif(available_per_hour==true) by Computer \r\n| extend total_number_of_buckets=round((timeRangeEnd-timeRangeStart)/1h)\r\n| extend availability_rate=total_available_hours*100/total_number_of_buckets\r\n| order by availability_rate asc",
+ "size": 0,
+ "timeContext": {
+ "durationMs": 0
+ },
+ "timeContextFromParameter": "TimeRange",
+ "exportToExcelOptions": "visible",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspace}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Computer",
+ "formatter": 0,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "total_available_hours",
+ "formatter": 0,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "total_number_of_buckets",
+ "formatter": 0,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "availability_rate",
+ "formatter": 3,
+ "formatOptions": {
+ "min": 0,
+ "max": 100,
+ "palette": "redGreen",
+ "showIcon": true
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "number_of_buckets",
+ "formatter": 0,
+ "formatOptions": {
+ "showIcon": true
+ }
+ }
+ ],
+ "sortBy": [
+ {
+ "itemKey": "$gen_bar_availability_rate_3",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Computer"
+ },
+ {
+ "columnId": "total_available_hours",
+ "label": "Total Available Hours"
+ },
+ {
+ "columnId": "total_number_of_buckets",
+ "label": "Total Hours"
+ },
+ {
+ "columnId": "availability_rate",
+ "label": "Availability %"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_bar_availability_rate_3",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "name": "query - 0"
+ }
+ ],
+ "styleSettings": {},
+ "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
+}
\ No newline at end of file
diff --git a/Workbooks/Virtual Machines/Availability/settings.json b/Workbooks/Virtual Machines/Availability/settings.json
new file mode 100644
index 0000000..6f2994e
--- /dev/null
+++ b/Workbooks/Virtual Machines/Availability/settings.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/settings.json",
+ "name":"Availability",
+ "author": "Microsoft",
+ "galleries": [
+ { "type": "workbook", "resourceType": "Azure Monitor", "categoryKey": "azureMonitorVirtualMachines", "order": 300 }
+ ]
+}
\ No newline at end of file