This is an automated email from the ASF dual-hosted git repository.

gaul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git


The following commit(s) were added to refs/heads/master by this push:
     new 99f2ff8  JCLOUDS-1597: Support for Alerts (#133)
99f2ff8 is described below

commit 99f2ff86dae81c51834271b80a56fdac47719dfd
Author: SATYANAN-ANAND <[email protected]>
AuthorDate: Mon Feb 21 02:37:50 2022 -0800

    JCLOUDS-1597: Support for Alerts (#133)
---
 .../jclouds/azurecompute/arm/AzureComputeApi.java  |  10 +
 .../arm/AzureComputeProviderMetadata.java          |   2 +
 .../azurecompute/arm/domain/ActionStatus.java      |  34 +++
 .../arm/domain/ActivityLogAlertProperties.java     |   9 +-
 ...{ActivityLogAlertProperties.java => Alert.java} |  41 ++--
 .../azurecompute/arm/domain/AlertModification.java |  59 +++++
 .../arm/domain/AlertModificationEvent.java         |  56 +++++
 .../arm/domain/AlertModificationItem.java          |  86 +++++++
 .../arm/domain/AlertModificationProperties.java    |  52 ++++
 ...ogAlertProperties.java => AlertProperties.java} |  39 +--
 .../azurecompute/arm/domain/AlertSummary.java      |  59 +++++
 ...AlertProperties.java => AlertSummaryGroup.java} |  40 ++-
 ...tProperties.java => AlertSummaryGroupItem.java} |  40 +--
 .../azurecompute/arm/domain/Essentials.java        | 106 ++++++++
 .../azurecompute/arm/features/AlertApi.java        |  85 +++++++
 .../arm/options/AlertRequestOptions.java           | 268 +++++++++++++++++++++
 .../arm/reference/AlertQueryParams.java            |  44 ++++
 .../arm/features/ActivityLogAlertApiLiveTest.java  | 113 +++++++++
 .../arm/features/ActivityLogAlertApiMockTest.java  | 210 ++++++++++++++++
 .../arm/features/AlertApiLiveTest.java             |  77 ++++++
 .../arm/features/AlertApiMockTest.java             | 134 +++++++++++
 .../src/test/resources/activitylogalertcreate.json |  33 +++
 .../src/test/resources/activitylogalertget.json    |  46 ++++
 .../resources/activitylogalertresourcegroup.json   |  79 ++++++
 .../src/test/resources/alertchangestate.json       |  28 +++
 .../src/test/resources/alertgetall.json            |  32 +++
 .../src/test/resources/alertgethistory.json        |  19 ++
 .../src/test/resources/alertgetsummary.json        |  31 +++
 .../src/test/resources/alertsgetbyid.json          |  29 +++
 29 files changed, 1752 insertions(+), 109 deletions(-)

diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
index 85d68ca..8bced3e 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java
@@ -21,6 +21,7 @@ import javax.ws.rs.PathParam;
 
 import org.jclouds.azurecompute.arm.domain.ServicePrincipal;
 import org.jclouds.azurecompute.arm.features.ActivityLogAlertApi;
+import org.jclouds.azurecompute.arm.features.AlertApi;
 import org.jclouds.azurecompute.arm.features.AvailabilitySetApi;
 import org.jclouds.azurecompute.arm.features.DeploymentApi;
 import org.jclouds.azurecompute.arm.features.DiskApi;
@@ -305,4 +306,13 @@ public interface AzureComputeApi extends Closeable {
         */
        @Delegate
        ActivityLogAlertApi getActivityLogAlertApi(@PathParam("resourcegroup") 
String resourcegroup);
+       
+       /**
+        * Management features for Alerts.
+        *
+        * @see <a href=
+        *      
"https://docs.microsoft.com/en-us/rest/api/monitor/alertsmanagement/alerts";>docs</a>
+        */
+       @Delegate
+       AlertApi getAlertApi(@PathParam("resourceid") String resourceid);
 }
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index 5dbef36..3bb32e2 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -40,6 +40,7 @@ import java.util.Properties;
 
 import org.jclouds.azurecompute.arm.domain.Region;
 import org.jclouds.azurecompute.arm.features.ActivityLogAlertApi;
+import org.jclouds.azurecompute.arm.features.AlertApi;
 import org.jclouds.azurecompute.arm.features.AvailabilitySetApi;
 import org.jclouds.azurecompute.arm.features.DeploymentApi;
 import org.jclouds.azurecompute.arm.features.DiskApi;
