use of com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal in project ma-modules-public by infiniteautomation.
the class JsonRestController method query.
@RequestMapping(method = RequestMethod.GET, value = "/query/{xid}")
public ArrayWithTotal<Stream<JsonNode>> query(@PathVariable String xid, HttpServletRequest request, ASTNode rql) throws UnsupportedEncodingException {
String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
String pointer = path.endsWith("/") ? "/" : "";
ArrayNode items = this.jsonDataService.valuesForDataAtPointer(xid, pointer);
return new FilteredStreamWithTotal<>(items, new RQLFilterJsonNode(rql));
}
use of com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal in project ma-modules-public by infiniteautomation.
the class EventTypesRestController method queryAllEventTypes.
@ApiOperation(value = "Query all available event types", notes = "Not specific to any reference ids, results come back based on type/sub-type combinations", response = EventTypeVOModel.class, responseContainer = "List")
@RequestMapping(method = RequestMethod.GET)
public StreamWithTotal<EventTypeVOModel<?, ?, ?>> queryAllEventTypes(@AuthenticationPrincipal PermissionHolder user, Translations translations, ASTNode query) {
List<EventTypeVOModel<?, ?, ?>> models = new ArrayList<>();
// Data Source
DataSourceEventType dset = new DataSourceEventType(0, 0);
DataSourceEventTypeModel dsetm = new DataSourceEventTypeModel(dset);
dsetm.setAlarmLevel(null);
EventTypeVOModel<?, ?, ?> dataSource = new EventTypeVOModel<DataSourceEventType, AbstractDataSourceModel<?>, String>(dsetm, new TranslatableMessage("eventHandlers.dataSourceEvents"), false, true, true);
dataSource.setAlarmLevel(null);
models.add(dataSource);
// Data point
DataPointEventType dpet = new DataPointEventType(0, 0);
DataPointEventTypeModel dpetm = new DataPointEventTypeModel(dpet);
EventTypeVOModel<?, ?, ?> dataPoint = new EventTypeVOModel<DataPointEventType, DataPointModel, AbstractPointEventDetectorModel<?>>(dpetm, new TranslatableMessage("eventHandlers.pointEventDetector"), false, true, true);
dataPoint.setAlarmLevel(null);
models.add(dataPoint);
// Publisher
PublisherEventType pet = new PublisherEventType(0, 0);
PublisherEventTypeModel petm = new PublisherEventTypeModel(pet);
EventTypeVOModel<?, ?, ?> publisher = new EventTypeVOModel<PublisherEventType, AbstractPublisherModel<?, ?>, String>(petm, new TranslatableMessage("eventHandlers.publisherEvents"), false, true, true);
publisher.setAlarmLevel(null);
models.add(publisher);
// System
// TODO Permissions
// TODO since we some system event types support referenceId1 and 2 we can't be sure here
SystemEventType set = new SystemEventType();
SystemEventTypeModel setm = new SystemEventTypeModel(set);
EventTypeVOModel<?, ?, ?> system = new EventTypeVOModel<>(setm, new TranslatableMessage("eventHandlers.systemEvents"), null, true, true, true);
models.add(system);
// Audit
// TODO Permissions
// TODO Audit Event Types will eventually support ref1 & 2
AuditEventType aet = new AuditEventType();
AuditEventTypeModel aetm = new AuditEventTypeModel(aet);
EventTypeVOModel<?, ?, ?> audit = new EventTypeVOModel<>(aetm, new TranslatableMessage("eventHandlers.auditEvents"), null, true, false, false);
models.add(audit);
// Module defined
for (EventTypeDefinition def : ModuleRegistry.getDefinitions(EventTypeDefinition.class)) {
if (!def.hasCreatePermission(user, permissionService))
continue;
EventType et = def.createDefaultEventType();
AbstractEventTypeModel<?, ?, ?> model = modelMapper.map(et, AbstractEventTypeModel.class, user);
models.add(new EventTypeVOModel<>(model, new TranslatableMessage(def.getDescriptionKey()), def.supportsSubType(), def.supportsReferenceId1(), def.supportsReferenceId2()));
}
return new FilteredStreamWithTotal<>(models, query, translations);
}
use of com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal in project ma-modules-public by infiniteautomation.
the class JsonRestController method queryAtPointer.
@RequestMapping(method = RequestMethod.GET, value = "/query/{xid}/**")
public ArrayWithTotal<Stream<JsonNode>> queryAtPointer(@PathVariable String xid, @ApiIgnore @RemainingPath String path, ASTNode rql) throws UnsupportedEncodingException {
String pointer = "/" + path;
ArrayNode items = this.jsonDataService.valuesForDataAtPointer(xid, pointer);
return new FilteredStreamWithTotal<>(items, new RQLFilterJsonNode(rql));
}
use of com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal in project ma-modules-public by infiniteautomation.
the class EventsWebSocketHandler method handleTextMessage.
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
try {
JsonNode tree = this.jacksonMapper.readTree(message.getPayload());
if (!WebSocketMessageType.REQUEST.messageTypeMatches(tree) || tree.get("requestType") == null) {
return;
}
EventsWebsocketRequest request = this.jacksonMapper.treeToValue(tree, EventsWebsocketRequest.class);
request.ensureValid();
if (request instanceof EventsSubscriptionRequest) {
EventsSubscriptionRequest subscription = (EventsSubscriptionRequest) request;
Set<AlarmLevels> levels = subscription.getLevels();
if (levels == null) {
levels = Collections.emptySet();
}
Set<EventActionEnum> actions = subscription.getActions();
if (actions == null) {
actions = EnumSet.noneOf(EventActionEnum.class);
}
boolean emptySubscriptions = levels.isEmpty() || actions.isEmpty();
synchronized (this.lock) {
// Configure listener
Boolean subscribed = (Boolean) session.getAttributes().get(SUBSCRIPTION_ATTRIBUTE);
if (subscribed == null || subscribed == Boolean.FALSE) {
if (!emptySubscriptions) {
changeLevels(levels);
changeActions(actions);
initialize();
session.getAttributes().put(SUBSCRIPTION_ATTRIBUTE, Boolean.TRUE);
}
} else {
if (emptySubscriptions) {
terminate();
session.getAttributes().put(SUBSCRIPTION_ATTRIBUTE, Boolean.FALSE);
} else {
changeActions(actions);
changeLevels(levels);
}
}
}
EventsSubscriptionResponse response = new EventsSubscriptionResponse();
if (subscription.isSendActiveSummary()) {
List<UserEventLevelSummary> summaries = service.getActiveSummary();
List<EventLevelSummaryModel> models = summaries.stream().map(s -> {
EventInstanceModel instanceModel = s.getLatest() != null ? modelMapper.map(s.getLatest(), EventInstanceModel.class, user) : null;
return new EventLevelSummaryModel(s.getAlarmLevel(), s.getCount(), instanceModel);
}).collect(Collectors.toList());
response.setActiveSummary(models);
}
if (subscription.isSendUnacknowledgedSummary()) {
List<UserEventLevelSummary> summaries = service.getUnacknowledgedSummary();
List<EventLevelSummaryModel> models = summaries.stream().map(s -> {
EventInstanceModel instanceModel = s.getLatest() != null ? modelMapper.map(s.getLatest(), EventInstanceModel.class, user) : null;
return new EventLevelSummaryModel(s.getAlarmLevel(), s.getCount(), instanceModel);
}).collect(Collectors.toList());
response.setUnacknowledgedSummary(models);
}
this.sendRawMessage(session, new WebSocketResponse<>(request.getSequenceNumber(), response));
} else if (request instanceof EventsDataPointSummaryRequest) {
EventsDataPointSummaryRequest query = (EventsDataPointSummaryRequest) request;
WebSocketResponse<List<DataPointEventSummaryModel>> response = new WebSocketResponse<>(request.getSequenceNumber());
Collection<DataPointEventLevelSummary> summaries = service.getDataPointEventSummaries(query.getDataPointXids());
List<DataPointEventSummaryModel> models = summaries.stream().map(s -> new DataPointEventSummaryModel(s.getXid(), s.getCounts())).collect(Collectors.toList());
response.setPayload(models);
this.sendRawMessage(session, response);
} else if (request instanceof AllActiveEventsRequest) {
WebSocketResponse<List<EventInstanceModel>> response = new WebSocketResponse<>(request.getSequenceNumber());
List<EventInstance> active = service.getAllActiveUserEvents();
List<EventInstanceModel> models = new ArrayList<>(active.size());
for (EventInstance vo : active) {
models.add(modelMapper.map(vo, EventInstanceModel.class, user));
}
response.setPayload(models);
this.sendRawMessage(session, response);
} else if (request instanceof ActiveEventsQuery) {
List<EventInstance> active = service.getAllActiveUserEvents();
List<EventInstanceModel> models = new ArrayList<>(active.size());
for (EventInstance vo : active) {
models.add(modelMapper.map(vo, EventInstanceModel.class, user));
}
String query = ((ActiveEventsQuery) request).getQuery();
ASTNode rql = RQLUtils.parseRQLtoAST(query);
WebSocketResponse<ArrayWithTotal<Stream<EventInstanceModel>>> response = new WebSocketResponse<>(request.getSequenceNumber());
response.setPayload(new FilteredStreamWithTotal<>(models, rql, user.getTranslations()));
this.sendRawMessage(session, response);
}
} catch (NotFoundException e) {
try {
this.sendErrorMessage(session, MangoWebSocketErrorType.NOT_FOUND, e.getTranslatableMessage());
} catch (Exception e1) {
log.error(e.getMessage(), e);
}
} catch (PermissionException e) {
try {
this.sendErrorMessage(session, MangoWebSocketErrorType.PERMISSION_DENIED, e.getTranslatableMessage());
} catch (Exception e1) {
log.error(e.getMessage(), e);
}
} catch (Exception e) {
try {
this.sendErrorMessage(session, MangoWebSocketErrorType.SERVER_ERROR, new TranslatableMessage("rest.error.serverError", e.getMessage()));
} catch (Exception e1) {
log.error(e.getMessage(), e);
}
}
}
Aggregations