Search in sources :

Example 1 with EventDao

use of com.serotonin.m2m2.db.dao.EventDao in project ma-core-public by infiniteautomation.

the class EventInstanceDwr method silenceEvents.

/**
 * Silence all events from the current User Event Query
 * @return
 */
@DwrPermission(user = true)
public ProcessResult silenceEvents() {
    ProcessResult response = new ProcessResult();
    final User user = Common.getHttpUser();
    if (user != null) {
        final EventDao eventDao = EventDao.instance;
        final ResultSetCounter counter = new ResultSetCounter();
        QueryDefinition queryData = (QueryDefinition) user.getAttribute("eventInstanceExportDefinition");
        DojoQueryCallback<EventInstanceVO> callback = new DojoQueryCallback<EventInstanceVO>(false) {

            @Override
            public void row(EventInstanceVO vo, int rowIndex) {
                if (!vo.isSilenced()) {
                    // If not silenced then do it.
                    eventDao.toggleSilence(vo.getId(), user.getId());
                    counter.increment();
                }
            }
        };
        EventInstanceDao.instance.exportQuery(queryData.getQuery(), queryData.getSort(), null, null, queryData.isOr(), callback);
        resetLastAlarmLevelChange();
        response.addGenericMessage("events.silencedEvents", counter.getCount());
    } else {
        response.addGenericMessage("events.silencedEvents", 0);
    }
    return response;
}
Also used : User(com.serotonin.m2m2.vo.User) EventInstanceVO(com.serotonin.m2m2.vo.event.EventInstanceVO) EventDao(com.serotonin.m2m2.db.dao.EventDao) ProcessResult(com.serotonin.m2m2.i18n.ProcessResult) DojoQueryCallback(com.serotonin.m2m2.db.dao.DojoQueryCallback) ResultSetCounter(com.serotonin.m2m2.db.dao.ResultSetCounter) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 2 with EventDao

use of com.serotonin.m2m2.db.dao.EventDao in project ma-core-public by infiniteautomation.

the class BaseDwr method doLongPoll.

