Alerting Plugin : First commit
Very rough non-functional commit of the alerting plugin. Please be gentle. Original commit: elastic/x-pack-elasticsearch@98870d0778
This commit is contained in:
parent
d19f4b5954
commit
1e6d6b58c9
|
@ -0,0 +1,89 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<name>alerting-plugin</name>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.elasticsearch.plugin.alerting</groupId>
|
||||
<artifactId>alerting-plugin</artifactId>
|
||||
<version>0.1-SNAPSHOT</version>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<elasticsearch.version>1.3.1</elasticsearch.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.elasticsearch</groupId>
|
||||
<artifactId>elasticsearch</artifactId>
|
||||
<version>${elasticsearch.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-enforcer-plugin</artifactId>
|
||||
<version>1.3.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>enforce-versions</id>
|
||||
<goals>
|
||||
<goal>enforce</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<rules>
|
||||
<requireJavaVersion>
|
||||
<version>[1.7,)</version>
|
||||
</requireJavaVersion>
|
||||
</rules>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<outputDirectory>${project.build.directory}/releases/</outputDirectory>
|
||||
<descriptors>
|
||||
<descriptor>${basedir}/src/main/assemblies/plugin.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
<fork>true</fork>
|
||||
<maxmem>512m</maxmem>
|
||||
<!-- REMOVE WHEN UPGRADE:
|
||||
see https://jira.codehaus.org/browse/MCOMPILER-209 it's a bug where
|
||||
incremental compilation doesn't work unless it's set to false causeing
|
||||
recompilation of the entire codebase each time without any changes. Should
|
||||
be fixed in version > 3.1
|
||||
-->
|
||||
<useIncrementalCompilation>false</useIncrementalCompilation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0"?>
|
||||
<assembly>
|
||||
<id>plugin</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<outputDirectory>/</outputDirectory>
|
||||
<useProjectArtifact>true</useProjectArtifact>
|
||||
<useTransitiveFiltering>true</useTransitiveFiltering>
|
||||
<excludes>
|
||||
<exclude>org.elasticsearch:elasticsearch</exclude>
|
||||
</excludes>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
</assembly>
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.common.Nullable;
|
||||
import org.elasticsearch.common.joda.time.DateTime;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Created by brian on 8/12/14.
|
||||
*/
|
||||
public class Alert {
|
||||
private final String alertName;
|
||||
private String queryName;
|
||||
private AlertTrigger trigger;
|
||||
private TimeValue timePeriod;
|
||||
|
||||
public String alertName() {
|
||||
return alertName;
|
||||
}
|
||||
|
||||
public String queryName() {
|
||||
return queryName;
|
||||
}
|
||||
|
||||
public void queryName(String queryName) {
|
||||
this.queryName = queryName;
|
||||
}
|
||||
|
||||
public AlertTrigger trigger() {
|
||||
return trigger;
|
||||
}
|
||||
|
||||
public void trigger(AlertTrigger trigger) {
|
||||
this.trigger = trigger;
|
||||
}
|
||||
|
||||
public TimeValue timePeriod() {
|
||||
return timePeriod;
|
||||
}
|
||||
|
||||
public void timePeriod(TimeValue timePeriod) {
|
||||
this.timePeriod = timePeriod;
|
||||
}
|
||||
|
||||
public AlertAction action() {
|
||||
return action;
|
||||
}
|
||||
|
||||
public void action(AlertAction action) {
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
public String schedule() {
|
||||
return schedule;
|
||||
}
|
||||
|
||||
public void schedule(String schedule) {
|
||||
this.schedule = schedule;
|
||||
}
|
||||
|
||||
public DateTime lastRan() {
|
||||
return lastRan;
|
||||
}
|
||||
|
||||
public void lastRan(DateTime lastRan) {
|
||||
this.lastRan = lastRan;
|
||||
}
|
||||
|
||||
private AlertAction action;
|
||||
private String schedule;
|
||||
private DateTime lastRan;
|
||||
|
||||
public Alert(String alertName, String queryName, AlertTrigger trigger,
|
||||
TimeValue timePeriod, AlertAction action, String schedule, DateTime lastRan){
|
||||
this.alertName = alertName;
|
||||
this.queryName = queryName;
|
||||
this.trigger = trigger;
|
||||
this.timePeriod = timePeriod;
|
||||
this.action = action;
|
||||
this.lastRan = lastRan;
|
||||
this.schedule = schedule;
|
||||
}
|
||||
|
||||
public String toJSON(){
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
public interface AlertAction {
|
||||
public boolean doAction(AlertResult alert);
|
||||
public String getActionType();
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.search.SearchHitField;
|
||||
|
||||
/**
|
||||
* Created by brian on 8/12/14.
|
||||
*/
|
||||
public class AlertActionManager {
|
||||
public static AlertAction parseActionFromSearchField(SearchHitField hitField) {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
|
||||
import org.elasticsearch.ElasticsearchException;
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
|
||||
import org.elasticsearch.action.admin.cluster.health.ClusterHealthStatus;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.client.Requests;
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.Priority;
|
||||
import org.elasticsearch.common.component.AbstractComponent;
|
||||
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.joda.time.DateTime;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.search.SearchHitField;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
|
||||
public class AlertManager extends AbstractLifecycleComponent {
|
||||
|
||||
public final String ALERT_INDEX = ".alerts";
|
||||
public final String ALERT_TYPE = "alert";
|
||||
public final String QUERY_TYPE = "alertQuery";
|
||||
|
||||
public final ParseField QUERY_FIELD = new ParseField("query");
|
||||
public final ParseField SCHEDULE_FIELD = new ParseField("schedule");
|
||||
public final ParseField TRIGGER_FIELD = new ParseField("trigger");
|
||||
public final ParseField TIMEPERIOD_FIELD = new ParseField("timeperiod");
|
||||
public final ParseField ACTION_FIELD = new ParseField("action");
|
||||
public final ParseField LASTRAN_FIELD = new ParseField("lastRan");
|
||||
|
||||
public final Client client;
|
||||
|
||||
private final Map<String,Alert> alertMap;
|
||||
|
||||
@Override
|
||||
protected void doStart() throws ElasticsearchException {
|
||||
logger.warn("STARTING");
|
||||
try {
|
||||
loadAlerts();
|
||||
} catch (Throwable t){
|
||||
logger.error("Failed to load alerts", t);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doStop() throws ElasticsearchException {
|
||||
logger.warn("STOPPING");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doClose() throws ElasticsearchException {
|
||||
logger.warn("CLOSING");
|
||||
}
|
||||
|
||||
|
||||
@Inject
|
||||
public AlertManager(Settings settings, Client client) {
|
||||
super(settings);
|
||||
logger.warn("Starting AlertManager");
|
||||
this.client = client;
|
||||
alertMap = new HashMap();
|
||||
//scheduleAlerts();
|
||||
}
|
||||
|
||||
private ClusterHealthStatus clusterHealth() throws InterruptedException, ExecutionException {
|
||||
ClusterHealthResponse actionGet = client.admin().cluster()
|
||||
.health(Requests.clusterHealthRequest(ALERT_INDEX).waitForGreenStatus().waitForEvents(Priority.LANGUID).waitForRelocatingShards(0)).actionGet();
|
||||
return actionGet.getStatus();
|
||||
}
|
||||
|
||||
private ClusterHealthStatus createAlertsIndex() throws InterruptedException, ExecutionException {
|
||||
client.admin().indices().prepareCreate(ALERT_INDEX).addMapping(ALERT_TYPE).execute().get(); //TODO FIX MAPPINGS
|
||||
ClusterHealthResponse actionGet = client.admin().cluster()
|
||||
.health(Requests.clusterHealthRequest(ALERT_INDEX).waitForGreenStatus().waitForEvents(Priority.LANGUID).waitForRelocatingShards(0)).actionGet();
|
||||
return actionGet.getStatus();
|
||||
}
|
||||
|
||||
private void loadAlerts() throws InterruptedException, ExecutionException{
|
||||
if (!client.admin().indices().prepareExists(ALERT_INDEX).execute().get().isExists()) {
|
||||
createAlertsIndex();
|
||||
}
|
||||
|
||||
synchronized (alertMap) {
|
||||
SearchResponse searchResponse = client.prepareSearch().setSource(
|
||||
"{ 'query' : " +
|
||||
"{ 'match_all' : {}}" +
|
||||
"'size' : 100" +
|
||||
"}"
|
||||
).setTypes(ALERT_TYPE).setIndices(ALERT_INDEX).execute().get();
|
||||
for (SearchHit sh : searchResponse.getHits()) {
|
||||
String alertId = sh.getId();
|
||||
Map<String,SearchHitField> fields = sh.getFields();
|
||||
String query = fields.get(QUERY_FIELD.toString()).toString();
|
||||
String schedule = fields.get(SCHEDULE_FIELD.toString()).toString();
|
||||
AlertTrigger trigger = TriggerManager.parseTriggerFromSearchField(fields.get(TRIGGER_FIELD.toString()));
|
||||
TimeValue timePeriod = new TimeValue(Long.valueOf(fields.get(TIMEPERIOD_FIELD).toString()));
|
||||
AlertAction action = AlertActionManager.parseActionFromSearchField(fields.get(ACTION_FIELD.toString()));
|
||||
DateTime lastRan = new DateTime(fields.get(LASTRAN_FIELD.toString().toString()));
|
||||
|
||||
Alert alert = new Alert(alertId, query, trigger, timePeriod, action, schedule, lastRan);
|
||||
alertMap.put(alertId, alert);
|
||||
}
|
||||
logger.warn("Loaded [{}] alerts from the alert index.", alertMap.size());
|
||||
}
|
||||
}
|
||||
|
||||
public Alert getAlertForName(String alertName) {
|
||||
synchronized (alertMap) {
|
||||
return alertMap.get(alertName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
|
||||
public class AlertResult {
|
||||
public SearchResponse searchResponse;
|
||||
public AlertTrigger trigger;
|
||||
public boolean isTriggered;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
AlertResult that = (AlertResult) o;
|
||||
|
||||
if (isTriggered != that.isTriggered) return false;
|
||||
if (!searchResponse.equals(that.searchResponse)) return false;
|
||||
if (!trigger.equals(that.trigger)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = searchResponse.hashCode();
|
||||
result = 31 * result + trigger.hashCode();
|
||||
result = 31 * result + (isTriggered ? 1 : 0);
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.ElasticsearchIllegalArgumentException;
|
||||
|
||||
/**
|
||||
* Created by brian on 8/12/14.
|
||||
*/
|
||||
public class AlertTrigger {
|
||||
|
||||
private SimpleTrigger trigger;
|
||||
private TriggerType triggerType;
|
||||
private int value;
|
||||
|
||||
public SimpleTrigger trigger() {
|
||||
return trigger;
|
||||
}
|
||||
|
||||
public void trigger(SimpleTrigger trigger) {
|
||||
this.trigger = trigger;
|
||||
}
|
||||
|
||||
public TriggerType triggerType() {
|
||||
return triggerType;
|
||||
}
|
||||
|
||||
public void triggerType(TriggerType triggerType) {
|
||||
this.triggerType = triggerType;
|
||||
}
|
||||
|
||||
public int value() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void value(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public AlertTrigger(SimpleTrigger trigger, TriggerType triggerType, int value){
|
||||
this.trigger = trigger;
|
||||
this.triggerType = triggerType;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static enum SimpleTrigger {
|
||||
EQUAL,
|
||||
NOT_EQUAL,
|
||||
GREATER_THAN,
|
||||
LESS_THAN,
|
||||
RISES_BY,
|
||||
FALLS_BY;
|
||||
|
||||
public static SimpleTrigger fromString(final String sAction) {
|
||||
switch (sAction) {
|
||||
case ">":
|
||||
return GREATER_THAN;
|
||||
case "<":
|
||||
return LESS_THAN;
|
||||
case "=":
|
||||
case "==":
|
||||
return EQUAL;
|
||||
case "!=":
|
||||
return NOT_EQUAL;
|
||||
case "->":
|
||||
return RISES_BY;
|
||||
case "<-":
|
||||
return FALLS_BY;
|
||||
default:
|
||||
throw new ElasticsearchIllegalArgumentException("Unknown AlertAction:SimpleAction [" + sAction + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static enum TriggerType {
|
||||
NUMBER_OF_EVENTS;
|
||||
|
||||
public static TriggerType fromString(final String sTriggerType) {
|
||||
switch (sTriggerType) {
|
||||
case "numberOfEvents":
|
||||
return NUMBER_OF_EVENTS;
|
||||
default:
|
||||
throw new ElasticsearchIllegalArgumentException("Unknown AlertTrigger:TriggerType [" + sTriggerType + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.common.inject.AbstractModule;
|
||||
|
||||
public class AlertingModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(AlertManager.class).asEagerSingleton();
|
||||
bind(TriggerManager.class).asEagerSingleton();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.search.SearchHitField;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class EmailAlertAction implements AlertAction {
|
||||
List<String> emailAddresses = new ArrayList<>();
|
||||
|
||||
String from = "esalertingtest@gmail.com";
|
||||
String passwd = "elasticsearchforthewin";
|
||||
String server = "smtp.gmail.com";
|
||||
int port = 465;
|
||||
|
||||
|
||||
|
||||
public EmailAlertAction(SearchHitField hitField){
|
||||
emailAddresses.add("brian.murphy@elasticsearch.com");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doAction(AlertResult alert) {
|
||||
//Email here
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getActionType() {
|
||||
return "email";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
||||
|
||||
import org.elasticsearch.ElasticsearchIllegalArgumentException;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.common.component.AbstractComponent;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.logging.ESLogger;
|
||||
import org.elasticsearch.common.logging.Loggers;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.search.SearchHitField;
|
||||
|
||||
public class TriggerManager extends AbstractComponent {
|
||||
|
||||
private final AlertManager alertManager;
|
||||
//private ESLogger logger = Loggers.getLogger(TriggerManager.class);
|
||||
|
||||
public static AlertTrigger parseTriggerFromSearchField(SearchHitField hitField) {
|
||||
//For now just trigger on number of events greater than 1
|
||||
return new AlertTrigger(AlertTrigger.SimpleTrigger.GREATER_THAN, AlertTrigger.TriggerType.NUMBER_OF_EVENTS, 1);
|
||||
//return null;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public TriggerManager(Settings settings, AlertManager alertManager) {
|
||||
super(settings);
|
||||
this.alertManager = alertManager;
|
||||
}
|
||||
|
||||
public boolean isTriggered(String alertName, SearchResponse response) {
|
||||
Alert alert = this.alertManager.getAlertForName(alertName);
|
||||
if (alert == null){
|
||||
logger.warn("Could not find alert named [{}] in alert manager perhaps it has been deleted.", alertName);
|
||||
return false;
|
||||
}
|
||||
int testValue;
|
||||
switch (alert.trigger().triggerType()) {
|
||||
case NUMBER_OF_EVENTS:
|
||||
testValue = response.getHits().getHits().length;
|
||||
break;
|
||||
default:
|
||||
throw new ElasticsearchIllegalArgumentException("Bad value for trigger.triggerType [" + alert.trigger().triggerType() + "]");
|
||||
}
|
||||
int triggerValue = alert.trigger().value();
|
||||
//Move this to SimpleTrigger
|
||||
switch (alert.trigger().trigger()) {
|
||||
case GREATER_THAN:
|
||||
return testValue > triggerValue;
|
||||
case LESS_THAN:
|
||||
return testValue < triggerValue;
|
||||
case EQUAL:
|
||||
return testValue == triggerValue;
|
||||
case NOT_EQUAL:
|
||||
return testValue != triggerValue;
|
||||
case RISES_BY:
|
||||
case FALLS_BY:
|
||||
return false; //TODO FIX THESE
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
/**
|
||||
* Created by brian on 8/12/14.
|
||||
*/
|
||||
package org.elasticsearch.alerting;
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.plugin.alerting;
|
||||
|
||||
import org.elasticsearch.alerting.AlertManager;
|
||||
import org.elasticsearch.alerting.AlertingModule;
|
||||
import org.elasticsearch.common.collect.Lists;
|
||||
import org.elasticsearch.common.component.LifecycleComponent;
|
||||
import org.elasticsearch.common.inject.Module;
|
||||
import org.elasticsearch.plugins.AbstractPlugin;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class AlertingPlugin extends AbstractPlugin {
|
||||
@Override public String name() {
|
||||
return "alerting-plugin";
|
||||
}
|
||||
|
||||
@Override public String description() {
|
||||
return "Alerting Plugin Description";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<java.lang.Class<? extends LifecycleComponent>> services() {
|
||||
Collection<java.lang.Class<? extends LifecycleComponent>> services = Lists.newArrayList();
|
||||
services.add(AlertManager.class);
|
||||
return services;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Class<? extends Module>> modules() {
|
||||
Collection<Class<? extends Module>> modules = Lists.newArrayList();
|
||||
modules.add(AlertingModule.class);
|
||||
return modules;
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
plugin=org.elasticsearch.plugin.alerting.AlertingPlugin
|
Loading…
Reference in New Issue