use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueField in project ma-modules-public by infiniteautomation.
the class PointValueRestController method getRollupPointValuesAsMultipleArrays.
@ApiOperation(value = "Rollup values for multiple data points, return in time ascending order", notes = "From time inclusive, To time exclusive. Returns a map of xid to point value time arrays.", response = PointValueTimeModel.class, responseContainer = "Object")
@RequestMapping(method = RequestMethod.GET, value = "/multiple-arrays/time-period/{xids}/{rollup}")
public ResponseEntity<PointValueTimeStream<Map<String, List<PointValueTime>>, ZonedDateTimeRangeQueryInfo>> getRollupPointValuesAsMultipleArrays(HttpServletRequest request, @ApiParam(value = "Point xids", required = true, allowMultiple = true) @PathVariable String[] xids, @ApiParam(value = "Rollup type", required = false, allowMultiple = false) @PathVariable(value = "rollup") RollupEnum rollup, @ApiParam(value = "From time", required = false, allowMultiple = false) @RequestParam(value = "from", required = false) @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime from, @ApiParam(value = "To time", required = false, allowMultiple = false) @RequestParam(value = "to", required = false) @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime to, @ApiParam(value = "Time Period Type", required = false, allowMultiple = false) @RequestParam(value = "timePeriodType", required = false) TimePeriodType timePeriodType, @ApiParam(value = "Time Periods", required = false, allowMultiple = false) @RequestParam(value = "timePeriods", required = false) Integer timePeriods, @ApiParam(value = "Time zone", required = false, allowMultiple = false) @RequestParam(value = "timezone", required = false) String timezone, @ApiParam(value = "Limit (per series)", required = false, allowMultiple = false) @RequestParam(value = "limit", required = false) Integer limit, @ApiParam(value = "Date Time format pattern for timestamps as strings, if not included epoch milli number is used", required = false, allowMultiple = false) @RequestParam(value = "dateTimeFormat", required = false) String dateTimeFormat, @ApiParam(value = "Truncate the from time and expand to time based on the time period settings", required = false, allowMultiple = false) @RequestParam(value = "truncate", required = false, defaultValue = "false") boolean truncate, @ApiParam(value = "Fields to be included in the returned data, default is TIMESTAMP,VALUE", required = false, allowMultiple = false) @RequestParam(required = false) PointValueField[] fields, @AuthenticationPrincipal User user) {
TimePeriod timePeriod = null;
if ((timePeriodType != null) && (timePeriods != null)) {
timePeriod = new TimePeriod(timePeriods, timePeriodType);
}
ZonedDateTimeRangeQueryInfo info = new ZonedDateTimeRangeQueryInfo(from, to, dateTimeFormat, timezone, rollup, timePeriod, limit, true, false, false, PointValueTimeCacheControl.NONE, null, null, truncate, fields);
return generateStream(user, info, xids);
}
use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueField in project ma-modules-public by infiniteautomation.
the class PointValueTimeStreamCsvMessageConverter method writeInternal.
@Override
protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
MediaType contentType = outputMessage.getHeaders().getContentType();
JsonEncoding encoding = getJsonEncoding(contentType);
try {
PointValueTimeStream<?, ?> stream = (PointValueTimeStream<?, ?>) object;
stream.setContentType(StreamContentType.CSV);
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(outputMessage.getBody(), encoding);
// Set the schema
CsvSchema.Builder builder = CsvSchema.builder();
builder.setUseHeader(true);
// Setup our rendering parameters
LatestQueryInfo info = stream.getQueryInfo();
if (stream instanceof MultiPointTimeRangeDatabaseStream || stream instanceof MultiPointLatestDatabaseStream) {
if (info.isSingleArray()) {
if (info.isMultiplePointsPerArray()) {
Map<Integer, DataPointVO> voMap = stream.getVoMap();
Iterator<Integer> it = voMap.keySet().iterator();
boolean firstTimestamp = true;
while (it.hasNext()) {
String xid = voMap.get(it.next()).getXid();
for (PointValueField field : info.getFields()) {
if (field == PointValueField.TIMESTAMP) {
if (firstTimestamp)
field.createColumn(builder, xid);
firstTimestamp = false;
} else
field.createColumn(builder, xid);
}
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
} else if (stream instanceof MultiDataPointStatisticsQuantizerStream) {
if (stream.getQueryInfo().isSingleArray()) {
if (stream.getQueryInfo().isMultiplePointsPerArray()) {
Map<Integer, DataPointVO> voMap = stream.getVoMap();
Iterator<Integer> it = voMap.keySet().iterator();
boolean firstTimestamp = true;
while (it.hasNext()) {
String xid = voMap.get(it.next()).getXid();
for (PointValueField field : info.getFields()) {
if (field == PointValueField.TIMESTAMP) {
if (firstTimestamp)
field.createColumn(builder, xid);
firstTimestamp = false;
} else if (field == PointValueField.VALUE) {
if (info.getRollup() == RollupEnum.ALL) {
for (RollupEnum rollup : getAllRollups()) {
builder.addColumn(xid + PointValueTimeWriter.DOT + rollup.name(), ColumnType.NUMBER_OR_STRING);
}
} else {
field.createColumn(builder, xid);
}
} else {
field.createColumn(builder, xid);
}
}
}
} else {
// Single array
if (info.getRollup() == RollupEnum.ALL) {
for (RollupEnum rollup : getAllRollups()) {
builder.addColumn(rollup.name(), ColumnType.NUMBER_OR_STRING);
}
for (PointValueField field : info.getFields()) {
if (field == PointValueField.VALUE)
continue;
field.createColumn(builder, null);
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
}
} else {
if (info.getRollup() == RollupEnum.ALL) {
for (RollupEnum rollup : getAllRollups()) {
builder.addColumn(rollup.name(), ColumnType.NUMBER_OR_STRING);
}
for (PointValueField field : info.getFields()) {
if (field == PointValueField.VALUE)
continue;
field.createColumn(builder, null);
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
}
}
generator.setSchema(builder.build());
PointValueTimeWriter writer = new PointValueTimeCsvWriter(stream.getQueryInfo(), stream.getVoMap().size(), generator);
stream.start(writer);
stream.streamData(writer);
stream.finish(writer);
generator.flush();
} catch (JsonProcessingException ex) {
throw new HttpMessageNotWritableException("Could not write content: " + ex.getMessage(), ex);
}
}
use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueField in project ma-modules-public by infiniteautomation.
the class PointValueRestController method getRollupPointValuesAsSingleArray.
@ApiOperation(value = "Rollup values for multiple data points, return in time ascending order", notes = "From time inclusive, To time exclusive. Return in single array.", response = PointValueTimeModel.class, responseContainer = "Array")
@RequestMapping(method = RequestMethod.GET, value = "/single-array/time-period/{xids}/{rollup}")
public ResponseEntity<PointValueTimeStream<PointValueTimeModel, ZonedDateTimeRangeQueryInfo>> getRollupPointValuesAsSingleArray(HttpServletRequest request, @ApiParam(value = "Point xids", required = true, allowMultiple = true) @PathVariable String[] xids, @ApiParam(value = "Rollup type", required = false, allowMultiple = false) @PathVariable(value = "rollup") RollupEnum rollup, @ApiParam(value = "From time", required = false, allowMultiple = false) @RequestParam(value = "from", required = false) @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime from, @ApiParam(value = "To time", required = false, allowMultiple = false) @RequestParam(value = "to", required = false) @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime to, @ApiParam(value = "Time Period Type", required = false, allowMultiple = false) @RequestParam(value = "timePeriodType", required = false) TimePeriodType timePeriodType, @ApiParam(value = "Time Periods", required = false, allowMultiple = false) @RequestParam(value = "timePeriods", required = false) Integer timePeriods, @ApiParam(value = "Time zone", required = false, allowMultiple = false) @RequestParam(value = "timezone", required = false) String timezone, @ApiParam(value = "Limit", required = false, allowMultiple = false) @RequestParam(value = "limit", required = false) Integer limit, @ApiParam(value = "Date Time format pattern for timestamps as strings, if not included epoch milli number is used", required = false, allowMultiple = false) @RequestParam(value = "dateTimeFormat", required = false) String dateTimeFormat, @ApiParam(value = "Truncate the from time and expand to time based on the time period settings", required = false, allowMultiple = false) @RequestParam(value = "truncate", required = false, defaultValue = "false") boolean truncate, @ApiParam(value = "Fields to be included in the returned data, default is TIMESTAMP,VALUE", required = false, allowMultiple = false) @RequestParam(required = false) PointValueField[] fields, @AuthenticationPrincipal User user) {
TimePeriod timePeriod = null;
if ((timePeriodType != null) && (timePeriods != null)) {
timePeriod = new TimePeriod(timePeriods, timePeriodType);
}
ZonedDateTimeRangeQueryInfo info = new ZonedDateTimeRangeQueryInfo(from, to, dateTimeFormat, timezone, rollup, timePeriod, limit, true, true, true, PointValueTimeCacheControl.NONE, null, null, truncate, fields);
return generateStream(user, info, xids);
}
use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueField in project ma-modules-public by infiniteautomation.
the class PointValueRestController method getRollupPointValues.
@ApiOperation(value = "Rollup values For 1 Data Point, return in time ascending order", notes = "From time inclusive, To time exclusive.", response = PointValueTimeModel.class, responseContainer = "Array")
@RequestMapping(method = RequestMethod.GET, value = "/time-period/{xid}/{rollup}")
public ResponseEntity<PointValueTimeStream<PointValueTimeModel, ZonedDateTimeRangeQueryInfo>> getRollupPointValues(HttpServletRequest request, @ApiParam(value = "Point xid", required = true, allowMultiple = false) @PathVariable String xid, @ApiParam(value = "Rollup type", required = false, allowMultiple = false) @PathVariable(value = "rollup") RollupEnum rollup, @ApiParam(value = "Date Time format pattern for timestamps as strings, if not included epoch milli number is used", required = false, allowMultiple = false) @RequestParam(value = "dateTimeFormat", required = false) String dateTimeFormat, @ApiParam(value = "From time", required = false, allowMultiple = false) @RequestParam(value = "from", required = false) @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime from, @ApiParam(value = "To time", required = false, allowMultiple = false) @RequestParam(value = "to", required = false) @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime to, @ApiParam(value = "Time zone", required = false, allowMultiple = false) @RequestParam(value = "timezone", required = false) String timezone, @ApiParam(value = "Limit", required = false, allowMultiple = false) @RequestParam(value = "limit", required = false) Integer limit, @ApiParam(value = "Time Period Type", required = false, allowMultiple = false) @RequestParam(value = "timePeriodType", required = false) TimePeriodType timePeriodType, @ApiParam(value = "Time Periods", required = false, allowMultiple = false) @RequestParam(value = "timePeriods", required = false) Integer timePeriods, @ApiParam(value = "Truncate the from time and expand to time based on the time period settings", required = false, allowMultiple = false) @RequestParam(value = "truncate", required = false, defaultValue = "false") boolean truncate, @ApiParam(value = "Fields to be included in the returned data, default is TIMESTAMP,VALUE", required = false, allowMultiple = false) @RequestParam(required = false) PointValueField[] fields, @AuthenticationPrincipal User user) {
TimePeriod timePeriod = null;
if ((timePeriodType != null) && (timePeriods != null)) {
timePeriod = new TimePeriod(timePeriods, timePeriodType);
}
ZonedDateTimeRangeQueryInfo info = new ZonedDateTimeRangeQueryInfo(from, to, dateTimeFormat, timezone, rollup, timePeriod, limit, true, false, true, PointValueTimeCacheControl.NONE, null, null, truncate, fields);
return generateStream(user, info, new String[] { xid });
}
Aggregations