ATEST-205

This commit is contained in:
Fabian Märki
2015-08-10 11:44:08 +02:00
parent a1cb60c56f
commit c751aab8de
4 changed files with 86 additions and 48 deletions

View File

@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import ch.psi.daq.cassandra.request.validate.RequestProviderValidator;
import ch.psi.daq.cassandra.util.test.CassandraDataGen;
import ch.psi.daq.domain.DataEvent;
import ch.psi.daq.query.analyzer.QueryAnalyzer;
@ -41,12 +42,13 @@ public class QueryRestController {
private static final Logger LOGGER = LoggerFactory.getLogger(QueryRestController.class);
public static final String CHANNELS = "channels";
public static final String QUERY = "query";
public static final String CHANNELS = "/channels";
public static final String QUERY = "/query";
@Resource
private Validator queryValidator;
private Validator requestProviderValidator = new RequestProviderValidator();
@Resource
private ResponseStreamWriter responseStreamWriter;
@ -65,22 +67,24 @@ public class QueryRestController {
@Resource(name = QueryRestConfig.BEAN_NAME_DEFAULT_RESPONSE_AGGREGATIONS)
private Set<Aggregation> defaultResponseAggregations;
@InitBinder
protected void initBinder(WebDataBinder binder) {
/*
* This allows to use the @Valid annotation in the methods below.
*/
binder.addValidators(queryValidator);
if (requestProviderValidator.supports(binder.getTarget().getClass())) {
binder.addValidators(requestProviderValidator);
}
if (queryValidator.supports(binder.getTarget().getClass())) {
binder.addValidators(queryValidator);
}
}
@RequestMapping(
value = CHANNELS,
method = {RequestMethod.GET, RequestMethod.POST},
produces = {MediaType.APPLICATION_JSON_VALUE})
public @ResponseBody Collection<String> getChannels(@RequestBody(required = false) ChannelsRequest request)
throws Throwable {
// in case not specified use default (e.g. GET)
// in case not specified use default (e.g. GET)
if (request == null) {
request = new ChannelsRequest();
}
@ -104,7 +108,8 @@ public class QueryRestController {
QueryAnalyzer queryAnalizer = queryAnalizerFactory.apply(query);
// all the magic happens here
Stream<Entry<String, Stream<? extends DataEvent>>> channelToDataEvents = getQueryProcessor(query.getDBMode()).process(queryAnalizer);
Stream<Entry<String, Stream<? extends DataEvent>>> channelToDataEvents =
getQueryProcessor(query.getDBMode()).process(queryAnalizer);
// do post-process
Stream<Entry<String, ?>> channelToData = queryAnalizer.postProcess(channelToDataEvents);
@ -136,6 +141,41 @@ public class QueryRestController {
@RequestMapping(value = "/write")
public void writeDummyEntry() {
cassandraDataGen.writeData(3, 0, 100, "channel1", "channel2");
long nrOfElements = 4;
cassandraDataGen.writeData(3, 0, 4,
i -> i,
i -> 0,
i -> i,
i -> i,
i -> 0,
i -> new long[] {i, i, i, i},
"TRFCA-channel1");
cassandraDataGen.writeData(3, 0, 4,
i -> i,
i -> 0,
i -> i,
i -> i,
i -> 0,
i -> new long[] {nrOfElements - i, nrOfElements - i, nrOfElements - i, nrOfElements - i},
"TRFCA-channel2");
cassandraDataGen.writeData(3, 0, 4,
i -> i,
i -> 0,
i -> i,
i -> i,
i -> 0,
i -> i,
"TRFCB-channel3");
cassandraDataGen.writeData(3, 0, 4,
i -> i,
i -> 0,
i -> i,
i -> i,
i -> 0,
i -> nrOfElements - i,
"TRFCB-channel4");
}
}

View File

@ -15,7 +15,6 @@ import ch.psi.daq.query.model.QueryField;
import ch.psi.daq.query.model.impl.AbstractQuery;
import ch.psi.daq.cassandra.request.Request;
import ch.psi.daq.cassandra.request.range.RequestRangeTime;
import ch.psi.daq.cassandra.request.validate.RequestValidator;
import ch.psi.daq.queryrest.config.QueryRestConfig;
public class QueryValidator implements Validator {
@ -25,14 +24,12 @@ public class QueryValidator implements Validator {
@Resource(name = QueryRestConfig.BEAN_NAME_DEFAULT_RESPONSE_AGGREGATIONS)
private Set<Aggregation> defaultResponseAggregations;
private RequestValidator requestValidator = new RequestValidator();
/**
* {@inheritDoc}
*/
@Override
public boolean supports(Class<?> clazz) {
public boolean supports(Class<?> clazz) {
return AbstractQuery.class.isAssignableFrom(clazz);
}
@ -45,11 +42,10 @@ public class QueryValidator implements Validator {
AbstractQuery query = (AbstractQuery) target;
Request request = query.getRequest();
requestValidator.validate(request, errors);
if (DBMode.archiverappliance.equals(query.getDBMode())) {
if (!(request.getRequestRange() instanceof RequestRangeTime)) {
errors.reject("", "ArchiverAppliance supports time range queries only!");
errors.reject("dbMode", "ArchiverAppliance supports time range queries only!");
}
}