Skip to content

Commit

Permalink
Merge pull request #155 from jshaughn/data-driven
Browse files Browse the repository at this point in the history
HWKALERTS-127 Data Driven Group Triggers
  • Loading branch information
lucasponce committed Jan 22, 2016
2 parents 1e81d40 + 5769dbc commit fd43abf
Show file tree
Hide file tree
Showing 24 changed files with 904 additions and 187 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates
* Copyright 2015-2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -16,14 +16,12 @@
*/
package org.hawkular.alerts.api.model;

import org.hawkular.alerts.api.model.event.Alert;

/**
* Severity set for a {@link org.hawkular.alerts.api.model.trigger.Trigger} and assigned to an
* {@link Alert} it generates.
*
* @author jay shaughnessy
* @author lucac ponce
* @author lucas ponce
*/
public enum Severity {
LOW, MEDIUM, HIGH, CRITICAL
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates
* Copyright 2015-2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -35,9 +35,14 @@ public class Data implements Comparable<Data>, Serializable {

private static final long serialVersionUID = 1L;

public static final String SOURCE_NONE = "_none_";

@JsonInclude
protected String tenantId;

@JsonInclude
protected String source;

@JsonInclude
protected String id;

Expand All @@ -61,12 +66,19 @@ public class Data implements Comparable<Data>, Serializable {

/** For JSON Construction ONLY */
public Data() {
this(null, 0L, null);
}

/** For REST API USE ONLY, tenantId set automatically via REST Handler.
*/
public Data(String id, long timestamp, String value) {
this(null, id, timestamp, value, null, null);
this(null, null, id, timestamp, value, null, null);
}

/** For REST API USE ONLY, tenantId set automatically via REST Handler.
*/
public Data(String source, String id, long timestamp, String value) {
this(null, source, id, timestamp, value, null, null);
}

/**
Expand All @@ -76,20 +88,20 @@ public Data(String id, long timestamp, String value) {
* @param timestamp in millis, if less than 1 assigned currentTime.
* @param value the value
*/
public Data(String tenantId, String id, long timestamp, String value) {
this(tenantId, id, timestamp, value, null, null);
public Data(String tenantId, String source, String id, long timestamp, String value) {
this(tenantId, source, id, timestamp, value, null, null);
}

/**
* Construct a single-value datum with no context data.
* Construct a single-value datum with context data.
* @param tenantId not null
* @param id not null, unique within tenant
* @param timestamp in millis, if less than 1 assigned currentTime.
* @param value the value
* @param context optional, contextual name-value pairs to be stored with the data.
*/
public Data(String tenantId, String id, long timestamp, String value, Map<String, String> context) {
this(tenantId, id, timestamp, value, null, null);
public Data(String tenantId, String source, String id, long timestamp, String value, Map<String, String> context) {
this(tenantId, source, id, timestamp, value, null, null);
}

/**
Expand All @@ -99,20 +111,21 @@ public Data(String tenantId, String id, long timestamp, String value, Map<String
* @param timestamp in millis, if less than 1 assigned currentTime.
* @param values the values
*/
public Data(String tenantId, String id, long timestamp, Map<String, String> values) {
this(tenantId, id, timestamp, null, values, null);
public Data(String tenantId, String source, String id, long timestamp, Map<String, String> values) {
this(tenantId, source, id, timestamp, null, values, null);
}

/**
* Construct a multi-value datum with no context data.
* Construct a multi-value datum with context data.
* @param tenantId not null
* @param id not null
* @param timestamp in millis, if less than 1 assigned currentTime.
* @param values the values
* @param context optional, contextual name-value pairs to be stored with the data.
*/
public Data(String tenantId, String id, long timestamp, Map<String, String> values, Map<String, String> context) {
this(tenantId, id, timestamp, null, values, null);
public Data(String tenantId, String source, String id, long timestamp, Map<String, String> values,
Map<String, String> context) {
this(tenantId, source, id, timestamp, null, values, null);
}

/**
Expand All @@ -122,31 +135,73 @@ public Data(String tenantId, String id, long timestamp, Map<String, String> valu
* @param value the value, mutually exclusive with values
* @param context optional, contextual name-value pairs to be stored with the data.
*/
private Data(String tenantId, String id, long timestamp, String value, Map<String, String> values,
private Data(String tenantId, String source, String id, long timestamp, String value, Map<String, String> values,
Map<String, String> context) {
this.tenantId = tenantId;
this.source = isEmpty(source) ? SOURCE_NONE : source;
this.id = id;
this.timestamp = (timestamp <= 0) ? System.currentTimeMillis() : timestamp;
this.value = value;
this.context = context;
}

public static Data forNumeric(String tenantId, String id, long timestamp, Double value) {
return new Data(tenantId, id, timestamp, String.valueOf(value));
return new Data(tenantId, null, id, timestamp, String.valueOf(value));
}

public static Data forNumeric(String tenantId, String source, String id, long timestamp, Double value) {
return new Data(tenantId, source, id, timestamp, String.valueOf(value));
}

public static Data forNumeric(String tenantId, String id, long timestamp, Double value,
Map<String, String> context) {
return new Data(tenantId, id, timestamp, String.valueOf(value), null, context);
return new Data(tenantId, null, id, timestamp, String.valueOf(value), null, context);
}

public static Data forAvailability(String tenantId, String id, long timestamp, AvailabilityType value) {
return new Data(tenantId, id, timestamp, value.name());
public static Data forNumeric(String tenantId, String source, String id, long timestamp, Double value,
Map<String, String> context) {
return new Data(tenantId, source, id, timestamp, String.valueOf(value), null, context);
}

public static Data forString(String tenantId, String id, long timestamp, String value) {
return new Data(tenantId, null, id, timestamp, value);
}

public static Data forString(String tenantId, String source, String id, long timestamp, String value) {
return new Data(tenantId, source, id, timestamp, value);
}

public static Data forString(String tenantId, String id, long timestamp, String value,
Map<String, String> context) {
return new Data(tenantId, null, id, timestamp, value, null, context);
}

public static Data forAvailability(String tenantId, String id, long timestamp, AvailabilityType value,
public static Data forString(String tenantId, String source, String id, long timestamp, String value,
Map<String, String> context) {
return new Data(tenantId, id, timestamp, value.name(), null, context);
return new Data(tenantId, source, id, timestamp, value, null, context);
}

public static Data forAvailability(String tenantId, String id, long timestamp, AvailabilityType value) {
return new Data(tenantId, null, id, timestamp, value.name());
}

public static Data forAvailability(String tenantId, String source, String id, long timestamp,
AvailabilityType value) {
return new Data(tenantId, source, id, timestamp, value.name());
}

public static Data forAvailability(String tenantId, String id, long timestamp,
AvailabilityType value, Map<String, String> context) {
return new Data(tenantId, null, id, timestamp, value.name(), null, context);
}

public static Data forAvailability(String tenantId, String source, String id, long timestamp,
AvailabilityType value, Map<String, String> context) {
return new Data(tenantId, source, id, timestamp, value.name(), null, context);
}

private boolean isEmpty(String s) {
return null == s || s.trim().isEmpty();
}

public String getTenantId() {
Expand All @@ -157,6 +212,14 @@ public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}

public String getSource() {
return source;
}

public void setSource(String source) {
this.source = source;
}

public String getId() {
return id;
}
Expand Down Expand Up @@ -207,6 +270,7 @@ public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((source == null) ? 0 : source.hashCode());
result = prime * result + ((tenantId == null) ? 0 : tenantId.hashCode());
result = prime * result + (int) (timestamp ^ (timestamp >>> 32));
return result;
Expand All @@ -226,6 +290,11 @@ public boolean equals(Object obj) {
return false;
} else if (!id.equals(other.id))
return false;
if (source == null) {
if (other.source != null)
return false;
} else if (!source.equals(other.source))
return false;
if (tenantId == null) {
if (other.tenantId != null)
return false;
Expand All @@ -247,6 +316,10 @@ public int compareTo(Data o) {
if (0 != c)
return c;

c = this.source.compareTo(o.source);
if (0 != c)
return c;

c = this.id.compareTo(o.id);
if (0 != c)
return c;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

import org.hawkular.alerts.api.model.condition.ConditionEval;
import org.hawkular.alerts.api.model.dampening.Dampening;
import org.hawkular.alerts.api.model.data.Data;
import org.hawkular.alerts.api.model.trigger.Trigger;

import com.fasterxml.jackson.annotation.JsonInclude;
Expand Down Expand Up @@ -68,7 +69,11 @@ public class Event implements Comparable<Event>, Serializable {
@JsonInclude
protected long ctime;

// Optional source of Event, used by EventCondition to evaluate events
// Optional dataSource of Event, used by EventCondition to evaluate events
@JsonInclude
String dataSource;

// Optional dataId of Event, used by EventCondition to evaluate events
@JsonInclude(Include.NON_EMPTY)
private String dataId;

Expand Down Expand Up @@ -103,48 +108,65 @@ public class Event implements Comparable<Event>, Serializable {

public Event() {
// for json assembly
this.eventType = EventType.EVENT.name();
this(null, (String) null, null, null);
}

public Event(String tenantId, String id, String category, String text) {
this(tenantId, id, System.currentTimeMillis(), null, category, text, null, null);
this(tenantId, id, System.currentTimeMillis(), null, null, category, text, null, null);
}

public Event(String tenantId, String id, String dataId, String category, String text) {
this(tenantId, id, System.currentTimeMillis(), dataId, category, text, null, null);
this(tenantId, id, System.currentTimeMillis(), null, dataId, category, text, null, null);
}

public Event(String tenantId, String id, String dataSource, String dataId, String category, String text) {
this(tenantId, id, System.currentTimeMillis(), dataSource, dataId, category, text, null, null);
}

public Event(String tenantId, String id, String category, String text, Map<String, String> context) {
this(tenantId, id, System.currentTimeMillis(), null, category, text, context, null);
this(tenantId, id, System.currentTimeMillis(), null, null, category, text, context, null);
}

public Event(String tenantId, String id, String dataId, String category, String text,
Map<String, String> context) {
this(tenantId, id, System.currentTimeMillis(), null, dataId, category, text, context, null);
}

public Event(String tenantId, String id, String dataId, String category, String text, Map<String, String> context) {
this(tenantId, id, System.currentTimeMillis(), dataId, category, text, context, null);
public Event(String tenantId, String id, String dataSource, String dataId, String category, String text,
Map<String, String> context) {
this(tenantId, id, System.currentTimeMillis(), dataSource, dataId, category, text, context, null);
}

public Event(String tenantId, String id, long ctime, String category, String text) {
this(tenantId, id, ctime, null, category, text, null, null);
public Event(String tenantId, String id, long ctime, String dataId, String category,
String text) {
this(tenantId, id, ctime, null, dataId, category, text, null, null);
}

public Event(String tenantId, String id, long ctime, String dataId, String category, String text) {
this(tenantId, id, ctime, dataId, category, text, null, null);
public Event(String tenantId, String id, long ctime, String dataSource, String dataId, String category,
String text) {
this(tenantId, id, ctime, dataSource, dataId, category, text, null, null);
}

public Event(String tenantId, String id, long ctime, String category, String text,
Map<String, String> context) {
this(tenantId, id, ctime, null, category, text, context, null);
public Event(String tenantId, String id, long ctime, String category, String text, Map<String, String> context) {
this(tenantId, id, ctime, null, null, category, text, context, null);
}

public Event(String tenantId, String id, long ctime, String dataId, String category, String text,
Map<String, String> context) {
this(tenantId, id, ctime, dataId, category, text, context, null);
public Event(String tenantId, String id, long ctime, String dataSource, String dataId, String category,
String text, Map<String, String> context) {
this(tenantId, id, ctime, dataSource, dataId, category, text, context, null);
}

public Event(String tenantId, String id, long ctime, String dataId, String category, String text,
Map<String, String> context, Map<String, String> tags) {
public Event(String tenantId, String id, long ctime, String dataId, String category,
String text, Map<String, String> context, Map<String, String> tags) {
this(tenantId, id, ctime, null, dataId, category, text, context, tags);
}

public Event(String tenantId, String id, long ctime, String dataSource, String dataId, String category,
String text, Map<String, String> context, Map<String, String> tags) {
this.tenantId = tenantId;
this.id = id;
this.ctime = (ctime <= 0) ? System.currentTimeMillis() : ctime;
this.dataSource = isEmpty(dataSource) ? Data.SOURCE_NONE : dataSource;
this.dataId = dataId;
this.category = category;
this.text = text;
Expand All @@ -171,6 +193,7 @@ public Event(String tenantId, Trigger trigger, Dampening dampening, List<Set<Con
this.ctime = System.currentTimeMillis();

this.id = trigger.getId() + "-" + this.ctime + "-" + UUID.randomUUID();
this.dataSource = trigger.getSource();
this.dataId = trigger.getId();
this.context = trigger.getContext();
if (!isEmpty(trigger.getEventCategory())) {
Expand Down Expand Up @@ -227,6 +250,14 @@ public void setCtime(long ctime) {
this.ctime = ctime;
}

public String getDataSource() {
return dataSource;
}

public void setDataSource(String dataSource) {
this.dataSource = dataSource;
}

public String getDataId() {
return dataId;
}
Expand Down

0 comments on commit fd43abf

Please sign in to comment.