mirror of https://github.com/apache/jclouds.git
JCLOUDS-1597: Support for Alerts (#133)
This commit is contained in:
parent
738a01dda6
commit
99f2ff86da
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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");
|
||||
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
Loading…
Reference in New Issue