Separate metric name and dimension validation
Change-Id: I6519ac01ea9616f28ab8c8c7aa7605af08b787dc
This commit is contained in:
parent
6dbf85140f
commit
00510deced
|
@ -19,6 +19,7 @@ import javax.validation.constraints.NotNull;
|
||||||
import monasca.common.model.alarm.AlarmState;
|
import monasca.common.model.alarm.AlarmState;
|
||||||
|
|
||||||
public class UpdateAlarmCommand {
|
public class UpdateAlarmCommand {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public AlarmState state;
|
public AlarmState state;
|
||||||
public String lifecycleState;
|
public String lifecycleState;
|
||||||
|
|
|
@ -55,9 +55,9 @@ public class MetricNameValidation {
|
||||||
|
|
||||||
if (metricName.length() > CreateMetricCommand.MAX_NAME_LENGTH)
|
if (metricName.length() > CreateMetricCommand.MAX_NAME_LENGTH)
|
||||||
throw Exceptions.unprocessableEntity("Metric name %s must be %d characters or less",
|
throw Exceptions.unprocessableEntity("Metric name %s must be %d characters or less",
|
||||||
metricName, CreateMetricCommand.MAX_NAME_LENGTH);
|
metricName, CreateMetricCommand.MAX_NAME_LENGTH);
|
||||||
if (!VALID_METRIC_NAME.matcher(metricName).matches())
|
if (!VALID_METRIC_NAME.matcher(metricName).matches())
|
||||||
throw Exceptions.unprocessableEntity("Metric name %s may not contain: > < = { } ( ) ' \" \\ , ; &",
|
throw Exceptions.unprocessableEntity("Metric name %s may not contain: > < = { } ( ) ' \" \\ , ; &",
|
||||||
metricName);
|
metricName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,18 +80,6 @@ public final class Validation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws WebApplicationException if the {@code value} is null or empty.
|
|
||||||
*/
|
|
||||||
public static Map<String, String> parseAndValidateNameAndDimensions(String name,
|
|
||||||
String dimensionsStr,
|
|
||||||
boolean nameRequiredFlag) {
|
|
||||||
Map<String, String> dimensions = parseAndValidateDimensions(dimensionsStr);
|
|
||||||
|
|
||||||
MetricNameValidation.validate(name, nameRequiredFlag);
|
|
||||||
return dimensions;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws WebApplicationException if the {@code value} is null or empty.
|
* @throws WebApplicationException if the {@code value} is null or empty.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -41,6 +41,7 @@ import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
import monasca.api.app.AlarmService;
|
import monasca.api.app.AlarmService;
|
||||||
import monasca.api.app.command.UpdateAlarmCommand;
|
import monasca.api.app.command.UpdateAlarmCommand;
|
||||||
|
import monasca.api.app.validation.MetricNameValidation;
|
||||||
import monasca.api.app.validation.Validation;
|
import monasca.api.app.validation.Validation;
|
||||||
import monasca.api.domain.model.alarm.Alarm;
|
import monasca.api.domain.model.alarm.Alarm;
|
||||||
import monasca.api.domain.model.alarm.AlarmRepo;
|
import monasca.api.domain.model.alarm.AlarmRepo;
|
||||||
|
@ -156,7 +157,8 @@ public class AlarmResource {
|
||||||
|
|
||||||
Map<String, String> metricDimensions =
|
Map<String, String> metricDimensions =
|
||||||
Strings.isNullOrEmpty(metricDimensionsStr) ? null : Validation
|
Strings.isNullOrEmpty(metricDimensionsStr) ? null : Validation
|
||||||
.parseAndValidateNameAndDimensions(metricName, metricDimensionsStr, false);
|
.parseAndValidateDimensions(metricDimensionsStr);
|
||||||
|
MetricNameValidation.validate(metricName, false);
|
||||||
DateTime stateUpdatedStart =
|
DateTime stateUpdatedStart =
|
||||||
Validation.parseAndValidateDate(stateUpdatedStartStr,
|
Validation.parseAndValidateDate(stateUpdatedStartStr,
|
||||||
"state_updated_start_time", false);
|
"state_updated_start_time", false);
|
||||||
|
|
|
@ -31,6 +31,7 @@ import javax.ws.rs.core.Context;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.UriInfo;
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
|
import monasca.api.app.validation.MetricNameValidation;
|
||||||
import monasca.api.app.validation.Validation;
|
import monasca.api.app.validation.Validation;
|
||||||
import monasca.api.domain.model.measurement.MeasurementRepo;
|
import monasca.api.domain.model.measurement.MeasurementRepo;
|
||||||
import monasca.api.infrastructure.persistence.PersistUtils;
|
import monasca.api.infrastructure.persistence.PersistUtils;
|
||||||
|
@ -65,14 +66,14 @@ public class MeasurementResource {
|
||||||
@QueryParam("merge_metrics") String mergeMetricsFlag) throws Exception {
|
@QueryParam("merge_metrics") String mergeMetricsFlag) throws Exception {
|
||||||
|
|
||||||
// Validate query parameters
|
// Validate query parameters
|
||||||
Validation.validateNotNullOrEmpty(name, "name");
|
|
||||||
DateTime startTime = Validation.parseAndValidateDate(startTimeStr, "start_time", true);
|
DateTime startTime = Validation.parseAndValidateDate(startTimeStr, "start_time", true);
|
||||||
DateTime endTime = Validation.parseAndValidateDate(endTimeStr, "end_time", false);
|
DateTime endTime = Validation.parseAndValidateDate(endTimeStr, "end_time", false);
|
||||||
Validation.validateTimes(startTime, endTime);
|
Validation.validateTimes(startTime, endTime);
|
||||||
Map<String, String>
|
Map<String, String>
|
||||||
dimensions =
|
dimensions =
|
||||||
Strings.isNullOrEmpty(dimensionsStr) ? null : Validation
|
Strings.isNullOrEmpty(dimensionsStr) ? null : Validation
|
||||||
.parseAndValidateNameAndDimensions(name, dimensionsStr, true);
|
.parseAndValidateDimensions(dimensionsStr);
|
||||||
|
MetricNameValidation.validate(name, true);
|
||||||
Boolean mergeMetricsFlagBool = Validation.validateAndParseMergeMetricsFlag(mergeMetricsFlag);
|
Boolean mergeMetricsFlagBool = Validation.validateAndParseMergeMetricsFlag(mergeMetricsFlag);
|
||||||
|
|
||||||
return Links.paginateMeasurements(this.persistUtils.getLimit(limit),
|
return Links.paginateMeasurements(this.persistUtils.getLimit(limit),
|
||||||
|
|
|
@ -114,13 +114,11 @@ public class MetricResource {
|
||||||
@QueryParam("offset") String offset,
|
@QueryParam("offset") String offset,
|
||||||
@QueryParam("limit") String limit)
|
@QueryParam("limit") String limit)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Map<String, String> dimensions = null;
|
Map<String, String>
|
||||||
|
dimensions =
|
||||||
if (! Strings.isNullOrEmpty(dimensionsStr)) {
|
Strings.isNullOrEmpty(dimensionsStr) ? null : Validation
|
||||||
dimensions = Validation.parseAndValidateNameAndDimensions(name, dimensionsStr, false);
|
.parseAndValidateDimensions(dimensionsStr);
|
||||||
} else if (! Strings.isNullOrEmpty(name)) {
|
MetricNameValidation.validate(name, false);
|
||||||
MetricNameValidation.validate(name, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Links.paginate(this.persistUtils.getLimit(limit),
|
return Links.paginate(this.persistUtils.getLimit(limit),
|
||||||
metricRepo.find(tenantId, name, dimensions, offset, this.persistUtils.getLimit(limit)), uriInfo);
|
metricRepo.find(tenantId, name, dimensions, offset, this.persistUtils.getLimit(limit)), uriInfo);
|
||||||
|
|
|
@ -34,6 +34,7 @@ import javax.ws.rs.core.Context;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.UriInfo;
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
|
import monasca.api.app.validation.MetricNameValidation;
|
||||||
import monasca.api.app.validation.Validation;
|
import monasca.api.app.validation.Validation;
|
||||||
import monasca.api.domain.model.statistic.StatisticRepo;
|
import monasca.api.domain.model.statistic.StatisticRepo;
|
||||||
import monasca.api.infrastructure.persistence.PersistUtils;
|
import monasca.api.infrastructure.persistence.PersistUtils;
|
||||||
|
@ -83,8 +84,9 @@ public class StatisticResource {
|
||||||
List<String> statistics =
|
List<String> statistics =
|
||||||
Validation.parseValidateAndNormalizeStatistics(COMMA_SPLITTER.split(statisticsStr));
|
Validation.parseValidateAndNormalizeStatistics(COMMA_SPLITTER.split(statisticsStr));
|
||||||
Map<String, String> dimensions =
|
Map<String, String> dimensions =
|
||||||
Strings.isNullOrEmpty(dimensionsStr) ? null : Validation.parseAndValidateNameAndDimensions(
|
Strings.isNullOrEmpty(dimensionsStr) ? null : Validation
|
||||||
name, dimensionsStr, true);
|
.parseAndValidateDimensions(dimensionsStr);
|
||||||
|
MetricNameValidation.validate(name, true);
|
||||||
Boolean mergeMetricsFlagBool = Validation.validateAndParseMergeMetricsFlag(mergeMetricsFlag);
|
Boolean mergeMetricsFlagBool = Validation.validateAndParseMergeMetricsFlag(mergeMetricsFlag);
|
||||||
|
|
||||||
return Links.paginateStatistics(this.persistUtils.getLimit(limit),
|
return Links.paginateStatistics(this.persistUtils.getLimit(limit),
|
||||||
|
|
|
@ -22,15 +22,6 @@ import java.util.Map;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class ValidationTest {
|
public class ValidationTest {
|
||||||
|
|
||||||
public void testSimpleParseAndValidateNameAndDimensions() {
|
|
||||||
final Map<String, String> dimensions = Validation.parseAndValidateNameAndDimensions("cpu.idle_perc", "aa:bb,cc:dd",
|
|
||||||
true);
|
|
||||||
assertEquals(dimensions.size(), 2);
|
|
||||||
assertEquals(dimensions.get("aa"), "bb");
|
|
||||||
assertEquals(dimensions.get("cc"), "dd");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testSimpleParseAndValidateDimensions() {
|
public void testSimpleParseAndValidateDimensions() {
|
||||||
final Map<String, String> dimensions = Validation.parseAndValidateDimensions("aa:bb,cc:dd");
|
final Map<String, String> dimensions = Validation.parseAndValidateDimensions("aa:bb,cc:dd");
|
||||||
assertEquals(dimensions.size(), 2);
|
assertEquals(dimensions.size(), 2);
|
||||||
|
|
Loading…
Reference in New Issue