in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/controllers/TimebaseController.java [140:196]
public ResponseEntity<StreamingResponseBody> select(@Valid @RequestBody(required = false) SelectRequest select, Principal user, OutputStream outputStream) {
// ResponseEntity<StreamingResponseBody> entity = checkAuthentication(authSettings);
// if (entity != null)
// return entity;
if (select == null)
select = new SelectRequest();
if (select.streams == null)
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
ArrayList<DXTickStream> streams = new ArrayList<>();
for (String streamId : select.streams) {
DXTickStream stream = service.getStream(streamId);
if (stream != null)
streams.add(stream);
}
if (streams.isEmpty())
return ResponseEntity.notFound().build();
HashSet<IdentityKey> instruments = null;
if (select.symbols != null) {
instruments = new HashSet<>();
for (DXTickStream stream : streams)
Collections.addAll(instruments, match(stream, select.symbols));
}
SelectionOptions options = new SelectionOptions();
options.channelQOS = ChannelQualityOfService.MIN_INIT_TIME;
options.reversed = select.reverse;
options.raw = true;
final long startIndex = select.offset < 0 ? 0 : select.offset;
final long endIndex = startIndex + select.rows - 1; // inclusive
DXTickStream[] tickStreams = streams.toArray(new DXTickStream[streams.size()]);
long startTime = select.getStartTime(TimebaseServiceImpl.getEndTime(tickStreams));
TickCursor messageSource = service.getConnection().select(
startTime,
options,
select.types,
collectCharSequence(collect(instruments)),
tickStreams);
LOGGER.log(LogLevel.INFO, "SELECT * FROM " + Arrays.toString(select.streams) + " WHERE MESSAGE_INDEX IN [" + startIndex + ", " + endIndex + "] " +
"AND TYPES = [" + Arrays.toString(select.types) + "] AND ENTITIES = [" + Arrays.toString(collect(instruments)) + "] " +
"AND timestamp [" + GMT.formatDateTimeMillis(startTime) + ":" + GMT.formatDateTimeMillis(select.getEndTime()) + "]");
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_JSON_UTF8)
.body(new MessageSource2ResponseStream(messageSource, select.getEndTime(), startIndex, endIndex));
}