Search in sources :

Example 6 with AlarmConfiguration

use of com.netflix.titus.api.appscale.model.AlarmConfiguration in project titus-control-plane by Netflix.

the class AutoScalingPolicyTests method buildStepScalingPolicy.

public static AutoScalingPolicy buildStepScalingPolicy(String jobId) {
    AlarmConfiguration alarmConfiguration = AlarmConfiguration.newBuilder().withActionsEnabled(true).withComparisonOperator(ComparisonOperator.GreaterThanThreshold).withEvaluationPeriods(1).withPeriodSec(60).withMetricName("CPUUtilization").withMetricNamespace("AWS/EC2").withName(jobId).withStatistic(Statistic.Average).build();
    StepAdjustment stepAdjustment = StepAdjustment.newBuilder().withMetricIntervalLowerBound(0).withScalingAdjustment(1).build();
    StepScalingPolicyConfiguration stepScalingPolicyConfiguration = StepScalingPolicyConfiguration.newBuilder().withAdjustmentType(StepAdjustmentType.ChangeInCapacity).withCoolDownSec(60).withMetricAggregatorType(MetricAggregationType.Average).withMinAdjustmentMagnitude(1).withSteps(Arrays.asList(stepAdjustment)).build();
    PolicyConfiguration policyConfiguration = PolicyConfiguration.newBuilder().withAlarmConfiguration(alarmConfiguration).withStepScalingPolicyConfiguration(stepScalingPolicyConfiguration).withPolicyType(PolicyType.StepScaling).withName(jobId).build();
    AutoScalingPolicy autoScalingPolicy = AutoScalingPolicy.newBuilder().withPolicyConfiguration(policyConfiguration).withStatus(PolicyStatus.Pending).withStatusMessage("ICE-ed by AWS").withJobId(jobId).build();
    return autoScalingPolicy;
}
Also used : AutoScalingPolicy(com.netflix.titus.api.appscale.model.AutoScalingPolicy) AlarmConfiguration(com.netflix.titus.api.appscale.model.AlarmConfiguration) StepScalingPolicyConfiguration(com.netflix.titus.api.appscale.model.StepScalingPolicyConfiguration) PolicyConfiguration(com.netflix.titus.api.appscale.model.PolicyConfiguration) StepAdjustment(com.netflix.titus.api.appscale.model.StepAdjustment) StepScalingPolicyConfiguration(com.netflix.titus.api.appscale.model.StepScalingPolicyConfiguration)

Example 7 with AlarmConfiguration

use of com.netflix.titus.api.appscale.model.AlarmConfiguration in project titus-control-plane by Netflix.

the class CassAppScalePolicyStoreTest method checkUpdates.

