@Override public synchronized AlertStreamEvent filter(AlertStreamEvent event) { Preconditions.checkArgument(this.policyDefinitionRepository.containsKey(event.getPolicyId()), "Unknown policyId " + event.getPolicyId()); PolicyDefinition policyDefinition = this.policyDefinitionRepository.get(event.getPolicyId()); StringWriter bodyWriter = new StringWriter(); StringWriter subjectWriter = new StringWriter(); try { VelocityContext alertContext = buildAlertContext(policyDefinition, event); Template template = engine.getTemplate(getAlertBodyTemplateName(event.getPolicyId())); template.merge(alertContext, bodyWriter); event.setBody(bodyWriter.toString()); template = engine.getTemplate(getAlertSubjectTemplateName(event.getPolicyId())); template.merge(alertContext, subjectWriter); event.setSubject(subjectWriter.toString()); } finally { try { bodyWriter.close(); } catch (IOException e) { LOG.warn(e.getMessage(), e); } try { subjectWriter.close(); } catch (IOException e) { LOG.warn(e.getMessage(), e); } } return event; }
public static AlertStreamEvent createEvent(StreamDefinition stream, PolicyDefinition policy, Object[] data) { AlertStreamEvent event = new AlertStreamEvent(); event.setPolicyId(policy.getName()); event.setSchema(stream); event.setStreamId(stream.getStreamId()); event.setTimestamp(System.currentTimeMillis()); event.setCreatedTime(System.currentTimeMillis()); event.setSubject("Namenode Disk Used 98%"); event.setBody("Disk Usage of Test cluster's name node (<a href=\"#\">namenode.hostname.domain</a>) is <strong style=\"color: red\">98%</strong> at <strong>2016-11-30 12:30:45</strong>, exceeding alert threshold <strong>90</strong>%"); event.setData(data); event.ensureAlertId(); event.setSeverity(AlertSeverity.CRITICAL); event.setCategory("HDFS"); event.setContext(new HashMap<String,Object>(){{ put(AlertPublishEvent.SITE_ID_KEY,"TestCluster"); }}); Assert.assertNotNull(event.getAlertId()); return event; }