@DwrPermission(anonymous = true)
public Map<String, Object> doLongPoll(int pollSessionId) {
    Map<String, Object> response = new HashMap<>();
    HttpServletRequest httpRequest = WebContextFactory.get().getHttpServletRequest();
    User user = Common.getUser(httpRequest);
    EventDao eventDao = EventDao.instance;
    LongPollData data = getLongPollData(pollSessionId, false);
    data.updateTimestamp();
    LongPollRequest pollRequest = data.getRequest();
    // One minute
    long expireTime = Common.timer.currentTimeMillis() + 60000;
    LongPollState state = data.getState();
    int waitTime = SystemSettingsDao.getIntValue(SystemSettingsDao.UI_PERFORMANCE);
    // For users that log in on multiple machines (or browsers), reset the
    // last alarm timestamp so that it always
    // gets reset with at least each new poll. For now this beats writing
    // user-specific event change tracking code.
    state.setLastAlarmLevelChange(0);
    while (!pollRequest.isTerminated() && Common.timer.currentTimeMillis() < expireTime) {
        if (Providers.get(IMangoLifecycle.class).isTerminated()) {
            pollRequest.setTerminated(true);
            break;
        }
        if (pollRequest.isMaxAlarm() && user != null) {
            // Track the last alarm count to see if we need to update the
            // alarm toaster
            Integer lastUnsilencedAlarmCount = (Integer) data.getState().getAttribute("lastUnsilencedAlarmCount");
            // Ensure we have one, as we won't on first run
            if (lastUnsilencedAlarmCount == null)
                lastUnsilencedAlarmCount = 0;
            // Sort into lists for the different types
            List<EventInstance> events = Common.eventManager.getAllActiveUserEvents(user.getId());
            int currentUnsilencedAlarmCount = events.size();
            int lifeSafetyTotal = 0;
            EventInstance lifeSafetyEvent = null;
            int criticalTotal = 0;
            EventInstance criticalEvent = null;
            int urgentTotal = 0;
            EventInstance urgentEvent = null;
            int warningTotal = 0;
            EventInstance warningEvent = null;
            int importantTotal = 0;
            EventInstance importantEvent = null;
            int informationTotal = 0;
            EventInstance informationEvent = null;
            int noneTotal = 0;
            EventInstance noneEvent = null;
            int doNotLogTotal = 0;
            EventInstance doNotLogEvent = null;
            for (EventInstance event : events) {
                switch(event.getAlarmLevel()) {
                    case AlarmLevels.LIFE_SAFETY:
                        lifeSafetyTotal++;
                        lifeSafetyEvent = event;
                        break;
                    case AlarmLevels.CRITICAL:
                        criticalTotal++;
                        criticalEvent = event;
                        break;
                    case AlarmLevels.URGENT:
                        urgentTotal++;
                        urgentEvent = event;
                        break;
                    case AlarmLevels.WARNING:
                        warningTotal++;
                        warningEvent = event;
                        break;
                    case AlarmLevels.IMPORTANT:
                        importantTotal++;
                        importantEvent = event;
                        break;
                    case AlarmLevels.INFORMATION:
                        informationTotal++;
                        informationEvent = event;
                        break;
                    case AlarmLevels.NONE:
                        noneTotal++;
                        noneEvent = event;
                        break;
                    case AlarmLevels.DO_NOT_LOG:
                        doNotLogTotal++;
                        doNotLogEvent = event;
                        break;
                }
            }
            // If we have some new information we should show it
            if (lastUnsilencedAlarmCount != currentUnsilencedAlarmCount) {
                data.getState().setAttribute("lastUnsilencedAlarmCount", // Update the value
                currentUnsilencedAlarmCount);
                // Indicate to UI that
                response.put("alarmsUpdated", true);
                // there is a new
                // alarm
                response.put("alarmsDoNotLog", doNotLogTotal);
                if (doNotLogTotal == 1)
                    response.put("doNotLogEvent", doNotLogEvent);
                response.put("alarmsNone", noneTotal);
                if (noneTotal == 1)
                    response.put("noneEvent", noneEvent);
                response.put("alarmsInformation", informationTotal);
                if (informationTotal == 1)
                    response.put("informationEvent", informationEvent);
                response.put("alarmsImportant", importantTotal);
                if (importantTotal == 1)
                    response.put("importantEvent", importantEvent);
                response.put("alarmsWarning", warningTotal);
                if (warningTotal == 1)
                    response.put("warningEvent", warningEvent);
                response.put("alarmsUrgent", urgentTotal);
                if (urgentTotal == 1)
                    response.put("urgentEvent", urgentEvent);
                response.put("alarmsCritical", criticalTotal);
                if (criticalTotal == 1)
                    response.put("criticalEvent", criticalEvent);
                response.put("alarmsLifeSafety", lifeSafetyTotal);
                if (lifeSafetyTotal == 1)
                    response.put("lifeSafetyEvent", lifeSafetyEvent);
            } else {
            // end if new alarm toaster info
            // response.put("alarmsUpdated",false);
            }
            // The events have changed. See if the user's particular max
            // alarm level has changed.
            int maxAlarmLevel = AlarmLevels.DO_NOT_LOG;
            if (lifeSafetyTotal > 0)
                maxAlarmLevel = AlarmLevels.LIFE_SAFETY;
            else if (criticalTotal > 0)
                maxAlarmLevel = AlarmLevels.CRITICAL;
            else if (urgentTotal > 0)
                maxAlarmLevel = AlarmLevels.URGENT;
            else if (warningTotal > 0)
                maxAlarmLevel = AlarmLevels.WARNING;
            else if (importantTotal > 0)
                maxAlarmLevel = AlarmLevels.IMPORTANT;
            else if (informationTotal > 0)
                maxAlarmLevel = AlarmLevels.INFORMATION;
            else if (noneTotal > 0)
                maxAlarmLevel = AlarmLevels.NONE;
            if (maxAlarmLevel != state.getMaxAlarmLevel()) {
                response.put("highestUnsilencedAlarmLevel", maxAlarmLevel);
                state.setMaxAlarmLevel(maxAlarmLevel);
            }
            // Check the max alarm. First check if the events have changed
            // since the last time this request checked.
            long lastEMUpdate = Common.eventManager.getLastAlarmTimestamp();
            // If there is a new alarm then do stuff
            if (state.getLastAlarmLevelChange() < lastEMUpdate) {
                state.setLastAlarmLevelChange(lastEMUpdate);
            } else {
            // end no new alarms
            // Don't add data for nothing, this will cause tons of
            // polls. response.put("alarmsUpdated",false);
            }
        }
        if (pollRequest.isPointDetails() && user != null) {
            PointDetailsState newState = DataPointDetailsDwr.getPointData();
            PointDetailsState responseState;
            PointDetailsState oldState = state.getPointDetailsState();
            if (oldState == null)
                responseState = newState;
            else {
                responseState = newState.clone();
                responseState.removeEqualValue(oldState);
            }
            if (!responseState.isEmpty()) {
                response.put("pointDetailsState", responseState);
                state.setPointDetailsState(newState);
            }
        }
        // TODO This code is used on the legacy alarms page
        if (pollRequest.isPendingAlarms() && user != null) {
            // Create the list of most current pending alarm content.
            Map<String, Object> model = new HashMap<>();
            model.put(MODEL_ATTR_EVENTS, eventDao.getPendingEvents(user.getId()));
            model.put("pendingEvents", true);
            model.put("noContentWhenEmpty", true);
            String currentContent = generateContent(httpRequest, "eventList.jsp", model);
            currentContent = com.serotonin.util.StringUtils.trimWhitespace(currentContent);
            if (!StringUtils.equals(currentContent, state.getPendingAlarmsContent())) {
                response.put("newAlarms", true);
                response.put("pendingAlarmsContent", currentContent);
                state.setPendingAlarmsContent(currentContent);
            } else {
                response.put("newAlarms", false);
            }
        }
        // Module handlers
        for (int i = 0; i < longPollHandlers.size(); i++) {
            LongPollHandler handler = longPollHandlers.get(i);
            handler.handleLongPoll(data, response, user);
        }
        if (!response.isEmpty())
            break;
        synchronized (pollRequest) {
            try {
                pollRequest.wait(waitTime);
            } catch (InterruptedException e) {
            // no op
            }
        }
    }
    if (pollRequest.isTerminated())
        response.put("terminated", true);
    return response;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) LongPollState(com.serotonin.m2m2.web.dwr.longPoll.LongPollState) User(com.serotonin.m2m2.vo.User) HashMap(java.util.HashMap) LongPollData(com.serotonin.m2m2.web.dwr.longPoll.LongPollData) LongPollHandler(com.serotonin.m2m2.web.dwr.longPoll.LongPollHandler) HttpServletRequest(javax.servlet.http.HttpServletRequest) EventDao(com.serotonin.m2m2.db.dao.EventDao) IMangoLifecycle(com.serotonin.m2m2.IMangoLifecycle) LongPollRequest(com.serotonin.m2m2.web.dwr.longPoll.LongPollRequest) PointDetailsState(com.serotonin.m2m2.web.dwr.beans.PointDetailsState) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 3 with EventDao

use of com.serotonin.m2m2.db.dao.EventDao in project ma-core-public by infiniteautomation.

the class EventsDwr method search.

@DwrPermission(user = true)
public ProcessResult search(int eventId, String eventType, String status, int alarmLevel, String keywordStr, int dateRangeType, int relativeDateType, int previousPeriodCount, int previousPeriodType, int pastPeriodCount, int pastPeriodType, boolean fromNone, int fromYear, int fromMonth, int fromDay, int fromHour, int fromMinute, int fromSecond, boolean toNone, int toYear, int toMonth, int toDay, int toHour, int toMinute, int toSecond, int page, Date date) {
    ProcessResult response = new ProcessResult();
    HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
    User user = Common.getUser(request);
    int from = PAGE_SIZE * page;
    int to = from + PAGE_SIZE;
    // excluding all of the events for that day. So, // we need to add 1 day to it.
    if (date != null)
        date = DateUtils.minus(new DateTime(date.getTime()), Common.TimePeriods.DAYS, -1).toDate();
    LongPair dateRange = getDateRange(dateRangeType, relativeDateType, previousPeriodCount, previousPeriodType, pastPeriodCount, pastPeriodType, fromNone, fromYear, fromMonth, fromDay, fromHour, fromMinute, fromSecond, toNone, toYear, toMonth, toDay, toHour, toMinute, toSecond, user.getDateTimeZoneInstance());
    EventDao eventDao = EventDao.instance;
    List<EventInstance> results = eventDao.search(eventId, eventType, status, alarmLevel, getKeywords(keywordStr), dateRange.getL1(), dateRange.getL2(), user.getId(), getTranslations(), from, to, date);
    Map<String, Object> model = new HashMap<String, Object>();
    int searchRowCount = eventDao.getSearchRowCount();
    int pages = (int) Math.ceil(((double) searchRowCount) / PAGE_SIZE);
    if (date != null) {
        int startRow = eventDao.getStartRow();
        if (startRow == -1)
            page = pages - 1;
        else
            page = eventDao.getStartRow() / PAGE_SIZE;
    }
    if (pages > 1) {
        model.put("displayPagination", true);
        if (page - PAGINATION_RADIUS > 1)
            model.put("leftEllipsis", true);
        else
            model.put("leftEllipsis", false);
        int linkFrom = page + 1 - PAGINATION_RADIUS;
        if (linkFrom < 2)
            linkFrom = 2;
        model.put("linkFrom", linkFrom);
        int linkTo = page + 1 + PAGINATION_RADIUS;
        if (linkTo >= pages)
            linkTo = pages - 1;
        model.put("linkTo", linkTo);
        if (page + PAGINATION_RADIUS < pages - 2)
            model.put("rightEllipsis", true);
        else
            model.put("rightEllipsis", false);
        model.put("numberOfPages", pages);
    } else
        model.put("displayPagination", false);
    model.put(MODEL_ATTR_EVENTS, results);
    model.put("page", page);
    model.put("pendingEvents", false);
    response.addData("content", generateContent(request, "eventList.jsp", model));
    response.addData("resultCount", new TranslatableMessage("events.search.resultCount", searchRowCount));
    return response;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) User(com.serotonin.m2m2.vo.User) LongPair(com.serotonin.m2m2.vo.pair.LongPair) HashMap(java.util.HashMap) ProcessResult(com.serotonin.m2m2.i18n.ProcessResult) DateTime(org.joda.time.DateTime) HttpServletRequest(javax.servlet.http.HttpServletRequest) EventDao(com.serotonin.m2m2.db.dao.EventDao) TranslatableMessage(com.serotonin.m2m2.i18n.TranslatableMessage) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 4 with EventDao

use of com.serotonin.m2m2.db.dao.EventDao in project ma-core-public by infiniteautomation.

the class MiscDwr method acknowledgeAllPendingEvents.

@DwrPermission(anonymous = true)
public void acknowledgeAllPendingEvents() {
    User user = Common.getHttpUser();
    if (user != null) {
        EventDao eventDao = EventDao.instance;
        long now = Common.timer.currentTimeMillis();
        for (EventInstance evt : eventDao.getPendingEvents(user.getId())) Common.eventManager.acknowledgeEventById(evt.getId(), now, user, null);
        resetLastAlarmLevelChange();
    }
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) User(com.serotonin.m2m2.vo.User) EventDao(com.serotonin.m2m2.db.dao.EventDao) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Example 5 with EventDao

use of com.serotonin.m2m2.db.dao.EventDao in project ma-core-public by infiniteautomation.

the class MiscDwr method silenceAll.

@DwrPermission(anonymous = true)
public ProcessResult silenceAll() {
    List<Integer> silenced = new ArrayList<Integer>();
    User user = Common.getHttpUser();
    if (user != null) {
        EventDao eventDao = EventDao.instance;
        for (EventInstance evt : eventDao.getPendingEvents(user.getId())) {
            if (!evt.isSilenced()) {
                eventDao.toggleSilence(evt.getId(), user.getId());
                silenced.add(evt.getId());
            }
        }
        resetLastAlarmLevelChange();
    }
    ProcessResult response = new ProcessResult();
    response.addData("silenced", silenced);
    return response;
}
Also used : EventInstance(com.serotonin.m2m2.rt.event.EventInstance) User(com.serotonin.m2m2.vo.User) EventDao(com.serotonin.m2m2.db.dao.EventDao) ArrayList(java.util.ArrayList) ProcessResult(com.serotonin.m2m2.i18n.ProcessResult) DwrPermission(com.serotonin.m2m2.web.dwr.util.DwrPermission)

Aggregations

EventDao (com.serotonin.m2m2.db.dao.EventDao)5 User (com.serotonin.m2m2.vo.User)5 DwrPermission (com.serotonin.m2m2.web.dwr.util.DwrPermission)5 EventInstance (com.serotonin.m2m2.rt.event.EventInstance)4 ProcessResult (com.serotonin.m2m2.i18n.ProcessResult)3 HashMap (java.util.HashMap)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 IMangoLifecycle (com.serotonin.m2m2.IMangoLifecycle)1 DojoQueryCallback (com.serotonin.m2m2.db.dao.DojoQueryCallback)1 ResultSetCounter (com.serotonin.m2m2.db.dao.ResultSetCounter)1 TranslatableMessage (com.serotonin.m2m2.i18n.TranslatableMessage)1 EventInstanceVO (com.serotonin.m2m2.vo.event.EventInstanceVO)1 LongPair (com.serotonin.m2m2.vo.pair.LongPair)1 PointDetailsState (com.serotonin.m2m2.web.dwr.beans.PointDetailsState)1 LongPollData (com.serotonin.m2m2.web.dwr.longPoll.LongPollData)1 LongPollHandler (com.serotonin.m2m2.web.dwr.longPoll.LongPollHandler)1 LongPollRequest (com.serotonin.m2m2.web.dwr.longPoll.LongPollRequest)1 LongPollState (com.serotonin.m2m2.web.dwr.longPoll.LongPollState)1 ArrayList (java.util.ArrayList)1 DateTime (org.joda.time.DateTime)1