private void validateEventMessage(final EventMessage eventMessage) throws NoValidEventMessageException { if (!StringUtils.hasText(eventMessage.getMessage())) { throw new NoValidEventMessageException(); } }
private void addSimpleValueToQueue(final EventMessage event) { // The value should be long, float or boolean try { final Object numericValue = OpenTSDBValueConverter.getSimpleValue(event.getMessage()); event.setMessage(numericValue.toString()); batchQueue.add(event); } catch (final ParseException e) { // Probably String or some non-numeric value that we cannot store in OpenTSDB. Pass return; } }
public EndpointMessage(final EventMessage eventMessage) { super(); timestamp = eventMessage.getTimestamp(); message = eventMessage.getMessage(); topic = eventMessage.getTopic(); event = eventMessage; }
private void addComplexValueToQueue(final EventMessage event) { // Flatten JSON message into N measures final String metricName = OpenTSDBValueConverter.createMetricName(event); final Map<String, Object> unfoldValues = OpenTSDBValueConverter.extractMeasuresFromComplexType(metricName, event.getMessage()); for (final Map.Entry<String, Object> e : unfoldValues.entrySet()) { final EventMessage newEvent = new EventMessage(); BeanUtils.copyProperties(event, newEvent); newEvent.setTopic(e.getKey()); newEvent.setMessage(e.getValue().toString()); batchQueue.add(newEvent); } }
private void addToQueue(final EventMessage event) { List<EventMessage> eventsToExport = null; lock.lock(); try { // Let's see if the value is json if (OpenTSDBValueConverter.isComplexValue(event.getMessage())) { addComplexValueToQueue(event); } else { addSimpleValueToQueue(event); } // Complex json values can produce that batchQueue is greater than batchSize. // In this case we'll send batchSize to OpenTsdb and we'll store the rest for future. if (batchQueue.size() >= batchSize) { eventsToExport = batchQueue.subList(0, batchSize); batchQueue = new ArrayList<EventMessage>(batchQueue.subList(batchSize, batchQueue.size())); } } finally { lock.unlock(); if (eventsToExport != null) { flushToOpenTSDB(new BatchProcessContext(eventsToExport, restClient, numMaxRetries, batchProcessMonitor)); } } }
public void doWithMessage(final EventMessage eventMessage) { final String value = eventMessage.getMessage(); // For each registered alert, the message value must be checked to validate that verifies all // alerts's restriction rules (for not frozen alerts) final List<InternalAlert> alertsToCheck = getAlerts(); final List<InternalAlert> frozenAlerts = new ArrayList<InternalAlert>(); if (!CollectionUtils.isEmpty(alertsToCheck)) { for (final InternalAlert alert : alertsToCheck) { if (AlertTriggerType.FROZEN.name().equals(alert.getTrigger().name())) { frozenAlerts.add(alert); } else { valueVerifiesRestriction(alert, value); } } } // Set value as previousValue in triggerEvaluator for the next iterator triggerEvaluator.setPreviousValue(value); // Finally, updates the timeout for each frozen alert associated with this listener if (!CollectionUtils.isEmpty(frozenAlerts)) { frozenRepository.updateFrozenTimeouts(frozenAlerts); } }
public static OpenTSDBDataPoint unmarshal(final EventMessage event) throws ParseException { final OpenTSDBDataPoint dataPoint = new OpenTSDBDataPoint(); dataPoint.setMetric(OpenTSDBValueConverter.createMetricName(event)); dataPoint.setValue(OpenTSDBValueConverter.getSimpleValue(event.getMessage())); if (usePublishedAtTimestamp && event.getPublishedAt() != null) { dataPoint.setTimestamp(event.getPublishedAt()); } else { dataPoint.setTimestamp(event.getTime()); } dataPoint.setTags(createTags(event)); return dataPoint; }