ATEST-205
This commit is contained in:
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user