Fixed query for sub alarms by metric def
This commit is contained in:
parent
e977098414
commit
8f15c332b5
@ -32,10 +32,7 @@ public class SubAlarmDAOImpl implements SubAlarmDAO {
|
||||
private static final String FIND_BY_METRIC_DEF_SQL = "select sa.* from sub_alarm sa, sub_alarm_dimension d "
|
||||
+ "join (%s) v on d.dimension_name = v.dimension_name and d.value = v.value "
|
||||
+ "where sa.id = d.sub_alarm_id and sa.namespace = :namespace and sa.metric_type = :metricType and sa.metric_subject %s "
|
||||
+ "group by d.sub_alarm_id"; // having count(d.sub_alarm_id) = (select count(*) from
|
||||
// sub_alarm_dimension where sub_alarm_id = d.sub_alarm_id) //
|
||||
// Removed temporarily since we don't receive all of the expected
|
||||
// dimensions for collectd metrics
|
||||
+ "group by d.sub_alarm_id having count(d.sub_alarm_id) = %s";
|
||||
private static final String FIND_BY_METRIC_DEF_NO_DIMS_SQL = "select * from sub_alarm sa where sa.namespace = :namespace "
|
||||
+ "and sa.metric_type = :metricType and sa.metric_subject %s and (select count(*) from sub_alarm_dimension where sub_alarm_id = sa.id) = 0";
|
||||
|
||||
@ -58,7 +55,8 @@ public class SubAlarmDAOImpl implements SubAlarmDAO {
|
||||
else {
|
||||
String unionAllStatement = SqlStatements.unionAllStatementFor(metricDefinition.dimensions,
|
||||
"dimension_name", "value");
|
||||
sql = String.format(FIND_BY_METRIC_DEF_SQL, unionAllStatement, subjectSql);
|
||||
sql = String.format(FIND_BY_METRIC_DEF_SQL, unionAllStatement, subjectSql,
|
||||
metricDefinition.dimensions.size());
|
||||
}
|
||||
|
||||
Query<Map<String, Object>> query = h.createQuery(sql)
|
||||
@ -77,6 +75,7 @@ public class SubAlarmDAOImpl implements SubAlarmDAO {
|
||||
operator, (Double) row.get("threshold"), (Integer) row.get("period"),
|
||||
(Integer) row.get("periods"));
|
||||
SubAlarm subAlarm = new SubAlarm(subAlarmId, (String) row.get("alarm_id"), subExpression);
|
||||
|
||||
subAlarms.add(subAlarm);
|
||||
}
|
||||
|
||||
|
@ -4,9 +4,7 @@ import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.skife.jdbi.v2.DBI;
|
||||
import org.skife.jdbi.v2.Handle;
|
||||
@ -51,46 +49,52 @@ public class SubAlarmDAOImplTest {
|
||||
|
||||
handle.execute("insert into sub_alarm (id, alarm_id, function, namespace, metric_type, metric_subject, operator, threshold, period, periods, created_at, updated_at) "
|
||||
+ "values ('111', '123', 'AVG', 'hpcs.compute', 'cpu', null, 'GT', 10, 60, 1, NOW(), NOW())");
|
||||
handle.execute("insert into sub_alarm_dimension values ('111', 'flavor_id', '777')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('111', 'image_id', '888')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('111', 'instance_id', '555')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('111', 'az', '1')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('111', 'instance_uuid', '555')");
|
||||
|
||||
handle.execute("insert into sub_alarm (id, alarm_id, function, namespace, metric_type, metric_subject, operator, threshold, period, periods, created_at, updated_at) "
|
||||
+ "values ('222', '456', 'AVG', 'hpcs.compute', 'cpu', '1', 'GTE', 20, 60, 1, NOW(), NOW())");
|
||||
handle.execute("insert into sub_alarm_dimension values ('222', 'flavor_id', '777')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('222', 'image_id', '888')");
|
||||
+ "values ('222', '234', 'AVG', 'hpcs.compute', 'cpu', null, 'GT', 10, 60, 1, NOW(), NOW())");
|
||||
handle.execute("insert into sub_alarm_dimension values ('222', 'instance_id', '666')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('222', 'az', '1')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('222', 'instance_uuid', '666')");
|
||||
|
||||
handle.execute("insert into sub_alarm (id, alarm_id, function, namespace, metric_type, metric_subject, operator, threshold, period, periods, created_at, updated_at) "
|
||||
+ "values ('333', '456', 'AVG', 'hpcs.compute', 'cpu', '1', 'LT', 10, 60, 1, NOW(), NOW())");
|
||||
handle.execute("insert into sub_alarm_dimension values ('333', 'flavor_id', '333')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('333', 'image_id', '999999')");
|
||||
+ "values ('333', '345', 'AVG', 'hpcs.compute', 'disk', 'vda', 'GT', 10, 60, 1, NOW(), NOW())");
|
||||
handle.execute("insert into sub_alarm_dimension values ('333', 'instance_id', '777')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('333', 'az', '1')");
|
||||
handle.execute("insert into sub_alarm_dimension values ('333', 'instance_uuid', '777')");
|
||||
|
||||
handle.execute("insert into sub_alarm (id, alarm_id, function, namespace, metric_type, metric_subject, operator, threshold, period, periods, created_at, updated_at) "
|
||||
+ "values ('444', '456', 'AVG', 'hpcs.compute', 'cpu', null, 'GT', 10, 60, 1, NOW(), NOW())");
|
||||
}
|
||||
|
||||
public void shouldFind() {
|
||||
List<SubAlarm> expected = Arrays.asList(new SubAlarm("111", "123",
|
||||
AlarmSubExpression.of("avg(hpcs.compute:cpu:{instance_id=555,az=1}) > 10"),
|
||||
AlarmState.UNDETERMINED));
|
||||
List<SubAlarm> subAlarms = dao.find(expected.get(0).getExpression().getMetricDefinition());
|
||||
assertEquals(subAlarms, expected);
|
||||
|
||||
expected = Arrays.asList(new SubAlarm("222", "234",
|
||||
AlarmSubExpression.of("avg(hpcs.compute:cpu:{instance_id=666,az=1}) > 10"),
|
||||
AlarmState.UNDETERMINED));
|
||||
subAlarms = dao.find(expected.get(0).getExpression().getMetricDefinition());
|
||||
assertEquals(subAlarms, expected);
|
||||
}
|
||||
|
||||
public void shouldFindWithSubject() {
|
||||
List<SubAlarm> expected = Arrays.asList(new SubAlarm("333", "345",
|
||||
AlarmSubExpression.of("avg(hpcs.compute:disk:vda:{instance_id=777,az=1}) > 10"),
|
||||
AlarmState.UNDETERMINED));
|
||||
List<SubAlarm> subAlarms = dao.find(expected.get(0).getExpression().getMetricDefinition());
|
||||
assertEquals(subAlarms, expected);
|
||||
}
|
||||
|
||||
public void shouldFindForNullDimensions() {
|
||||
List<SubAlarm> expected = Arrays.asList(new SubAlarm("444", "456",
|
||||
AlarmSubExpression.of("avg(hpcs.compute:cpu) > 10"), AlarmState.UNDETERMINED));
|
||||
List<SubAlarm> subAlarms = dao.find(new MetricDefinition("hpcs.compute", "cpu", null, null));
|
||||
assertEquals(subAlarms, expected);
|
||||
}
|
||||
|
||||
public void shouldFind() {
|
||||
List<SubAlarm> expected = Arrays.asList(new SubAlarm("111", "123",
|
||||
AlarmSubExpression.of("avg(hpcs.compute:cpu:{flavor_id=777,image_id=888}) > 10"),
|
||||
AlarmState.UNDETERMINED));
|
||||
Map<String, String> dimensions = new HashMap<String, String>();
|
||||
dimensions.put("flavor_id", "777");
|
||||
dimensions.put("image_id", "888");
|
||||
|
||||
List<SubAlarm> subAlarms = dao.find(new MetricDefinition("hpcs.compute", "cpu", null,
|
||||
dimensions));
|
||||
assertEquals(subAlarms, expected);
|
||||
|
||||
expected = Arrays.asList(new SubAlarm("222", "456",
|
||||
AlarmSubExpression.of("avg(hpcs.compute:cpu:1:{flavor_id=777,image_id=888}) >= 20"),
|
||||
AlarmState.UNDETERMINED));
|
||||
subAlarms = dao.find(new MetricDefinition("hpcs.compute", "cpu", "1", dimensions));
|
||||
assertEquals(subAlarms, expected);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user