Search in sources :

Example 1 with EventActionEnum

use of com.infiniteautomation.mango.rest.latest.model.event.EventActionEnum 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);
        }
    }
}
Also used : FilteredStreamWithTotal(com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal) NotFoundException(com.infiniteautomation.mango.util.exception.NotFoundException) EventInstance(com.serotonin.m2m2.rt.event.EventInstance) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Id(com.fasterxml.jackson.annotation.JsonTypeInfo.Id) ArrayWithTotal(com.infiniteautomation.mango.rest.latest.model.ArrayWithTotal) DataPointEventSummaryModel(com.infiniteautomation.mango.rest.latest.model.event.DataPointEventSummaryModel) WebSocketSession(org.springframework.web.socket.WebSocketSession) CloseStatus(org.springframework.web.socket.CloseStatus) ArrayList(java.util.ArrayList) RestModelMapper(com.infiniteautomation.mango.rest.latest.model.RestModelMapper) UserEventListener(com.serotonin.m2m2.rt.event.UserEventListener) TextMessage(org.springframework.web.socket.TextMessage) As(com.fasterxml.jackson.annotation.JsonTypeInfo.As) DataPointEventLevelSummary(com.serotonin.m2m2.rt.event.DataPointEventLevelSummary) JsonNode(com.fasterxml.jackson.databind.JsonNode) Validatable(com.serotonin.m2m2.vo.Validatable) EnumSet(java.util.EnumSet) Logger(org.slf4j.Logger) JsonSubTypes(com.fasterxml.jackson.annotation.JsonSubTypes) Common(com.serotonin.m2m2.Common) Collection(java.util.Collection) EventInstanceModel(com.infiniteautomation.mango.rest.latest.model.event.EventInstanceModel) RQLUtils(com.infiniteautomation.mango.util.RQLUtils) Set(java.util.Set) EventInstanceService(com.infiniteautomation.mango.spring.service.EventInstanceService) TranslatableMessage(com.serotonin.m2m2.i18n.TranslatableMessage) UserEventLevelSummary(com.serotonin.m2m2.rt.event.UserEventLevelSummary) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) ProcessResult(com.serotonin.m2m2.i18n.ProcessResult) List(java.util.List) Stream(java.util.stream.Stream) JsonTypeInfo(com.fasterxml.jackson.annotation.JsonTypeInfo) ASTNode(net.jazdw.rql.parser.ASTNode) EventLevelSummaryModel(com.infiniteautomation.mango.rest.latest.model.event.EventLevelSummaryModel) EventActionEnum(com.infiniteautomation.mango.rest.latest.model.event.EventActionEnum) AlarmLevels(com.serotonin.m2m2.rt.event.AlarmLevels) Collections(java.util.Collections) User(com.serotonin.m2m2.vo.User) PermissionException(com.serotonin.m2m2.vo.permission.PermissionException) Type(com.fasterxml.jackson.annotation.JsonSubTypes.Type) EventInstance(com.serotonin.m2m2.rt.event.EventInstance) PermissionException(com.serotonin.m2m2.vo.permission.PermissionException) EventActionEnum(com.infiniteautomation.mango.rest.latest.model.event.EventActionEnum) EventLevelSummaryModel(com.infiniteautomation.mango.rest.latest.model.event.EventLevelSummaryModel) ArrayList(java.util.ArrayList) NotFoundException(com.infiniteautomation.mango.util.exception.NotFoundException) JsonNode(com.fasterxml.jackson.databind.JsonNode) EventInstanceModel(com.infiniteautomation.mango.rest.latest.model.event.EventInstanceModel) ASTNode(net.jazdw.rql.parser.ASTNode) ArrayList(java.util.ArrayList) List(java.util.List) Stream(java.util.stream.Stream) TranslatableMessage(com.serotonin.m2m2.i18n.TranslatableMessage) FilteredStreamWithTotal(com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal) UserEventLevelSummary(com.serotonin.m2m2.rt.event.UserEventLevelSummary) NotFoundException(com.infiniteautomation.mango.util.exception.NotFoundException) PermissionException(com.serotonin.m2m2.vo.permission.PermissionException) DataPointEventSummaryModel(com.infiniteautomation.mango.rest.latest.model.event.DataPointEventSummaryModel) Collection(java.util.Collection) AlarmLevels(com.serotonin.m2m2.rt.event.AlarmLevels)

Aggregations

JsonSubTypes (com.fasterxml.jackson.annotation.JsonSubTypes)1 Type (com.fasterxml.jackson.annotation.JsonSubTypes.Type)1 JsonTypeInfo (com.fasterxml.jackson.annotation.JsonTypeInfo)1 As (com.fasterxml.jackson.annotation.JsonTypeInfo.As)1 Id (com.fasterxml.jackson.annotation.JsonTypeInfo.Id)1 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 ArrayWithTotal (com.infiniteautomation.mango.rest.latest.model.ArrayWithTotal)1 FilteredStreamWithTotal (com.infiniteautomation.mango.rest.latest.model.FilteredStreamWithTotal)1 RestModelMapper (com.infiniteautomation.mango.rest.latest.model.RestModelMapper)1 DataPointEventSummaryModel (com.infiniteautomation.mango.rest.latest.model.event.DataPointEventSummaryModel)1 EventActionEnum (com.infiniteautomation.mango.rest.latest.model.event.EventActionEnum)1 EventInstanceModel (com.infiniteautomation.mango.rest.latest.model.event.EventInstanceModel)1 EventLevelSummaryModel (com.infiniteautomation.mango.rest.latest.model.event.EventLevelSummaryModel)1 EventInstanceService (com.infiniteautomation.mango.spring.service.EventInstanceService)1 RQLUtils (com.infiniteautomation.mango.util.RQLUtils)1 NotFoundException (com.infiniteautomation.mango.util.exception.NotFoundException)1 Common (com.serotonin.m2m2.Common)1 ProcessResult (com.serotonin.m2m2.i18n.ProcessResult)1 TranslatableMessage (com.serotonin.m2m2.i18n.TranslatableMessage)1 AlarmLevels (com.serotonin.m2m2.rt.event.AlarmLevels)1