@@ -138,6 +139,7 @@ public class AzureComputeProviderMetadata extends 
BaseProviderMetadata {
       properties.put(API_VERSION_PREFIX + 
VirtualNetworkGatewayApi.class.getSimpleName(), "2018-02-01");
       properties.put(API_VERSION_PREFIX + 
VirtualNetworkGatewayConnectionApi.class.getSimpleName(), "2018-02-01");
       properties.put(API_VERSION_PREFIX + 
ActivityLogAlertApi.class.getSimpleName(), "2020-10-01");
+      properties.put(API_VERSION_PREFIX + AlertApi.class.getSimpleName(), 
"2019-03-01");
       
       return properties;
    }
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActionStatus.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActionStatus.java
new file mode 100644
index 0000000..d892800
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActionStatus.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class ActionStatus {
+
+       public abstract boolean isSuppressed();
+
+       @SerializedNames({ "isSuppressed" })
+       public static ActionStatus create(final boolean isSuppressed) {
+               return new AutoValue_ActionStatus(isSuppressed);
+
+       }
+
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
index 6517d8c..33de273 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
@@ -28,9 +28,8 @@ public abstract class ActivityLogAlertProperties {
 
        @Nullable
        public abstract String description();
-
-       @Nullable
-       public abstract Boolean enabled();
+       
+       public abstract boolean enabled();
 
        @Nullable
        public abstract List<String> scopes();
@@ -42,7 +41,7 @@ public abstract class ActivityLogAlertProperties {
        public abstract Actions actions();
 
        @SerializedNames({ "description", "enabled", "scopes", "condition", 
"actions" })
-       public static ActivityLogAlertProperties create(final String 
description, final Boolean enabled,
+       public static ActivityLogAlertProperties create(final String 
description, final boolean enabled,
                        final List<String> scopes, final 
AlertRuleAllOfCondition condition, final Actions actions) {
                return 
builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions)
                                .build();
@@ -58,7 +57,7 @@ public abstract class ActivityLogAlertProperties {
        public abstract static class Builder {
                public abstract Builder description(String description);
 
-               public abstract Builder enabled(Boolean enabled);
+               public abstract Builder enabled(boolean enabled);
 
                public abstract Builder scopes(List<String> scopes);
 
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Alert.java
similarity index 50%
copy from 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
copy to 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Alert.java
index 6517d8c..572825d 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Alert.java
@@ -16,57 +16,46 @@
  */
 package org.jclouds.azurecompute.arm.domain;
 
-import java.util.List;
-
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
 import com.google.auto.value.AutoValue;
 
 @AutoValue
-public abstract class ActivityLogAlertProperties {
+public abstract class Alert {
 
-       @Nullable
-       public abstract String description();
+       public abstract String id();
 
-       @Nullable
-       public abstract Boolean enabled();
+       public abstract String name();
 
-       @Nullable
-       public abstract List<String> scopes();
+       public abstract String type();
 
        @Nullable
-       public abstract AlertRuleAllOfCondition condition();
+       public abstract AlertProperties properties();
 
-       @Nullable
-       public abstract Actions actions();
-
-       @SerializedNames({ "description", "enabled", "scopes", "condition", 
"actions" })
-       public static ActivityLogAlertProperties create(final String 
description, final Boolean enabled,
-                       final List<String> scopes, final 
AlertRuleAllOfCondition condition, final Actions actions) {
-               return 
builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions)
-                               .build();
+       @SerializedNames({ "id", "name", "type", "properties" })
+       public static Alert create(final String id, final String name, final 
String type,
+                       final AlertProperties properties) {
+               return 
builder().id(id).name(name).type(type).properties(properties).build();
        }
 
        public abstract Builder toBuilder();
 
        public static Builder builder() {
-               return new AutoValue_ActivityLogAlertProperties.Builder();
+               return new AutoValue_Alert.Builder();
        }
 
        @AutoValue.Builder
        public abstract static class Builder {
-               public abstract Builder description(String description);
-
-               public abstract Builder enabled(Boolean enabled);
+               public abstract Builder id(String id);
 
-               public abstract Builder scopes(List<String> scopes);
+               public abstract Builder name(String name);
 
-               public abstract Builder condition(AlertRuleAllOfCondition 
condition);
+               public abstract Builder type(String type);
 
-               public abstract Builder actions(Actions actions);
+               public abstract Builder properties(AlertProperties properties);
 
-               public abstract ActivityLogAlertProperties build();
+               public abstract Alert build();
 
        }
 }
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModification.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModification.java
new file mode 100644
index 0000000..3334127
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModification.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class AlertModification {
+
+       public abstract String id();
+
+       public abstract String name();
+
+       public abstract String type();
+
+       public abstract AlertModificationProperties properties();
+
+       @SerializedNames({ "id", "name", "type", "properties" })
+       public static AlertModification create(final String id, final String 
name, final String type,
+                       AlertModificationProperties properties) {
+               return 
builder().id(id).name(name).type(type).properties(properties).build();
+       }
+
+       public abstract Builder toBuilder();
+
+       public static Builder builder() {
+               return new AutoValue_AlertModification.Builder();
+       }
+
+       @AutoValue.Builder
+       public abstract static class Builder {
+               public abstract Builder id(String id);
+
+               public abstract Builder name(String name);
+
+               public abstract Builder type(String type);
+
+               public abstract Builder properties(AlertModificationProperties 
properties);
+
+               public abstract AlertModification build();
+
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationEvent.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationEvent.java
new file mode 100644
index 0000000..77f5b36
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationEvent.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class AlertModificationEvent {
+
+       public abstract String AlertCreated();
+
+       public abstract String MonitorConditionChange();
+
+       public abstract String StateChange();
+
+       @SerializedNames({ "AlertCreated", "MonitorConditionChange", 
"StateChange" })
+       public static AlertModificationEvent create(final String AlertCreated, 
final String MonitorConditionChange,
+                       final String StateChange) {
+               return 
builder().AlertCreated(AlertCreated).MonitorConditionChange(MonitorConditionChange)
+                               .StateChange(StateChange).build();
+       }
+
+       public abstract Builder toBuilder();
+
+       public static Builder builder() {
+               return new AutoValue_AlertModificationEvent.Builder();
+       }
+
+       @AutoValue.Builder
+       public abstract static class Builder {
+               public abstract Builder AlertCreated(String AlertCreated);
+
+               public abstract Builder MonitorConditionChange(String 
MonitorConditionChange);
+
+               public abstract Builder StateChange(String StateChange);
+
+               public abstract AlertModificationEvent build();
+
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationItem.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationItem.java
new file mode 100644
index 0000000..5c9524f
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationItem.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import java.util.Date;
+
+import org.jclouds.azurecompute.arm.util.GetEnumValue;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class AlertModificationItem {
+
+       public enum AlertModificationEvent {
+               AlertCreated, MonitorConditionChange, StateChange;
+
+               public static AlertModificationEvent fromValue(final String 
text) {
+                       return (AlertModificationEvent) 
GetEnumValue.fromValueOrDefault(text, AlertModificationEvent.AlertCreated);
+               }
+       }
+
+       public abstract String comments();
+
+       public abstract String description();
+
+       public abstract AlertModificationEvent modificationEvent();
+
+       public abstract Date modifiedAt();
+
+       public abstract String modifiedBy();
+
+       public abstract String newValue();
+
+       public abstract String oldValue();
+
+       @SerializedNames({ "comments", "description", "modificationEvent", 
"modifiedAt", "modifiedBy", "newValue",
+                       "oldValue" })
+       public static AlertModificationItem create(final String comments, final 
String description,
+                       final AlertModificationEvent modificationEvent, final 
Date modifiedAt, final String modifiedBy,
+                       final String newValue, final String oldValue) {
+               return 
builder().comments(comments).description(description).modificationEvent(modificationEvent)
+                               
.modifiedAt(modifiedAt).modifiedBy(modifiedBy).newValue(newValue).oldValue(oldValue).build();
+       }
+
+       public abstract Builder toBuilder();
+
+       public static Builder builder() {
+               return new AutoValue_AlertModificationItem.Builder();
+       }
+
+       @AutoValue.Builder
+       public abstract static class Builder {
+
+               public abstract Builder comments(String comments);
+
+               public abstract Builder description(String description);
+
+               public abstract Builder 
modificationEvent(AlertModificationEvent modificationEvent);
+
+               public abstract Builder modifiedAt(Date modifiedAt);
+
+               public abstract Builder modifiedBy(String modifiedBy);
+
+               public abstract Builder newValue(String newValue);
+
+               public abstract Builder oldValue(String oldValue);
+
+               public abstract AlertModificationItem build();
+
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationProperties.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationProperties.java
new file mode 100644
index 0000000..1322ba2
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertModificationProperties.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import java.util.List;
+
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class AlertModificationProperties {
+
+       public abstract String alertId();
+
+       public abstract List<AlertModificationItem> modifications();
+
+       @SerializedNames({ "alertId", "modifications" })
+       public static AlertModificationProperties create(final String alertId, 
List<AlertModificationItem> modifications) {
+               return 
builder().alertId(alertId).modifications(modifications).build();
+       }
+
+       public abstract Builder toBuilder();
+
+       public static Builder builder() {
+               return new AutoValue_AlertModificationProperties.Builder();
+       }
+
+       @AutoValue.Builder
+       public abstract static class Builder {
+               public abstract Builder alertId(String alertId);
+
+               public abstract Builder 
modifications(List<AlertModificationItem> modifications);
+
+               public abstract AlertModificationProperties build();
+
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertProperties.java
similarity index 51%
copy from 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
copy to 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertProperties.java
index 6517d8c..182da0f 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertProperties.java
@@ -16,57 +16,44 @@
  */
 package org.jclouds.azurecompute.arm.domain;
 
-import java.util.List;
-
+import org.jclouds.domain.JsonBall;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
 import com.google.auto.value.AutoValue;
 
 @AutoValue
-public abstract class ActivityLogAlertProperties {
-
-       @Nullable
-       public abstract String description();
+public abstract class AlertProperties {
 
        @Nullable
-       public abstract Boolean enabled();
+       public abstract JsonBall context();
 
        @Nullable
-       public abstract List<String> scopes();
+       public abstract JsonBall egressConfig();
 
        @Nullable
-       public abstract AlertRuleAllOfCondition condition();
+       public abstract Essentials essentials();
 
-       @Nullable
-       public abstract Actions actions();
-
-       @SerializedNames({ "description", "enabled", "scopes", "condition", 
"actions" })
-       public static ActivityLogAlertProperties create(final String 
description, final Boolean enabled,
-                       final List<String> scopes, final 
AlertRuleAllOfCondition condition, final Actions actions) {
-               return 
builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions)
-                               .build();
+       @SerializedNames({ "context", "egressConfig", "essentials" })
+       public static AlertProperties create(final JsonBall context, final 
JsonBall egressConfig, final Essentials essentials) {
+               return 
builder().context(context).egressConfig(egressConfig).essentials(essentials).build();
        }
 
        public abstract Builder toBuilder();
 
        public static Builder builder() {
-               return new AutoValue_ActivityLogAlertProperties.Builder();
+               return new AutoValue_AlertProperties.Builder();
        }
 
        @AutoValue.Builder
        public abstract static class Builder {
-               public abstract Builder description(String description);
-
-               public abstract Builder enabled(Boolean enabled);
-
-               public abstract Builder scopes(List<String> scopes);
+               public abstract Builder context(JsonBall context);
 
-               public abstract Builder condition(AlertRuleAllOfCondition 
condition);
+               public abstract Builder egressConfig(JsonBall egressConfig);
 
-               public abstract Builder actions(Actions actions);
+               public abstract Builder essentials(Essentials essentials);
 
-               public abstract ActivityLogAlertProperties build();
+               public abstract AlertProperties build();
 
        }
 }
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummary.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummary.java
new file mode 100644
index 0000000..59b50e2
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummary.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class AlertSummary {
+
+       public abstract String id();
+
+       public abstract String name();
+
+       public abstract String type();
+
+       public abstract AlertSummaryGroup properties();
+
+       @SerializedNames({ "id", "name", "type", "properties" })
+       public static AlertSummary create(final String id, final String name, 
final String type,
+                       final AlertSummaryGroup properties) {
+               return 
builder().id(id).name(name).type(type).properties(properties).build();
+       }
+
+       public abstract Builder toBuilder();
+
+       public static Builder builder() {
+               return new AutoValue_AlertSummary.Builder();
+       }
+
+       @AutoValue.Builder
+       public abstract static class Builder {
+               public abstract Builder id(String id);
+
+               public abstract Builder name(String name);
+
+               public abstract Builder type(String type);
+
+               public abstract Builder properties(AlertSummaryGroup 
properties);
+
+               public abstract AlertSummary build();
+
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummaryGroup.java
similarity index 51%
copy from 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
copy to 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummaryGroup.java
index 6517d8c..3a6cba1 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummaryGroup.java
@@ -24,49 +24,41 @@ import org.jclouds.json.SerializedNames;
 import com.google.auto.value.AutoValue;
 
 @AutoValue
-public abstract class ActivityLogAlertProperties {
+public abstract class AlertSummaryGroup {
 
+       public abstract String groupedby();
+       
        @Nullable
-       public abstract String description();
+       public abstract Integer smartGroupsCount();
 
-       @Nullable
-       public abstract Boolean enabled();
-
-       @Nullable
-       public abstract List<String> scopes();
+       public abstract int total();
 
        @Nullable
-       public abstract AlertRuleAllOfCondition condition();
+       public abstract List<AlertSummaryGroupItem> values();
 
-       @Nullable
-       public abstract Actions actions();
-
-       @SerializedNames({ "description", "enabled", "scopes", "condition", 
"actions" })
-       public static ActivityLogAlertProperties create(final String 
description, final Boolean enabled,
-                       final List<String> scopes, final 
AlertRuleAllOfCondition condition, final Actions actions) {
-               return 
builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions)
-                               .build();
+       @SerializedNames({ "groupedby", "smartGroupsCount", "total", "values" })
+       public static AlertSummaryGroup create(final String groupedby, final 
Integer smartGroupsCount, final int total,
+                       final List<AlertSummaryGroupItem> values) {
+               return 
builder().groupedby(groupedby).smartGroupsCount(smartGroupsCount).total(total).values(values).build();
        }
 
        public abstract Builder toBuilder();
 
        public static Builder builder() {
-               return new AutoValue_ActivityLogAlertProperties.Builder();
+               return new AutoValue_AlertSummaryGroup.Builder();
        }
 
        @AutoValue.Builder
        public abstract static class Builder {
-               public abstract Builder description(String description);
-
-               public abstract Builder enabled(Boolean enabled);
+               public abstract Builder groupedby(String groupedby);
 
-               public abstract Builder scopes(List<String> scopes);
+               public abstract Builder smartGroupsCount(Integer 
smartGroupsCount);
 
-               public abstract Builder condition(AlertRuleAllOfCondition 
condition);
+               public abstract Builder total(int total);
 
-               public abstract Builder actions(Actions actions);
+               public abstract Builder values(List<AlertSummaryGroupItem> 
values);
 
-               public abstract ActivityLogAlertProperties build();
+               public abstract AlertSummaryGroup build();
 
        }
 }
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummaryGroupItem.java
similarity index 50%
copy from 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
copy to 
providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummaryGroupItem.java
index 6517d8c..840ced3 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ActivityLogAlertProperties.java
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AlertSummaryGroupItem.java
@@ -16,57 +16,41 @@
  */
 package org.jclouds.azurecompute.arm.domain;
 
-import java.util.List;
-
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
 import com.google.auto.value.AutoValue;
 
 @AutoValue
-public abstract class ActivityLogAlertProperties {
+public abstract class AlertSummaryGroupItem {
 
        @Nullable
-       public abstract String description();
+       public abstract String groupedby();
 
-       @Nullable
-       public abstract Boolean enabled();
+       public abstract String name();
 
-       @Nullable
-       public abstract List<String> scopes();
-
-       @Nullable
-       public abstract AlertRuleAllOfCondition condition();
+       public abstract int count();
 
-       @Nullable
-       public abstract Actions actions();
-
-       @SerializedNames({ "description", "enabled", "scopes", "condition", 
"actions" })
-       public static ActivityLogAlertProperties create(final String 
description, final Boolean enabled,
-                       final List<String> scopes, final 
AlertRuleAllOfCondition condition, final Actions actions) {
-               return 
builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions)
-                               .build();
+       @SerializedNames({ "groupedby", "name", "count" })
+       public static AlertSummaryGroupItem create(final String groupedby, 
final String name, final int count) {
+               return 
builder().groupedby(groupedby).name(name).count(count).build();
        }
 
        public abstract Builder toBuilder();
 
        public static Builder builder() {
-               return new AutoValue_ActivityLogAlertProperties.Builder();
+               return new AutoValue_AlertSummaryGroupItem.Builder();
        }
 
        @AutoValue.Builder
        public abstract static class Builder {
-               public abstract Builder description(String description);
-
-               public abstract Builder enabled(Boolean enabled);
-
-               public abstract Builder scopes(List<String> scopes);
+               public abstract Builder groupedby(String groupedby);
 
-               public abstract Builder condition(AlertRuleAllOfCondition 
condition);
+               public abstract Builder name(String name);
 
-               public abstract Builder actions(Actions actions);
+               public abstract Builder count(int count);
 
-               public abstract ActivityLogAlertProperties build();
+               public abstract AlertSummaryGroupItem build();
 
        }
 }
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Essentials.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Essentials.java
new file mode 100644
index 0000000..93c8143
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Essentials.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.domain;
+
+import java.util.Date;
+
+import org.jclouds.azurecompute.arm.util.GetEnumValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class Essentials {
+
+       public enum AlertState {
+               New, Acknowledged, Closed;
+
+               public static AlertState fromValue(final String text) {
+                       return (AlertState) 
GetEnumValue.fromValueOrDefault(text, AlertState.New);
+               }
+       }
+
+       public enum MonitorCondition {
+               Fired, Resloved;
+
+               public static MonitorCondition fromValue(final String text) {
+                       return (MonitorCondition) 
GetEnumValue.fromValueOrDefault(text, MonitorCondition.Fired);
+               }
+       }
+
+       @Nullable
+       public abstract ActionStatus actionStatus();
+
+       @Nullable
+       public abstract String alertRule();
+
+       @Nullable
+       public abstract Date lastModifiedDateTime();
+
+       @Nullable
+       public abstract String lastModifiedUserName();
+
+       @Nullable
+       public abstract String sourceCreatedId();
+
+       @Nullable
+       public abstract Date startDateTime();
+
+       @Nullable
+       public abstract String targetResource();
+
+       @Nullable
+       public abstract String targetResourceGroup();
+
+       @Nullable
+       public abstract String targetResourceName();
+
+       @Nullable
+       public abstract String targetResourceType();
+
+       @Nullable
+       public abstract AlertState alertState();
+
+       @Nullable
+       public abstract MonitorCondition monitorCondition();
+
+       @Nullable
+       public abstract String monitorService();
+
+       @Nullable
+       public abstract String severity();
+
+       @Nullable
+       public abstract String signalType();
+
+       @SerializedNames({ "actionStatus", "alertRule", "lastModifiedDateTime", 
"lastModifiedUserName", "sourceCreatedId",
+                       "startDateTime", "targetResource", 
"targetResourceGroup", "targetResourceName", "targetResourceType",
+                       "alertState", "monitorCondition", "monitorService", 
"severity", "signalType" })
+       public static Essentials create(final ActionStatus actionStatus, final 
String alertRule,
+                       final Date lastModifiedDateTime, final String 
lastModifiedUserName, final String sourceCreatedId,
+                       final Date startDateTime, final String targetResource, 
final String targetResourceGroup,
+                       final String targetResourceName, final String 
targetResourceType, final AlertState alertState,
+                       final MonitorCondition monitorCondition, final String 
monitorService, final String severity,
+                       final String signalType) {
+               return new AutoValue_Essentials(actionStatus, alertRule, 
lastModifiedDateTime, lastModifiedUserName,
+                               sourceCreatedId, startDateTime, targetResource, 
targetResourceGroup, targetResourceName,
+                               targetResourceType, alertState, 
monitorCondition, monitorService, severity, signalType);
+
+       }
+
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AlertApi.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AlertApi.java
new file mode 100644
index 0000000..33c987a
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AlertApi.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.features;
+
+import java.util.List;
+
+import javax.inject.Named;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.azurecompute.arm.domain.Alert;
+import org.jclouds.azurecompute.arm.domain.AlertModification;
+import org.jclouds.azurecompute.arm.domain.AlertSummary;
+import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
+import org.jclouds.azurecompute.arm.options.AlertRequestOptions;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.oauth.v2.filters.OAuthFilter;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.SelectJson;
+
+/**
+ * This Azure Resource Manager API provides all the alerts available for a 
given
+ * resource
+ * <p/>
+ *
+ * @see <a href=
+ *      
"https://docs.microsoft.com/en-us/rest/api/monitor/alertsmanagement/alerts";>docs</a>
+ */
+@Path("/{resourceid}")
+@RequestFilters({ OAuthFilter.class, ApiVersionFilter.class })
+@Consumes(MediaType.APPLICATION_JSON)
+public interface AlertApi {
+       @Named("alerts:getAll")
+       @Path("/providers/Microsoft.AlertsManagement/alerts")
+       @GET
+       @SelectJson("value")
+       @Fallback(EmptyListOnNotFoundOr404.class)
+       List<Alert> list(@Nullable AlertRequestOptions... getAllOptions);
+
+       @Named("alerts:getbyid")
+       @Path("/providers/Microsoft.AlertsManagement/alerts/{alertId}")
+       @GET
+       @Fallback(NullOnNotFoundOr404.class)
+       Alert get(@PathParam("alertId") String alertId);
+
+       @Named("alerts:changestate")
+       
@Path("/providers/Microsoft.AlertsManagement/alerts/{alertId}/changestate")
+       @POST
+       @Fallback(NullOnNotFoundOr404.class)
+       Alert changeState(@PathParam("alertId") String alertId, 
@QueryParam("newState") String newState);
+
+       @Named("alerts:history")
+       @Path("/providers/Microsoft.AlertsManagement/alerts/{alertId}/history")
+       @GET
+       @Fallback(NullOnNotFoundOr404.class)
+       AlertModification getHistory(@PathParam("alertId") String alertId);
+
+       @Named("alerts:summary")
+       @Path("providers/Microsoft.AlertsManagement/alertsSummary")
+       @GET
+       @Fallback(NullOnNotFoundOr404.class)
+       AlertSummary getSummary(AlertRequestOptions... getSummaryOptions);
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/options/AlertRequestOptions.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/options/AlertRequestOptions.java
new file mode 100644
index 0000000..34a7020
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/options/AlertRequestOptions.java
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.options;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.TARGET_RESOURCE;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.TARGET_RESOURCE_GROUP;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.TARGET_RESOURCE_TYPE;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.MONITOR_SERVICE;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.MONITOR_CONDITION;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.SERVERITY;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.ALERT_RULE;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.ALERT_STATE;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.SMART_GROUP_ID;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.INCLUDE_CONTEXT;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.INCLUDE_EGRESS_CONFIG;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.PAGE_COUNT;
+import static org.jclouds.azurecompute.arm.reference.AlertQueryParams.SORT_BY;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.SORT_ORDER;
+
+import static org.jclouds.azurecompute.arm.reference.AlertQueryParams.SELECT;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.TIME_RANGE;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.CUSTOM_TIME_RANGE;
+import static org.jclouds.azurecompute.arm.reference.AlertQueryParams.GROUP_BY;
+import static 
org.jclouds.azurecompute.arm.reference.AlertQueryParams.INCLUDE_SMART_GROUPS_COUNT;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+public class AlertRequestOptions extends BaseHttpRequestOptions {
+
+       public static final AlertRequestOptions NONE = new 
AlertRequestOptions();
+
+       public AlertRequestOptions withTargetResource(String targetResource) {
+               checkState(!queryParameters.containsKey(TARGET_RESOURCE), 
"Can't have duplicate parameter of targetResource");
+               queryParameters.put(TARGET_RESOURCE, targetResource);
+               return this;
+       }
+
+       public AlertRequestOptions withTargetResourceGroup(String 
targetResourceGroup) {
+               checkState(!queryParameters.containsKey(TARGET_RESOURCE_GROUP),
+                               "Can't have duplicate parameter of 
targetResourceGroup");
+               queryParameters.put(TARGET_RESOURCE_GROUP, targetResourceGroup);
+               return this;
+       }
+
+       public AlertRequestOptions withTargetResourceType(String 
targetResourceType) {
+               checkState(!queryParameters.containsKey(TARGET_RESOURCE_TYPE),
+                               "Can't have duplicate parameter of 
targetResourceType");
+               queryParameters.put(TARGET_RESOURCE_TYPE, targetResourceType);
+               return this;
+       }
+
+       public AlertRequestOptions withMonitorService(String monitorService) {
+               checkState(!queryParameters.containsKey(MONITOR_SERVICE), 
"Can't have duplicate parameter of monitorService");
+               queryParameters.put(MONITOR_SERVICE, monitorService);
+               return this;
+       }
+
+       public AlertRequestOptions withMonitorCondition(String 
monitorCondition) {
+               checkState(!queryParameters.containsKey(MONITOR_CONDITION),
+                               "Can't have duplicate parameter of 
monitorCondition");
+               queryParameters.put(MONITOR_CONDITION, monitorCondition);
+               return this;
+       }
+
+       public AlertRequestOptions withSeverity(String severity) {
+               checkState(!queryParameters.containsKey(SERVERITY), "Can't have 
duplicate parameter of severity");
+               queryParameters.put(SERVERITY, severity);
+               return this;
+       }
+
+       public AlertRequestOptions withAlertState(String alertState) {
+               checkState(!queryParameters.containsKey(ALERT_STATE), "Can't 
have duplicate parameter of alertState");
+               queryParameters.put(ALERT_STATE, alertState);
+               return this;
+       }
+
+       public AlertRequestOptions withAlertRule(String alertRule) {
+               checkState(!queryParameters.containsKey(ALERT_RULE), "Can't 
have duplicate parameter of alertRule");
+               queryParameters.put(ALERT_RULE, alertRule);
+               return this;
+       }
+
+       public AlertRequestOptions withSmartGroupId(String smartGroupId) {
+               checkState(!queryParameters.containsKey(SMART_GROUP_ID), "Can't 
have duplicate parameter of smartGroupId");
+               queryParameters.put(SMART_GROUP_ID, smartGroupId);
+               return this;
+       }
+
+       public AlertRequestOptions withIncludeContext(boolean includeContext) {
+               checkState(!queryParameters.containsKey(INCLUDE_CONTEXT), 
"Can't have duplicate parameter of includeContext");
+               queryParameters.put(INCLUDE_CONTEXT, 
String.valueOf(includeContext));
+               return this;
+       }
+
+       public AlertRequestOptions withIncludeEgressConfig(boolean 
includeEgressConfig) {
+               checkState(!queryParameters.containsKey(INCLUDE_EGRESS_CONFIG),
+                               "Can't have duplicate parameter of 
includeEgressConfig");
+               queryParameters.put(INCLUDE_EGRESS_CONFIG, 
String.valueOf(includeEgressConfig));
+               return this;
+       }
+
+       public AlertRequestOptions withPageCount(int pageCount) {
+               checkState(!queryParameters.containsKey(PAGE_COUNT), "Can't 
have duplicate parameter of pageCount");
+               queryParameters.put(PAGE_COUNT, String.valueOf(pageCount));
+               return this;
+       }
+
+       public AlertRequestOptions withSortBy(String sortBy) {
+               checkState(!queryParameters.containsKey(SORT_BY), "Can't have 
duplicate parameter of sortBy");
+               queryParameters.put(SORT_BY, sortBy);
+               return this;
+       }
+
+       public AlertRequestOptions withSortOrder(String sortOrder) {
+               checkState(!queryParameters.containsKey(SORT_ORDER), "Can't 
have duplicate parameter of sortOrder");
+               queryParameters.put(SORT_ORDER, sortOrder);
+               return this;
+       }
+
+       public AlertRequestOptions withSelect(String select) {
+               checkState(!queryParameters.containsKey(SELECT), "Can't have 
duplicate parameter of select");
+               queryParameters.put(SELECT, select);
+               return this;
+       }
+
+       public AlertRequestOptions withTimeRange(String timeRange) {
+               checkState(!queryParameters.containsKey(TIME_RANGE), "Can't 
have duplicate parameter of timeRange");
+               queryParameters.put(TIME_RANGE, timeRange);
+               return this;
+       }
+
+       public AlertRequestOptions withCustomTimeRange(String customTimeRange) {
+               checkState(!queryParameters.containsKey(CUSTOM_TIME_RANGE),
+                               "Can't have duplicate parameter of 
customTimeRange");
+               queryParameters.put(CUSTOM_TIME_RANGE, customTimeRange);
+               return this;
+       }
+
+       public AlertRequestOptions withGroupBy(String groupby) {
+               checkState(!queryParameters.containsKey(GROUP_BY), "Can't have 
duplicate parameter of groupby");
+               queryParameters.put(GROUP_BY, groupby);
+               return this;
+       }
+
+       public AlertRequestOptions withIncludeSmartGroupsCount(boolean 
includeSmartGroupsCount) {
+               
checkState(!queryParameters.containsKey(INCLUDE_SMART_GROUPS_COUNT),
+                               "Can't have duplicate parameter of 
includeSmartGroupsCount");
+               queryParameters.put(INCLUDE_SMART_GROUPS_COUNT, 
String.valueOf(includeSmartGroupsCount));
+               return this;
+       }
+
+       /*
+        * This method is intended for testing
+        */
+       @Override
+       public boolean equals(Object o) {
+               if (this == o)
+                       return true;
+               if (o == null || getClass() != o.getClass())
+                       return false;
+
+               AlertRequestOptions options = (AlertRequestOptions) o;
+
+               return 
buildQueryParameters().equals(options.buildQueryParameters());
+       }
+
+       @Override
+       public int hashCode() {
+               return buildQueryParameters().hashCode();
+       }
+
+       public static class Builder {
+
+               public static AlertRequestOptions targetResource(String 
targetResource) {
+                       return new 
AlertRequestOptions().withTargetResource(targetResource);
+               }
+
+               public static AlertRequestOptions targetResourceGroup(String 
targetResourceGroup) {
+                       return new 
AlertRequestOptions().withTargetResourceGroup(targetResourceGroup);
+               }
+
+               public static AlertRequestOptions 
targetResourceGroupType(String targetResourceGroupType) {
+                       return new 
AlertRequestOptions().withTargetResourceType(targetResourceGroupType);
+               }
+
+               public static AlertRequestOptions monitorService(String 
monitorService) {
+                       return new 
AlertRequestOptions().withMonitorService(monitorService);
+               }
+
+               public static AlertRequestOptions monitorCondition(String 
monitorCondition) {
+                       return new 
AlertRequestOptions().withMonitorCondition(monitorCondition);
+               }
+
+               public static AlertRequestOptions severity(String severity) {
+                       return new AlertRequestOptions().withSeverity(severity);
+               }
+
+               public static AlertRequestOptions alertState(String alertState) 
{
+                       return new 
AlertRequestOptions().withAlertState(alertState);
+               }
+
+               public static AlertRequestOptions alertRule(String alertRule) {
+                       return new 
AlertRequestOptions().withAlertRule(alertRule);
+               }
+
+               public static AlertRequestOptions smartGroupId(String 
smartGroupId) {
+                       return new 
AlertRequestOptions().withSmartGroupId(smartGroupId);
+               }
+
+               public static AlertRequestOptions includeContext(boolean 
includeContext) {
+                       return new 
AlertRequestOptions().withIncludeContext(includeContext);
+               }
+
+               public static AlertRequestOptions includeEgressConfig(boolean 
includeEgressConfig) {
+                       return new 
AlertRequestOptions().withIncludeEgressConfig(includeEgressConfig);
+               }
+
+               public static AlertRequestOptions pageCount(int pageCount) {
+                       return new 
AlertRequestOptions().withPageCount(pageCount);
+               }
+
+               public static AlertRequestOptions sortBy(String sortBy) {
+                       return new AlertRequestOptions().withSortBy(sortBy);
+               }
+
+               public static AlertRequestOptions sortOrder(String sortOrder) {
+                       return new 
AlertRequestOptions().withSortOrder(sortOrder);
+               }
+
+               public static AlertRequestOptions select(String select) {
+                       return new AlertRequestOptions().withSelect(select);
+               }
+
+               public static AlertRequestOptions timeRange(String timeRange) {
+                       return new 
AlertRequestOptions().withTimeRange(timeRange);
+               }
+
+               public static AlertRequestOptions customTimeRange(String 
customTimeRange) {
+                       return new 
AlertRequestOptions().withCustomTimeRange(customTimeRange);
+               }
+
+               public static AlertRequestOptions groupBy(String groupBy) {
+                       return new AlertRequestOptions().withGroupBy(groupBy);
+               }
+
+               public static AlertRequestOptions 
includeSmartGroupsCount(boolean includeSmartGroupsCount) {
+                       return new 
AlertRequestOptions().withIncludeSmartGroupsCount(includeSmartGroupsCount);
+               }
+
+       }
+
+}
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/reference/AlertQueryParams.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/reference/AlertQueryParams.java
new file mode 100644
index 0000000..185a51d
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/reference/AlertQueryParams.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.reference;
+
+public final class AlertQueryParams {
+
+       public static final String TARGET_RESOURCE = "targetResource";
+       public static final String TARGET_RESOURCE_GROUP = 
"targetResourceGroup";
+       public static final String TARGET_RESOURCE_TYPE = 
"targetResourceGroupType";
+       public static final String MONITOR_SERVICE = "monitorService";
+       public static final String MONITOR_CONDITION = "monitorCondition";
+       public static final String SERVERITY = "severity";
+       public static final String ALERT_STATE = "alertState";
+       public static final String ALERT_RULE = "alertRule";
+       public static final String SMART_GROUP_ID = "smartGroupId";
+       public static final String INCLUDE_SMART_GROUPS_COUNT = 
"includeSmartGroupsCount";
+       public static final String INCLUDE_CONTEXT = "includeContext";
+       public static final String INCLUDE_EGRESS_CONFIG = 
"includeEgressConfig";
+       public static final String PAGE_COUNT = "pageCount";
+       public static final String SORT_BY = "sortBy";
+       public static final String SORT_ORDER = "sortOrder";
+       public static final String SELECT = "select";
+       public static final String TIME_RANGE = "timeRange";
+       public static final String CUSTOM_TIME_RANGE = "customTimeRange";
+       public static final String GROUP_BY = "groupby";
+
+       private AlertQueryParams() {
+               throw new AssertionError("intentionally unimplemented");
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ActivityLogAlertApiLiveTest.java
 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ActivityLogAlertApiLiveTest.java
new file mode 100644
index 0000000..8a7397b
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ActivityLogAlertApiLiveTest.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.features;
+
+import static org.testng.Assert.assertTrue;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.checkerframework.checker.nullness.qual.Nullable;
+import org.jclouds.azurecompute.arm.domain.ActivityLogAlert;
+import org.jclouds.azurecompute.arm.domain.ActivityLogAlertProperties;
+import org.jclouds.azurecompute.arm.domain.AlertRuleAllOfCondition;
+import org.jclouds.azurecompute.arm.domain.AlertRuleAnyOfOrLeafCondition;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+@Test(groups = "live", testName = "ActivityLogAlertApiLiveTest", 
singleThreaded = true)
+public class ActivityLogAlertApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+       private String alertRuleName;
+       private String subscriptionid;
+       private final String GLOBAL = "Global";
+
+       @BeforeClass
+       @Override
+       public void setup() {
+               super.setup();
+               subscriptionid = getSubscriptionId();
+               createTestResourceGroup();
+               alertRuleName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(),
+                               System.getProperty("user.name"));
+
+       }        
+
+       private ActivityLogAlertApi api() {
+               return api.getActivityLogAlertApi(resourceGroupName);
+       }
+
+       @Test
+       public void testCreate() {
+               ActivityLogAlert activityAlert = 
api().createOrUpdate(alertRuleName, properties(),
+                               ImmutableMap.of("createdBy", "jclouds"), 
GLOBAL);
+               assertTrue(!activityAlert.type().isEmpty());
+       }
+
+       @Test(dependsOnMethods = "testCreate")
+       public void testGet() {
+               final ActivityLogAlert activityLogAlertRule = 
api().get(alertRuleName);
+               assertTrue(!activityLogAlertRule.name().isEmpty());
+       }
+
+       @Test(dependsOnMethods = "testCreate")
+       public void testList() {
+               List<ActivityLogAlert> list = api().list();
+               final ActivityLogAlert activityLogAlertRule = 
api().get(alertRuleName);
+               boolean alertRulePresent = Iterables.any(list, new 
Predicate<ActivityLogAlert>() {
+                       @Override
+                       public boolean apply(@Nullable ActivityLogAlert input) {
+                               return 
input.name().equals(activityLogAlertRule.name());
+                       }
+               });
+
+               assertTrue(alertRulePresent);
+       }
+
+       @Test(dependsOnMethods = "testList", alwaysRun = true)
+       public void testDelete() throws Exception {
+               URI uri = api().delete(alertRuleName);
+               assertResourceDeleted(uri);
+       }
+
+       public ActivityLogAlertProperties properties() {
+               return ActivityLogAlertProperties.create("LiveTest", true,
+                               Arrays.asList("/subscriptions/" + 
subscriptionid + "/resourceGroups/" + resourceGroupName), condition(),
+                               null);
+
+       }
+
+       public AlertRuleAllOfCondition condition() {
+               final List<AlertRuleAnyOfOrLeafCondition> list1 = new 
ArrayList<>();
+               final AlertRuleAnyOfOrLeafCondition 
alertRuleAnyOfOrLeafCondition0 = AlertRuleAnyOfOrLeafCondition.create(null,
+                               null, "Administrative", "category");
+               final AlertRuleAnyOfOrLeafCondition 
alertRuleAnyOfOrLeafCondition1 = AlertRuleAnyOfOrLeafCondition.create(null,
+                               null, "Microsoft.Compute/virtualMachines", 
"resourceType");
+               list1.add(alertRuleAnyOfOrLeafCondition0);
+               list1.add(alertRuleAnyOfOrLeafCondition1);
+               final AlertRuleAllOfCondition condtion = 
AlertRuleAllOfCondition.create(list1, null);
+               return condtion;
+       }
+
+}
diff --git 
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ActivityLogAlertApiMockTest.java
 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ActivityLogAlertApiMockTest.java
new file mode 100644
index 0000000..1853449
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ActivityLogAlertApiMockTest.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.features;
+
+import static com.google.common.collect.Iterables.isEmpty;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jclouds.azurecompute.arm.domain.ActionGroup;
+import org.jclouds.azurecompute.arm.domain.Actions;
+import org.jclouds.azurecompute.arm.domain.ActivityLogAlert;
+import org.jclouds.azurecompute.arm.domain.ActivityLogAlertProperties;
+import org.jclouds.azurecompute.arm.domain.AlertRuleAllOfCondition;
+import org.jclouds.azurecompute.arm.domain.AlertRuleAnyOfOrLeafCondition;
+import org.jclouds.azurecompute.arm.domain.AlertRuleLeafCondition;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
+import org.testng.annotations.Test;
+
+import okhttp3.mockwebserver.MockResponse;
+
+@Test(groups = "unit", testName = "ActivityLogAlertApiMockTest", 
singleThreaded = true)
+public class ActivityLogAlertApiMockTest extends BaseAzureComputeApiMockTest {
+
+       public void testList() throws InterruptedException {
+               
server.enqueue(jsonResponse("/activitylogalertresourcegroup.json"));
+               final ActivityLogAlertApi activityLogAlertApi = 
api.getActivityLogAlertApi("myResourceGroup");
+               assertEquals(activityLogAlertApi.list(), 
getActivityLogRuleList());
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/Microsoft.Insights/activityLogAlerts?api-version=2020-10-01");
+       }
+
+       private List<ActivityLogAlert> getActivityLogRuleList() {
+               List<ActivityLogAlert> activityLogAlertRules = new 
ArrayList<ActivityLogAlert>();
+               activityLogAlertRules.add(ActivityLogAlert.create(
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/myActivityLog",
+                               "myActivityLog", "Global", 
"Microsoft.Insights/ActivityLogAlerts", tags(),
+                               myActivityLogAlertProperties()));
+               activityLogAlertRules.add(ActivityLogAlert.create(
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/simpleActivityLog",
+                               "simpleActivityLog", "Global", 
"Microsoft.Insights/ActivityLogAlerts", null,
+                               sampleActivityLogAlertProperties()));
+               return activityLogAlertRules;
+       }
+
+       public ActivityLogAlertProperties myActivityLogAlertProperties() {
+               return ActivityLogAlertProperties.create("", false, scope0(), 
condition0(), actions());
+       }
+
+       public ActivityLogAlertProperties sampleActivityLogAlertProperties() {
+               return ActivityLogAlertProperties.create("", true, scope1(), 
condition1(), actions());
+
+       }
+
+       public void testListEmpty() throws Exception {
+               server.enqueue(new MockResponse().setResponseCode(404));
+               final ActivityLogAlertApi activityApi = 
api.getActivityLogAlertApi("groupname");
+               List<ActivityLogAlert> list = activityApi.list();
+               assertTrue(isEmpty(list));
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/groupname/providers/Microsoft.Insights/activityLogAlerts?api-version=2020-10-01");
+       }
+
+       public void testGet() throws InterruptedException {
+               server.enqueue(jsonResponse("/activitylogalertget.json"));
+               final ActivityLogAlertApi activityApi = 
api.getActivityLogAlertApi("myResourceGroup");
+               ActivityLogAlert alert = activityApi.get("myActivityLogAlert");
+               assertEquals(alert.location(), "Global");
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/Microsoft.Insights/activityLogAlerts/myActivityLogAlert?api-version=2020-10-01");
+       }
+       
+       public void testGetReturns404() throws InterruptedException {
+               server.enqueue(response404());
+               final ActivityLogAlertApi activityApi = 
api.getActivityLogAlertApi("myResourceGroup");
+               ActivityLogAlert alert = activityApi.get("myActivityLogAlert");
+               assertNull(alert);
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/Microsoft.Insights/activityLogAlerts/myActivityLogAlert?api-version=2020-10-01");
+       }
+
+       public void testDelete() throws Exception {
+               server.enqueue(response202WithHeader());
+               final ActivityLogAlertApi activityApi = 
api.getActivityLogAlertApi("myResourceGroup");
+               URI uri = activityApi.delete("myActivityLogAlert");
+               assertEquals(server.getRequestCount(), 1);
+               assertNotNull(uri);
+               assertSent(server, "DELETE",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/Microsoft.Insights/activityLogAlerts/myActivityLogAlert?api-version=2020-10-01");
+       }
+
+       public void testDeleteReturns404() throws Exception {
+               server.enqueue(response404());
+               final ActivityLogAlertApi activityApi = 
api.getActivityLogAlertApi("myResourceGroup");
+               URI uri = activityApi.delete("myActivityLogAlert");
+               assertEquals(server.getRequestCount(), 1);
+               assertNull(uri);
+               assertSent(server, "DELETE",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/Microsoft.Insights/activityLogAlerts/myActivityLogAlert?api-version=2020-10-01");
+       }
+
+       public Map<String, String> tags() {
+               Map<String, String> tags = new HashMap<>();
+               tags.put("key1", "value1");
+               tags.put("key2", "value2");
+               return tags;
+       }
+
+       public List<String> scope0() {
+               List<String> list = new ArrayList<String>();
+               list.add(
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM");
+               return list;
+       }
+
+       public List<String> scope1() {
+               List<String> list = new ArrayList<String>();
+               list.add(
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/simpleVM");
+
+               return list;
+       }
+
+       public AlertRuleAllOfCondition condition0() {
+               final List<AlertRuleAnyOfOrLeafCondition> list1 = new 
ArrayList<>();
+               final AlertRuleAnyOfOrLeafCondition 
alertRuleAnyOfOrLeafCondition = AlertRuleAnyOfOrLeafCondition.create(null,
+                               null, "ServiceHealth", "category");
+               list1.add(alertRuleAnyOfOrLeafCondition);
+               final AlertRuleAllOfCondition condtion = 
AlertRuleAllOfCondition.create(list1, "");
+               return condtion;
+       }
+
+       public AlertRuleAllOfCondition condition1() {
+               final List<AlertRuleAnyOfOrLeafCondition> list1 = new 
ArrayList<>();
+               final AlertRuleAnyOfOrLeafCondition 
alertRuleAnyOfOrLeafCondition0 = AlertRuleAnyOfOrLeafCondition.create(null,
+                               null, "Administrative", "category");
+               final AlertRuleAnyOfOrLeafCondition 
alertRuleAnyOfOrLeafCondition1 = AlertRuleAnyOfOrLeafCondition.create(null,
+                               null, 
"Microsoft.Compute/virtualMachines/write", "operationName");
+               list1.add(alertRuleAnyOfOrLeafCondition0);
+               list1.add(alertRuleAnyOfOrLeafCondition1);
+               final AlertRuleAllOfCondition condtion = 
AlertRuleAllOfCondition.create(list1, null);
+               return condtion;
+       }
+
+       public List<AlertRuleAnyOfOrLeafCondition> allOf() {
+               List<AlertRuleAnyOfOrLeafCondition> list = new ArrayList<>();
+               list.add(anyOfOrLeafCondition());
+               return list;
+       }
+
+       public AlertRuleAnyOfOrLeafCondition anyOfOrLeafCondition() {
+               AlertRuleAnyOfOrLeafCondition alertRule = 
AlertRuleAnyOfOrLeafCondition.create(leafCondition(), null, null,
+                               null);
+               return alertRule;
+       }
+
+       public List<AlertRuleLeafCondition> leafCondition() {
+               final List<AlertRuleLeafCondition> list = new ArrayList<>();
+               final AlertRuleLeafCondition alertRuleLeafCondition = 
AlertRuleLeafCondition.create(null, "ServiceHealth",
+                               "category");
+               list.add(alertRuleLeafCondition);
+               return list;
+       }
+
+       public Actions actions() {
+               List<ActionGroup> list = new ArrayList<>();
+               ActionGroup actionGroup = ActionGroup.create(
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.insights/actiongroups/myAction",
+                               null);
+               list.add(actionGroup);
+               Actions action = Actions.create(list);
+               return action;
+       }
+
+       public void testCreate() throws Exception {
+               server.enqueue(jsonResponse("/activitylogalertcreate.json"));
+               final ActivityLogAlertApi activityApi = 
api.getActivityLogAlertApi("myResourceGroup");
+               ActivityLogAlert activityAlert = 
activityApi.createOrUpdate("myActivityLogAlertRule",
+                               myActivityLogAlertProperties(), new 
HashMap<>(), "Global");
+               final ActivityLogAlert expected = ActivityLogAlert.create(
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/myActivityLogAlertRule",
+                               "myActivityLogAlertRule", "Global", 
"Microsoft.Insights/ActivityLogAlerts", tags(),
+                               myActivityLogAlertProperties());
+               assertEquals(activityAlert.id(), expected.id());
+               assertSent(server, "PUT",
+                               
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/Microsoft.Insights/activityLogAlerts/myActivityLogAlertRule?validating=false&api-version=2020-10-01");
+
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AlertApiLiveTest.java
 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AlertApiLiveTest.java
new file mode 100644
index 0000000..66bba8c
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AlertApiLiveTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.features;
+
+import static org.junit.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.List;
+
+import org.jclouds.azurecompute.arm.domain.Alert;
+import org.jclouds.azurecompute.arm.domain.AlertModification;
+import org.jclouds.azurecompute.arm.domain.AlertSummary;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
+import org.jclouds.azurecompute.arm.options.AlertRequestOptions;
+import org.testng.annotations.Test;
+
+@Test(groups = "live", testName = "AlertApiLiveTest", singleThreaded = true)
+public class AlertApiLiveTest extends BaseAzureComputeApiLiveTest {
+
+       private String alertId;
+
+       private AlertApi alertApi() {
+               return api.getAlertApi("");
+       }
+
+       @Test
+       public void testList() {
+               AlertRequestOptions pageCount = 
AlertRequestOptions.Builder.pageCount(1);
+               List<Alert> result = alertApi().list(pageCount);
+               System.out.println(result.size());
+               assertNotNull(result);
+               assertTrue(result.size() > 0);
+               final String id = result.get(0).id();
+               alertId = id.substring(id.lastIndexOf("/") + 1);
+       }
+
+       @Test(dependsOnMethods = "testList")
+       public void testGetById() {
+               Alert alert = alertApi().get(alertId);
+               assertNotNull(alert);
+       }
+
+       @Test(dependsOnMethods = "testList")
+       public void testGetHistory() {
+               AlertModification history = alertApi().getHistory(alertId);
+               assertNotNull(history);
+       }
+
+       @Test(dependsOnMethods = "testList")
+       public void testGetSummary() {
+               AlertRequestOptions groupByOption = 
AlertRequestOptions.Builder.groupBy("severity");
+               AlertSummary summary = alertApi().getSummary(groupByOption);
+               assertNotNull(summary);
+       }
+
+       @Test(dependsOnMethods = "testList")
+       public void testAlertChangeState() {
+               Alert alert = alertApi().changeState(alertId, "Closed");
+               assertNotNull(alert);
+               assertEquals("Closed", 
alertApi().get(alertId).properties().essentials().alertState().name());
+       }
+}
diff --git 
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AlertApiMockTest.java
 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AlertApiMockTest.java
new file mode 100644
index 0000000..c692d9d
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AlertApiMockTest.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.features;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.testng.Assert.assertEquals;
+
+import java.util.List;
+
+import org.jclouds.azurecompute.arm.domain.Alert;
+import org.jclouds.azurecompute.arm.domain.AlertModification;
+import org.jclouds.azurecompute.arm.domain.AlertSummary;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
+import org.jclouds.azurecompute.arm.options.AlertRequestOptions;
+import org.testng.annotations.Test;
+
+import static com.google.common.collect.Iterables.isEmpty;
+import okhttp3.mockwebserver.MockResponse;
+
+@Test(groups = "unit", testName = "AlertApiMockTest", singleThreaded = true)
+public class AlertApiMockTest extends BaseAzureComputeApiMockTest {
+
+       public void testGetById() throws InterruptedException {
+               server.enqueue(jsonResponse("/alertsgetbyid.json"));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               Alert alert = 
alertApi.get("60c4d62b-xxxx-46d8-0000-b6dd8c4a769e");
+               final String alertName = alert.name();
+               assertEquals(alertName, "SampleAlert");
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts/60c4d62b-xxxx-46d8-0000-b6dd8c4a769e?api-version=2019-03-01");
+       }
+
+       public void testGetByIdEmpty() throws Exception {
+               server.enqueue(new MockResponse().setResponseCode(404));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               Alert alert = 
alertApi.get("60c4d62b-xxxx-46d8-0000-b6dd8c4a769e");
+               assertNull(alert);
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts/60c4d62b-xxxx-46d8-0000-b6dd8c4a769e?api-version=2019-03-01");
+       }
+
+       public void testGetHistory() throws InterruptedException {
+               server.enqueue(jsonResponse("/alertgethistory.json"));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               AlertModification history = 
alertApi.getHistory("d9db1f27-ce08-4c6d-8ab6-c0a8fbd8bf64");
+               final String type = history.type();
+               assertEquals(type, "Microsoft.AlertsManagement/alerts");
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts/d9db1f27-ce08-4c6d-8ab6-c0a8fbd8bf64/history?api-version=2019-03-01");
+       }
+
+       public void testGetHistoryEmpty() throws Exception {
+               server.enqueue(new MockResponse().setResponseCode(404));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               AlertModification history = 
alertApi.getHistory("d9db1f27-ce08-4c6d-8ab6-c0a8fbd8bf64");
+               assertNull(history);
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts/d9db1f27-ce08-4c6d-8ab6-c0a8fbd8bf64/history?api-version=2019-03-01");
+       }
+
+       public void testGetSummary() throws InterruptedException {
+               server.enqueue(jsonResponse("/alertgetsummary.json"));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               AlertRequestOptions groupByOption = 
AlertRequestOptions.Builder.groupBy("severity");
+               AlertSummary summary = alertApi.getSummary(groupByOption);
+               final String alertName = summary.name();
+               assertEquals(alertName, "current");
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alertsSummary?groupby=severity&api-version=2019-03-01");
+       }
+
+       public void testGetSummaryEmpty() throws Exception {
+               server.enqueue(new MockResponse().setResponseCode(404));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               AlertRequestOptions groupByOption = 
AlertRequestOptions.Builder.groupBy("severity");
+               AlertSummary summary = alertApi.getSummary(groupByOption);
+               assertNull(summary);
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alertsSummary?groupby=severity&api-version=2019-03-01");
+       }
+
+       public void testGetAll() throws InterruptedException {
+               server.enqueue(jsonResponse("/alertgetall.json"));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               List<Alert> list = alertApi.list();
+               assertEquals(list.get(0).name(), "HostPoolAlert");
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts?api-version=2019-03-01");
+       }
+
+       public void testGetAllEmpty() throws Exception {
+               server.enqueue(new MockResponse().setResponseCode(404));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               List<Alert> list = alertApi.list();
+               assertTrue(isEmpty(list));
+               assertSent(server, "GET",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts?api-version=2019-03-01");
+       }
+
+       public void testAlertChangeState() throws InterruptedException {
+               server.enqueue(jsonResponse("/alertchangestate.json"));
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               Alert alert = 
alertApi.changeState("650d5726-xxxx-4e8c-0000-504d577da210", "Closed");
+               assertNotNull(alert);
+               assertSent(server, "POST",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts/650d5726-xxxx-4e8c-0000-504d577da210/changestate?newState=Closed&api-version=2019-03-01");
+       }
+       
+       public void testAlertChangeStateReturns404() throws 
InterruptedException {
+               server.enqueue(response404());
+               final AlertApi alertApi = 
api.getAlertApi("resourceGroups/myResourceGroup");
+               Alert alert = 
alertApi.changeState("650d5726-xxxx-4e8c-0000-504d577da210", "Closed");
+               assertNull(alert);
+               assertSent(server, "POST",
+                               
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.AlertsManagement/alerts/650d5726-xxxx-4e8c-0000-504d577da210/changestate?newState=Closed&api-version=2019-03-01");
+               
+       }       
+}
diff --git 
a/providers/azurecompute-arm/src/test/resources/activitylogalertcreate.json 
b/providers/azurecompute-arm/src/test/resources/activitylogalertcreate.json
new file mode 100644
index 0000000..ab38fa5
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/activitylogalertcreate.json
@@ -0,0 +1,33 @@
+{
+       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/myActivityLogAlertRule",
+       "type": "Microsoft.Insights/ActivityLogAlerts",
+       "name": "myActivityLogAlertRule",
+       "location": "Global",
+       "properties": {
+               "scopes": [
+                       
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/VM"
+               ],
+               "condition": {
+                       "allOf": [
+                               {
+                                       "field": "category",
+                                       "equals": "ServiceHealth",
+                                       "containsAny": null,
+                                       "odata.type": null
+                               }
+                       ],
+                       "odata.type": ""
+               },
+               "actions": {
+                       "actionGroups": [
+                               {
+                                       "actionGroupId": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.insights/actiongroups/myAction",
+                                       "webhookProperties": null
+                               }
+                       ]
+               },
+               "enabled": false,
+               "description": ""
+       },
+       "identity": null
+}
\ No newline at end of file
diff --git 
a/providers/azurecompute-arm/src/test/resources/activitylogalertget.json 
b/providers/azurecompute-arm/src/test/resources/activitylogalertget.json
new file mode 100644
index 0000000..8990041
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/activitylogalertget.json
@@ -0,0 +1,46 @@
+{
+       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/myActivityLogAlert",
+       "type": "Microsoft.Insights/ActivityLogAlerts",
+       "name": "myActivityLogAlert",
+       "location": "Global",
+       "kind": null,
+       "tags": {
+               "key1": "Test",
+               "key2": "Testing"
+       },
+       "properties": {
+               "scopes": [
+                       
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/VM"
+               ],
+               "condition": {
+                       "allOf": [
+                               {
+                                       "field": "category",
+                                       "equals": "Administrative",
+                                       "containsAny": null,
+                                       "odata.type": null
+                               },
+                               {
+                                       "field": "operationName",
+                                       "equals": 
"Microsoft.Compute/virtualMachines/write",
+                                       "containsAny": null,
+                                       "odata.type": null
+                               }
+                       ],
+                       "odata.type": null
+               },
+               "actions": {
+                       "actionGroups": [
+                               {
+                                       "actionGroupId": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/armdemo/providers/microsoft.insights/actiongroups/actions",
+                                       "webhookProperties": {
+                                               
+                                       }
+                               }
+                       ]
+               },
+               "enabled": true,
+               "description": "test"
+       },
+       "identity": null
+}
\ No newline at end of file
diff --git 
a/providers/azurecompute-arm/src/test/resources/activitylogalertresourcegroup.json
 
b/providers/azurecompute-arm/src/test/resources/activitylogalertresourcegroup.json
new file mode 100644
index 0000000..053e909
--- /dev/null
+++ 
b/providers/azurecompute-arm/src/test/resources/activitylogalertresourcegroup.json
@@ -0,0 +1,79 @@
+{
+       "value": [
+               {
+                       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/myActivityLog",
+                       "type": "Microsoft.Insights/ActivityLogAlerts",
+                       "name": "myActivityLog",
+                       "location": "Global",
+                       "kind": null,
+                       "tags": {
+                               "key1": "value1",
+                               "key2": "value2"
+                       },
+                       "properties": {
+                               "scopes": [
+                                       
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"
+                               ],
+                               "condition": {
+                                       "allOf": [
+                                               {
+                                                       "field": "category",
+                                                       "equals": 
"ServiceHealth",
+                                                       "containsAny": null     
                                                
+                                               } 
+                                       ],
+                                       "odata.type": ""
+                               },
+                               "actions": {
+                                       "actionGroups": [
+                                               {
+                                 "actionGroupId": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.insights/actiongroups/myAction",
+                                 "webhookProperties": null
+                               }
+                                       ]
+                               },
+                               "enabled": false,
+                               "description": ""
+                       },
+                       "identity": null
+               },
+               {
+                       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/simpleActivityLog",
+                       "type": "Microsoft.Insights/ActivityLogAlerts",
+                       "name": "simpleActivityLog",
+                       "location": "Global",
+                       "kind": null,                   
+                       "properties": {
+                               "scopes": [
+                                       
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/simpleVM"
+                               ],
+                               "condition": {
+                                       "allOf": [
+                                               {
+                                                       "field": "category",
+                                                       "equals": 
"Administrative",
+                                                       "containsAny": null     
                                                
+                                               },
+                                               {
+                                                       "field": 
"operationName",
+                                                       "equals": 
"Microsoft.Compute/virtualMachines/write",
+                                                       "containsAny": null     
                                                
+                                               }
+                                       ],
+                                       "odata.type": null
+                               },
+                               "actions": {
+                                       "actionGroups": [
+                                               {
+                                                       "actionGroupId": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.insights/actiongroups/myAction",
+                                                       "webhookProperties": 
null                                                                            
                           
+                                               }
+                                       ]
+                               },
+                               "enabled": true,
+                               "description": ""
+                       },
+                       "identity": null
+               }
+       ]
+}
\ No newline at end of file
diff --git 
a/providers/azurecompute-arm/src/test/resources/alertchangestate.json 
b/providers/azurecompute-arm/src/test/resources/alertchangestate.json
new file mode 100644
index 0000000..de5fac4
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/alertchangestate.json
@@ -0,0 +1,28 @@
+{
+       "properties": {
+               "essentials": {
+                       "severity": "Sev4",
+                       "signalType": "Log",
+                       "alertState": "Closed",
+                       "monitorCondition": "Fired",
+                       "monitorService": "ActivityLog Administrative",
+                       "targetResource": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.desktopvirtualization/hostpools/test",
+                       "targetResourceName": "test",
+                       "targetResourceGroup": "simple-vm",
+                       "targetResourceType": 
"microsoft.desktopvirtualization/hostpools",
+                       "sourceCreatedId": 
"e9bac899-9b62-4a4c-bdf0-03d0b36de44d_b19412575e566c1d66904f19b7bd652c",
+                       "smartGroupId": "5578c276-b1ac-449c-99e2-7890fa1ff59b",
+                       "alertRule": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/HostPoolAlert",
+                       "startDateTime": "2021-12-16T11:18:24.7655495Z",
+                       "lastModifiedDateTime": "2021-12-17T05:57:33.8879323Z",
+                       "lastModifiedUserName": "[email protected]",
+                       "actionStatus": {
+                               "isSuppressed": false
+                       },
+                       "description": ""
+               }               
+       },
+       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.desktopvirtualization/hostpools/test/providers/Microsoft.AlertsManagement/alerts/650d5726-xxxx-4e8c-0000-504d577da210",
+       "type": "Microsoft.AlertsManagement/alerts",
+       "name": "HostPoolAlert"
+}
\ No newline at end of file
diff --git a/providers/azurecompute-arm/src/test/resources/alertgetall.json 
b/providers/azurecompute-arm/src/test/resources/alertgetall.json
new file mode 100644
index 0000000..ea9001d
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/alertgetall.json
@@ -0,0 +1,32 @@
+{
+       "value": [
+               {
+                       "properties": {
+                               "essentials": {
+                                       "alertRule": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/HostPoolAlert",
+                                       "alertState": "New",
+                                       "severity": "Sev4",
+                                       "signalType": "Log",
+                                       "monitorCondition": "Fired",
+                                       "monitorService": "ActivityLog 
Administrative",
+                                       "targetResource": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.desktopvirtualization/hostpools/test",
+                                       "targetResourceName": "test",
+                                       "targetResourceGroup": "tidal-vm",
+                                       "targetResourceType": 
"microsoft.desktopvirtualization/hostpools",
+                                       "sourceCreatedId": 
"e9bac899-9b62-4a4c-bdf0-03d0b36de44d_b19412575e566c1d66904f19b7bd652c",
+                                       "smartGroupId": 
"5578c276-b1ac-449c-99e2-7890fa1ff59b",
+                                       "startDateTime": 
"2021-12-16T11:18:24.7655495Z",
+                                       "lastModifiedDateTime": 
"2021-12-16T11:18:24.7655495Z",
+                                       "lastModifiedUserName": "System",
+                                       "actionStatus": {
+                                               "isSuppressed": false
+                                       },
+                                       "description": ""
+                               }
+                       },
+                       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.desktopvirtualization/hostpools/test/providers/Microsoft.AlertsManagement/alerts/650d5726-44d5-4e8c-a7b4-504d577da210",
+                       "type": "Microsoft.AlertsManagement/alerts",
+                       "name": "HostPoolAlert"
+               }
+       ]
+}
\ No newline at end of file
diff --git a/providers/azurecompute-arm/src/test/resources/alertgethistory.json 
b/providers/azurecompute-arm/src/test/resources/alertgethistory.json
new file mode 100644
index 0000000..8f6eafd
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/alertgethistory.json
@@ -0,0 +1,19 @@
+{
+       "properties": {
+               "alertId": "d9db1f27-ce08-4c6d-8ab6-c0a8fbd8bf64",
+               "modifications": [
+                       {
+                               "modificationEvent": "AlertCreated",
+                               "oldValue": "",
+                               "newValue": "",
+                               "modifiedAt": "2021-12-15T18:01:42.4020003Z",
+                               "modifiedBy": "System",
+                               "comments": "",
+                               "description": "Alert fired"
+                       }
+               ]
+       },
+       "id": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.compute/virtualmachines/mac/providers/Microsoft.AlertsManagement/alerts/d9db1f27-ce08-4c6d-8ab6-c0a8fbd8bf64/history/default",
+       "type": "Microsoft.AlertsManagement/alerts",
+       "name": "myRule"
+}
\ No newline at end of file
diff --git a/providers/azurecompute-arm/src/test/resources/alertgetsummary.json 
b/providers/azurecompute-arm/src/test/resources/alertgetsummary.json
new file mode 100644
index 0000000..b3329a0
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/alertgetsummary.json
@@ -0,0 +1,31 @@
+{
+       "properties": {
+               "groupedby": "severity",
+               "total": 1,
+               "values": [
+                       {
+                               "name": "Sev0",
+                               "count": 0
+                       },
+                       {
+                               "name": "Sev1",
+                               "count": 0
+                       },
+                       {
+                               "name": "Sev2",
+                               "count": 0
+                       },
+                       {
+                               "name": "Sev3",
+                               "count": 0
+                       },
+                       {
+                               "name": "Sev4",
+                               "count": 1
+                       }
+               ]
+       },
+       "id": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.desktopvirtualization/hostpools/test/providers/Microsoft.AlertsManagement/alertsSummary/current",
+       "type": "Microsoft.AlertsManagement/alertsSummary",
+       "name": "current"
+}
\ No newline at end of file
diff --git a/providers/azurecompute-arm/src/test/resources/alertsgetbyid.json 
b/providers/azurecompute-arm/src/test/resources/alertsgetbyid.json
new file mode 100644
index 0000000..096152d
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/alertsgetbyid.json
@@ -0,0 +1,29 @@
+{
+  "properties": {
+    "essentials": {
+      "severity": "Sev4",
+      "signalType": "Log",
+      "alertState": "Acknowledged",
+      "monitorCondition": "Fired",
+      "monitorService": "ActivityLog Administrative",
+      "targetResource": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.compute/virtualmachines/mac",
+      "targetResourceName": "mac",
+      "targetResourceGroup": "myResourceGroup",
+      "targetResourceType": "microsoft.compute/virtualmachines",
+      "sourceCreatedId": 
"4f4f8514-8dcc-483d-bfd4-90142a63fe06_952656992461616e11c062eeaaed472d",
+      "smartGroupId": "54ebf82c-b522-4520-b582-6c6382477b6a",
+      "smartGroupingReason": "Similar to other alerts in the group",
+      "alertRule": 
"/subscriptions/SUBSCRIPTIONID/resourceGroups/myResourceGroup/providers/microsoft.insights/activityLogAlerts/SampleAlert",
+      "startDateTime": "2021-12-15T04:21:17.7200826Z",
+      "lastModifiedDateTime": "2021-12-15T04:23:20.9184138Z",
+      "lastModifiedUserName": "[email protected]",
+      "actionStatus": {
+        "isSuppressed": false
+      },
+      "description": ""
+    } 
+  },
+  "id": 
"/subscriptions/SUBSCRIPTIONID/resourcegroups/myResourceGroup/providers/microsoft.compute/virtualmachines/mac/providers/Microsoft.AlertsManagement/alerts/60c4d62b-xxxx-46d8-0000-b6dd8c4a769e",
+  "type": "Microsoft.AlertsManagement/alerts",
+  "name": "SampleAlert"
+}
\ No newline at end of file

Reply via email to