*/
package org.sonar.server.qualitygate;
+import com.google.common.base.Predicate;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
import com.google.common.base.Strings;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.common.collect.Lists;
propertiesDao.deleteProjectProperty(SONAR_QUALITYGATE_PROPERTY, projectId);
}
+ public Collection<Metric> gateMetrics() {
+ return Collections2.filter(metricFinder.findAll(), new Predicate<Metric>() {
+ @Override
+ public boolean apply(Metric metric) {
+ return isAlertable(metric);
+ }
+ });
+ }
+
private void validateCondition(Metric metric, String operator, String warningThreshold, String errorThreshold, Integer period) {
List<Message> validationMessages = Lists.newArrayList();
validateMetric(metric, validationMessages);
}
private void validateMetric(Metric metric, List<Message> validationMessages) {
- if (metric.isDataType() || metric.isHidden() || CoreMetrics.ALERT_STATUS.equals(metric) || ValueType.RATING == metric.getType()) {
+ if (!isAlertable(metric)) {
validationMessages.add(Message.of(String.format("Metric '%s' cannot be used to define a condition.", metric.getKey())));
}
}
+ private boolean isAlertable(Metric metric) {
+ return !metric.isDataType() && !metric.isHidden() && !CoreMetrics.ALERT_STATUS.equals(metric) && ValueType.RATING != metric.getType();
+ }
+
private boolean isDefault(QualityGateDto qGate) {
return qGate.getId().equals(getDefaultId());
}
*/
package org.sonar.server.qualitygate.ws;
+import org.sonar.api.measures.Metric;
+
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
}
}).newParam(PARAM_ID).setDescription("The ID of the quality gate.");
+ controller.newAction("metrics")
+ .setDescription("List metrics available for definition of conditions.")
+ .setHandler(new RequestHandler() {
+ @Override
+ public void handle(Request request, Response response) {
+ listMetrics(request, response);
+ }
+ });
+
controller.newAction("destroy")
.setDescription("Destroy a quality gate, given its id.")
.setPost(true)
deselect.newParam(PARAM_PROJECT_ID);
}
+ protected void listMetrics(Request request, Response response) {
+ JsonWriter writer = response.newJsonWriter().beginObject().name("metrics").beginArray();
+ for (Metric metric: qualityGates.gateMetrics()) {
+ writer.beginObject()
+ .prop("id", metric.getId())
+ .prop("key", metric.getKey())
+ .prop("name", metric.getName())
+ .prop("type", metric.getType().toString())
+ .prop("domain", metric.getDomain())
+ .endObject();
+ }
+ writer.endArray().endObject().close();
+ }
+
protected void select(Request request, Response response) {
qualityGates.associateProject(parseId(request, PARAM_GATE_ID), parseId(request, PARAM_PROJECT_ID));
response.noContent();
assertThat(controller).isNotNull();
assertThat(controller.path()).isEqualTo("api/qualitygates");
assertThat(controller.description()).isNotEmpty();
- assertThat(controller.actions()).hasSize(13);
+ assertThat(controller.actions()).hasSize(14);
WebService.Action list = controller.action("list");
assertThat(list).isNotNull();