@Test
public void checkUpdates() throws Exception {
    Session session = cassandraCQLUnit.getSession();
    CassAppScalePolicyStore store = new CassAppScalePolicyStore(session, configuration, new DefaultRegistry());
    String jobId = UUID.randomUUID().toString();
    Observable<String> respRefId = store.storePolicy(buildAutoScalingPolicy(jobId));
    String refId = respRefId.toBlocking().first();
    Assertions.assertThat(refId).isNotNull().isNotEmpty();
    // update policyId
    String policyId = "PolicyARN";
    store.updatePolicyId(refId, policyId).await();
    String getPolicyIdQuery = "SELECT policy_id from app_scale_policy where ref_id = ?;";
    BoundStatement stmt = session.prepare(getPolicyIdQuery).bind(UUID.fromString(refId));
    ResultSet rs = session.execute(stmt);
    List<Row> rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    String policyIdStored = rows.get(0).getString(CassAppScalePolicyStore.COLUMN_POLICY_ID);
    Assertions.assertThat(policyIdStored).isEqualTo(policyId);
    // update alarmId
    String alarmId = "AlarmARM";
    store.updateAlarmId(refId, alarmId).await();
    String getAlarmIdQuery = "SELECT alarm_id from app_scale_policy where ref_id = ?;";
    stmt = session.prepare(getAlarmIdQuery).bind(UUID.fromString(refId));
    rs = session.execute(stmt);
    rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    String alarmIdStored = rows.get(0).getString(CassAppScalePolicyStore.COLUMN_ALARM_ID);
    Assertions.assertThat(alarmIdStored).isEqualTo(alarmId);
    // update policy status
    PolicyStatus status = PolicyStatus.Applied;
    store.updatePolicyStatus(refId, status).await();
    String getPolicyStatusQuery = "SELECT status from app_scale_policy where ref_id = ?;";
    stmt = session.prepare(getPolicyStatusQuery).bind(UUID.fromString(refId));
    rs = session.execute(stmt);
    rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    PolicyStatus updatedStatus = PolicyStatus.valueOf(rows.get(0).getString(CassAppScalePolicyStore.COLUMN_STATUS));
    Assertions.assertThat(updatedStatus).isEqualTo(status);
    String errorStatusMessage = "Got Trumped";
    store.updateStatusMessage(refId, errorStatusMessage).await();
    String getStatusMessageQuery = "SELECT status_message from app_scale_policy where ref_id = ?;";
    stmt = session.prepare(getStatusMessageQuery).bind(UUID.fromString(refId));
    rs = session.execute(stmt);
    rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    String statusMessage = rows.get(0).getString(CassAppScalePolicyStore.COLUMN_STATUS_MESSAGE);
    Assertions.assertThat(statusMessage).isEqualTo(errorStatusMessage);
    // read policy by refId
    Observable<AutoScalingPolicy> autoScalingPolicyObservable = store.retrievePolicyForRefId(refId);
    AutoScalingPolicy autoScalingPolicy = autoScalingPolicyObservable.toBlocking().first();
    Assertions.assertThat(autoScalingPolicy.getRefId()).isEqualTo(refId);
    Assertions.assertThat(autoScalingPolicy.getStatus()).isEqualTo(status);
    Assertions.assertThat(autoScalingPolicy.getAlarmId()).isEqualTo(alarmId);
    Assertions.assertThat(autoScalingPolicy.getPolicyId()).isEqualTo(policyId);
    // update alarm threshold
    AlarmConfiguration alarmConfiguration = autoScalingPolicy.getPolicyConfiguration().getAlarmConfiguration();
    double currentThreshold = alarmConfiguration.getThreshold();
    int thresholdIncrement = 10;
    AlarmConfiguration newAlarmConfiguration = AlarmConfiguration.newBuilder().withStatistic(alarmConfiguration.getStatistic()).withName(alarmConfiguration.getName()).withMetricNamespace(alarmConfiguration.getMetricNamespace()).withMetricName(alarmConfiguration.getMetricName()).withComparisonOperator(alarmConfiguration.getComparisonOperator()).withThreshold(alarmConfiguration.getThreshold() + thresholdIncrement).withPeriodSec(alarmConfiguration.getPeriodSec()).withEvaluationPeriods(alarmConfiguration.getEvaluationPeriods()).withActionsEnabled(alarmConfiguration.getActionsEnabled().get()).build();
    PolicyConfiguration newPolicyConfig = PolicyConfiguration.newBuilder().withPolicyType(autoScalingPolicy.getPolicyConfiguration().getPolicyType()).withStepScalingPolicyConfiguration(autoScalingPolicy.getPolicyConfiguration().getStepScalingPolicyConfiguration()).withName(autoScalingPolicy.getPolicyConfiguration().getName()).withPolicyType(autoScalingPolicy.getPolicyConfiguration().getPolicyType()).withAlarmConfiguration(newAlarmConfiguration).build();
    AutoScalingPolicy newPolicy = AutoScalingPolicy.newBuilder().withAutoScalingPolicy(autoScalingPolicy).withPolicyConfiguration(newPolicyConfig).build();
    store.updatePolicyConfiguration(newPolicy).await();
    autoScalingPolicyObservable = store.retrievePolicyForRefId(refId);
    AutoScalingPolicy updatedPolicy = autoScalingPolicyObservable.toBlocking().first();
    Assertions.assertThat(updatedPolicy.getPolicyConfiguration().getAlarmConfiguration().getName()).isEqualTo(newAlarmConfiguration.getName());
    Assertions.assertThat(updatedPolicy.getPolicyConfiguration().getAlarmConfiguration().getThreshold()).isEqualTo(currentThreshold + thresholdIncrement);
}
Also used : AlarmConfiguration(com.netflix.titus.api.appscale.model.AlarmConfiguration) AutoScalingPolicy(com.netflix.titus.api.appscale.model.AutoScalingPolicy) PolicyStatus(com.netflix.titus.api.appscale.model.PolicyStatus) ResultSet(com.datastax.driver.core.ResultSet) DefaultRegistry(com.netflix.spectator.api.DefaultRegistry) StepScalingPolicyConfiguration(com.netflix.titus.api.appscale.model.StepScalingPolicyConfiguration) PolicyConfiguration(com.netflix.titus.api.appscale.model.PolicyConfiguration) Row(com.datastax.driver.core.Row) BoundStatement(com.datastax.driver.core.BoundStatement) Session(com.datastax.driver.core.Session) Test(org.junit.Test) IntegrationNotParallelizableTest(com.netflix.titus.testkit.junit.category.IntegrationNotParallelizableTest)

Aggregations

AlarmConfiguration (com.netflix.titus.api.appscale.model.AlarmConfiguration)7 Test (org.junit.Test)4 Dimension (com.amazonaws.services.cloudwatch.model.Dimension)3 AutoScalingPolicy (com.netflix.titus.api.appscale.model.AutoScalingPolicy)3 MetricDimension (com.netflix.titus.api.appscale.model.MetricDimension)3 PolicyConfiguration (com.netflix.titus.api.appscale.model.PolicyConfiguration)3 StepScalingPolicyConfiguration (com.netflix.titus.api.appscale.model.StepScalingPolicyConfiguration)3 StepAdjustment (com.netflix.titus.api.appscale.model.StepAdjustment)2 IntegrationNotParallelizableTest (com.netflix.titus.testkit.junit.category.IntegrationNotParallelizableTest)2 AWSCredentialsProvider (com.amazonaws.auth.AWSCredentialsProvider)1 AsyncHandler (com.amazonaws.handlers.AsyncHandler)1 AmazonCloudWatchAsync (com.amazonaws.services.cloudwatch.AmazonCloudWatchAsync)1 AmazonCloudWatchAsyncClientBuilder (com.amazonaws.services.cloudwatch.AmazonCloudWatchAsyncClientBuilder)1 DeleteAlarmsRequest (com.amazonaws.services.cloudwatch.model.DeleteAlarmsRequest)1 DeleteAlarmsResult (com.amazonaws.services.cloudwatch.model.DeleteAlarmsResult)1 PutMetricAlarmRequest (com.amazonaws.services.cloudwatch.model.PutMetricAlarmRequest)1 PutMetricAlarmResult (com.amazonaws.services.cloudwatch.model.PutMetricAlarmResult)1 ResourceNotFoundException (com.amazonaws.services.cloudwatch.model.ResourceNotFoundException)1 BoundStatement (com.datastax.driver.core.BoundStatement)1 ResultSet (com.datastax.driver.core.ResultSet)1