use of com.amazonaws.services.cloudwatch.model.AmazonCloudWatchException in project cloudbreak by hortonworks.
the class AwsCloudWatchService method deleteCloudWatchAlarms.
private void deleteCloudWatchAlarms(String regionName, AwsCredentialView credentialView, List<String> alarmNames) {
LOGGER.info("Attempting to delete cloudwatch alarms [{}]", alarmNames);
try {
DeleteAlarmsRequest deleteAlarmsRequest = new DeleteAlarmsRequest().withAlarmNames(alarmNames);
AmazonCloudWatchClient amazonCloudWatchClient = awsClient.createCloudWatchClient(credentialView, regionName);
amazonCloudWatchClient.deleteAlarms(deleteAlarmsRequest);
LOGGER.info("Deleted cloudwatch alarms [{}]", alarmNames);
} catch (AmazonCloudWatchException acwe) {
LOGGER.error("Unable to delete cloudwatch alarms [{}]: {}", alarmNames, acwe.getLocalizedMessage());
throw new CloudConnectorException("Unable to delete cloud watch alarms: " + acwe.getLocalizedMessage(), acwe);
}
}
use of com.amazonaws.services.cloudwatch.model.AmazonCloudWatchException in project cloudbreak by hortonworks.
the class AwsNativeCloudWatchService method deleteCloudWatchAlarms.
private void deleteCloudWatchAlarms(String regionName, AwsCredentialView credentialView, List<String> alarmNames) {
LOGGER.info("Attempting to delete cloudwatch alarms [{}]", alarmNames);
try {
DeleteAlarmsRequest deleteAlarmsRequest = new DeleteAlarmsRequest().withAlarmNames(alarmNames);
commonAwsClient.createCloudWatchClient(credentialView, regionName).deleteAlarms(deleteAlarmsRequest);
LOGGER.info("Deleted cloudwatch alarms [{}]", alarmNames);
} catch (AmazonCloudWatchException acwe) {
LOGGER.error("Unable to delete cloudwatch alarms [{}]: {}", alarmNames, acwe.getLocalizedMessage());
throw new CloudConnectorException("Unable to delete cloud watch alarms: " + acwe.getLocalizedMessage(), acwe);
}
}
use of com.amazonaws.services.cloudwatch.model.AmazonCloudWatchException in project cloudbreak by hortonworks.
the class AwsNativeCloudWatchService method getExistingCloudWatchAlarms.
private Stream<List<String>> getExistingCloudWatchAlarms(String regionName, AwsCredentialView credentialView, List<String> alarmNames) {
Stream<List<String>> filteredAlarmNamesStream;
LOGGER.info("Searching for cloudwatch alarms [{}]", alarmNames);
try {
DescribeAlarmsRequest request = new DescribeAlarmsRequest().withAlarmNames(alarmNames).withMaxRecords(maxBatchsize);
List<String> filteredAlarmNames = commonAwsClient.createCloudWatchClient(credentialView, regionName).describeAlarms(request).getMetricAlarms().stream().map(MetricAlarm::getAlarmName).collect(toList());
filteredAlarmNamesStream = Stream.of(filteredAlarmNames);
LOGGER.debug("Checking cloudwatch alarms [{}] for existence and found [{}]", alarmNames, filteredAlarmNames);
} catch (AmazonCloudWatchException acwe) {
LOGGER.error("Unable to describe cloudwatch alarms falling back to delete all alarms individually [{}]: {}", alarmNames, acwe.getLocalizedMessage());
filteredAlarmNamesStream = alarmNames.stream().map(alarmName -> List.of(alarmName));
}
return filteredAlarmNamesStream;
}
use of com.amazonaws.services.cloudwatch.model.AmazonCloudWatchException in project cloudbreak by hortonworks.
the class AwsNativeCloudWatchService method addCloudWatchAlarmsForSystemFailures.
public void addCloudWatchAlarmsForSystemFailures(CloudResource resource, String regionName, AwsCredentialView credentialView) {
try {
PutMetricAlarmRequest metricAlarmRequest = createPutMetricAlarmRequest(resource.getInstanceId(), regionName, credentialView.isGovernmentCloudEnabled());
LOGGER.debug("The following cloudwatch alarm - for instanceId: {} - has created and about to put it on AWS side: [{}]", resource.getReference(), metricAlarmRequest);
commonAwsClient.createCloudWatchClient(credentialView, regionName).putMetricAlarm(metricAlarmRequest);
} catch (AmazonCloudWatchException acwe) {
LOGGER.error("Unable to create cloudwatch alarm for instanceId {}: {}", resource.getReference(), acwe.getLocalizedMessage());
}
}
use of com.amazonaws.services.cloudwatch.model.AmazonCloudWatchException in project cloudbreak by hortonworks.
the class AwsCloudWatchServiceTest method testDeleteCloudWatchAlarmsForSystemFailuresDoesNotBatchDeletionWhenDescribeAlarmPermissionIsMissing.
@Test
void testDeleteCloudWatchAlarmsForSystemFailuresDoesNotBatchDeletionWhenDescribeAlarmPermissionIsMissing() {
List<CloudInstance> cloudInstances = new LinkedList<>();
List<List<String>> deleteAlarmNames = new LinkedList<>();
List<String> alarmNames1 = new LinkedList<>();
List<String> alarmNames2 = new LinkedList<>();
List<String> alarmNames3 = new LinkedList<>();
for (int i = 1; i <= 100; i++) {
String alarmName = "i-" + i + "-Status-Check-Failed-System";
alarmNames1.add(alarmName);
deleteAlarmNames.add(List.of(alarmName));
}
for (int i = 101; i <= 200; i++) {
String alarmName = "i-" + i + "-Status-Check-Failed-System";
alarmNames2.add(alarmName);
deleteAlarmNames.add(List.of(alarmName));
}
for (int i = 201; i <= 210; i++) {
String alarmName = "i-" + i + "-Status-Check-Failed-System";
alarmNames3.add(alarmName);
deleteAlarmNames.add(List.of(alarmName));
}
for (int i = 1; i <= 210; i++) {
String instanceId = "i-" + i;
CloudInstance cloudInstance = mock(CloudInstance.class);
when(cloudInstance.getInstanceId()).thenReturn(instanceId);
cloudInstances.add(cloudInstance);
}
AmazonCloudWatchClient cloudWatchClient = mock(AmazonCloudWatchClient.class);
AwsCredentialView credentialView = mock(AwsCredentialView.class);
CloudStack stack = mock(CloudStack.class);
Group group = mock(Group.class);
List<Group> groups = List.of(group);
when(stack.getGroups()).thenReturn(groups);
when(group.getInstances()).thenReturn(cloudInstances);
when(awsClient.createCloudWatchClient(credentialView, REGION)).thenReturn(cloudWatchClient);
AmazonCloudWatchException exception = new AmazonCloudWatchException("No permissions to describe cloudwatch alarms");
when(cloudWatchClient.describeAlarms(any())).thenThrow(exception);
underTest.deleteAllCloudWatchAlarmsForSystemFailures(stack, REGION, credentialView);
ArgumentCaptor<DescribeAlarmsRequest> captorDescribe = ArgumentCaptor.forClass(DescribeAlarmsRequest.class);
ArgumentCaptor<DeleteAlarmsRequest> captorDelete = ArgumentCaptor.forClass(DeleteAlarmsRequest.class);
verify(cloudWatchClient, times(3)).describeAlarms(captorDescribe.capture());
verify(cloudWatchClient, times(210)).deleteAlarms(captorDelete.capture());
assertEquals(List.of(alarmNames1, alarmNames2, alarmNames3), captorDescribe.getAllValues().stream().map(DescribeAlarmsRequest::getAlarmNames).collect(Collectors.toList()));
assertEquals(deleteAlarmNames, captorDelete.getAllValues().stream().map(DeleteAlarmsRequest::getAlarmNames).collect(Collectors.toList()));
}
Aggregations