JCLOUDS-1597: Support for Alerts (#133)

This commit is contained in:
SATYANAN-ANAND 2022-02-21 02:37:50 -08:00 committed by GitHub
parent 738a01dda6
commit 99f2ff86da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 1936 additions and 5 deletions

View File

@ -21,6 +21,7 @@ import javax.ws.rs.PathParam;
import org.jclouds.azurecompute.arm.domain.ServicePrincipal; import org.jclouds.azurecompute.arm.domain.ServicePrincipal;
import org.jclouds.azurecompute.arm.features.ActivityLogAlertApi; 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.AvailabilitySetApi;
import org.jclouds.azurecompute.arm.features.DeploymentApi; import org.jclouds.azurecompute.arm.features.DeploymentApi;
import org.jclouds.azurecompute.arm.features.DiskApi; import org.jclouds.azurecompute.arm.features.DiskApi;
@ -305,4 +306,13 @@ public interface AzureComputeApi extends Closeable {
*/ */
@Delegate @Delegate
ActivityLogAlertApi getActivityLogAlertApi(@PathParam("resourcegroup") String resourcegroup); 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);
} }

View File

@ -40,6 +40,7 @@ import java.util.Properties;
import org.jclouds.azurecompute.arm.domain.Region; import org.jclouds.azurecompute.arm.domain.Region;
import org.jclouds.azurecompute.arm.features.ActivityLogAlertApi; 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.AvailabilitySetApi;
import org.jclouds.azurecompute.arm.features.DeploymentApi; import org.jclouds.azurecompute.arm.features.DeploymentApi;
import org.jclouds.azurecompute.arm.features.DiskApi; 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 + VirtualNetworkGatewayApi.class.getSimpleName(), "2018-02-01");
properties.put(API_VERSION_PREFIX + VirtualNetworkGatewayConnectionApi.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 + ActivityLogAlertApi.class.getSimpleName(), "2020-10-01");
properties.put(API_VERSION_PREFIX + AlertApi.class.getSimpleName(), "2019-03-01");
return properties; return properties;
} }

View File

@ -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);
}
}

View File

@ -28,9 +28,8 @@ public abstract class ActivityLogAlertProperties {
@Nullable @Nullable
public abstract String description(); public abstract String description();
@Nullable public abstract boolean enabled();
public abstract Boolean enabled();
@Nullable @Nullable
public abstract List<String> scopes(); public abstract List<String> scopes();
@ -42,7 +41,7 @@ public abstract class ActivityLogAlertProperties {
public abstract Actions actions(); public abstract Actions actions();
@SerializedNames({ "description", "enabled", "scopes", "condition", "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) { final List<String> scopes, final AlertRuleAllOfCondition condition, final Actions actions) {
return builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions) return builder().description(description).enabled(enabled).scopes(scopes).condition(condition).actions(actions)
.build(); .build();
@ -58,7 +57,7 @@ public abstract class ActivityLogAlertProperties {
public abstract static class Builder { public abstract static class Builder {
public abstract Builder description(String description); 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); public abstract Builder scopes(List<String> scopes);

View File

@ -0,0 +1,61 @@
/*
* 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.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Alert {
public abstract String id();
public abstract String name();
public abstract String type();
@Nullable
public abstract AlertProperties properties();
@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_Alert.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(AlertProperties properties);
public abstract Alert build();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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.domain.JsonBall;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class AlertProperties {
@Nullable
public abstract JsonBall context();
@Nullable
public abstract JsonBall egressConfig();
@Nullable
public abstract Essentials essentials();
@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_AlertProperties.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder context(JsonBall context);
public abstract Builder egressConfig(JsonBall egressConfig);
public abstract Builder essentials(Essentials essentials);
public abstract AlertProperties build();
}
}

View File

@ -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();
}
}

View File

@ -0,0 +1,64 @@
/*
* 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.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class AlertSummaryGroup {
public abstract String groupedby();
@Nullable
public abstract Integer smartGroupsCount();
public abstract int total();
@Nullable
public abstract List<AlertSummaryGroupItem> values();
@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_AlertSummaryGroup.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder groupedby(String groupedby);
public abstract Builder smartGroupsCount(Integer smartGroupsCount);
public abstract Builder total(int total);
public abstract Builder values(List<AlertSummaryGroupItem> values);
public abstract AlertSummaryGroup build();
}
}

View File

@ -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.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class AlertSummaryGroupItem {
@Nullable
public abstract String groupedby();
public abstract String name();
public abstract int count();
@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_AlertSummaryGroupItem.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder groupedby(String groupedby);
public abstract Builder name(String name);
public abstract Builder count(int count);
public abstract AlertSummaryGroupItem build();
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}
}

View File

@ -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");
}
}

View File

@ -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;
}
}

View File

@ -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");
}
}

View File

@ -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());
}
}

View File

@ -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");
}
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}
]
}

View File

@ -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": "abc@xyz.com",
"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"
}

View File

@ -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"
}
]
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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": "abc@xyz.com",
"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"
}