@Override public void send(StreamEvent event) throws Exception { Object[] data = event.getData(); List<Object> columnValues = new ArrayList<>(); for (int i = 0; i < expectFieldIndices.size(); i++) { Object o = data[expectFieldIndices.get(i)]; // convert value to string columnValues.add(o.toString()); } boolean isAbsenceAlert = driver.process(columnValues, event.getTimestamp()); // Publishing alerts. if (isAbsenceAlert) { AlertStreamEvent alertEvent = AlertStreamUtils.createAlertEvent(event, context, sds); collector.emit(alertEvent); } }
@Test public void testAbsence() throws Exception { // from 2PM to 3PM each day AbsenceDailyRule rule = new AbsenceDailyRule(); rule.startOffset = 14 * 3600 * 1000; rule.endOffset = 15 * 3600 * 1000; AbsenceWindowGenerator generator = new AbsenceWindowGenerator(rule); List<Object> expectAttrs = Arrays.asList("host1"); AbsenceAlertDriver driver = new AbsenceAlertDriver(expectAttrs, generator); // first event came in 2016-07-08 11:20:00 String date = "2016-07-08 11:20:00"; DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df.setTimeZone(TimeZone.getTimeZone("UTC")); Date d = df.parse(date); long baseOccurTime = d.getTime(); // first event driver.process(Arrays.asList("host2"), baseOccurTime); // event after 1 hour driver.process(Arrays.asList("host2"), baseOccurTime + 3600 * 1000); // event after 2 hour driver.process(Arrays.asList("host2"), baseOccurTime + 2 * 3600 * 1000); // event after 3 hour, enter this window driver.process(Arrays.asList("host2"), baseOccurTime + 3 * 3600 * 1000); // event after 3.5 hour, still in this window driver.process(Arrays.asList("host2"), baseOccurTime + 3 * 3600 * 1000 + 1800 * 1000); // event after 4 hour, exit this window driver.process(Arrays.asList("host2"), baseOccurTime + 4 * 3600 * 1000); }
driver.process(Arrays.asList("host2"), baseOccurTime); driver.process(Arrays.asList("host2"), baseOccurTime + 3600 * 1000); driver.process(Arrays.asList("host2"), baseOccurTime + 2 * 3600 * 1000); driver.process(Arrays.asList("host2"), baseOccurTime + 3 * 3600 * 1000); driver.process(Arrays.asList("host1"), baseOccurTime + 3 * 3600 * 1000 + 1800 * 1000); driver.process(Arrays.asList("host2"), baseOccurTime + 4 * 3600 * 1000);