{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "hostingPlanName": {
            "type": "string",
            "minLength": 1
        },
        "siteName": {
            "type": "string",
            "minLength": 1
        },
        "sku": {
            "type": "string",
            "allowedValues": [
                "Free",
                "Shared",
                "Basic",
                "Standard",
                "Premium"
            ],
            "defaultValue": "Free"
        },
        "workerSize": {
            "type": "string",
            "allowedValues": [
                "0",
                "1",
                "2"
            ],
            "defaultValue": "0"
        }
    },
    "resources": [
        {
            "apiVersion": "2014-06-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[resourceGroup().location]",
            "tags": {
                "displayName": "HostingPlan"
            },
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "sku": "[parameters('sku')]",
                "workerSize": "[parameters('workerSize')]",
                "numberOfWorkers": 1
            }
        },
        {
            "apiVersion": "2014-06-01",
            "name": "[parameters('siteName')]",
            "type": "Microsoft.Web/sites",
            "location": "[resourceGroup().location]",
            "tags": {
                "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
                "displayName": "Website"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
            ],
            "properties": {
                "name": "[parameters('siteName')]",
                "serverFarm": "[parameters('hostingPlanName')]"
            }
        },
        {
            "apiVersion": "2014-04-01",
            "name": "[concat(parameters('hostingPlanName'), '-', resourceGroup().name)]",
            "type": "Microsoft.Insights/autoscalesettings",
            "location": "East US",
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
                "displayName": "AutoScaleSettings"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
            ],
            "properties": {
                "profiles": [
                    {
                        "name": "Default",
                        "capacity": {
                            "minimum": 1,
                            "maximum": 2,
                            "default": 1
                        },
                        "rules": [
                            {
                                "metricTrigger": {
                                    "metricName": "CpuPercentage",
                                    "metricResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                                    "timeGrain": "PT1M",
                                    "statistic": "Average",
                                    "timeWindow": "PT10M",
                                    "timeAggregation": "Average",
                                    "operator": "GreaterThan",
                                    "threshold": 80.0
                                },
                                "scaleAction": {
                                    "direction": "Increase",
                                    "type": "ChangeCount",
                                    "value": 1,
                                    "cooldown": "PT10M"
                                }
                            },
                            {
                                "metricTrigger": {
                                    "metricName": "CpuPercentage",
                                    "metricResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                                    "timeGrain": "PT1M",
                                    "statistic": "Average",
                                    "timeWindow": "PT1H",
                                    "timeAggregation": "Average",
                                    "operator": "LessThan",
                                    "threshold": 60.0
                                },
                                "scaleAction": {
                                    "direction": "Decrease",
                                    "type": "ChangeCount",
                                    "value": 1,
                                    "cooldown": "PT1H"
                                }
                            }
                        ]
                    }
                ],
                "enabled": false,
                "name": "[concat(parameters('hostingPlanName'), '-', resourceGroup().name)]",
                "targetResourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
            }
        },
        {
            "apiVersion": "2014-04-01",
            "name": "[concat('ServerErrors ', parameters('siteName'))]",
            "type": "Microsoft.Insights/alertrules",
            "location": "East US",
            "dependsOn": [
                "[concat('Microsoft.Web/sites/', parameters('siteName'))]"
            ],
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('siteName'))]": "Resource",
                "displayName": "ServerErrorsAlertRule"
            },
            "properties": {
                "name": "[concat('ServerErrors ', parameters('siteName'))]",
                "description": "[concat(parameters('siteName'), ' has some server errors, status code 5xx.')]",
                "isEnabled": false,
                "condition": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition",
                    "dataSource": {
                        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
                        "resourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('siteName'))]",
                        "metricName": "Http5xx"
                    },
                    "operator": "GreaterThan",
                    "threshold": 0.0,
                    "windowSize": "PT5M"
                },
                "action": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
                    "sendToServiceOwners": true,
                    "customEmails": []
                }
            }
        },
        {
            "apiVersion": "2014-04-01",
            "name": "[concat('ForbiddenRequests ', parameters('siteName'))]",
            "type": "Microsoft.Insights/alertrules",
            "location": "East US",
            "dependsOn": [
                "[concat('Microsoft.Web/sites/', parameters('siteName'))]"
            ],
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('siteName'))]": "Resource",
                "displayName": "ForbiddenRequestsAlertRule"
            },
            "properties": {
                "name": "[concat('ForbiddenRequests ', parameters('siteName'))]",
                "description": "[concat(parameters('siteName'), ' has some requests that are forbidden, status code 403.')]",
                "isEnabled": false,
                "condition": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition",
                    "dataSource": {
                        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
                        "resourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('siteName'))]",
                        "metricName": "Http403"
                    },
                    "operator": "GreaterThan",
                    "threshold": 0,
                    "windowSize": "PT5M"
                },
                "action": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
                    "sendToServiceOwners": true,
                    "customEmails": []
                }
            }
        },
        {
            "apiVersion": "2014-04-01",
            "name": "[concat('CPUHigh ', parameters('hostingPlanName'))]",
            "type": "Microsoft.Insights/alertrules",
            "location": "East US",
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
            ],
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
                "displayName": "CPUHighAlertRule"
            },
            "properties": {
                "name": "[concat('CPUHigh ', parameters('hostingPlanName'))]",
                "description": "[concat('The average CPU is high across all the instances of ', parameters('hostingPlanName'))]",
                "isEnabled": false,
                "condition": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition",
                    "dataSource": {
                        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
                        "resourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                        "metricName": "CpuPercentage"
                    },
                    "operator": "GreaterThan",
                    "threshold": 90,
                    "windowSize": "PT15M"
                },
                "action": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
                    "sendToServiceOwners": true,
                    "customEmails": []
                }
            }
        },
        {
            "apiVersion": "2014-04-01",
            "name": "[concat('LongHttpQueue ', parameters('hostingPlanName'))]",
            "type": "Microsoft.Insights/alertrules",
            "location": "East US",
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
            ],
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
                "displayName": "LongHttpQueueAlertRule"
            },
            "properties": {
                "name": "[concat('LongHttpQueue ', parameters('hostingPlanName'))]",
                "description": "[concat('The HTTP queue for the instances of ', parameters('hostingPlanName'), ' has a large number of pending requests.')]",
                "isEnabled": false,
                "condition": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.ThresholdRuleCondition",
                    "dataSource": {
                        "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleMetricDataSource",
                        "resourceUri": "[concat(resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                        "metricName": "HttpQueueLength"
                    },
                    "operator": "GreaterThan",
                    "threshold": 100.0,
                    "windowSize": "PT5M"
                },
                "action": {
                    "odata.type": "Microsoft.Azure.Management.Insights.Models.RuleEmailAction",
                    "sendToServiceOwners": true,
                    "customEmails": []
                }
            }
        },
        {
            "apiVersion": "2014-04-01",
            "name": "[parameters('siteName')]",
            "type": "Microsoft.Insights/components",
            "location": "Central US",
            "dependsOn": [
                "[concat('Microsoft.Web/sites/', parameters('siteName'))]"
            ],
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('siteName'))]": "Resource",
                "displayName": "AppInsightsComponent"
            },
            "properties": {
                "applicationId": "[parameters('siteName')]"
            }
        }
    ]
}
