Merge pull request #11 in ST/ch.psi.daq.queryrest from ATEST-128 to master
# By Fabian Märki # Via Fabian Märki * commit '6ce4d1553bbd36e55f8c2f2071377d5a208bf0ec': ATEST-128 ATEST-128 First working impl. ATEST-128
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
#
|
||||
#Fri Jul 24 14:48:03 CEST 2015
|
||||
#Thu Aug 06 09:29:10 CEST 2015
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
|
@ -132,9 +132,9 @@ Queries are defined using JSON.
|
||||
There exist following fields:
|
||||
|
||||
- **channels**: Array of channel names to be queried.
|
||||
- **startPulseId** and **endPulseId** : A pulse-id range query with start and end pulse-id.
|
||||
- **startMillis/[startNanos]** and **endMillis/[endNanos]**: A time range query with start and end milliseconds since January 1, 1970 (the UNIX/JAVA epoch) and optionally supplemented with the nanosecond offset to the milliseconds (range [0..999999]).
|
||||
- **startDate/[startNanos]** and **endDate/[endNanos]**: A time range query with start and end date (format yyyy/MM/dd HH:mm:ss.SSS or dd.MM.yyyy HH:mm:ss.SSS) and optionally supplemented with the nanosecond offset to the milliseconds (range [0..999999]).
|
||||
- **startPulseId** and **endPulseId** : A pulse-id range request with start and end pulse-id.
|
||||
- **startMillis/[startNanos]** and **endMillis/[endNanos]**: A time range request with start and end milliseconds since January 1, 1970 (the UNIX/JAVA epoch) and optionally supplemented with the nanosecond offset to the milliseconds (range [0..999999]).
|
||||
- **startDate/[startNanos]** and **endDate/[endNanos]**: A time range request with start and end date (format yyyy/MM/dd HH:mm:ss.SSS or dd.MM.yyyy HH:mm:ss.SSS) and optionally supplemented with the nanosecond offset to the milliseconds (range [0..999999]).
|
||||
- **ordering**: The ordering of the data (see [here](https://github.psi.ch/projects/ST/repos/ch.psi.daq.common/browse/src/main/java/ch/psi/daq/common/ordering/Ordering.java) for possible values).
|
||||
- **fields**: The requested fields (see [here](https://github.psi.ch/projects/ST/repos/ch.psi.daq.query/browse/src/main/java/ch/psi/daq/query/model/QueryField.java) for possible values).
|
||||
- **nrOfBins**: Activates data binning. Specifies the number of bins the pulse/time range should be devided into.
|
||||
|
@ -34,11 +34,11 @@ import ch.psi.daq.domain.DataEvent;
|
||||
import ch.psi.daq.query.analyzer.QueryAnalyzer;
|
||||
import ch.psi.daq.query.analyzer.QueryAnalyzerImpl;
|
||||
import ch.psi.daq.query.config.QueryConfig;
|
||||
import ch.psi.daq.query.model.AbstractQuery;
|
||||
import ch.psi.daq.query.model.Aggregation;
|
||||
import ch.psi.daq.query.model.Query;
|
||||
import ch.psi.daq.query.model.QueryField;
|
||||
import ch.psi.daq.queryrest.controller.QueryValidator;
|
||||
import ch.psi.daq.query.model.impl.AbstractQuery;
|
||||
import ch.psi.daq.queryrest.controller.validator.QueryValidator;
|
||||
import ch.psi.daq.queryrest.model.PropertyFilterMixin;
|
||||
import ch.psi.daq.queryrest.response.JsonStreamSerializer;
|
||||
import ch.psi.daq.queryrest.response.ResponseStreamWriter;
|
||||
|
@ -26,11 +26,11 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
import ch.psi.daq.cassandra.util.test.CassandraDataGen;
|
||||
import ch.psi.daq.domain.DataEvent;
|
||||
import ch.psi.daq.query.analyzer.QueryAnalyzer;
|
||||
import ch.psi.daq.query.model.AbstractQuery;
|
||||
import ch.psi.daq.query.model.Aggregation;
|
||||
import ch.psi.daq.query.model.DBMode;
|
||||
import ch.psi.daq.query.model.Query;
|
||||
import ch.psi.daq.query.model.QueryField;
|
||||
import ch.psi.daq.query.model.impl.AbstractQuery;
|
||||
import ch.psi.daq.query.processor.QueryProcessor;
|
||||
import ch.psi.daq.queryrest.config.QueryRestConfig;
|
||||
import ch.psi.daq.queryrest.model.ChannelsRequest;
|
||||
|
@ -1,7 +1,4 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package ch.psi.daq.queryrest.controller;
|
||||
package ch.psi.daq.queryrest.controller.validator;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedList;
|
||||
@ -12,18 +9,15 @@ import javax.annotation.Resource;
|
||||
import org.springframework.validation.Errors;
|
||||
import org.springframework.validation.Validator;
|
||||
|
||||
import ch.psi.daq.query.model.AbstractQuery;
|
||||
import ch.psi.daq.query.model.AbstractTimeRangeQuery;
|
||||
import ch.psi.daq.query.model.Aggregation;
|
||||
import ch.psi.daq.query.model.DBMode;
|
||||
import ch.psi.daq.query.model.QueryField;
|
||||
import ch.psi.daq.query.range.QueryRange;
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author zellweger_c
|
||||
*
|
||||
*/
|
||||
public class QueryValidator implements Validator {
|
||||
|
||||
@Resource(name = QueryRestConfig.BEAN_NAME_DEFAULT_RESPONSE_FIELDS)
|
||||
@ -32,6 +26,8 @@ public class QueryValidator implements Validator {
|
||||
@Resource(name = QueryRestConfig.BEAN_NAME_DEFAULT_RESPONSE_AGGREGATIONS)
|
||||
private Set<Aggregation> defaultResponseAggregations;
|
||||
|
||||
private RequestValidator requestValidator = new RequestValidator();
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@ -48,31 +44,16 @@ public class QueryValidator implements Validator {
|
||||
|
||||
AbstractQuery query = (AbstractQuery) target;
|
||||
|
||||
QueryRange queryRange = query.getQueryRange();
|
||||
|
||||
if (!queryRange.isPulseIdRangeDefined() && !queryRange.isTimeRangeDefined()) {
|
||||
errors.reject("", "Either time or pulseId range must be defined by the query!");
|
||||
}
|
||||
|
||||
if (queryRange.isPulseIdRangeDefined()) {
|
||||
if (queryRange.getStartPulseId() > queryRange.getEndPulseId()) {
|
||||
errors.rejectValue("pulseId", "pulseId", "Start pulse-id must be smaller or equals end pulse-id!");
|
||||
}
|
||||
} else if (queryRange.isTimeRangeDefined()) {
|
||||
if (queryRange.getStartMillis() > queryRange.getEndMillis()) {
|
||||
errors.rejectValue("millis", "millis", "Start millis must be smaller or equals to end millis!");
|
||||
} else if (queryRange.getStartMillis() == queryRange.getEndMillis()
|
||||
&& queryRange.getStartNanos() > queryRange.getEndNanos()) {
|
||||
errors.rejectValue("nanos", "nanos", "Start nanos must be smaller or equals to end nanos!");
|
||||
}
|
||||
}
|
||||
Request request = query.getRequest();
|
||||
requestValidator.validate(request, errors);
|
||||
|
||||
if (DBMode.archiverappliance.equals(query.getDBMode())) {
|
||||
if (!(query instanceof AbstractTimeRangeQuery)) {
|
||||
if (!(request.getRequestRange() instanceof RequestRangeTime)) {
|
||||
errors.reject("", "ArchiverAppliance supports time range queries only!");
|
||||
}
|
||||
}
|
||||
|
||||
// set default values (if not set)
|
||||
if (query.getFields() == null || query.getFields().isEmpty()) {
|
||||
query.setFields(new LinkedHashSet<>(defaultResponseFields));
|
||||
}
|
@ -21,9 +21,9 @@ import com.fasterxml.jackson.databind.ObjectWriter;
|
||||
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
|
||||
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
|
||||
|
||||
import ch.psi.daq.query.model.AbstractQuery;
|
||||
import ch.psi.daq.query.model.Aggregation;
|
||||
import ch.psi.daq.query.model.QueryField;
|
||||
import ch.psi.daq.query.model.impl.AbstractQuery;
|
||||
|
||||
/**
|
||||
* Takes a Java 8 stream and writes it to the output stream provided by the {@link ServletResponse}
|
||||
|
@ -12,8 +12,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupp
|
||||
import ch.psi.daq.domain.reader.DataReader;
|
||||
import ch.psi.daq.query.processor.QueryProcessor;
|
||||
import ch.psi.daq.query.processor.QueryProcessorLocal;
|
||||
import ch.psi.daq.test.cassandra.admin.CassandraAdmin;
|
||||
import ch.psi.daq.test.cassandra.admin.CassandraAdminImpl;
|
||||
import ch.psi.daq.test.cassandra.admin.CassandraTestAdmin;
|
||||
import ch.psi.daq.test.cassandra.admin.CassandraTestAdminImpl;
|
||||
import ch.psi.daq.test.query.config.LocalQueryTestConfig;
|
||||
import ch.psi.daq.test.queryrest.query.DummyDataReader;
|
||||
|
||||
@ -42,7 +42,7 @@ public class DaqWebMvcConfig extends WebMvcConfigurationSupport {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CassandraAdmin cassandraAdmin() {
|
||||
return new CassandraAdminImpl();
|
||||
public CassandraTestAdmin cassandraTestAdmin() {
|
||||
return new CassandraTestAdminImpl();
|
||||
}
|
||||
}
|
@ -13,11 +13,11 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
||||
import ch.psi.daq.cassandra.util.test.CassandraDataGen;
|
||||
import ch.psi.daq.common.ordering.Ordering;
|
||||
import ch.psi.daq.query.model.AggregationType;
|
||||
import ch.psi.daq.query.model.PulseRangeQuery;
|
||||
import ch.psi.daq.query.model.TimeRangeQuery;
|
||||
import ch.psi.daq.query.model.TimeRangeQueryDate;
|
||||
import ch.psi.daq.query.model.impl.PulseRangeQuery;
|
||||
import ch.psi.daq.query.model.impl.TimeRangeQuery;
|
||||
import ch.psi.daq.query.model.impl.TimeRangeQueryDate;
|
||||
import ch.psi.daq.queryrest.controller.QueryRestController;
|
||||
import ch.psi.daq.test.cassandra.admin.CassandraAdmin;
|
||||
import ch.psi.daq.test.cassandra.admin.CassandraTestAdmin;
|
||||
import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
|
||||
|
||||
/**
|
||||
@ -26,7 +26,7 @@ import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
|
||||
public class DaqRestControllerTest extends AbstractDaqRestTest {
|
||||
|
||||
@Resource
|
||||
private CassandraAdmin cassandraAdmin;
|
||||
private CassandraTestAdmin cassandraTestAdmin;
|
||||
|
||||
@Resource
|
||||
private CassandraDataGen dataGen;
|
||||
@ -39,7 +39,7 @@ public class DaqRestControllerTest extends AbstractDaqRestTest {
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (!initialized) {
|
||||
cassandraAdmin.truncateAll();
|
||||
cassandraTestAdmin.truncateAll();
|
||||
|
||||
dataGen.writeData(DATA_REPLICATION, 100, 2, TEST_CHANNEL_NAMES);
|
||||
}
|
||||
|
Reference in New Issue
Block a user