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