Refactor and rename transport layer
This commit removes the update action and renames the create action to index. It also hides the Alert objects behind the interface rather than exposing them. This means that all interactions should be via BytesReferences. Original commit: elastic/x-pack-elasticsearch@87ac377d3e
This commit is contained in:
parent
0f78028190
commit
bce97abc1d
|
@ -66,7 +66,7 @@ public class IndexAlertAction implements AlertAction, ToXContent {
|
||||||
try {
|
try {
|
||||||
XContentBuilder resultBuilder = XContentFactory.jsonBuilder().prettyPrint();
|
XContentBuilder resultBuilder = XContentFactory.jsonBuilder().prettyPrint();
|
||||||
resultBuilder.startObject();
|
resultBuilder.startObject();
|
||||||
//resultBuilder = alertResult.searchResponse.toXContent(resultBuilder, ToXContent.EMPTY_PARAMS);
|
resultBuilder = alertResult.getSearchResponse().toXContent(resultBuilder, ToXContent.EMPTY_PARAMS);
|
||||||
resultBuilder.field("timestamp", alertResult.getFireTime());
|
resultBuilder.field("timestamp", alertResult.getFireTime());
|
||||||
resultBuilder.endObject();
|
resultBuilder.endObject();
|
||||||
indexRequest.source(resultBuilder);
|
indexRequest.source(resultBuilder);
|
||||||
|
|
|
@ -8,13 +8,11 @@ package org.elasticsearch.alerts.client;
|
||||||
import org.elasticsearch.action.*;
|
import org.elasticsearch.action.*;
|
||||||
import org.elasticsearch.action.support.ActionFilters;
|
import org.elasticsearch.action.support.ActionFilters;
|
||||||
import org.elasticsearch.action.support.TransportAction;
|
import org.elasticsearch.action.support.TransportAction;
|
||||||
import org.elasticsearch.action.update.TransportUpdateAction;
|
|
||||||
import org.elasticsearch.alerts.Alert;
|
|
||||||
import org.elasticsearch.alerts.AlertManager;
|
import org.elasticsearch.alerts.AlertManager;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.*;
|
import org.elasticsearch.alerts.transport.actions.index.*;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.*;
|
import org.elasticsearch.alerts.transport.actions.delete.*;
|
||||||
import org.elasticsearch.alerts.transport.actions.get.*;
|
import org.elasticsearch.alerts.transport.actions.get.*;
|
||||||
import org.elasticsearch.alerts.transport.actions.update.*;
|
import org.elasticsearch.client.Client;
|
||||||
import org.elasticsearch.client.support.Headers;
|
import org.elasticsearch.client.support.Headers;
|
||||||
import org.elasticsearch.cluster.ClusterService;
|
import org.elasticsearch.cluster.ClusterService;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
|
@ -36,22 +34,21 @@ public class AlertsClient implements AlertsClientInterface {
|
||||||
Settings settings,
|
Settings settings,
|
||||||
Headers headers,
|
Headers headers,
|
||||||
ActionFilters filters,
|
ActionFilters filters,
|
||||||
TransportService transportService, ClusterService clusterService, AlertManager alertManager) {
|
TransportService transportService, ClusterService clusterService, AlertManager alertManager,
|
||||||
|
Client client) {
|
||||||
this.headers = headers;
|
this.headers = headers;
|
||||||
internalActions = new HashMap<>();
|
internalActions = new HashMap<>();
|
||||||
this.threadPool = threadPool;
|
this.threadPool = threadPool;
|
||||||
|
|
||||||
internalActions.put(CreateAlertAction.INSTANCE, new TransportCreateAlertAction(settings,
|
internalActions.put(IndexAlertAction.INSTANCE, new TransportIndexAlertAction(settings,
|
||||||
CreateAlertAction.NAME, transportService, clusterService, threadPool, filters, alertManager));
|
IndexAlertAction.NAME, transportService, clusterService, threadPool, filters, alertManager));
|
||||||
|
|
||||||
internalActions.put(GetAlertAction.INSTANCE, new TransportGetAlertAction(settings,
|
internalActions.put(GetAlertAction.INSTANCE, new TransportGetAlertAction(settings,
|
||||||
GetAlertAction.NAME, transportService, clusterService, threadPool, filters, alertManager));
|
GetAlertAction.NAME, threadPool, filters, client));
|
||||||
|
|
||||||
internalActions.put(DeleteAlertAction.INSTANCE, new TransportDeleteAlertAction(settings,
|
internalActions.put(DeleteAlertAction.INSTANCE, new TransportDeleteAlertAction(settings,
|
||||||
DeleteAlertAction.NAME, transportService, clusterService, threadPool, filters, alertManager));
|
DeleteAlertAction.NAME, transportService, clusterService, threadPool, filters, alertManager));
|
||||||
|
|
||||||
internalActions.put(UpdateAlertAction.INSTANCE, new TransportUpdateAlertAction(settings,
|
|
||||||
UpdateAlertAction.NAME, transportService, clusterService, threadPool, filters, alertManager));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,47 +96,25 @@ public class AlertsClient implements AlertsClientInterface {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CreateAlertRequestBuilder prepareCreateAlert(Alert alert) {
|
public IndexAlertRequestBuilder prepareCreateAlert(String alertName) {
|
||||||
return new CreateAlertRequestBuilder(this, alert);
|
return new IndexAlertRequestBuilder(this, alertName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CreateAlertRequestBuilder prepareCreateAlert() {
|
public IndexAlertRequestBuilder prepareCreateAlert() {
|
||||||
return new CreateAlertRequestBuilder(this, null);
|
return new IndexAlertRequestBuilder(this, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createAlert(CreateAlertRequest request, ActionListener<CreateAlertResponse> response) {
|
public void createAlert(IndexAlertRequest request, ActionListener<IndexAlertResponse> response) {
|
||||||
execute(CreateAlertAction.INSTANCE, request, response);
|
execute(IndexAlertAction.INSTANCE, request, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActionFuture<CreateAlertResponse> createAlert(CreateAlertRequest request) {
|
public ActionFuture<IndexAlertResponse> createAlert(IndexAlertRequest request) {
|
||||||
return execute(CreateAlertAction.INSTANCE, request);
|
return execute(IndexAlertAction.INSTANCE, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UpdateAlertRequestBuilder prepareUpdateAlert(Alert alert) {
|
|
||||||
return new UpdateAlertRequestBuilder(this, alert);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UpdateAlertRequestBuilder prepareUpdateAlert() {
|
|
||||||
return new UpdateAlertRequestBuilder(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateAlert(UpdateAlertRequest request, ActionListener<UpdateAlertResponse> response) {
|
|
||||||
execute(UpdateAlertAction.INSTANCE, request, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ActionFuture<UpdateAlertResponse> updateAlert(UpdateAlertRequest request) {
|
|
||||||
return execute(UpdateAlertAction.INSTANCE, request);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder, AlertsClientInterface>> ActionFuture<Response> execute(Action<Request, Response, RequestBuilder, AlertsClientInterface> action, Request request) {
|
public <Request extends ActionRequest, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder, AlertsClientInterface>> ActionFuture<Response> execute(Action<Request, Response, RequestBuilder, AlertsClientInterface> action, Request request) {
|
||||||
|
|
|
@ -6,23 +6,16 @@
|
||||||
package org.elasticsearch.alerts.client;
|
package org.elasticsearch.alerts.client;
|
||||||
|
|
||||||
import org.elasticsearch.action.*;
|
import org.elasticsearch.action.*;
|
||||||
import org.elasticsearch.action.admin.indices.template.get.GetIndexTemplatesResponse;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertRequest;
|
||||||
import org.elasticsearch.alerts.Alert;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertRequestBuilder;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertRequestBuilder;
|
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertResponse;
|
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequestBuilder;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequestBuilder;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.get.GetAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.get.GetAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.get.GetAlertRequestBuilder;
|
import org.elasticsearch.alerts.transport.actions.get.GetAlertRequestBuilder;
|
||||||
import org.elasticsearch.alerts.transport.actions.get.GetAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.get.GetAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.update.UpdateAlertRequest;
|
|
||||||
import org.elasticsearch.alerts.transport.actions.update.UpdateAlertRequestBuilder;
|
|
||||||
import org.elasticsearch.alerts.transport.actions.update.UpdateAlertResponse;
|
|
||||||
import org.elasticsearch.client.Client;
|
|
||||||
import org.elasticsearch.client.ElasticsearchClient;
|
import org.elasticsearch.client.ElasticsearchClient;
|
||||||
import org.elasticsearch.common.lease.Releasable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
@ -46,24 +39,13 @@ public interface AlertsClientInterface extends ElasticsearchClient<AlertsClientI
|
||||||
ActionFuture<DeleteAlertResponse> deleteAlert(DeleteAlertRequest request);
|
ActionFuture<DeleteAlertResponse> deleteAlert(DeleteAlertRequest request);
|
||||||
|
|
||||||
|
|
||||||
CreateAlertRequestBuilder prepareCreateAlert(Alert alert);
|
IndexAlertRequestBuilder prepareCreateAlert(String alertName);
|
||||||
|
|
||||||
CreateAlertRequestBuilder prepareCreateAlert();
|
IndexAlertRequestBuilder prepareCreateAlert();
|
||||||
|
|
||||||
public void createAlert(CreateAlertRequest request, ActionListener<CreateAlertResponse> response);
|
|
||||||
|
|
||||||
ActionFuture<CreateAlertResponse> createAlert(CreateAlertRequest request);
|
|
||||||
|
|
||||||
|
|
||||||
UpdateAlertRequestBuilder prepareUpdateAlert(Alert alert);
|
|
||||||
|
|
||||||
UpdateAlertRequestBuilder prepareUpdateAlert();
|
|
||||||
|
|
||||||
public void updateAlert(UpdateAlertRequest request, ActionListener<UpdateAlertResponse> response);
|
|
||||||
|
|
||||||
ActionFuture<UpdateAlertResponse> updateAlert(UpdateAlertRequest request);
|
|
||||||
|
|
||||||
|
public void createAlert(IndexAlertRequest request, ActionListener<IndexAlertResponse> response);
|
||||||
|
|
||||||
|
ActionFuture<IndexAlertResponse> createAlert(IndexAlertRequest request);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.create;
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ClientAction;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClient;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClientAction;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
|
||||||
import org.elasticsearch.client.Client;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class CreateAlertAction extends AlertsClientAction<CreateAlertRequest, CreateAlertResponse, CreateAlertRequestBuilder> {
|
|
||||||
|
|
||||||
public static final CreateAlertAction INSTANCE = new CreateAlertAction();
|
|
||||||
public static final String NAME = "indices:data/write/alert/create";
|
|
||||||
|
|
||||||
private CreateAlertAction() {
|
|
||||||
super(NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CreateAlertRequestBuilder newRequestBuilder(AlertsClientInterface client) {
|
|
||||||
return new CreateAlertRequestBuilder(client);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CreateAlertResponse newResponse() {
|
|
||||||
return new CreateAlertResponse();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.create;
|
|
||||||
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionRequestValidationException;
|
|
||||||
import org.elasticsearch.action.ValidateActions;
|
|
||||||
import org.elasticsearch.action.support.master.MasterNodeOperationRequest;
|
|
||||||
import org.elasticsearch.alerts.Alert;
|
|
||||||
import org.elasticsearch.alerts.triggers.AlertTrigger;
|
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
|
||||||
import org.elasticsearch.common.joda.time.DateTime;
|
|
||||||
import org.elasticsearch.common.lucene.uid.Versions;
|
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class CreateAlertRequest extends MasterNodeOperationRequest<CreateAlertRequest> {
|
|
||||||
|
|
||||||
private Alert alert;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ActionRequestValidationException validate() {
|
|
||||||
ActionRequestValidationException validationException = null;
|
|
||||||
if (alert == null) {
|
|
||||||
validationException = ValidateActions.addValidationError("alert is missing", validationException);
|
|
||||||
}
|
|
||||||
return validationException;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CreateAlertRequest() {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public CreateAlertRequest(Alert alert) {
|
|
||||||
this.alert = alert;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFrom(StreamInput in) throws IOException {
|
|
||||||
super.readFrom(in);
|
|
||||||
alert = new Alert();
|
|
||||||
alert.readFrom(in);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeTo(StreamOutput out) throws IOException {
|
|
||||||
super.writeTo(out);
|
|
||||||
alert.writeTo(out);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Alert alert() {
|
|
||||||
return alert;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Alert(Alert alert) {
|
|
||||||
this.alert = alert;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.create;
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionListener;
|
|
||||||
import org.elasticsearch.action.ActionRequestBuilder;
|
|
||||||
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
|
|
||||||
import org.elasticsearch.action.support.master.MasterNodeOperationRequestBuilder;
|
|
||||||
import org.elasticsearch.alerts.Alert;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClient;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
|
||||||
import org.elasticsearch.client.Client;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class CreateAlertRequestBuilder
|
|
||||||
extends MasterNodeOperationRequestBuilder<CreateAlertRequest, CreateAlertResponse,
|
|
||||||
CreateAlertRequestBuilder, AlertsClientInterface> {
|
|
||||||
|
|
||||||
|
|
||||||
public CreateAlertRequestBuilder(AlertsClientInterface client) {
|
|
||||||
super(client, new CreateAlertRequest(null));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public CreateAlertRequestBuilder(AlertsClientInterface client, Alert alert) {
|
|
||||||
super(client, new CreateAlertRequest(alert));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doExecute(ActionListener<CreateAlertResponse> listener) {
|
|
||||||
client.createAlert(request, listener);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,80 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.create;
|
|
||||||
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
|
||||||
import org.elasticsearch.action.ActionListener;
|
|
||||||
import org.elasticsearch.action.index.IndexResponse;
|
|
||||||
import org.elasticsearch.action.support.ActionFilters;
|
|
||||||
import org.elasticsearch.action.support.HandledTransportAction;
|
|
||||||
import org.elasticsearch.action.support.master.TransportMasterNodeOperationAction;
|
|
||||||
import org.elasticsearch.alerts.Alert;
|
|
||||||
import org.elasticsearch.alerts.AlertManager;
|
|
||||||
import org.elasticsearch.alerts.AlertsStore;
|
|
||||||
import org.elasticsearch.alerts.actions.AlertAction;
|
|
||||||
import org.elasticsearch.alerts.actions.AlertActionManager;
|
|
||||||
import org.elasticsearch.alerts.triggers.TriggerManager;
|
|
||||||
import org.elasticsearch.cluster.ClusterService;
|
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockException;
|
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
|
||||||
import org.elasticsearch.common.inject.Inject;
|
|
||||||
import org.elasticsearch.common.settings.Settings;
|
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
|
||||||
import org.elasticsearch.transport.TransportService;
|
|
||||||
import org.quartz.Trigger;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class TransportCreateAlertAction extends TransportMasterNodeOperationAction<CreateAlertRequest, CreateAlertResponse> {
|
|
||||||
|
|
||||||
private final AlertManager alertManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public TransportCreateAlertAction(Settings settings, String actionName, TransportService transportService,
|
|
||||||
ClusterService clusterService, ThreadPool threadPool, ActionFilters actionFilters,
|
|
||||||
AlertManager alertManager) {
|
|
||||||
super(settings, actionName, transportService, clusterService, threadPool, actionFilters);
|
|
||||||
this.alertManager = alertManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String executor() {
|
|
||||||
return ThreadPool.Names.MANAGEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected CreateAlertRequest newRequest() {
|
|
||||||
return new CreateAlertRequest();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected CreateAlertResponse newResponse() {
|
|
||||||
return new CreateAlertResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void masterOperation(CreateAlertRequest request, ClusterState state, ActionListener<CreateAlertResponse> listener) throws ElasticsearchException {
|
|
||||||
try {
|
|
||||||
IndexResponse indexResponse = alertManager.addAlert(request.alert());
|
|
||||||
listener.onResponse(new CreateAlertResponse(indexResponse));
|
|
||||||
} catch (Exception e) {
|
|
||||||
listener.onFailure(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ClusterBlockException checkBlock(CreateAlertRequest request, ClusterState state) {
|
|
||||||
if (!alertManager.isStarted()) {
|
|
||||||
return new ClusterBlockException(null);
|
|
||||||
}
|
|
||||||
return state.blocks().indicesBlockedException(ClusterBlockLevel.WRITE, new String[]{AlertsStore.ALERT_INDEX, AlertActionManager.ALERT_HISTORY_INDEX});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -22,7 +22,7 @@ import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class GetAlertRequest extends MasterNodeOperationRequest<GetAlertRequest> implements IndicesRequest {
|
public class GetAlertRequest extends ActionRequest<GetAlertRequest> implements IndicesRequest {
|
||||||
|
|
||||||
private String alertName;
|
private String alertName;
|
||||||
private long version = Versions.MATCH_ANY;
|
private long version = Versions.MATCH_ANY;
|
||||||
|
|
|
@ -17,7 +17,7 @@ import org.elasticsearch.index.VersionType;
|
||||||
* A delete document action request builder.
|
* A delete document action request builder.
|
||||||
*/
|
*/
|
||||||
public class GetAlertRequestBuilder
|
public class GetAlertRequestBuilder
|
||||||
extends MasterNodeOperationRequestBuilder<GetAlertRequest, GetAlertResponse, GetAlertRequestBuilder, AlertsClientInterface> {
|
extends ActionRequestBuilder<GetAlertRequest, GetAlertResponse, GetAlertRequestBuilder, AlertsClientInterface> {
|
||||||
|
|
||||||
|
|
||||||
public GetAlertRequestBuilder(AlertsClientInterface client, String alertName) {
|
public GetAlertRequestBuilder(AlertsClientInterface client, String alertName) {
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package org.elasticsearch.alerts.transport.actions.get;
|
package org.elasticsearch.alerts.transport.actions.get;
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionResponse;
|
import org.elasticsearch.action.ActionResponse;
|
||||||
|
import org.elasticsearch.action.get.GetResponse;
|
||||||
import org.elasticsearch.alerts.Alert;
|
import org.elasticsearch.alerts.Alert;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
|
@ -16,44 +17,38 @@ import java.io.IOException;
|
||||||
*/
|
*/
|
||||||
public class GetAlertResponse extends ActionResponse {
|
public class GetAlertResponse extends ActionResponse {
|
||||||
private boolean found = false;
|
private boolean found = false;
|
||||||
private Alert alert = null;
|
private GetResponse getResponse;
|
||||||
|
|
||||||
public GetAlertResponse() {
|
public GetAlertResponse() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean found() {
|
public GetAlertResponse(GetResponse getResponse) {
|
||||||
return this.found;
|
this.getResponse = getResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void found(boolean found) {
|
public void getResponse(GetResponse getResponse) {
|
||||||
this.found = found;
|
this.getResponse = getResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Alert alert() {
|
public GetResponse getResponse() {
|
||||||
return alert;
|
return this.getResponse;
|
||||||
}
|
|
||||||
|
|
||||||
public void alert(Alert alert){
|
|
||||||
this.alert = alert;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFrom(StreamInput in) throws IOException {
|
public void readFrom(StreamInput in) throws IOException {
|
||||||
super.readFrom(in);
|
super.readFrom(in);
|
||||||
found = in.readBoolean();
|
if (in.readBoolean()) {
|
||||||
if (found) {
|
getResponse = GetResponse.readGetResponse(in);
|
||||||
alert = new Alert();
|
|
||||||
alert.readFrom(in);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeTo(StreamOutput out) throws IOException {
|
public void writeTo(StreamOutput out) throws IOException {
|
||||||
super.writeTo(out);
|
super.writeTo(out);
|
||||||
out.writeBoolean(found);
|
out.writeBoolean(getResponse != null);
|
||||||
if (found && alert != null){
|
if (getResponse != null) {
|
||||||
alert.writeTo(out);
|
getResponse.writeTo(out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,10 @@ package org.elasticsearch.alerts.transport.actions.get;
|
||||||
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
import org.elasticsearch.action.get.GetRequest;
|
||||||
|
import org.elasticsearch.action.get.GetResponse;
|
||||||
import org.elasticsearch.action.support.ActionFilters;
|
import org.elasticsearch.action.support.ActionFilters;
|
||||||
|
import org.elasticsearch.action.support.TransportAction;
|
||||||
import org.elasticsearch.action.support.master.TransportMasterNodeOperationAction;
|
import org.elasticsearch.action.support.master.TransportMasterNodeOperationAction;
|
||||||
import org.elasticsearch.alerts.Alert;
|
import org.elasticsearch.alerts.Alert;
|
||||||
import org.elasticsearch.alerts.AlertManager;
|
import org.elasticsearch.alerts.AlertManager;
|
||||||
|
@ -15,6 +18,7 @@ import org.elasticsearch.alerts.AlertsStore;
|
||||||
import org.elasticsearch.alerts.actions.AlertActionManager;
|
import org.elasticsearch.alerts.actions.AlertActionManager;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
||||||
|
import org.elasticsearch.client.Client;
|
||||||
import org.elasticsearch.cluster.ClusterService;
|
import org.elasticsearch.cluster.ClusterService;
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockException;
|
import org.elasticsearch.cluster.block.ClusterBlockException;
|
||||||
|
@ -27,53 +31,27 @@ import org.elasticsearch.transport.TransportService;
|
||||||
/**
|
/**
|
||||||
* Performs the delete operation.
|
* Performs the delete operation.
|
||||||
*/
|
*/
|
||||||
public class TransportGetAlertAction extends TransportMasterNodeOperationAction<GetAlertRequest, GetAlertResponse> {
|
public class TransportGetAlertAction extends TransportAction<GetAlertRequest, GetAlertResponse> {
|
||||||
|
|
||||||
private final AlertManager alertManager;
|
private final Client client;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public TransportGetAlertAction(Settings settings, String actionName, TransportService transportService,
|
public TransportGetAlertAction(Settings settings, String actionName, ThreadPool threadPool,
|
||||||
ClusterService clusterService, ThreadPool threadPool, ActionFilters actionFilters,
|
ActionFilters actionFilters, Client client) {
|
||||||
AlertManager alertManager) {
|
super(settings, actionName, threadPool, actionFilters);
|
||||||
super(settings, actionName, transportService, clusterService, threadPool, actionFilters);
|
this.client = client;
|
||||||
this.alertManager = alertManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String executor() {
|
protected void doExecute(GetAlertRequest request, ActionListener<GetAlertResponse> listener) {
|
||||||
return ThreadPool.Names.MANAGEMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected GetAlertRequest newRequest() {
|
|
||||||
return new GetAlertRequest();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected GetAlertResponse newResponse() {
|
|
||||||
return new GetAlertResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void masterOperation(GetAlertRequest request, ClusterState state, ActionListener<GetAlertResponse> listener) throws ElasticsearchException {
|
|
||||||
try {
|
try {
|
||||||
Alert alert = alertManager.getAlert(request.alertName());
|
GetResponse getResponse = client.prepareGet(AlertsStore.ALERT_INDEX, AlertsStore.ALERT_TYPE, request.alertName())
|
||||||
GetAlertResponse response = new GetAlertResponse();
|
.setVersion(request.version())
|
||||||
response.found(alert != null);
|
.setVersionType(request.versionType()).execute().actionGet();
|
||||||
response.alert(alert);
|
GetAlertResponse response = new GetAlertResponse(getResponse);
|
||||||
listener.onResponse(response);
|
listener.onResponse(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
listener.onFailure(e);
|
listener.onFailure(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ClusterBlockException checkBlock(GetAlertRequest request, ClusterState state) {
|
|
||||||
if (!alertManager.isStarted()) {
|
|
||||||
return new ClusterBlockException(null);
|
|
||||||
}
|
|
||||||
return state.blocks().indicesBlockedException(ClusterBlockLevel.WRITE, new String[]{AlertsStore.ALERT_INDEX, AlertActionManager.ALERT_HISTORY_INDEX});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* 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.alerts.transport.actions.index;
|
||||||
|
|
||||||
|
import org.elasticsearch.alerts.client.AlertsClientAction;
|
||||||
|
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public class IndexAlertAction extends AlertsClientAction<IndexAlertRequest, IndexAlertResponse, IndexAlertRequestBuilder> {
|
||||||
|
|
||||||
|
public static final IndexAlertAction INSTANCE = new IndexAlertAction();
|
||||||
|
public static final String NAME = "indices:data/write/alert/create";
|
||||||
|
|
||||||
|
private IndexAlertAction() {
|
||||||
|
super(NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IndexAlertRequestBuilder newRequestBuilder(AlertsClientInterface client) {
|
||||||
|
return new IndexAlertRequestBuilder(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IndexAlertResponse newResponse() {
|
||||||
|
return new IndexAlertResponse();
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,12 +3,13 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.alerts.transport.actions.update;
|
package org.elasticsearch.alerts.transport.actions.index;
|
||||||
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionRequestValidationException;
|
import org.elasticsearch.action.ActionRequestValidationException;
|
||||||
import org.elasticsearch.action.ValidateActions;
|
import org.elasticsearch.action.ValidateActions;
|
||||||
import org.elasticsearch.action.support.master.MasterNodeOperationRequest;
|
import org.elasticsearch.action.support.master.MasterNodeOperationRequest;
|
||||||
import org.elasticsearch.alerts.Alert;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
|
|
||||||
|
@ -16,49 +17,58 @@ import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class UpdateAlertRequest extends MasterNodeOperationRequest<UpdateAlertRequest> {
|
public class IndexAlertRequest extends MasterNodeOperationRequest<IndexAlertRequest> {
|
||||||
|
|
||||||
private Alert alert;
|
|
||||||
|
|
||||||
|
private BytesReference alertSource;
|
||||||
|
private String alertName;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActionRequestValidationException validate() {
|
public ActionRequestValidationException validate() {
|
||||||
ActionRequestValidationException validationException = null;
|
ActionRequestValidationException validationException = null;
|
||||||
if (alert == null) {
|
if (alertName == null) {
|
||||||
validationException = ValidateActions.addValidationError("alert is missing", validationException);
|
validationException = ValidateActions.addValidationError("alertName is missing", validationException);
|
||||||
|
}
|
||||||
|
if (alertSource == null) {
|
||||||
|
validationException = ValidateActions.addValidationError("alertSource is missing", validationException);
|
||||||
}
|
}
|
||||||
return validationException;
|
return validationException;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateAlertRequest() {
|
|
||||||
|
IndexAlertRequest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public UpdateAlertRequest(Alert alert) {
|
|
||||||
this.alert = alert;
|
public IndexAlertRequest(BytesReference alertSource) {
|
||||||
|
this.alertSource = alertSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFrom(StreamInput in) throws IOException {
|
public void readFrom(StreamInput in) throws IOException {
|
||||||
super.readFrom(in);
|
super.readFrom(in);
|
||||||
alert = new Alert();
|
alertSource = in.readBytesReference();
|
||||||
alert.readFrom(in);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeTo(StreamOutput out) throws IOException {
|
public void writeTo(StreamOutput out) throws IOException {
|
||||||
super.writeTo(out);
|
super.writeTo(out);
|
||||||
alert.writeTo(out);
|
alertSource.writeTo(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Alert alert() {
|
public String alertName() {
|
||||||
return alert;
|
return alertName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Alert(Alert alert) {
|
public void alertName(String alertName) {
|
||||||
this.alert = alert;
|
this.alertName = alertName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BytesReference alertSource() {
|
||||||
|
return alertSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void alertSource(BytesReference alertSource) {
|
||||||
|
this.alertSource = alertSource;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* 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.alerts.transport.actions.index;
|
||||||
|
|
||||||
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
import org.elasticsearch.action.support.master.MasterNodeOperationRequestBuilder;
|
||||||
|
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
||||||
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public class IndexAlertRequestBuilder
|
||||||
|
extends MasterNodeOperationRequestBuilder<IndexAlertRequest, IndexAlertResponse,
|
||||||
|
IndexAlertRequestBuilder, AlertsClientInterface> {
|
||||||
|
|
||||||
|
|
||||||
|
public IndexAlertRequestBuilder(AlertsClientInterface client) {
|
||||||
|
super(client, new IndexAlertRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public IndexAlertRequestBuilder(AlertsClientInterface client, String alertName) {
|
||||||
|
super(client, new IndexAlertRequest());
|
||||||
|
request.alertName(alertName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IndexAlertRequestBuilder setAlertName(String alertName){
|
||||||
|
request.alertName(alertName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IndexAlertRequestBuilder setAlertSource(BytesReference alertSource) {
|
||||||
|
request.alertSource(alertSource);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doExecute(ActionListener<IndexAlertResponse> listener) {
|
||||||
|
client.createAlert(request, listener);
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.alerts.transport.actions.create;
|
package org.elasticsearch.alerts.transport.actions.index;
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionResponse;
|
import org.elasticsearch.action.ActionResponse;
|
||||||
import org.elasticsearch.action.index.IndexResponse;
|
import org.elasticsearch.action.index.IndexResponse;
|
||||||
|
@ -14,14 +14,14 @@ import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class CreateAlertResponse extends ActionResponse {
|
public class IndexAlertResponse extends ActionResponse {
|
||||||
private IndexResponse indexResponse;
|
private IndexResponse indexResponse;
|
||||||
|
|
||||||
public CreateAlertResponse(IndexResponse indexResponse) {
|
public IndexAlertResponse(IndexResponse indexResponse) {
|
||||||
this.indexResponse = indexResponse;
|
this.indexResponse = indexResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CreateAlertResponse() {
|
public IndexAlertResponse() {
|
||||||
indexResponse = null;
|
indexResponse = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* or more contributor license agreements. Licensed under the Elastic License;
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||||||
* you may not use this file except in compliance with the Elastic License.
|
* you may not use this file except in compliance with the Elastic License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.alerts.transport.actions.update;
|
package org.elasticsearch.alerts.transport.actions.index;
|
||||||
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
@ -17,19 +17,21 @@ import org.elasticsearch.cluster.ClusterService;
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockException;
|
import org.elasticsearch.cluster.block.ClusterBlockException;
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
||||||
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.transport.TransportService;
|
import org.elasticsearch.transport.TransportService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class TransportUpdateAlertAction extends TransportMasterNodeOperationAction<UpdateAlertRequest, UpdateAlertResponse> {
|
public class TransportIndexAlertAction extends TransportMasterNodeOperationAction<IndexAlertRequest, IndexAlertResponse> {
|
||||||
|
|
||||||
private final AlertManager alertManager;
|
private final AlertManager alertManager;
|
||||||
|
|
||||||
public TransportUpdateAlertAction(Settings settings, String actionName, TransportService transportService,
|
@Inject
|
||||||
ClusterService clusterService, ThreadPool threadPool, ActionFilters actionFilters,
|
public TransportIndexAlertAction(Settings settings, String actionName, TransportService transportService,
|
||||||
AlertManager alertManager) {
|
ClusterService clusterService, ThreadPool threadPool, ActionFilters actionFilters,
|
||||||
|
AlertManager alertManager) {
|
||||||
super(settings, actionName, transportService, clusterService, threadPool, actionFilters);
|
super(settings, actionName, transportService, clusterService, threadPool, actionFilters);
|
||||||
this.alertManager = alertManager;
|
this.alertManager = alertManager;
|
||||||
}
|
}
|
||||||
|
@ -40,31 +42,32 @@ public class TransportUpdateAlertAction extends TransportMasterNodeOperationActi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected UpdateAlertRequest newRequest() {
|
protected IndexAlertRequest newRequest() {
|
||||||
return new UpdateAlertRequest();
|
return new IndexAlertRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected UpdateAlertResponse newResponse() {
|
protected IndexAlertResponse newResponse() {
|
||||||
return new UpdateAlertResponse();
|
return new IndexAlertResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void masterOperation(UpdateAlertRequest request, ClusterState state, ActionListener<UpdateAlertResponse> listener) throws ElasticsearchException {
|
protected void masterOperation(IndexAlertRequest request, ClusterState state, ActionListener<IndexAlertResponse> listener) throws ElasticsearchException {
|
||||||
try {
|
try {
|
||||||
IndexResponse indexResponse = alertManager.updateAlert(request.alert(), true);
|
IndexResponse indexResponse = alertManager.addAlert(request.alertName(), request.alertSource());
|
||||||
listener.onResponse(new UpdateAlertResponse(indexResponse));
|
listener.onResponse(new IndexAlertResponse(indexResponse));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
listener.onFailure(e);
|
listener.onFailure(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ClusterBlockException checkBlock(UpdateAlertRequest request, ClusterState state) {
|
protected ClusterBlockException checkBlock(IndexAlertRequest request, ClusterState state) {
|
||||||
if (!alertManager.isStarted()) {
|
if (!alertManager.isStarted()) {
|
||||||
return new ClusterBlockException(null);
|
return new ClusterBlockException(null);
|
||||||
}
|
}
|
||||||
return state.blocks().indicesBlockedException(ClusterBlockLevel.WRITE, new String[]{AlertsStore.ALERT_INDEX, AlertActionManager.ALERT_HISTORY_INDEX});
|
return state.blocks().indicesBlockedException(ClusterBlockLevel.WRITE, new String[]{AlertsStore.ALERT_INDEX, AlertActionManager.ALERT_HISTORY_INDEX});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,35 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.update;
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ClientAction;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClientAction;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
|
||||||
import org.elasticsearch.client.Client;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class UpdateAlertAction extends AlertsClientAction<UpdateAlertRequest, UpdateAlertResponse, UpdateAlertRequestBuilder> {
|
|
||||||
|
|
||||||
public static final UpdateAlertAction INSTANCE = new UpdateAlertAction();
|
|
||||||
public static final String NAME = "indices:data/write/alert/update";
|
|
||||||
|
|
||||||
private UpdateAlertAction() {
|
|
||||||
super(NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UpdateAlertRequestBuilder newRequestBuilder(AlertsClientInterface client) {
|
|
||||||
return new UpdateAlertRequestBuilder(client);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UpdateAlertResponse newResponse() {
|
|
||||||
return new UpdateAlertResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.update;
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionListener;
|
|
||||||
import org.elasticsearch.action.ActionRequestBuilder;
|
|
||||||
import org.elasticsearch.action.support.master.MasterNodeOperationRequestBuilder;
|
|
||||||
import org.elasticsearch.alerts.Alert;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClient;
|
|
||||||
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
|
||||||
import org.elasticsearch.client.Client;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class UpdateAlertRequestBuilder extends MasterNodeOperationRequestBuilder
|
|
||||||
<UpdateAlertRequest, UpdateAlertResponse, UpdateAlertRequestBuilder, AlertsClientInterface> {
|
|
||||||
|
|
||||||
|
|
||||||
public UpdateAlertRequestBuilder(AlertsClientInterface client) {
|
|
||||||
super(client, new UpdateAlertRequest());
|
|
||||||
}
|
|
||||||
|
|
||||||
public UpdateAlertRequestBuilder(AlertsClientInterface client, Alert alert) {
|
|
||||||
super(client, new UpdateAlertRequest(alert));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doExecute(ActionListener<UpdateAlertResponse> listener) {
|
|
||||||
client.updateAlert(request, listener);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.alerts.transport.actions.update;
|
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionResponse;
|
|
||||||
import org.elasticsearch.action.index.IndexResponse;
|
|
||||||
import org.elasticsearch.action.update.UpdateResponse;
|
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
public class UpdateAlertResponse extends ActionResponse {
|
|
||||||
|
|
||||||
private IndexResponse indexResponse;
|
|
||||||
|
|
||||||
public UpdateAlertResponse() {
|
|
||||||
indexResponse = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UpdateAlertResponse(IndexResponse indexResponse) {
|
|
||||||
this.indexResponse = indexResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IndexResponse updateResponse() {
|
|
||||||
return indexResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void indexResponse(IndexResponse indexResponse) {
|
|
||||||
this.indexResponse = indexResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFrom(StreamInput in) throws IOException {
|
|
||||||
super.readFrom(in);
|
|
||||||
if (in.readBoolean()) {
|
|
||||||
indexResponse = new IndexResponse();
|
|
||||||
indexResponse.readFrom(in);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeTo(StreamOutput out) throws IOException {
|
|
||||||
super.writeTo(out);
|
|
||||||
out.writeBoolean(indexResponse != null);
|
|
||||||
if (indexResponse != null) {
|
|
||||||
indexResponse.writeTo(out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -10,8 +10,8 @@ import org.elasticsearch.alerts.actions.*;
|
||||||
import org.elasticsearch.alerts.client.AlertsClient;
|
import org.elasticsearch.alerts.client.AlertsClient;
|
||||||
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
||||||
import org.elasticsearch.alerts.plugin.AlertsPlugin;
|
import org.elasticsearch.alerts.plugin.AlertsPlugin;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
||||||
import org.elasticsearch.alerts.triggers.AlertTrigger;
|
import org.elasticsearch.alerts.triggers.AlertTrigger;
|
||||||
|
@ -20,7 +20,9 @@ import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.settings.ImmutableSettings;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
import org.elasticsearch.index.query.QueryBuilders;
|
||||||
import org.elasticsearch.script.ScriptService;
|
import org.elasticsearch.script.ScriptService;
|
||||||
|
@ -124,10 +126,11 @@ public class BasicAlertingTest extends ElasticsearchIntegrationTest {
|
||||||
);
|
);
|
||||||
|
|
||||||
AlertsClientInterface alertsClient = internalCluster().getInstance(AlertsClient.class, internalCluster().getMasterName());
|
AlertsClientInterface alertsClient = internalCluster().getInstance(AlertsClient.class, internalCluster().getMasterName());
|
||||||
|
XContentBuilder jsonBuilder = XContentFactory.jsonBuilder();
|
||||||
|
alert.toXContent(jsonBuilder, ToXContent.EMPTY_PARAMS);
|
||||||
|
|
||||||
//alertManager.addAlert("my-first-alert", jsonBuilder().value(alert).bytes());
|
IndexAlertRequest alertRequest = alertsClient.prepareCreateAlert().setAlertName("my-first-alert").setAlertSource(jsonBuilder.bytes()).request();
|
||||||
CreateAlertRequest alertRequest = new CreateAlertRequest(alert);
|
IndexAlertResponse alertsResponse = alertsClient.createAlert(alertRequest).actionGet();
|
||||||
CreateAlertResponse alertsResponse = alertsClient.createAlert(alertRequest).actionGet();
|
|
||||||
assertNotNull(alertsResponse.indexResponse());
|
assertNotNull(alertsResponse.indexResponse());
|
||||||
assertTrue(alertsResponse.indexResponse().isCreated());
|
assertTrue(alertsResponse.indexResponse().isCreated());
|
||||||
|
|
||||||
|
|
|
@ -15,14 +15,12 @@ import org.elasticsearch.alerts.AlertsStore;
|
||||||
import org.elasticsearch.alerts.client.AlertsClient;
|
import org.elasticsearch.alerts.client.AlertsClient;
|
||||||
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
import org.elasticsearch.alerts.client.AlertsClientInterface;
|
||||||
import org.elasticsearch.alerts.plugin.AlertsPlugin;
|
import org.elasticsearch.alerts.plugin.AlertsPlugin;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.create.CreateAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.index.IndexAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.delete.DeleteAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.get.GetAlertRequest;
|
import org.elasticsearch.alerts.transport.actions.get.GetAlertRequest;
|
||||||
import org.elasticsearch.alerts.transport.actions.get.GetAlertResponse;
|
import org.elasticsearch.alerts.transport.actions.get.GetAlertResponse;
|
||||||
import org.elasticsearch.alerts.transport.actions.update.UpdateAlertRequest;
|
|
||||||
import org.elasticsearch.alerts.transport.actions.update.UpdateAlertResponse;
|
|
||||||
import org.elasticsearch.alerts.triggers.AlertTrigger;
|
import org.elasticsearch.alerts.triggers.AlertTrigger;
|
||||||
import org.elasticsearch.alerts.triggers.ScriptedAlertTrigger;
|
import org.elasticsearch.alerts.triggers.ScriptedAlertTrigger;
|
||||||
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
||||||
|
@ -31,8 +29,7 @@ import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
|
import org.elasticsearch.common.joda.FormatDateTimeFormatter;
|
||||||
import org.elasticsearch.common.joda.time.DateTime;
|
import org.elasticsearch.common.joda.time.DateTime;
|
||||||
import org.elasticsearch.common.joda.time.DateTimeZone;
|
import org.elasticsearch.common.joda.time.DateTimeZone;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.*;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
|
||||||
import org.elasticsearch.index.mapper.core.DateFieldMapper;
|
import org.elasticsearch.index.mapper.core.DateFieldMapper;
|
||||||
import org.elasticsearch.index.query.QueryBuilders;
|
import org.elasticsearch.index.query.QueryBuilders;
|
||||||
import org.elasticsearch.script.ScriptService;
|
import org.elasticsearch.script.ScriptService;
|
||||||
|
@ -41,13 +38,11 @@ import org.elasticsearch.search.internal.InternalSearchHits;
|
||||||
import org.elasticsearch.search.internal.InternalSearchResponse;
|
import org.elasticsearch.search.internal.InternalSearchResponse;
|
||||||
import org.elasticsearch.common.settings.ImmutableSettings;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
|
||||||
import org.elasticsearch.test.ElasticsearchIntegrationTest;
|
import org.elasticsearch.test.ElasticsearchIntegrationTest;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import static org.hamcrest.core.Is.is;
|
import static org.hamcrest.core.Is.is;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -211,25 +206,20 @@ public class AlertActionsTest extends ElasticsearchIntegrationTest {
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
XContentBuilder jsonBuilder = XContentFactory.jsonBuilder();
|
||||||
|
alert.toXContent(jsonBuilder, ToXContent.EMPTY_PARAMS);
|
||||||
|
|
||||||
AlertsClientInterface alertsClient = internalCluster().getInstance(AlertsClient.class, internalCluster().getMasterName());
|
AlertsClientInterface alertsClient = internalCluster().getInstance(AlertsClient.class, internalCluster().getMasterName());
|
||||||
|
|
||||||
CreateAlertRequest alertRequest = new CreateAlertRequest(alert);
|
IndexAlertRequest alertRequest = alertsClient.prepareCreateAlert().setAlertName("my-first-alert").setAlertSource(jsonBuilder.bytes()).request();
|
||||||
CreateAlertResponse alertsResponse = alertsClient.createAlert(alertRequest).actionGet();
|
IndexAlertResponse alertsResponse = alertsClient.createAlert(alertRequest).actionGet();
|
||||||
assertNotNull(alertsResponse.indexResponse());
|
assertNotNull(alertsResponse.indexResponse());
|
||||||
assertTrue(alertsResponse.indexResponse().isCreated());
|
assertTrue(alertsResponse.indexResponse().isCreated());
|
||||||
|
|
||||||
GetAlertRequest getAlertRequest = new GetAlertRequest(alert.alertName());
|
GetAlertRequest getAlertRequest = new GetAlertRequest(alert.alertName());
|
||||||
GetAlertResponse getAlertResponse = alertsClient.getAlert(getAlertRequest).actionGet();
|
GetAlertResponse getAlertResponse = alertsClient.getAlert(getAlertRequest).actionGet();
|
||||||
assertTrue(getAlertResponse.found());
|
assertTrue(getAlertResponse.getResponse().isExists());
|
||||||
assertEquals(alert.schedule(), getAlertResponse.alert().schedule());
|
assertEquals(getAlertResponse.getResponse().getSourceAsMap().get("schedule").toString(), "0/5 * * * * ? *");
|
||||||
|
|
||||||
String schedule = "0/10 * * * * ? *";
|
|
||||||
alert.schedule(schedule);
|
|
||||||
UpdateAlertRequest updateAlertRequest = new UpdateAlertRequest(alert);
|
|
||||||
UpdateAlertResponse updateAlertResponse = alertsClient.updateAlert(updateAlertRequest).actionGet();
|
|
||||||
assertNotNull(updateAlertResponse.updateResponse());
|
|
||||||
assertFalse(updateAlertResponse.updateResponse().isCreated());
|
|
||||||
|
|
||||||
DeleteAlertRequest deleteAlertRequest = new DeleteAlertRequest(alert.alertName());
|
DeleteAlertRequest deleteAlertRequest = new DeleteAlertRequest(alert.alertName());
|
||||||
DeleteAlertResponse deleteAlertResponse = alertsClient.deleteAlert(deleteAlertRequest).actionGet();
|
DeleteAlertResponse deleteAlertResponse = alertsClient.deleteAlert(deleteAlertRequest).actionGet();
|
||||||
|
@ -237,10 +227,8 @@ public class AlertActionsTest extends ElasticsearchIntegrationTest {
|
||||||
assertTrue(deleteAlertResponse.deleteResponse().isFound());
|
assertTrue(deleteAlertResponse.deleteResponse().isFound());
|
||||||
|
|
||||||
getAlertResponse = alertsClient.getAlert(getAlertRequest).actionGet();
|
getAlertResponse = alertsClient.getAlert(getAlertRequest).actionGet();
|
||||||
assertFalse(getAlertResponse.found());
|
assertFalse(getAlertResponse.getResponse().isExists());
|
||||||
|
|
||||||
updateAlertResponse = alertsClient.updateAlert(updateAlertRequest).actionGet();
|
|
||||||
assertNull(updateAlertResponse.updateResponse());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue