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;
}
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;
}
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;
}
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();
}
}
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;
}
Aggregations