Merge pull request elastic/elasticsearch#2845 from rjernst/remove_script_proxy
Remove script service proxy Original commit: elastic/x-pack-elasticsearch@c4a1dfda1a
This commit is contained in:
commit
2de185ac72
|
@ -14,7 +14,7 @@ import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.execution.ManualExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.ManualExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.execution.ManualExecutionTests.ExecutionRunner;
|
import org.elasticsearch.xpack.watcher.execution.ManualExecutionTests.ExecutionRunner;
|
||||||
import org.elasticsearch.xpack.watcher.history.WatchRecord;
|
import org.elasticsearch.xpack.watcher.history.WatchRecord;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
||||||
import org.elasticsearch.xpack.watcher.transport.actions.delete.DeleteWatchResponse;
|
import org.elasticsearch.xpack.watcher.transport.actions.delete.DeleteWatchResponse;
|
||||||
import org.elasticsearch.xpack.watcher.transport.actions.get.GetWatchRequest;
|
import org.elasticsearch.xpack.watcher.transport.actions.get.GetWatchRequest;
|
||||||
|
@ -65,7 +65,7 @@ public class GroovyManualExecutionIT extends AbstractWatcherIntegrationTestCase
|
||||||
WatchSourceBuilder watchBuilder = watchBuilder()
|
WatchSourceBuilder watchBuilder = watchBuilder()
|
||||||
.trigger(schedule(cron("0 0 0 1 * ? 2099")))
|
.trigger(schedule(cron("0 0 0 1 * ? 2099")))
|
||||||
.input(simpleInput("foo", "bar"))
|
.input(simpleInput("foo", "bar"))
|
||||||
.condition(new ScriptCondition((new Script.Builder.Inline("sleep 100; return true")).build()))
|
.condition(new ScriptCondition((new WatcherScript.Builder.Inline("sleep 100; return true")).build()))
|
||||||
.addAction("log", loggingAction("foobar"));
|
.addAction("log", loggingAction("foobar"));
|
||||||
|
|
||||||
Watch watch = watchParser().parse("_id", false, watchBuilder.buildAsBytes(XContentType.JSON));
|
Watch watch = watchParser().parse("_id", false, watchBuilder.buildAsBytes(XContentType.JSON));
|
||||||
|
@ -80,7 +80,7 @@ public class GroovyManualExecutionIT extends AbstractWatcherIntegrationTestCase
|
||||||
WatchSourceBuilder watchBuilder = watchBuilder()
|
WatchSourceBuilder watchBuilder = watchBuilder()
|
||||||
.trigger(schedule(cron("0 0 0 1 * ? 2099")))
|
.trigger(schedule(cron("0 0 0 1 * ? 2099")))
|
||||||
.input(simpleInput("foo", "bar"))
|
.input(simpleInput("foo", "bar"))
|
||||||
.condition(new ScriptCondition((new Script.Builder.Inline("sleep 10000; return true")).build()))
|
.condition(new ScriptCondition((new WatcherScript.Builder.Inline("sleep 10000; return true")).build()))
|
||||||
.defaultThrottlePeriod(new TimeValue(1, TimeUnit.HOURS))
|
.defaultThrottlePeriod(new TimeValue(1, TimeUnit.HOURS))
|
||||||
.addAction("log", loggingAction("foobar"));
|
.addAction("log", loggingAction("foobar"));
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ package org.elasticsearch.messy.tests;
|
||||||
import org.elasticsearch.action.search.SearchRequestBuilder;
|
import org.elasticsearch.action.search.SearchRequestBuilder;
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.script.groovy.GroovyPlugin;
|
import org.elasticsearch.script.groovy.GroovyPlugin;
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||||
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
||||||
|
@ -16,8 +17,7 @@ import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ExecutableScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ExecutableScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
|
@ -28,7 +28,7 @@ import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static org.elasticsearch.messy.tests.MessyTestUtils.getScriptServiceProxy;
|
import static org.elasticsearch.messy.tests.MessyTestUtils.createScriptService;
|
||||||
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.mockExecutionContext;
|
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.mockExecutionContext;
|
||||||
|
|
||||||
public class GroovyScriptConditionIT extends AbstractWatcherIntegrationTestCase {
|
public class GroovyScriptConditionIT extends AbstractWatcherIntegrationTestCase {
|
||||||
|
@ -46,7 +46,7 @@ public class GroovyScriptConditionIT extends AbstractWatcherIntegrationTestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ThreadPool THREAD_POOL;
|
private static ThreadPool THREAD_POOL;
|
||||||
private ScriptServiceProxy scriptService;
|
private ScriptService scriptService;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void startThreadPool() {
|
public static void startThreadPool() {
|
||||||
|
@ -55,7 +55,7 @@ public class GroovyScriptConditionIT extends AbstractWatcherIntegrationTestCase
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
scriptService = getScriptServiceProxy(THREAD_POOL);
|
scriptService = createScriptService(THREAD_POOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
|
@ -83,7 +83,7 @@ public class GroovyScriptConditionIT extends AbstractWatcherIntegrationTestCase
|
||||||
SearchResponse unmetResponse = builder.get();
|
SearchResponse unmetResponse = builder.get();
|
||||||
|
|
||||||
ExecutableScriptCondition condition =
|
ExecutableScriptCondition condition =
|
||||||
new ExecutableScriptCondition(new ScriptCondition(Script.inline(
|
new ExecutableScriptCondition(new ScriptCondition(WatcherScript.inline(
|
||||||
String.join(
|
String.join(
|
||||||
" ",
|
" ",
|
||||||
"if (ctx.payload.hits.total < 1) return false;",
|
"if (ctx.payload.hits.total < 1) return false;",
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
package org.elasticsearch.messy.tests;
|
package org.elasticsearch.messy.tests;
|
||||||
|
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.elasticsearch.cluster.ClusterName;
|
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
|
||||||
import org.elasticsearch.common.SuppressForbidden;
|
import org.elasticsearch.common.SuppressForbidden;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
|
@ -19,9 +16,8 @@ import org.elasticsearch.script.ScriptSettings;
|
||||||
import org.elasticsearch.script.groovy.GroovyScriptEngineService;
|
import org.elasticsearch.script.groovy.GroovyScriptEngineService;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.mockito.Mockito;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -29,7 +25,7 @@ import java.util.Collections;
|
||||||
@Ignore // not a test.
|
@Ignore // not a test.
|
||||||
@SuppressForbidden(reason = "gradle is broken and tries to run me as a test")
|
@SuppressForbidden(reason = "gradle is broken and tries to run me as a test")
|
||||||
public final class MessyTestUtils {
|
public final class MessyTestUtils {
|
||||||
public static ScriptServiceProxy getScriptServiceProxy(ThreadPool tp) throws Exception {
|
public static ScriptService createScriptService(ThreadPool tp) throws Exception {
|
||||||
Settings settings = Settings.builder()
|
Settings settings = Settings.builder()
|
||||||
.put("script.inline", "true")
|
.put("script.inline", "true")
|
||||||
.put("script.indexed", "true")
|
.put("script.indexed", "true")
|
||||||
|
@ -37,10 +33,10 @@ public final class MessyTestUtils {
|
||||||
.build();
|
.build();
|
||||||
GroovyScriptEngineService groovyScriptEngineService = new GroovyScriptEngineService(settings);
|
GroovyScriptEngineService groovyScriptEngineService = new GroovyScriptEngineService(settings);
|
||||||
ScriptEngineRegistry scriptEngineRegistry = new ScriptEngineRegistry(Collections.singleton(groovyScriptEngineService));
|
ScriptEngineRegistry scriptEngineRegistry = new ScriptEngineRegistry(Collections.singleton(groovyScriptEngineService));
|
||||||
ScriptContextRegistry scriptContextRegistry = new ScriptContextRegistry(Arrays.asList(ScriptServiceProxy.INSTANCE));
|
ScriptContextRegistry scriptContextRegistry = new ScriptContextRegistry(Arrays.asList(WatcherScript.CTX_PLUGIN));
|
||||||
|
|
||||||
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, scriptContextRegistry);
|
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, scriptContextRegistry);
|
||||||
return ScriptServiceProxy.of(new ScriptService(settings, new Environment(settings),
|
return new ScriptService(settings, new Environment(settings), new ResourceWatcherService(settings, tp),
|
||||||
new ResourceWatcherService(settings, tp), scriptEngineRegistry, scriptContextRegistry, scriptSettings));
|
scriptEngineRegistry, scriptContextRegistry, scriptSettings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import org.elasticsearch.action.search.ShardSearchFailure;
|
||||||
import org.elasticsearch.common.text.Text;
|
import org.elasticsearch.common.text.Text;
|
||||||
import org.elasticsearch.index.Index;
|
import org.elasticsearch.index.Index;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.script.groovy.GroovyPlugin;
|
import org.elasticsearch.script.groovy.GroovyPlugin;
|
||||||
import org.elasticsearch.search.SearchShardTarget;
|
import org.elasticsearch.search.SearchShardTarget;
|
||||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||||
|
@ -20,11 +21,10 @@ import org.elasticsearch.search.internal.InternalSearchHits;
|
||||||
import org.elasticsearch.search.internal.InternalSearchResponse;
|
import org.elasticsearch.search.internal.InternalSearchResponse;
|
||||||
import org.elasticsearch.threadpool.TestThreadPool;
|
import org.elasticsearch.threadpool.TestThreadPool;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ExecutableScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ExecutableScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
@ -40,7 +40,7 @@ import static org.mockito.Mockito.when;
|
||||||
*/
|
*/
|
||||||
public class ScriptConditionSearchIT extends AbstractWatcherIntegrationTestCase {
|
public class ScriptConditionSearchIT extends AbstractWatcherIntegrationTestCase {
|
||||||
private ThreadPool tp = null;
|
private ThreadPool tp = null;
|
||||||
private ScriptServiceProxy scriptService;
|
private ScriptService scriptService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<Class<? extends Plugin>> pluginTypes() {
|
protected List<Class<? extends Plugin>> pluginTypes() {
|
||||||
|
@ -52,7 +52,7 @@ public class ScriptConditionSearchIT extends AbstractWatcherIntegrationTestCase
|
||||||
@Before
|
@Before
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
tp = new TestThreadPool(ThreadPool.Names.SAME);
|
tp = new TestThreadPool(ThreadPool.Names.SAME);
|
||||||
scriptService = MessyTestUtils.getScriptServiceProxy(tp);
|
scriptService = MessyTestUtils.createScriptService(tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -73,7 +73,7 @@ public class ScriptConditionSearchIT extends AbstractWatcherIntegrationTestCase
|
||||||
.get();
|
.get();
|
||||||
|
|
||||||
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
||||||
new ScriptCondition(Script.inline("ctx.payload.aggregations.rate.buckets[0]?.doc_count >= 5").build()),
|
new ScriptCondition(WatcherScript.inline("ctx.payload.aggregations.rate.buckets[0]?.doc_count >= 5").build()),
|
||||||
logger, scriptService);
|
logger, scriptService);
|
||||||
|
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
||||||
|
@ -92,7 +92,7 @@ public class ScriptConditionSearchIT extends AbstractWatcherIntegrationTestCase
|
||||||
|
|
||||||
public void testExecuteAccessHits() throws Exception {
|
public void testExecuteAccessHits() throws Exception {
|
||||||
ExecutableScriptCondition condition = new ExecutableScriptCondition(new ScriptCondition(
|
ExecutableScriptCondition condition = new ExecutableScriptCondition(new ScriptCondition(
|
||||||
Script.inline("ctx.payload.hits?.hits[0]?._score == 1.0").build()), logger, scriptService);
|
WatcherScript.inline("ctx.payload.hits?.hits[0]?._score == 1.0").build()), logger, scriptService);
|
||||||
InternalSearchHit hit = new InternalSearchHit(0, "1", new Text("type"), null);
|
InternalSearchHit hit = new InternalSearchHit(0, "1", new Text("type"), null);
|
||||||
hit.score(1f);
|
hit.score(1f);
|
||||||
hit.shard(new SearchShardTarget("a", new Index("a", "testUUID"), 0));
|
hit.shard(new SearchShardTarget("a", new Index("a", "testUUID"), 0));
|
||||||
|
|
|
@ -15,17 +15,17 @@ import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.script.GeneralScriptException;
|
import org.elasticsearch.script.GeneralScriptException;
|
||||||
import org.elasticsearch.script.ScriptException;
|
import org.elasticsearch.script.ScriptException;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.script.ScriptService.ScriptType;
|
import org.elasticsearch.script.ScriptService.ScriptType;
|
||||||
import org.elasticsearch.search.internal.InternalSearchResponse;
|
import org.elasticsearch.search.internal.InternalSearchResponse;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.threadpool.TestThreadPool;
|
import org.elasticsearch.threadpool.TestThreadPool;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ExecutableScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ExecutableScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ScriptConditionFactory;
|
import org.elasticsearch.xpack.watcher.condition.script.ScriptConditionFactory;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.DateTimeZone;
|
import org.joda.time.DateTimeZone;
|
||||||
|
@ -36,7 +36,7 @@ import java.io.IOException;
|
||||||
|
|
||||||
import static java.util.Collections.singletonMap;
|
import static java.util.Collections.singletonMap;
|
||||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||||
import static org.elasticsearch.messy.tests.MessyTestUtils.getScriptServiceProxy;
|
import static org.elasticsearch.messy.tests.MessyTestUtils.createScriptService;
|
||||||
import static org.elasticsearch.xpack.watcher.support.Exceptions.illegalArgument;
|
import static org.elasticsearch.xpack.watcher.support.Exceptions.illegalArgument;
|
||||||
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.mockExecutionContext;
|
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.mockExecutionContext;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
|
@ -57,18 +57,18 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute() throws Exception {
|
public void testExecute() throws Exception {
|
||||||
ScriptServiceProxy scriptService = getScriptServiceProxy(tp);
|
ScriptService scriptService = createScriptService(tp);
|
||||||
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
||||||
new ScriptCondition(Script.inline("ctx.payload.hits.total > 1").build()), logger, scriptService);
|
new ScriptCondition(WatcherScript.inline("ctx.payload.hits.total > 1").build()), logger, scriptService);
|
||||||
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
||||||
assertFalse(condition.execute(ctx).met());
|
assertFalse(condition.execute(ctx).met());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecuteMergedParams() throws Exception {
|
public void testExecuteMergedParams() throws Exception {
|
||||||
ScriptServiceProxy scriptService = getScriptServiceProxy(tp);
|
ScriptService scriptService = createScriptService(tp);
|
||||||
Script script = Script.inline("ctx.payload.hits.total > threshold")
|
WatcherScript script = WatcherScript.inline("ctx.payload.hits.total > threshold")
|
||||||
.lang(Script.DEFAULT_LANG).params(singletonMap("threshold", 1)).build();
|
.lang(WatcherScript.DEFAULT_LANG).params(singletonMap("threshold", 1)).build();
|
||||||
ExecutableScriptCondition executable = new ExecutableScriptCondition(new ScriptCondition(script), logger, scriptService);
|
ExecutableScriptCondition executable = new ExecutableScriptCondition(new ScriptCondition(script), logger, scriptService);
|
||||||
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
||||||
|
@ -76,7 +76,7 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testParserValid() throws Exception {
|
public void testParserValid() throws Exception {
|
||||||
ScriptConditionFactory factory = new ScriptConditionFactory(Settings.builder().build(), getScriptServiceProxy(tp));
|
ScriptConditionFactory factory = new ScriptConditionFactory(Settings.builder().build(), createScriptService(tp));
|
||||||
|
|
||||||
XContentBuilder builder = createConditionContent("ctx.payload.hits.total > 1", null, ScriptType.INLINE);
|
XContentBuilder builder = createConditionContent("ctx.payload.hits.total > 1", null, ScriptType.INLINE);
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testParserInvalid() throws Exception {
|
public void testParserInvalid() throws Exception {
|
||||||
ScriptConditionFactory factory = new ScriptConditionFactory(Settings.builder().build(), getScriptServiceProxy(tp));
|
ScriptConditionFactory factory = new ScriptConditionFactory(Settings.builder().build(), createScriptService(tp));
|
||||||
XContentBuilder builder = XContentFactory.jsonBuilder();
|
XContentBuilder builder = XContentFactory.jsonBuilder();
|
||||||
builder.startObject().endObject();
|
builder.startObject().endObject();
|
||||||
XContentParser parser = XContentFactory.xContent(builder.bytes()).createParser(builder.bytes());
|
XContentParser parser = XContentFactory.xContent(builder.bytes()).createParser(builder.bytes());
|
||||||
|
@ -118,7 +118,7 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionParserBadScript() throws Exception {
|
public void testScriptConditionParserBadScript() throws Exception {
|
||||||
ScriptConditionFactory conditionParser = new ScriptConditionFactory(Settings.builder().build(), getScriptServiceProxy(tp));
|
ScriptConditionFactory conditionParser = new ScriptConditionFactory(Settings.builder().build(), createScriptService(tp));
|
||||||
ScriptType scriptType = randomFrom(ScriptType.values());
|
ScriptType scriptType = randomFrom(ScriptType.values());
|
||||||
String script;
|
String script;
|
||||||
switch (scriptType) {
|
switch (scriptType) {
|
||||||
|
@ -139,7 +139,7 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionParser_badLang() throws Exception {
|
public void testScriptConditionParser_badLang() throws Exception {
|
||||||
ScriptConditionFactory conditionParser = new ScriptConditionFactory(Settings.builder().build(), getScriptServiceProxy(tp));
|
ScriptConditionFactory conditionParser = new ScriptConditionFactory(Settings.builder().build(), createScriptService(tp));
|
||||||
ScriptType scriptType = ScriptType.INLINE;
|
ScriptType scriptType = ScriptType.INLINE;
|
||||||
String script = "return true";
|
String script = "return true";
|
||||||
XContentBuilder builder = createConditionContent(script, "not_a_valid_lang", scriptType);
|
XContentBuilder builder = createConditionContent(script, "not_a_valid_lang", scriptType);
|
||||||
|
@ -152,9 +152,9 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionThrowException() throws Exception {
|
public void testScriptConditionThrowException() throws Exception {
|
||||||
ScriptServiceProxy scriptService = getScriptServiceProxy(tp);
|
ScriptService scriptService = createScriptService(tp);
|
||||||
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
||||||
new ScriptCondition(Script.inline("null.foo").build()), logger, scriptService);
|
new ScriptCondition(WatcherScript.inline("null.foo").build()), logger, scriptService);
|
||||||
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
||||||
ScriptException exception = expectThrows(ScriptException.class, () -> condition.execute(ctx));
|
ScriptException exception = expectThrows(ScriptException.class, () -> condition.execute(ctx));
|
||||||
|
@ -162,9 +162,9 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionReturnObjectThrowsException() throws Exception {
|
public void testScriptConditionReturnObjectThrowsException() throws Exception {
|
||||||
ScriptServiceProxy scriptService = getScriptServiceProxy(tp);
|
ScriptService scriptService = createScriptService(tp);
|
||||||
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
||||||
new ScriptCondition(Script.inline("return new Object()").build()), logger, scriptService);
|
new ScriptCondition(WatcherScript.inline("return new Object()").build()), logger, scriptService);
|
||||||
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
WatchExecutionContext ctx = mockExecutionContext("_name", new Payload.XContent(response));
|
||||||
Exception exception = expectThrows(GeneralScriptException.class, () -> condition.execute(ctx));
|
Exception exception = expectThrows(GeneralScriptException.class, () -> condition.execute(ctx));
|
||||||
|
@ -173,9 +173,9 @@ public class ScriptConditionTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionAccessCtx() throws Exception {
|
public void testScriptConditionAccessCtx() throws Exception {
|
||||||
ScriptServiceProxy scriptService = getScriptServiceProxy(tp);
|
ScriptService scriptService = createScriptService(tp);
|
||||||
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
ExecutableScriptCondition condition = new ExecutableScriptCondition(
|
||||||
new ScriptCondition(Script.inline("ctx.trigger.scheduled_time.getMillis() < new Date().time ").build()),
|
new ScriptCondition(WatcherScript.inline("ctx.trigger.scheduled_time.getMillis() < new Date().time ").build()),
|
||||||
logger, scriptService);
|
logger, scriptService);
|
||||||
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
SearchResponse response = new SearchResponse(InternalSearchResponse.empty(), "", 3, 3, 500L, new ShardSearchFailure[0]);
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", new DateTime(DateTimeZone.UTC), new Payload.XContent(response));
|
WatchExecutionContext ctx = mockExecutionContext("_name", new DateTime(DateTimeZone.UTC), new Payload.XContent(response));
|
||||||
|
|
|
@ -13,7 +13,7 @@ import org.elasticsearch.common.io.Streams;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.script.groovy.GroovyPlugin;
|
import org.elasticsearch.script.groovy.GroovyPlugin;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
||||||
import org.elasticsearch.xpack.watcher.test.WatcherTestUtils;
|
import org.elasticsearch.xpack.watcher.test.WatcherTestUtils;
|
||||||
import org.elasticsearch.xpack.watcher.transport.actions.put.PutWatchResponse;
|
import org.elasticsearch.xpack.watcher.transport.actions.put.PutWatchResponse;
|
||||||
|
@ -72,10 +72,10 @@ public class TransformIT extends AbstractWatcherIntegrationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptTransform() throws Exception {
|
public void testScriptTransform() throws Exception {
|
||||||
final Script script;
|
final WatcherScript script;
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
logger.info("testing script transform with an inline script");
|
logger.info("testing script transform with an inline script");
|
||||||
script = Script.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
script = WatcherScript.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
||||||
} else if (randomBoolean()) {
|
} else if (randomBoolean()) {
|
||||||
logger.info("testing script transform with an indexed script");
|
logger.info("testing script transform with an indexed script");
|
||||||
client().admin().cluster().preparePutStoredScript()
|
client().admin().cluster().preparePutStoredScript()
|
||||||
|
@ -83,10 +83,10 @@ public class TransformIT extends AbstractWatcherIntegrationTestCase {
|
||||||
.setScriptLang("groovy")
|
.setScriptLang("groovy")
|
||||||
.setSource(new BytesArray("{\"script\" : \"return [key3 : ctx.payload.key1 + ctx.payload.key2]\"}"))
|
.setSource(new BytesArray("{\"script\" : \"return [key3 : ctx.payload.key1 + ctx.payload.key2]\"}"))
|
||||||
.get();
|
.get();
|
||||||
script = Script.indexed("_id").lang("groovy").build();
|
script = WatcherScript.indexed("_id").lang("groovy").build();
|
||||||
} else {
|
} else {
|
||||||
logger.info("testing script transform with a file script");
|
logger.info("testing script transform with a file script");
|
||||||
script = Script.file("my-script").lang("groovy").build();
|
script = WatcherScript.file("my-script").lang("groovy").build();
|
||||||
}
|
}
|
||||||
|
|
||||||
// put a watch that has watch level transform:
|
// put a watch that has watch level transform:
|
||||||
|
@ -182,8 +182,8 @@ public class TransformIT extends AbstractWatcherIntegrationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testChainTransform() throws Exception {
|
public void testChainTransform() throws Exception {
|
||||||
final Script script1 = Script.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
final WatcherScript script1 = WatcherScript.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
||||||
final Script script2 = Script.inline("return [key4 : ctx.payload.key3 + 10]").lang("groovy").build();
|
final WatcherScript script2 = WatcherScript.inline("return [key4 : ctx.payload.key3 + 10]").lang("groovy").build();
|
||||||
// put a watch that has watch level transform:
|
// put a watch that has watch level transform:
|
||||||
PutWatchResponse putWatchResponse = watcherClient().preparePutWatch("_id1")
|
PutWatchResponse putWatchResponse = watcherClient().preparePutWatch("_id1")
|
||||||
.setSource(watchBuilder()
|
.setSource(watchBuilder()
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||||
import org.elasticsearch.search.suggest.Suggesters;
|
import org.elasticsearch.search.suggest.Suggesters;
|
||||||
import org.elasticsearch.test.ESIntegTestCase;
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.common.text.TextTemplate;
|
import org.elasticsearch.xpack.common.text.TextTemplate;
|
||||||
import org.elasticsearch.xpack.watcher.actions.ActionWrapper;
|
import org.elasticsearch.xpack.watcher.actions.ActionWrapper;
|
||||||
import org.elasticsearch.xpack.watcher.actions.ExecutableActions;
|
import org.elasticsearch.xpack.watcher.actions.ExecutableActions;
|
||||||
|
@ -41,7 +40,7 @@ import org.elasticsearch.xpack.watcher.input.search.SearchInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.search.SearchInputFactory;
|
import org.elasticsearch.xpack.watcher.input.search.SearchInputFactory;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
||||||
|
@ -190,7 +189,7 @@ public class SearchInputIT extends ESIntegTestCase {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("seconds_param", "30s");
|
params.put("seconds_param", "30s");
|
||||||
|
|
||||||
Script template = Script.inline(TEMPLATE_QUERY).lang("mustache").params(params).build();
|
WatcherScript template = WatcherScript.inline(TEMPLATE_QUERY).lang("mustache").params(params).build();
|
||||||
|
|
||||||
SearchRequest request = client().prepareSearch()
|
SearchRequest request = client().prepareSearch()
|
||||||
.setSearchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE)
|
.setSearchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE)
|
||||||
|
@ -224,7 +223,7 @@ public class SearchInputIT extends ESIntegTestCase {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("seconds_param", "30s");
|
params.put("seconds_param", "30s");
|
||||||
|
|
||||||
Script template = Script.indexed("test-template").lang("mustache").params(params).build();
|
WatcherScript template = WatcherScript.indexed("test-template").lang("mustache").params(params).build();
|
||||||
|
|
||||||
jsonBuilder().value(TextTemplate.indexed("test-template").params(params).build()).bytes();
|
jsonBuilder().value(TextTemplate.indexed("test-template").params(params).build()).bytes();
|
||||||
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE)
|
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE)
|
||||||
|
@ -252,7 +251,7 @@ public class SearchInputIT extends ESIntegTestCase {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("seconds_param", "30s");
|
params.put("seconds_param", "30s");
|
||||||
|
|
||||||
Script template = Script.file("test_disk_template").lang("mustache").params(params).build();
|
WatcherScript template = WatcherScript.file("test_disk_template").lang("mustache").params(params).build();
|
||||||
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE)
|
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchInput.DEFAULT_SEARCH_TYPE)
|
||||||
.setIndices("test-search-index").request();
|
.setIndices("test-search-index").request();
|
||||||
|
|
||||||
|
@ -347,7 +346,8 @@ public class SearchInputIT extends ESIntegTestCase {
|
||||||
timeValueSeconds(5));
|
timeValueSeconds(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SearchInput.Result executeSearchInput(SearchRequest request, Script template, WatchExecutionContext ctx) throws IOException {
|
private SearchInput.Result executeSearchInput(SearchRequest request, WatcherScript template,
|
||||||
|
WatchExecutionContext ctx) throws IOException {
|
||||||
createIndex("test-search-index");
|
createIndex("test-search-index");
|
||||||
ensureGreen("test-search-index");
|
ensureGreen("test-search-index");
|
||||||
SearchInput.Builder siBuilder = SearchInput.builder(new WatcherSearchTemplateRequest(request, template));
|
SearchInput.Builder siBuilder = SearchInput.builder(new WatcherSearchTemplateRequest(request, template));
|
||||||
|
@ -362,15 +362,15 @@ public class SearchInputIT extends ESIntegTestCase {
|
||||||
protected WatcherSearchTemplateService watcherSearchTemplateService() {
|
protected WatcherSearchTemplateService watcherSearchTemplateService() {
|
||||||
String master = internalCluster().getMasterName();
|
String master = internalCluster().getMasterName();
|
||||||
return new WatcherSearchTemplateService(internalCluster().clusterService(master).getSettings(),
|
return new WatcherSearchTemplateService(internalCluster().clusterService(master).getSettings(),
|
||||||
ScriptServiceProxy.of(internalCluster().getInstance(ScriptService.class, master)),
|
internalCluster().getInstance(ScriptService.class, master),
|
||||||
internalCluster().getInstance(IndicesQueriesRegistry.class, master),
|
internalCluster().getInstance(IndicesQueriesRegistry.class, master),
|
||||||
internalCluster().getInstance(AggregatorParsers.class, master),
|
internalCluster().getInstance(AggregatorParsers.class, master),
|
||||||
internalCluster().getInstance(Suggesters.class, master)
|
internalCluster().getInstance(Suggesters.class, master)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ScriptServiceProxy scriptService() {
|
protected ScriptService scriptService() {
|
||||||
return ScriptServiceProxy.of(internalCluster().getInstance(ScriptService.class));
|
return internalCluster().getInstance(ScriptService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private XContentSource toXContentSource(SearchInput.Result result) throws IOException {
|
private XContentSource toXContentSource(SearchInput.Result result) throws IOException {
|
||||||
|
@ -387,7 +387,7 @@ public class SearchInputIT extends ESIntegTestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ScriptContext.Plugin getCustomScriptContexts() {
|
public ScriptContext.Plugin getCustomScriptContexts() {
|
||||||
return ScriptServiceProxy.INSTANCE;
|
return WatcherScript.CTX_PLUGIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||||
import org.elasticsearch.search.suggest.Suggesters;
|
import org.elasticsearch.search.suggest.Suggesters;
|
||||||
import org.elasticsearch.test.ESIntegTestCase;
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.common.text.TextTemplate;
|
import org.elasticsearch.xpack.common.text.TextTemplate;
|
||||||
import org.elasticsearch.xpack.watcher.actions.ExecutableActions;
|
import org.elasticsearch.xpack.watcher.actions.ExecutableActions;
|
||||||
import org.elasticsearch.xpack.watcher.condition.always.ExecutableAlwaysCondition;
|
import org.elasticsearch.xpack.watcher.condition.always.ExecutableAlwaysCondition;
|
||||||
|
@ -40,7 +39,7 @@ import org.elasticsearch.xpack.watcher.execution.TriggeredExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
||||||
|
@ -348,7 +347,7 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
}
|
}
|
||||||
if (templateName != null) {
|
if (templateName != null) {
|
||||||
assertThat(executable.transform().getRequest().getTemplate(),
|
assertThat(executable.transform().getRequest().getTemplate(),
|
||||||
equalTo(Script.file("template1").build()));
|
equalTo(WatcherScript.file("template1").build()));
|
||||||
}
|
}
|
||||||
SearchSourceBuilder source = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
|
SearchSourceBuilder source = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
|
||||||
assertThat(executable.transform().getRequest().getRequest().source(), equalTo(source));
|
assertThat(executable.transform().getRequest().getRequest().source(), equalTo(source));
|
||||||
|
@ -381,7 +380,7 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("seconds_param", "30s");
|
params.put("seconds_param", "30s");
|
||||||
|
|
||||||
Script template = Script.inline(templateQuery).lang("mustache").params(params).build();
|
WatcherScript template = WatcherScript.inline(templateQuery).lang("mustache").params(params).build();
|
||||||
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchTransform.DEFAULT_SEARCH_TYPE)
|
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchTransform.DEFAULT_SEARCH_TYPE)
|
||||||
.setIndices("test-search-index").request();
|
.setIndices("test-search-index").request();
|
||||||
|
|
||||||
|
@ -415,7 +414,7 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("seconds_param", "30s");
|
params.put("seconds_param", "30s");
|
||||||
|
|
||||||
Script template = Script.indexed("test-script").lang("mustache").params(params).build();
|
WatcherScript template = WatcherScript.indexed("test-script").lang("mustache").params(params).build();
|
||||||
|
|
||||||
SearchRequest request = client()
|
SearchRequest request = client()
|
||||||
.prepareSearch()
|
.prepareSearch()
|
||||||
|
@ -441,7 +440,7 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("seconds_param", "30s");
|
params.put("seconds_param", "30s");
|
||||||
|
|
||||||
Script template = Script.file("test_disk_template").lang("mustache").params(params).build();
|
WatcherScript template = WatcherScript.file("test_disk_template").lang("mustache").params(params).build();
|
||||||
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchTransform.DEFAULT_SEARCH_TYPE)
|
SearchRequest request = client().prepareSearch().setSearchType(ExecutableSearchTransform.DEFAULT_SEARCH_TYPE)
|
||||||
.setIndices("test-search-index").request();
|
.setIndices("test-search-index").request();
|
||||||
|
|
||||||
|
@ -504,7 +503,7 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
timeValueSeconds(5));
|
timeValueSeconds(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SearchTransform.Result executeSearchTransform(SearchRequest request, Script template, WatchExecutionContext ctx)
|
private SearchTransform.Result executeSearchTransform(SearchRequest request, WatcherScript template, WatchExecutionContext ctx)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
createIndex("test-search-index");
|
createIndex("test-search-index");
|
||||||
ensureGreen("test-search-index");
|
ensureGreen("test-search-index");
|
||||||
|
@ -519,15 +518,15 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
protected WatcherSearchTemplateService watcherSearchTemplateService() {
|
protected WatcherSearchTemplateService watcherSearchTemplateService() {
|
||||||
String master = internalCluster().getMasterName();
|
String master = internalCluster().getMasterName();
|
||||||
return new WatcherSearchTemplateService(internalCluster().clusterService(master).getSettings(),
|
return new WatcherSearchTemplateService(internalCluster().clusterService(master).getSettings(),
|
||||||
ScriptServiceProxy.of(internalCluster().getInstance(ScriptService.class, master)),
|
internalCluster().getInstance(ScriptService.class, master),
|
||||||
internalCluster().getInstance(IndicesQueriesRegistry.class, master),
|
internalCluster().getInstance(IndicesQueriesRegistry.class, master),
|
||||||
internalCluster().getInstance(AggregatorParsers.class, master),
|
internalCluster().getInstance(AggregatorParsers.class, master),
|
||||||
internalCluster().getInstance(Suggesters.class, master)
|
internalCluster().getInstance(Suggesters.class, master)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ScriptServiceProxy scriptService() {
|
protected ScriptService scriptService() {
|
||||||
return ScriptServiceProxy.of(internalCluster().getInstance(ScriptService.class));
|
return internalCluster().getInstance(ScriptService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, Object> doc(String date, String value) {
|
private static Map<String, Object> doc(String date, String value) {
|
||||||
|
@ -551,7 +550,7 @@ public class SearchTransformIT extends ESIntegTestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ScriptContext.Plugin getCustomScriptContexts() {
|
public ScriptContext.Plugin getCustomScriptContexts() {
|
||||||
return ScriptServiceProxy.INSTANCE;
|
return WatcherScript.CTX_PLUGIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,37 +6,31 @@
|
||||||
package org.elasticsearch.smoketest;
|
package org.elasticsearch.smoketest;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.io.JsonStringEncoder;
|
import com.fasterxml.jackson.core.io.JsonStringEncoder;
|
||||||
import org.elasticsearch.cluster.ClusterName;
|
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
|
||||||
import org.elasticsearch.common.Nullable;
|
import org.elasticsearch.common.Nullable;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.script.ScriptContextRegistry;
|
import org.elasticsearch.script.ScriptContextRegistry;
|
||||||
import org.elasticsearch.script.ScriptEngineRegistry;
|
import org.elasticsearch.script.ScriptEngineRegistry;
|
||||||
import org.elasticsearch.script.ScriptEngineService;
|
|
||||||
import org.elasticsearch.script.ScriptService;
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.script.ScriptSettings;
|
import org.elasticsearch.script.ScriptSettings;
|
||||||
import org.elasticsearch.script.mustache.MustacheScriptEngineService;
|
import org.elasticsearch.script.mustache.MustacheScriptEngineService;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.common.text.DefaultTextTemplateEngine;
|
import org.elasticsearch.xpack.common.text.DefaultTextTemplateEngine;
|
||||||
import org.elasticsearch.xpack.common.text.TextTemplate;
|
import org.elasticsearch.xpack.common.text.TextTemplate;
|
||||||
import org.elasticsearch.xpack.common.text.TextTemplateEngine;
|
import org.elasticsearch.xpack.common.text.TextTemplateEngine;
|
||||||
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.hamcrest.Matchers.notNullValue;
|
import static org.hamcrest.Matchers.notNullValue;
|
||||||
|
@ -50,7 +44,7 @@ public class WatcherTemplateTests extends ESTestCase {
|
||||||
Settings setting = Settings.builder().put(ScriptService.SCRIPT_AUTO_RELOAD_ENABLED_SETTING, true).build();
|
Settings setting = Settings.builder().put(ScriptService.SCRIPT_AUTO_RELOAD_ENABLED_SETTING, true).build();
|
||||||
Environment environment = Mockito.mock(Environment.class);
|
Environment environment = Mockito.mock(Environment.class);
|
||||||
ResourceWatcherService resourceWatcherService = Mockito.mock(ResourceWatcherService.class);
|
ResourceWatcherService resourceWatcherService = Mockito.mock(ResourceWatcherService.class);
|
||||||
ScriptContextRegistry registry = new ScriptContextRegistry(Collections.singletonList(ScriptServiceProxy.INSTANCE));
|
ScriptContextRegistry registry = new ScriptContextRegistry(Collections.singletonList(WatcherScript.CTX_PLUGIN));
|
||||||
|
|
||||||
ScriptEngineRegistry scriptEngineRegistry = new ScriptEngineRegistry(
|
ScriptEngineRegistry scriptEngineRegistry = new ScriptEngineRegistry(
|
||||||
Collections.singleton(new MustacheScriptEngineService(setting))
|
Collections.singleton(new MustacheScriptEngineService(setting))
|
||||||
|
@ -58,7 +52,7 @@ public class WatcherTemplateTests extends ESTestCase {
|
||||||
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, registry);
|
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, registry);
|
||||||
ScriptService scriptService = new ScriptService(setting, environment, resourceWatcherService, scriptEngineRegistry,
|
ScriptService scriptService = new ScriptService(setting, environment, resourceWatcherService, scriptEngineRegistry,
|
||||||
registry, scriptSettings);
|
registry, scriptSettings);
|
||||||
engine = new DefaultTextTemplateEngine(Settings.EMPTY, ScriptServiceProxy.of(scriptService));
|
engine = new DefaultTextTemplateEngine(Settings.EMPTY, scriptService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testEscaping() throws Exception {
|
public void testEscaping() throws Exception {
|
||||||
|
|
|
@ -36,7 +36,6 @@ import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.index.IndexModule;
|
import org.elasticsearch.index.IndexModule;
|
||||||
import org.elasticsearch.license.plugin.Licensing;
|
import org.elasticsearch.license.plugin.Licensing;
|
||||||
import org.elasticsearch.license.plugin.core.LicensesService;
|
|
||||||
import org.elasticsearch.plugins.ActionPlugin;
|
import org.elasticsearch.plugins.ActionPlugin;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.ScriptPlugin;
|
import org.elasticsearch.plugins.ScriptPlugin;
|
||||||
|
@ -49,7 +48,6 @@ import org.elasticsearch.xpack.action.TransportXPackInfoAction;
|
||||||
import org.elasticsearch.xpack.action.TransportXPackUsageAction;
|
import org.elasticsearch.xpack.action.TransportXPackUsageAction;
|
||||||
import org.elasticsearch.xpack.action.XPackInfoAction;
|
import org.elasticsearch.xpack.action.XPackInfoAction;
|
||||||
import org.elasticsearch.xpack.action.XPackUsageAction;
|
import org.elasticsearch.xpack.action.XPackUsageAction;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.common.http.HttpClient;
|
import org.elasticsearch.xpack.common.http.HttpClient;
|
||||||
import org.elasticsearch.xpack.common.http.HttpRequestTemplate;
|
import org.elasticsearch.xpack.common.http.HttpRequestTemplate;
|
||||||
import org.elasticsearch.xpack.common.http.auth.HttpAuthFactory;
|
import org.elasticsearch.xpack.common.http.auth.HttpAuthFactory;
|
||||||
|
@ -75,6 +73,7 @@ import org.elasticsearch.xpack.security.authc.support.UsernamePasswordToken;
|
||||||
import org.elasticsearch.xpack.support.clock.Clock;
|
import org.elasticsearch.xpack.support.clock.Clock;
|
||||||
import org.elasticsearch.xpack.support.clock.SystemClock;
|
import org.elasticsearch.xpack.support.clock.SystemClock;
|
||||||
import org.elasticsearch.xpack.watcher.Watcher;
|
import org.elasticsearch.xpack.watcher.Watcher;
|
||||||
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
|
|
||||||
public class XPackPlugin extends Plugin implements ScriptPlugin, ActionPlugin {
|
public class XPackPlugin extends Plugin implements ScriptPlugin, ActionPlugin {
|
||||||
|
|
||||||
|
@ -231,7 +230,7 @@ public class XPackPlugin extends Plugin implements ScriptPlugin, ActionPlugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ScriptContext.Plugin getCustomScriptContexts() {
|
public ScriptContext.Plugin getCustomScriptContexts() {
|
||||||
return ScriptServiceProxy.INSTANCE;
|
return WatcherScript.CTX_PLUGIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,68 +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.xpack.common;
|
|
||||||
|
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
|
||||||
import org.elasticsearch.common.inject.Inject;
|
|
||||||
import org.elasticsearch.script.CompiledScript;
|
|
||||||
import org.elasticsearch.script.ExecutableScript;
|
|
||||||
import org.elasticsearch.script.ScriptContext;
|
|
||||||
import org.elasticsearch.script.ScriptService;
|
|
||||||
import org.elasticsearch.xpack.security.SecurityContext;
|
|
||||||
import org.elasticsearch.xpack.security.user.XPackUser;
|
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static java.util.Collections.emptyMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps {@link ScriptService} but ensure that all scripts are run or compiled as {@link XPackUser}.
|
|
||||||
*/
|
|
||||||
public class ScriptServiceProxy {
|
|
||||||
|
|
||||||
private final ScriptService service;
|
|
||||||
private final SecurityContext securityContext;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public ScriptServiceProxy(ScriptService service, SecurityContext securityContext) {
|
|
||||||
this.service = service;
|
|
||||||
this.securityContext = securityContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompiledScript compile(Script script) {
|
|
||||||
return compile(new org.elasticsearch.script.Script(script.script(), script.type(), script.lang(), script.params()), emptyMap());
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompiledScript compile(org.elasticsearch.script.Script script, Map<String, String> compileParams) {
|
|
||||||
return securityContext.executeAs(XPackUser.INSTANCE, () ->
|
|
||||||
service.compile(script, WatcherScriptContext.CTX, compileParams));
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecutableScript executable(CompiledScript compiledScript, Map<String, Object> vars) {
|
|
||||||
return securityContext.executeAs(XPackUser.INSTANCE, () ->
|
|
||||||
service.executable(compiledScript, vars));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final ScriptContext.Plugin INSTANCE = new ScriptContext.Plugin("xpack", "watch");
|
|
||||||
|
|
||||||
private static class WatcherScriptContext implements ScriptContext {
|
|
||||||
|
|
||||||
public static final ScriptContext CTX = new WatcherScriptContext();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getKey() {
|
|
||||||
return INSTANCE.getKey();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Factory helper method for testing.
|
|
||||||
*/
|
|
||||||
public static ScriptServiceProxy of(ScriptService service) {
|
|
||||||
return new ScriptServiceProxy(service, SecurityContext.Insecure.INSTANCE);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -13,7 +13,8 @@ import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.script.CompiledScript;
|
import org.elasticsearch.script.CompiledScript;
|
||||||
import org.elasticsearch.script.ExecutableScript;
|
import org.elasticsearch.script.ExecutableScript;
|
||||||
import org.elasticsearch.script.Script;
|
import org.elasticsearch.script.Script;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
import org.elasticsearch.script.ScriptService;
|
||||||
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -21,10 +22,10 @@ import java.util.Map;
|
||||||
|
|
||||||
public class DefaultTextTemplateEngine extends AbstractComponent implements TextTemplateEngine {
|
public class DefaultTextTemplateEngine extends AbstractComponent implements TextTemplateEngine {
|
||||||
|
|
||||||
private final ScriptServiceProxy service;
|
private final ScriptService service;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DefaultTextTemplateEngine(Settings settings, ScriptServiceProxy service) {
|
public DefaultTextTemplateEngine(Settings settings, ScriptService service) {
|
||||||
super(settings);
|
super(settings);
|
||||||
this.service = service;
|
this.service = service;
|
||||||
}
|
}
|
||||||
|
@ -39,7 +40,7 @@ public class DefaultTextTemplateEngine extends AbstractComponent implements Text
|
||||||
Map<String, String> compileParams = compileParams(contentType);
|
Map<String, String> compileParams = compileParams(contentType);
|
||||||
template = trimContentType(template);
|
template = trimContentType(template);
|
||||||
|
|
||||||
CompiledScript compiledScript = service.compile(convert(template, model), compileParams);
|
CompiledScript compiledScript = service.compile(convert(template, model), WatcherScript.CTX, compileParams);
|
||||||
ExecutableScript executable = service.executable(compiledScript, model);
|
ExecutableScript executable = service.executable(compiledScript, model);
|
||||||
Object result = executable.run();
|
Object result = executable.run();
|
||||||
if (result instanceof BytesReference) {
|
if (result instanceof BytesReference) {
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
package org.elasticsearch.xpack.common.text;
|
package org.elasticsearch.xpack.common.text;
|
||||||
|
|
||||||
import org.elasticsearch.common.inject.AbstractModule;
|
import org.elasticsearch.common.inject.AbstractModule;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -15,7 +14,6 @@ public class TextTemplateModule extends AbstractModule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(ScriptServiceProxy.class).asEagerSingleton();
|
|
||||||
bind(DefaultTextTemplateEngine.class).asEagerSingleton();
|
bind(DefaultTextTemplateEngine.class).asEagerSingleton();
|
||||||
bind(TextTemplateEngine.class).to(DefaultTextTemplateEngine.class);
|
bind(TextTemplateEngine.class).to(DefaultTextTemplateEngine.class);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,11 @@ import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.common.xcontent.json.JsonXContent;
|
import org.elasticsearch.common.xcontent.json.JsonXContent;
|
||||||
import org.elasticsearch.script.CompiledScript;
|
import org.elasticsearch.script.CompiledScript;
|
||||||
import org.elasticsearch.script.ExecutableScript;
|
import org.elasticsearch.script.ExecutableScript;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.script.ScriptService.ScriptType;
|
import org.elasticsearch.script.ScriptService.ScriptType;
|
||||||
import org.elasticsearch.script.Script;
|
import org.elasticsearch.script.Script;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -37,16 +38,16 @@ import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
public class TextTemplateTests extends ESTestCase {
|
public class TextTemplateTests extends ESTestCase {
|
||||||
|
|
||||||
private ScriptServiceProxy proxy;
|
private ScriptService service;
|
||||||
private TextTemplateEngine engine;
|
private TextTemplateEngine engine;
|
||||||
private ExecutableScript script;
|
private ExecutableScript script;
|
||||||
private final String lang = "mustache";
|
private final String lang = "mustache";
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
proxy = mock(ScriptServiceProxy.class);
|
service = mock(ScriptService.class);
|
||||||
script = mock(ExecutableScript.class);
|
script = mock(ExecutableScript.class);
|
||||||
engine = new DefaultTextTemplateEngine(Settings.EMPTY, proxy);
|
engine = new DefaultTextTemplateEngine(Settings.EMPTY, service);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRender() throws Exception {
|
public void testRender() throws Exception {
|
||||||
|
@ -59,9 +60,9 @@ public class TextTemplateTests extends ESTestCase {
|
||||||
ScriptType type = randomFrom(ScriptType.values());
|
ScriptType type = randomFrom(ScriptType.values());
|
||||||
|
|
||||||
CompiledScript compiledScript = mock(CompiledScript.class);
|
CompiledScript compiledScript = mock(CompiledScript.class);
|
||||||
when(proxy.compile(new Script(templateText, type, lang, merged), Collections.singletonMap("content_type", "text/plain")))
|
when(service.compile(new Script(templateText, type, lang, merged), WatcherScript.CTX,
|
||||||
.thenReturn(compiledScript);
|
Collections.singletonMap("content_type", "text/plain"))).thenReturn(compiledScript);
|
||||||
when(proxy.executable(compiledScript, model)).thenReturn(script);
|
when(service.executable(compiledScript, model)).thenReturn(script);
|
||||||
when(script.run()).thenReturn("rendered_text");
|
when(script.run()).thenReturn("rendered_text");
|
||||||
|
|
||||||
TextTemplate template = templateBuilder(type, templateText).params(params).build();
|
TextTemplate template = templateBuilder(type, templateText).params(params).build();
|
||||||
|
@ -75,10 +76,9 @@ public class TextTemplateTests extends ESTestCase {
|
||||||
ScriptType scriptType = randomFrom(ScriptType.values());
|
ScriptType scriptType = randomFrom(ScriptType.values());
|
||||||
|
|
||||||
CompiledScript compiledScript = mock(CompiledScript.class);
|
CompiledScript compiledScript = mock(CompiledScript.class);
|
||||||
when(proxy.compile(new Script(templateText, scriptType, lang, model),
|
when(service.compile(new Script(templateText, scriptType, lang, model), WatcherScript.CTX,
|
||||||
Collections.singletonMap("content_type", "text/plain")))
|
Collections.singletonMap("content_type", "text/plain"))).thenReturn(compiledScript);
|
||||||
.thenReturn(compiledScript);
|
when(service.executable(compiledScript, model)).thenReturn(script);
|
||||||
when(proxy.executable(compiledScript, model)).thenReturn(script);
|
|
||||||
when(script.run()).thenReturn("rendered_text");
|
when(script.run()).thenReturn("rendered_text");
|
||||||
|
|
||||||
TextTemplate template = templateBuilder(scriptType, templateText).params(params).build();
|
TextTemplate template = templateBuilder(scriptType, templateText).params(params).build();
|
||||||
|
@ -90,10 +90,9 @@ public class TextTemplateTests extends ESTestCase {
|
||||||
Map<String, Object> model = singletonMap("key", "model_val");
|
Map<String, Object> model = singletonMap("key", "model_val");
|
||||||
|
|
||||||
CompiledScript compiledScript = mock(CompiledScript.class);
|
CompiledScript compiledScript = mock(CompiledScript.class);
|
||||||
when(proxy.compile(new Script(templateText, ScriptType.INLINE, lang, model),
|
when(service.compile(new Script(templateText, ScriptType.INLINE, lang, model), WatcherScript.CTX,
|
||||||
Collections.singletonMap("content_type", "text/plain")))
|
Collections.singletonMap("content_type", "text/plain"))).thenReturn(compiledScript);
|
||||||
.thenReturn(compiledScript);
|
when(service.executable(compiledScript, model)).thenReturn(script);
|
||||||
when(proxy.executable(compiledScript, model)).thenReturn(script);
|
|
||||||
when(script.run()).thenReturn("rendered_text");
|
when(script.run()).thenReturn("rendered_text");
|
||||||
|
|
||||||
TextTemplate template = new TextTemplate(templateText);
|
TextTemplate template = new TextTemplate(templateText);
|
||||||
|
|
|
@ -10,7 +10,7 @@ import org.elasticsearch.xpack.watcher.condition.compare.CompareCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.compare.array.ArrayCompareCondition;
|
import org.elasticsearch.xpack.watcher.condition.compare.array.ArrayCompareCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.never.NeverCondition;
|
import org.elasticsearch.xpack.watcher.condition.never.NeverCondition;
|
||||||
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
import org.elasticsearch.xpack.watcher.condition.script.ScriptCondition;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -29,14 +29,14 @@ public final class ConditionBuilders {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptCondition.Builder scriptCondition(String script) {
|
public static ScriptCondition.Builder scriptCondition(String script) {
|
||||||
return scriptCondition(Script.inline(script));
|
return scriptCondition(WatcherScript.inline(script));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptCondition.Builder scriptCondition(Script.Builder script) {
|
public static ScriptCondition.Builder scriptCondition(WatcherScript.Builder script) {
|
||||||
return scriptCondition(script.build());
|
return scriptCondition(script.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptCondition.Builder scriptCondition(Script script) {
|
public static ScriptCondition.Builder scriptCondition(WatcherScript script) {
|
||||||
return ScriptCondition.builder(script);
|
return ScriptCondition.builder(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,14 @@ package org.elasticsearch.xpack.watcher.condition.script;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.script.CompiledScript;
|
import org.elasticsearch.script.CompiledScript;
|
||||||
import org.elasticsearch.script.ExecutableScript;
|
import org.elasticsearch.script.ExecutableScript;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
import org.elasticsearch.script.Script;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.xpack.watcher.condition.ExecutableCondition;
|
import org.elasticsearch.xpack.watcher.condition.ExecutableCondition;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Variables;
|
import org.elasticsearch.xpack.watcher.support.Variables;
|
||||||
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.elasticsearch.xpack.watcher.support.Exceptions.invalidScript;
|
import static org.elasticsearch.xpack.watcher.support.Exceptions.invalidScript;
|
||||||
|
@ -22,14 +25,16 @@ import static org.elasticsearch.xpack.watcher.support.Exceptions.invalidScript;
|
||||||
*/
|
*/
|
||||||
public class ExecutableScriptCondition extends ExecutableCondition<ScriptCondition, ScriptCondition.Result> {
|
public class ExecutableScriptCondition extends ExecutableCondition<ScriptCondition, ScriptCondition.Result> {
|
||||||
|
|
||||||
private final ScriptServiceProxy scriptService;
|
private final ScriptService scriptService;
|
||||||
private final CompiledScript compiledScript;
|
private final CompiledScript compiledScript;
|
||||||
|
|
||||||
public ExecutableScriptCondition(ScriptCondition condition, ESLogger logger, ScriptServiceProxy scriptService) {
|
public ExecutableScriptCondition(ScriptCondition condition, ESLogger logger, ScriptService scriptService) {
|
||||||
super(condition, logger);
|
super(condition, logger);
|
||||||
this.scriptService = scriptService;
|
this.scriptService = scriptService;
|
||||||
try {
|
try {
|
||||||
compiledScript = scriptService.compile(condition.script);
|
Script script = new Script(condition.script.script(), condition.script.type(),
|
||||||
|
condition.script.lang(), condition.script.params());
|
||||||
|
compiledScript = scriptService.compile(script, WatcherScript.CTX, Collections.emptyMap());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw invalidScript("failed to compile script [{}] with lang [{}] of type [{}]", e, condition.script.script(),
|
throw invalidScript("failed to compile script [{}] with lang [{}] of type [{}]", e, condition.script.script(),
|
||||||
condition.script.lang(), condition.script.type(), e);
|
condition.script.lang(), condition.script.type(), e);
|
||||||
|
|
|
@ -9,7 +9,7 @@ import org.elasticsearch.ElasticsearchParseException;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.xpack.watcher.condition.Condition;
|
import org.elasticsearch.xpack.watcher.condition.Condition;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@ public class ScriptCondition implements Condition {
|
||||||
|
|
||||||
public static final String TYPE = "script";
|
public static final String TYPE = "script";
|
||||||
|
|
||||||
final Script script;
|
final WatcherScript script;
|
||||||
|
|
||||||
public ScriptCondition(Script script) {
|
public ScriptCondition(WatcherScript script) {
|
||||||
this.script = script;
|
this.script = script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ public class ScriptCondition implements Condition {
|
||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Script getScript() {
|
public WatcherScript getScript() {
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ public class ScriptCondition implements Condition {
|
||||||
|
|
||||||
public static ScriptCondition parse(String watchId, XContentParser parser) throws IOException {
|
public static ScriptCondition parse(String watchId, XContentParser parser) throws IOException {
|
||||||
try {
|
try {
|
||||||
Script script = Script.parse(parser);
|
WatcherScript script = WatcherScript.parse(parser);
|
||||||
return new ScriptCondition(script);
|
return new ScriptCondition(script);
|
||||||
} catch (ElasticsearchParseException pe) {
|
} catch (ElasticsearchParseException pe) {
|
||||||
throw new ElasticsearchParseException("could not parse [{}] condition for watch [{}]. failed to parse script", pe, TYPE,
|
throw new ElasticsearchParseException("could not parse [{}] condition for watch [{}]. failed to parse script", pe, TYPE,
|
||||||
|
@ -65,7 +65,7 @@ public class ScriptCondition implements Condition {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder builder(Script script) {
|
public static Builder builder(WatcherScript script) {
|
||||||
return new Builder(script);
|
return new Builder(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,9 +86,9 @@ public class ScriptCondition implements Condition {
|
||||||
|
|
||||||
public static class Builder implements Condition.Builder<ScriptCondition> {
|
public static class Builder implements Condition.Builder<ScriptCondition> {
|
||||||
|
|
||||||
private final Script script;
|
private final WatcherScript script;
|
||||||
|
|
||||||
private Builder(Script script) {
|
private Builder(WatcherScript script) {
|
||||||
this.script = script;
|
this.script = script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
import org.elasticsearch.common.logging.Loggers;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.xpack.watcher.condition.ConditionFactory;
|
import org.elasticsearch.xpack.watcher.condition.ConditionFactory;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -19,10 +19,10 @@ import java.io.IOException;
|
||||||
*/
|
*/
|
||||||
public class ScriptConditionFactory extends ConditionFactory<ScriptCondition, ScriptCondition.Result, ExecutableScriptCondition> {
|
public class ScriptConditionFactory extends ConditionFactory<ScriptCondition, ScriptCondition.Result, ExecutableScriptCondition> {
|
||||||
|
|
||||||
private final ScriptServiceProxy scriptService;
|
private final ScriptService scriptService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ScriptConditionFactory(Settings settings, ScriptServiceProxy service) {
|
public ScriptConditionFactory(Settings settings, ScriptService service) {
|
||||||
super(Loggers.getLogger(ExecutableScriptCondition.class, settings));
|
super(Loggers.getLogger(ExecutableScriptCondition.class, settings));
|
||||||
scriptService = service;
|
scriptService = service;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,9 @@ import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.query.QueryParseContext;
|
import org.elasticsearch.index.query.QueryParseContext;
|
||||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
||||||
import org.elasticsearch.search.suggest.Suggesters;
|
import org.elasticsearch.search.suggest.Suggesters;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.security.InternalClient;
|
import org.elasticsearch.xpack.security.InternalClient;
|
||||||
import org.elasticsearch.xpack.watcher.input.InputFactory;
|
import org.elasticsearch.xpack.watcher.input.InputFactory;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
||||||
|
@ -39,12 +39,12 @@ public class SearchInputFactory extends InputFactory<SearchInput, SearchInput.Re
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public SearchInputFactory(Settings settings, InternalClient client, IndicesQueriesRegistry queryRegistry,
|
public SearchInputFactory(Settings settings, InternalClient client, IndicesQueriesRegistry queryRegistry,
|
||||||
AggregatorParsers aggParsers, Suggesters suggesters, ScriptServiceProxy scriptService) {
|
AggregatorParsers aggParsers, Suggesters suggesters, ScriptService scriptService) {
|
||||||
this(settings, new WatcherClientProxy(settings, client), queryRegistry, aggParsers, suggesters, scriptService);
|
this(settings, new WatcherClientProxy(settings, client), queryRegistry, aggParsers, suggesters, scriptService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SearchInputFactory(Settings settings, WatcherClientProxy client, IndicesQueriesRegistry queryRegistry,
|
public SearchInputFactory(Settings settings, WatcherClientProxy client, IndicesQueriesRegistry queryRegistry,
|
||||||
AggregatorParsers aggParsers, Suggesters suggesters, ScriptServiceProxy scriptService) {
|
AggregatorParsers aggParsers, Suggesters suggesters, ScriptService scriptService) {
|
||||||
super(Loggers.getLogger(ExecutableSimpleInput.class, settings));
|
super(Loggers.getLogger(ExecutableSimpleInput.class, settings));
|
||||||
this.parseFieldMatcher = new ParseFieldMatcher(settings);
|
this.parseFieldMatcher = new ParseFieldMatcher(settings);
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
|
|
@ -12,6 +12,8 @@ import org.elasticsearch.common.ParseFieldMatcher;
|
||||||
import org.elasticsearch.common.xcontent.ToXContent;
|
import org.elasticsearch.common.xcontent.ToXContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
|
import org.elasticsearch.script.Script;
|
||||||
|
import org.elasticsearch.script.ScriptContext;
|
||||||
import org.elasticsearch.script.ScriptService.ScriptType;
|
import org.elasticsearch.script.ScriptService.ScriptType;
|
||||||
import org.elasticsearch.script.ScriptSettings;
|
import org.elasticsearch.script.ScriptSettings;
|
||||||
|
|
||||||
|
@ -22,20 +24,22 @@ import java.util.Map;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Script implements ToXContent {
|
public class WatcherScript implements ToXContent {
|
||||||
|
|
||||||
public static final String DEFAULT_LANG = ScriptSettings.DEFAULT_LANG;
|
public static final String DEFAULT_LANG = ScriptSettings.DEFAULT_LANG;
|
||||||
|
public static final ScriptContext.Plugin CTX_PLUGIN = new ScriptContext.Plugin("xpack", "watch");
|
||||||
|
public static final ScriptContext CTX = new WatcherScriptContext();
|
||||||
|
|
||||||
private final String script;
|
private final String script;
|
||||||
@Nullable private final ScriptType type;
|
@Nullable private final ScriptType type;
|
||||||
@Nullable private final String lang;
|
@Nullable private final String lang;
|
||||||
@Nullable private final Map<String, Object> params;
|
@Nullable private final Map<String, Object> params;
|
||||||
|
|
||||||
Script(String script) {
|
WatcherScript(String script) {
|
||||||
this(script, null, null, null);
|
this(script, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
Script(String script, @Nullable ScriptType type, @Nullable String lang, @Nullable Map<String, Object> params) {
|
WatcherScript(String script, @Nullable ScriptType type, @Nullable String lang, @Nullable Map<String, Object> params) {
|
||||||
this.script = script;
|
this.script = script;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.lang = lang;
|
this.lang = lang;
|
||||||
|
@ -58,12 +62,16 @@ public class Script implements ToXContent {
|
||||||
return params != null ? params : Collections.emptyMap();
|
return params != null ? params : Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Script toScript() {
|
||||||
|
return new Script(script(), type(), lang(), params());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
Script script1 = (Script) o;
|
WatcherScript script1 = (WatcherScript) o;
|
||||||
|
|
||||||
if (!script.equals(script1.script)) return false;
|
if (!script.equals(script1.script)) return false;
|
||||||
if (type != script1.type) return false;
|
if (type != script1.type) return false;
|
||||||
|
@ -106,10 +114,10 @@ public class Script implements ToXContent {
|
||||||
return builder.endObject();
|
return builder.endObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Script parse(XContentParser parser) throws IOException {
|
public static WatcherScript parse(XContentParser parser) throws IOException {
|
||||||
XContentParser.Token token = parser.currentToken();
|
XContentParser.Token token = parser.currentToken();
|
||||||
if (token == XContentParser.Token.VALUE_STRING) {
|
if (token == XContentParser.Token.VALUE_STRING) {
|
||||||
return new Script(parser.text());
|
return new WatcherScript(parser.text());
|
||||||
}
|
}
|
||||||
if (token != XContentParser.Token.START_OBJECT) {
|
if (token != XContentParser.Token.START_OBJECT) {
|
||||||
throw new ElasticsearchParseException("expected a string value or an object, but found [{}] instead", token);
|
throw new ElasticsearchParseException("expected a string value or an object, but found [{}] instead", token);
|
||||||
|
@ -170,7 +178,7 @@ public class Script implements ToXContent {
|
||||||
Field.INLINE.getPreferredName(), Field.FILE.getPreferredName(), Field.ID.getPreferredName());
|
Field.INLINE.getPreferredName(), Field.FILE.getPreferredName(), Field.ID.getPreferredName());
|
||||||
}
|
}
|
||||||
assert type != null : "if script is not null, type should definitely not be null";
|
assert type != null : "if script is not null, type should definitely not be null";
|
||||||
return new Script(script, type, lang, params);
|
return new WatcherScript(script, type, lang, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder.Inline inline(String script) {
|
public static Builder.Inline inline(String script) {
|
||||||
|
@ -211,7 +219,7 @@ public class Script implements ToXContent {
|
||||||
return (B) this;
|
return (B) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract Script build();
|
public abstract WatcherScript build();
|
||||||
|
|
||||||
public static class Inline extends Builder<Inline> {
|
public static class Inline extends Builder<Inline> {
|
||||||
|
|
||||||
|
@ -220,8 +228,8 @@ public class Script implements ToXContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Script build() {
|
public WatcherScript build() {
|
||||||
return new Script(script, type, lang, params);
|
return new WatcherScript(script, type, lang, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,8 +240,8 @@ public class Script implements ToXContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Script build() {
|
public WatcherScript build() {
|
||||||
return new Script(script, type, lang, params);
|
return new WatcherScript(script, type, lang, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,8 +252,8 @@ public class Script implements ToXContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Script build() {
|
public WatcherScript build() {
|
||||||
return new Script(script, type, lang, params);
|
return new WatcherScript(script, type, lang, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,8 +264,8 @@ public class Script implements ToXContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Script build() {
|
public WatcherScript build() {
|
||||||
return new Script(script, type, lang, params);
|
return new WatcherScript(script, type, lang, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -271,4 +279,10 @@ public class Script implements ToXContent {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class WatcherScriptContext implements ScriptContext {
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return CTX_PLUGIN.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -20,7 +20,7 @@ import org.elasticsearch.index.query.QueryParseContext;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
||||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||||
import org.elasticsearch.search.suggest.Suggesters;
|
import org.elasticsearch.search.suggest.Suggesters;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.SearchRequestEquivalence;
|
import org.elasticsearch.xpack.watcher.support.SearchRequestEquivalence;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -36,9 +36,9 @@ import java.util.Objects;
|
||||||
public class WatcherSearchTemplateRequest implements ToXContent {
|
public class WatcherSearchTemplateRequest implements ToXContent {
|
||||||
|
|
||||||
private final SearchRequest request;
|
private final SearchRequest request;
|
||||||
@Nullable private final Script template;
|
@Nullable private final WatcherScript template;
|
||||||
|
|
||||||
public WatcherSearchTemplateRequest(SearchRequest searchRequest, @Nullable Script template) {
|
public WatcherSearchTemplateRequest(SearchRequest searchRequest, @Nullable WatcherScript template) {
|
||||||
this.request = Objects.requireNonNull(searchRequest);
|
this.request = Objects.requireNonNull(searchRequest);
|
||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ public class WatcherSearchTemplateRequest implements ToXContent {
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Script getTemplate() {
|
public WatcherScript getTemplate() {
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ public class WatcherSearchTemplateRequest implements ToXContent {
|
||||||
throws IOException {
|
throws IOException {
|
||||||
IndicesOptions indicesOptions = DEFAULT_INDICES_OPTIONS;
|
IndicesOptions indicesOptions = DEFAULT_INDICES_OPTIONS;
|
||||||
SearchRequest searchRequest = new SearchRequest();
|
SearchRequest searchRequest = new SearchRequest();
|
||||||
Script template = null;
|
WatcherScript template = null;
|
||||||
|
|
||||||
XContentParser.Token token;
|
XContentParser.Token token;
|
||||||
String currentFieldName = null;
|
String currentFieldName = null;
|
||||||
|
@ -190,7 +190,7 @@ public class WatcherSearchTemplateRequest implements ToXContent {
|
||||||
indicesOptions = IndicesOptions.fromOptions(ignoreUnavailable, allowNoIndices, expandOpen, expandClosed,
|
indicesOptions = IndicesOptions.fromOptions(ignoreUnavailable, allowNoIndices, expandOpen, expandClosed,
|
||||||
DEFAULT_INDICES_OPTIONS);
|
DEFAULT_INDICES_OPTIONS);
|
||||||
} else if (ParseFieldMatcher.STRICT.match(currentFieldName, TEMPLATE_FIELD)) {
|
} else if (ParseFieldMatcher.STRICT.match(currentFieldName, TEMPLATE_FIELD)) {
|
||||||
template = Script.parse(parser);
|
template = WatcherScript.parse(parser);
|
||||||
} else {
|
} else {
|
||||||
throw new ElasticsearchParseException("could not read search request. unexpected object field [" +
|
throw new ElasticsearchParseException("could not read search request. unexpected object field [" +
|
||||||
currentFieldName + "]");
|
currentFieldName + "]");
|
||||||
|
|
|
@ -17,17 +17,18 @@ import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.query.QueryParseContext;
|
import org.elasticsearch.index.query.QueryParseContext;
|
||||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||||
|
import org.elasticsearch.script.CompiledScript;
|
||||||
import org.elasticsearch.script.ScriptService;
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
||||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||||
import org.elasticsearch.search.suggest.Suggesters;
|
import org.elasticsearch.search.suggest.Suggesters;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.Variables;
|
import org.elasticsearch.xpack.watcher.support.Variables;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||||
|
@ -39,17 +40,17 @@ public class WatcherSearchTemplateService extends AbstractComponent {
|
||||||
|
|
||||||
private static final String DEFAULT_LANG = "mustache";
|
private static final String DEFAULT_LANG = "mustache";
|
||||||
|
|
||||||
private final ScriptServiceProxy scriptService;
|
private final ScriptService scriptService;
|
||||||
private final ParseFieldMatcher parseFieldMatcher;
|
private final ParseFieldMatcher parseFieldMatcher;
|
||||||
private final IndicesQueriesRegistry queryRegistry;
|
private final IndicesQueriesRegistry queryRegistry;
|
||||||
private final AggregatorParsers aggsParsers;
|
private final AggregatorParsers aggsParsers;
|
||||||
private final Suggesters suggesters;
|
private final Suggesters suggesters;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public WatcherSearchTemplateService(Settings settings, ScriptServiceProxy scriptServiceProxy,
|
public WatcherSearchTemplateService(Settings settings, ScriptService scriptService,
|
||||||
IndicesQueriesRegistry queryRegistry, AggregatorParsers aggregatorParsers, Suggesters suggesters) {
|
IndicesQueriesRegistry queryRegistry, AggregatorParsers aggregatorParsers, Suggesters suggesters) {
|
||||||
super(settings);
|
super(settings);
|
||||||
this.scriptService = scriptServiceProxy;
|
this.scriptService = scriptService;
|
||||||
this.queryRegistry = queryRegistry;
|
this.queryRegistry = queryRegistry;
|
||||||
this.aggsParsers = aggregatorParsers;
|
this.aggsParsers = aggregatorParsers;
|
||||||
this.suggesters = suggesters;
|
this.suggesters = suggesters;
|
||||||
|
@ -65,7 +66,7 @@ public class WatcherSearchTemplateService extends AbstractComponent {
|
||||||
.indices(prototype.getRequest().indices())
|
.indices(prototype.getRequest().indices())
|
||||||
.types(prototype.getRequest().types());
|
.types(prototype.getRequest().types());
|
||||||
|
|
||||||
Script template = null;
|
WatcherScript template = null;
|
||||||
|
|
||||||
// Due the inconsistency with templates in ES 1.x, we maintain our own template format.
|
// Due the inconsistency with templates in ES 1.x, we maintain our own template format.
|
||||||
// This template format we use now, will become the template structure in ES 2.0
|
// This template format we use now, will become the template structure in ES 2.0
|
||||||
|
@ -76,26 +77,26 @@ public class WatcherSearchTemplateService extends AbstractComponent {
|
||||||
if (prototype.getRequest().source() != null) {
|
if (prototype.getRequest().source() != null) {
|
||||||
try (XContentBuilder builder = jsonBuilder()) {
|
try (XContentBuilder builder = jsonBuilder()) {
|
||||||
prototype.getRequest().source().toXContent(builder, ToXContent.EMPTY_PARAMS);
|
prototype.getRequest().source().toXContent(builder, ToXContent.EMPTY_PARAMS);
|
||||||
template = Script.inline(builder.string()).lang(DEFAULT_LANG).params(watcherContextParams).build();
|
template = WatcherScript.inline(builder.string()).lang(DEFAULT_LANG).params(watcherContextParams).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (prototype.getTemplate() != null) {
|
} else if (prototype.getTemplate() != null) {
|
||||||
// Here we convert watcher template into a ES core templates. Due to the different format we use, we
|
// Here we convert watcher template into a ES core templates. Due to the different format we use, we
|
||||||
// convert to the template format used in ES core
|
// convert to the template format used in ES core
|
||||||
Script templatePrototype = prototype.getTemplate();
|
WatcherScript templatePrototype = prototype.getTemplate();
|
||||||
if (templatePrototype.params() != null) {
|
if (templatePrototype.params() != null) {
|
||||||
watcherContextParams.putAll(templatePrototype.params());
|
watcherContextParams.putAll(templatePrototype.params());
|
||||||
}
|
}
|
||||||
|
|
||||||
Script.Builder builder;
|
WatcherScript.Builder builder;
|
||||||
if (templatePrototype.type() == ScriptService.ScriptType.INLINE) {
|
if (templatePrototype.type() == ScriptService.ScriptType.INLINE) {
|
||||||
builder = Script.inline(templatePrototype.script());
|
builder = WatcherScript.inline(templatePrototype.script());
|
||||||
} else if (templatePrototype.type() == ScriptService.ScriptType.FILE) {
|
} else if (templatePrototype.type() == ScriptService.ScriptType.FILE) {
|
||||||
builder = Script.file(templatePrototype.script());
|
builder = WatcherScript.file(templatePrototype.script());
|
||||||
} else if (templatePrototype.type() == ScriptService.ScriptType.STORED) {
|
} else if (templatePrototype.type() == ScriptService.ScriptType.STORED) {
|
||||||
builder = Script.indexed(templatePrototype.script());
|
builder = WatcherScript.indexed(templatePrototype.script());
|
||||||
} else {
|
} else {
|
||||||
builder = Script.defaultType(templatePrototype.script());
|
builder = WatcherScript.defaultType(templatePrototype.script());
|
||||||
}
|
}
|
||||||
template = builder.lang(templatePrototype.lang()).params(watcherContextParams).build();
|
template = builder.lang(templatePrototype.lang()).params(watcherContextParams).build();
|
||||||
}
|
}
|
||||||
|
@ -105,16 +106,16 @@ public class WatcherSearchTemplateService extends AbstractComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a {@link Script} to a {@link org.elasticsearch.search.builder.SearchSourceBuilder}
|
* Converts a {@link WatcherScript} to a {@link org.elasticsearch.search.builder.SearchSourceBuilder}
|
||||||
*/
|
*/
|
||||||
private SearchSourceBuilder convert(Script template) throws IOException {
|
private SearchSourceBuilder convert(WatcherScript template) throws IOException {
|
||||||
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
|
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
// falling back to an empty body
|
// falling back to an empty body
|
||||||
return sourceBuilder;
|
return sourceBuilder;
|
||||||
}
|
}
|
||||||
|
CompiledScript compiledScript = scriptService.compile(template.toScript(), WatcherScript.CTX, Collections.emptyMap());
|
||||||
BytesReference source = (BytesReference) scriptService.executable(scriptService.compile(template), template.params()).run();
|
BytesReference source = (BytesReference) scriptService.executable(compiledScript, template.params()).run();
|
||||||
if (source != null && source.length() > 0) {
|
if (source != null && source.length() > 0) {
|
||||||
try (XContentParser parser = XContentFactory.xContent(source).createParser(source)) {
|
try (XContentParser parser = XContentFactory.xContent(source).createParser(source)) {
|
||||||
sourceBuilder.parseXContent(new QueryParseContext(queryRegistry, parser, parseFieldMatcher), aggsParsers, suggesters);
|
sourceBuilder.parseXContent(new QueryParseContext(queryRegistry, parser, parseFieldMatcher), aggsParsers, suggesters);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
package org.elasticsearch.xpack.watcher.transform;
|
package org.elasticsearch.xpack.watcher.transform;
|
||||||
|
|
||||||
import org.elasticsearch.action.search.SearchRequest;
|
import org.elasticsearch.action.search.SearchRequest;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
||||||
import org.elasticsearch.xpack.watcher.transform.chain.ChainTransform;
|
import org.elasticsearch.xpack.watcher.transform.chain.ChainTransform;
|
||||||
import org.elasticsearch.xpack.watcher.transform.script.ScriptTransform;
|
import org.elasticsearch.xpack.watcher.transform.script.ScriptTransform;
|
||||||
|
@ -29,14 +29,14 @@ public final class TransformBuilders {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptTransform.Builder scriptTransform(String script) {
|
public static ScriptTransform.Builder scriptTransform(String script) {
|
||||||
return scriptTransform(Script.inline(script));
|
return scriptTransform(WatcherScript.inline(script));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptTransform.Builder scriptTransform(Script.Builder script) {
|
public static ScriptTransform.Builder scriptTransform(WatcherScript.Builder script) {
|
||||||
return scriptTransform(script.build());
|
return scriptTransform(script.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptTransform.Builder scriptTransform(Script script) {
|
public static ScriptTransform.Builder scriptTransform(WatcherScript script) {
|
||||||
return ScriptTransform.builder(script);
|
return ScriptTransform.builder(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,14 @@ package org.elasticsearch.xpack.watcher.transform.script;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.script.CompiledScript;
|
import org.elasticsearch.script.CompiledScript;
|
||||||
import org.elasticsearch.script.ExecutableScript;
|
import org.elasticsearch.script.ExecutableScript;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.transform.ExecutableTransform;
|
import org.elasticsearch.xpack.watcher.transform.ExecutableTransform;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -26,15 +27,15 @@ import static org.elasticsearch.xpack.watcher.support.Variables.createCtxModel;
|
||||||
*/
|
*/
|
||||||
public class ExecutableScriptTransform extends ExecutableTransform<ScriptTransform, ScriptTransform.Result> {
|
public class ExecutableScriptTransform extends ExecutableTransform<ScriptTransform, ScriptTransform.Result> {
|
||||||
|
|
||||||
private final ScriptServiceProxy scriptService;
|
private final ScriptService scriptService;
|
||||||
private final CompiledScript compiledScript;
|
private final CompiledScript compiledScript;
|
||||||
|
|
||||||
public ExecutableScriptTransform(ScriptTransform transform, ESLogger logger, ScriptServiceProxy scriptService) {
|
public ExecutableScriptTransform(ScriptTransform transform, ESLogger logger, ScriptService scriptService) {
|
||||||
super(transform, logger);
|
super(transform, logger);
|
||||||
this.scriptService = scriptService;
|
this.scriptService = scriptService;
|
||||||
Script script = transform.getScript();
|
WatcherScript script = transform.getScript();
|
||||||
try {
|
try {
|
||||||
compiledScript = scriptService.compile(script);
|
compiledScript = scriptService.compile(script.toScript(), WatcherScript.CTX, Collections.emptyMap());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw invalidScript("failed to compile script [{}] with lang [{}] of type [{}]", e, script.script(), script.lang(),
|
throw invalidScript("failed to compile script [{}] with lang [{}] of type [{}]", e, script.script(), script.lang(),
|
||||||
script.type(), e);
|
script.type(), e);
|
||||||
|
@ -53,7 +54,7 @@ public class ExecutableScriptTransform extends ExecutableTransform<ScriptTransfo
|
||||||
|
|
||||||
|
|
||||||
ScriptTransform.Result doExecute(WatchExecutionContext ctx, Payload payload) throws IOException {
|
ScriptTransform.Result doExecute(WatchExecutionContext ctx, Payload payload) throws IOException {
|
||||||
Script script = transform.getScript();
|
WatcherScript script = transform.getScript();
|
||||||
Map<String, Object> model = new HashMap<>();
|
Map<String, Object> model = new HashMap<>();
|
||||||
model.putAll(script.params());
|
model.putAll(script.params());
|
||||||
model.putAll(createCtxModel(ctx, payload));
|
model.putAll(createCtxModel(ctx, payload));
|
||||||
|
|
|
@ -8,7 +8,7 @@ package org.elasticsearch.xpack.watcher.transform.script;
|
||||||
import org.elasticsearch.ElasticsearchParseException;
|
import org.elasticsearch.ElasticsearchParseException;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.transform.Transform;
|
import org.elasticsearch.xpack.watcher.transform.Transform;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
|
|
||||||
|
@ -21,9 +21,9 @@ public class ScriptTransform implements Transform {
|
||||||
|
|
||||||
public static final String TYPE = "script";
|
public static final String TYPE = "script";
|
||||||
|
|
||||||
private final Script script;
|
private final WatcherScript script;
|
||||||
|
|
||||||
public ScriptTransform(Script script) {
|
public ScriptTransform(WatcherScript script) {
|
||||||
this.script = script;
|
this.script = script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ public class ScriptTransform implements Transform {
|
||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Script getScript() {
|
public WatcherScript getScript() {
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ public class ScriptTransform implements Transform {
|
||||||
|
|
||||||
public static ScriptTransform parse(String watchId, XContentParser parser) throws IOException {
|
public static ScriptTransform parse(String watchId, XContentParser parser) throws IOException {
|
||||||
try {
|
try {
|
||||||
Script script = Script.parse(parser);
|
WatcherScript script = WatcherScript.parse(parser);
|
||||||
return new ScriptTransform(script);
|
return new ScriptTransform(script);
|
||||||
} catch (ElasticsearchParseException pe) {
|
} catch (ElasticsearchParseException pe) {
|
||||||
throw new ElasticsearchParseException("could not parse [{}] transform for watch [{}]. failed to parse script", pe, TYPE,
|
throw new ElasticsearchParseException("could not parse [{}] transform for watch [{}]. failed to parse script", pe, TYPE,
|
||||||
|
@ -66,7 +66,7 @@ public class ScriptTransform implements Transform {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder builder(Script script) {
|
public static Builder builder(WatcherScript script) {
|
||||||
return new Builder(script);
|
return new Builder(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@ public class ScriptTransform implements Transform {
|
||||||
|
|
||||||
public static class Builder implements Transform.Builder<ScriptTransform> {
|
public static class Builder implements Transform.Builder<ScriptTransform> {
|
||||||
|
|
||||||
private final Script script;
|
private final WatcherScript script;
|
||||||
|
|
||||||
public Builder(Script script) {
|
public Builder(WatcherScript script) {
|
||||||
this.script = script;
|
this.script = script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.logging.Loggers;
|
import org.elasticsearch.common.logging.Loggers;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.xpack.watcher.transform.TransformFactory;
|
import org.elasticsearch.xpack.watcher.transform.TransformFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -19,10 +19,10 @@ import java.io.IOException;
|
||||||
*/
|
*/
|
||||||
public class ScriptTransformFactory extends TransformFactory<ScriptTransform, ScriptTransform.Result, ExecutableScriptTransform> {
|
public class ScriptTransformFactory extends TransformFactory<ScriptTransform, ScriptTransform.Result, ExecutableScriptTransform> {
|
||||||
|
|
||||||
private final ScriptServiceProxy scriptService;
|
private final ScriptService scriptService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ScriptTransformFactory(Settings settings, ScriptServiceProxy scriptService) {
|
public ScriptTransformFactory(Settings settings, ScriptService scriptService) {
|
||||||
super(Loggers.getLogger(ExecutableScriptTransform.class, settings));
|
super(Loggers.getLogger(ExecutableScriptTransform.class, settings));
|
||||||
this.scriptService = scriptService;
|
this.scriptService = scriptService;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,10 +15,10 @@ import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.query.QueryParseContext;
|
import org.elasticsearch.index.query.QueryParseContext;
|
||||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
import org.elasticsearch.search.aggregations.AggregatorParsers;
|
||||||
import org.elasticsearch.search.suggest.Suggesters;
|
import org.elasticsearch.search.suggest.Suggesters;
|
||||||
import org.elasticsearch.xpack.security.InternalClient;
|
import org.elasticsearch.xpack.security.InternalClient;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
||||||
import org.elasticsearch.xpack.watcher.transform.TransformFactory;
|
import org.elasticsearch.xpack.watcher.transform.TransformFactory;
|
||||||
|
@ -38,11 +38,11 @@ public class SearchTransformFactory extends TransformFactory<SearchTransform, Se
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public SearchTransformFactory(Settings settings, InternalClient client, IndicesQueriesRegistry queryRegistry,
|
public SearchTransformFactory(Settings settings, InternalClient client, IndicesQueriesRegistry queryRegistry,
|
||||||
AggregatorParsers aggParsers, Suggesters suggesters, ScriptServiceProxy scriptService) {
|
AggregatorParsers aggParsers, Suggesters suggesters, ScriptService scriptService) {
|
||||||
this(settings, new WatcherClientProxy(settings, client), queryRegistry, aggParsers, suggesters, scriptService);
|
this(settings, new WatcherClientProxy(settings, client), queryRegistry, aggParsers, suggesters, scriptService);
|
||||||
}
|
}
|
||||||
public SearchTransformFactory(Settings settings, WatcherClientProxy client, IndicesQueriesRegistry queryRegistry,
|
public SearchTransformFactory(Settings settings, WatcherClientProxy client, IndicesQueriesRegistry queryRegistry,
|
||||||
AggregatorParsers aggParsers, Suggesters suggesters, ScriptServiceProxy scriptService) {
|
AggregatorParsers aggParsers, Suggesters suggesters, ScriptService scriptService) {
|
||||||
super(Loggers.getLogger(ExecutableSearchTransform.class, settings));
|
super(Loggers.getLogger(ExecutableSearchTransform.class, settings));
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.parseFieldMatcher = new ParseFieldMatcher(settings);
|
this.parseFieldMatcher = new ParseFieldMatcher(settings);
|
||||||
|
|
|
@ -10,6 +10,7 @@ import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.ScriptPlugin;
|
import org.elasticsearch.plugins.ScriptPlugin;
|
||||||
import org.elasticsearch.search.lookup.SearchLookup;
|
import org.elasticsearch.search.lookup.SearchLookup;
|
||||||
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -68,8 +69,8 @@ public class SleepScriptEngine implements ScriptEngineService {
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static org.elasticsearch.xpack.watcher.support.Script sleepScript(long millis) {
|
public static WatcherScript sleepScript(long millis) {
|
||||||
return new org.elasticsearch.xpack.watcher.support.Script.Builder.Inline("")
|
return new WatcherScript.Builder.Inline("")
|
||||||
.lang("sleep")
|
.lang("sleep")
|
||||||
.params(Collections.singletonMap("millis", millis)).build();
|
.params(Collections.singletonMap("millis", millis)).build();
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ public class WatcherUtilsTests extends ESTestCase {
|
||||||
public void testSerializeSearchRequest() throws Exception {
|
public void testSerializeSearchRequest() throws Exception {
|
||||||
String[] randomIndices = generateRandomStringArray(5, 5, false);
|
String[] randomIndices = generateRandomStringArray(5, 5, false);
|
||||||
SearchRequest expectedRequest = new SearchRequest(randomIndices);
|
SearchRequest expectedRequest = new SearchRequest(randomIndices);
|
||||||
Script expectedTemplate = null;
|
WatcherScript expectedTemplate = null;
|
||||||
|
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
String[] randomTypes = generateRandomStringArray(2, 5, false);
|
String[] randomTypes = generateRandomStringArray(2, 5, false);
|
||||||
|
@ -121,7 +121,8 @@ public class WatcherUtilsTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String text = randomAsciiOfLengthBetween(1, 5);
|
String text = randomAsciiOfLengthBetween(1, 5);
|
||||||
expectedTemplate = randomFrom(Script.inline(text), Script.file(text), Script.indexed(text)).params(params).build();
|
expectedTemplate = randomFrom(WatcherScript.inline(text), WatcherScript.file(text),
|
||||||
|
WatcherScript.indexed(text)).params(params).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
WatcherSearchTemplateRequest request = new WatcherSearchTemplateRequest(expectedRequest, expectedTemplate);
|
WatcherSearchTemplateRequest request = new WatcherSearchTemplateRequest(expectedRequest, expectedTemplate);
|
||||||
|
@ -199,7 +200,7 @@ public class WatcherUtilsTests extends ESTestCase {
|
||||||
source = searchSourceBuilder.buildAsBytes(XContentType.JSON);
|
source = searchSourceBuilder.buildAsBytes(XContentType.JSON);
|
||||||
builder.rawField("body", source);
|
builder.rawField("body", source);
|
||||||
}
|
}
|
||||||
Script template = null;
|
WatcherScript template = null;
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
|
@ -209,7 +210,8 @@ public class WatcherUtilsTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String text = randomAsciiOfLengthBetween(1, 5);
|
String text = randomAsciiOfLengthBetween(1, 5);
|
||||||
template = randomFrom(Script.inline(text), Script.file(text), Script.indexed(text)) .params(params).build();
|
template = randomFrom(WatcherScript.inline(text), WatcherScript.file(text), WatcherScript.indexed(text))
|
||||||
|
.params(params).build();
|
||||||
builder.field("template", template);
|
builder.field("template", template);
|
||||||
}
|
}
|
||||||
builder.endObject();
|
builder.endObject();
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.elasticsearch.common.util.Callback;
|
||||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||||
import org.elasticsearch.common.xcontent.support.XContentMapValues;
|
import org.elasticsearch.common.xcontent.support.XContentMapValues;
|
||||||
import org.elasticsearch.index.query.QueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilder;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.xpack.monitoring.Monitoring;
|
import org.elasticsearch.xpack.monitoring.Monitoring;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.script.MockMustacheScriptEngine;
|
import org.elasticsearch.script.MockMustacheScriptEngine;
|
||||||
|
@ -51,7 +52,6 @@ import org.elasticsearch.xpack.watcher.WatcherLicensee;
|
||||||
import org.elasticsearch.xpack.watcher.support.WatcherIndexTemplateRegistry;
|
import org.elasticsearch.xpack.watcher.support.WatcherIndexTemplateRegistry;
|
||||||
import org.elasticsearch.xpack.support.clock.ClockMock;
|
import org.elasticsearch.xpack.support.clock.ClockMock;
|
||||||
import org.elasticsearch.xpack.common.http.HttpClient;
|
import org.elasticsearch.xpack.common.http.HttpClient;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.support.xcontent.XContentSource;
|
import org.elasticsearch.xpack.watcher.support.xcontent.XContentSource;
|
||||||
import org.elasticsearch.xpack.watcher.trigger.ScheduleTriggerEngineMock;
|
import org.elasticsearch.xpack.watcher.trigger.ScheduleTriggerEngineMock;
|
||||||
import org.elasticsearch.xpack.watcher.trigger.TriggerService;
|
import org.elasticsearch.xpack.watcher.trigger.TriggerService;
|
||||||
|
@ -356,8 +356,8 @@ public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase
|
||||||
return randomBoolean() ? new XPackClient(client).watcher() : new WatcherClient(client);
|
return randomBoolean() ? new XPackClient(client).watcher() : new WatcherClient(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ScriptServiceProxy scriptService() {
|
protected ScriptService scriptService() {
|
||||||
return internalCluster().getInstance(ScriptServiceProxy.class);
|
return internalCluster().getInstance(ScriptService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected HttpClient watcherHttpClient() {
|
protected HttpClient watcherHttpClient() {
|
||||||
|
|
|
@ -8,11 +8,7 @@ package org.elasticsearch.xpack.watcher.test;
|
||||||
import org.elasticsearch.action.search.SearchRequest;
|
import org.elasticsearch.action.search.SearchRequest;
|
||||||
import org.elasticsearch.action.search.SearchType;
|
import org.elasticsearch.action.search.SearchType;
|
||||||
import org.elasticsearch.action.support.IndicesOptions;
|
import org.elasticsearch.action.support.IndicesOptions;
|
||||||
import org.elasticsearch.cluster.ClusterName;
|
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.bytes.BytesArray;
|
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
@ -20,7 +16,6 @@ import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.xcontent.XContent;
|
import org.elasticsearch.common.xcontent.XContent;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.script.ScriptContextRegistry;
|
import org.elasticsearch.script.ScriptContextRegistry;
|
||||||
|
@ -31,7 +26,6 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||||
import org.elasticsearch.test.ESIntegTestCase;
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.common.http.HttpClient;
|
import org.elasticsearch.xpack.common.http.HttpClient;
|
||||||
import org.elasticsearch.xpack.common.http.HttpMethod;
|
import org.elasticsearch.xpack.common.http.HttpMethod;
|
||||||
import org.elasticsearch.xpack.common.http.HttpRequestTemplate;
|
import org.elasticsearch.xpack.common.http.HttpRequestTemplate;
|
||||||
|
@ -56,6 +50,7 @@ import org.elasticsearch.xpack.watcher.execution.Wid;
|
||||||
import org.elasticsearch.xpack.watcher.input.search.ExecutableSearchInput;
|
import org.elasticsearch.xpack.watcher.input.search.ExecutableSearchInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
||||||
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
||||||
|
@ -71,11 +66,9 @@ import org.elasticsearch.xpack.watcher.watch.Watch;
|
||||||
import org.elasticsearch.xpack.watcher.watch.WatchStatus;
|
import org.elasticsearch.xpack.watcher.watch.WatchStatus;
|
||||||
import org.hamcrest.Matcher;
|
import org.hamcrest.Matcher;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.mockito.Mockito;
|
|
||||||
|
|
||||||
import javax.mail.internet.AddressException;
|
import javax.mail.internet.AddressException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -245,19 +238,19 @@ public final class WatcherTestUtils {
|
||||||
new WatchStatus(now, statuses));
|
new WatchStatus(now, statuses));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScriptServiceProxy getScriptServiceProxy(ThreadPool tp) throws Exception {
|
public static ScriptService createScriptService(ThreadPool tp) throws Exception {
|
||||||
Settings settings = Settings.builder()
|
Settings settings = Settings.builder()
|
||||||
.put("script.inline", "true")
|
.put("script.inline", "true")
|
||||||
.put("script.indexed", "true")
|
.put("script.indexed", "true")
|
||||||
.put("path.home", createTempDir())
|
.put("path.home", createTempDir())
|
||||||
.build();
|
.build();
|
||||||
ScriptContextRegistry scriptContextRegistry = new ScriptContextRegistry(Collections.singletonList(ScriptServiceProxy.INSTANCE));
|
ScriptContextRegistry scriptContextRegistry = new ScriptContextRegistry(Collections.singletonList(WatcherScript.CTX_PLUGIN));
|
||||||
|
|
||||||
ScriptEngineRegistry scriptEngineRegistry =
|
ScriptEngineRegistry scriptEngineRegistry =
|
||||||
new ScriptEngineRegistry(Collections.emptyList());
|
new ScriptEngineRegistry(Collections.emptyList());
|
||||||
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, scriptContextRegistry);
|
ScriptSettings scriptSettings = new ScriptSettings(scriptEngineRegistry, scriptContextRegistry);
|
||||||
return ScriptServiceProxy.of(new ScriptService(settings, new Environment(settings),
|
return new ScriptService(settings, new Environment(settings), new ResourceWatcherService(settings, tp),
|
||||||
new ResourceWatcherService(settings, tp), scriptEngineRegistry, scriptContextRegistry, scriptSettings));
|
scriptEngineRegistry, scriptContextRegistry, scriptSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SearchType getRandomSupportedSearchType() {
|
public static SearchType getRandomSupportedSearchType() {
|
||||||
|
|
|
@ -15,7 +15,7 @@ import org.elasticsearch.xpack.support.clock.SystemClock;
|
||||||
import org.elasticsearch.xpack.watcher.client.WatchSourceBuilder;
|
import org.elasticsearch.xpack.watcher.client.WatchSourceBuilder;
|
||||||
import org.elasticsearch.xpack.watcher.client.WatcherClient;
|
import org.elasticsearch.xpack.watcher.client.WatcherClient;
|
||||||
import org.elasticsearch.xpack.watcher.condition.compare.CompareCondition;
|
import org.elasticsearch.xpack.watcher.condition.compare.CompareCondition;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
||||||
import org.elasticsearch.xpack.watcher.support.xcontent.XContentSource;
|
import org.elasticsearch.xpack.watcher.support.xcontent.XContentSource;
|
||||||
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
||||||
|
@ -259,7 +259,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
|
||||||
.setSource(jsonBuilder().startObject().field("template").value(searchSourceBuilder).endObject().bytes())
|
.setSource(jsonBuilder().startObject().field("template").value(searchSourceBuilder).endObject().bytes())
|
||||||
.get());
|
.get());
|
||||||
|
|
||||||
Script template = Script.indexed("my-template").lang("mustache").build();
|
WatcherScript template = WatcherScript.indexed("my-template").lang("mustache").build();
|
||||||
SearchRequest searchRequest = newInputSearchRequest("events");
|
SearchRequest searchRequest = newInputSearchRequest("events");
|
||||||
testConditionSearch(searchRequest, template);
|
testConditionSearch(searchRequest, template);
|
||||||
}
|
}
|
||||||
|
@ -368,7 +368,7 @@ public class BasicWatcherTests extends AbstractWatcherIntegrationTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testConditionSearch(SearchRequest request, Script template) throws Exception {
|
private void testConditionSearch(SearchRequest request, WatcherScript template) throws Exception {
|
||||||
// reset, so we don't miss event docs when we filter over the _timestamp field.
|
// reset, so we don't miss event docs when we filter over the _timestamp field.
|
||||||
timeWarp().clock().setTime(SystemClock.INSTANCE.nowUTC());
|
timeWarp().clock().setTime(SystemClock.INSTANCE.nowUTC());
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ import org.elasticsearch.common.bytes.BytesArray;
|
||||||
import org.elasticsearch.common.collect.MapBuilder;
|
import org.elasticsearch.common.collect.MapBuilder;
|
||||||
import org.elasticsearch.common.io.Streams;
|
import org.elasticsearch.common.io.Streams;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
|
||||||
import org.elasticsearch.xpack.watcher.test.WatcherTestUtils;
|
import org.elasticsearch.xpack.watcher.test.WatcherTestUtils;
|
||||||
import org.elasticsearch.xpack.watcher.transport.actions.put.PutWatchResponse;
|
import org.elasticsearch.xpack.watcher.transport.actions.put.PutWatchResponse;
|
||||||
|
@ -63,10 +63,10 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptTransform() throws Exception {
|
public void testScriptTransform() throws Exception {
|
||||||
final Script script;
|
final WatcherScript script;
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
logger.info("testing script transform with an inline script");
|
logger.info("testing script transform with an inline script");
|
||||||
script = Script.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
script = WatcherScript.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
||||||
} else if (randomBoolean()) {
|
} else if (randomBoolean()) {
|
||||||
logger.info("testing script transform with an indexed script");
|
logger.info("testing script transform with an indexed script");
|
||||||
client().admin().cluster().preparePutStoredScript()
|
client().admin().cluster().preparePutStoredScript()
|
||||||
|
@ -74,10 +74,10 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
|
||||||
.setScriptLang("groovy")
|
.setScriptLang("groovy")
|
||||||
.setSource(new BytesArray("{\"script\" : \"return [key3 : ctx.payload.key1 + ctx.payload.key2]\"}"))
|
.setSource(new BytesArray("{\"script\" : \"return [key3 : ctx.payload.key1 + ctx.payload.key2]\"}"))
|
||||||
.get();
|
.get();
|
||||||
script = Script.indexed("_id").lang("groovy").build();
|
script = WatcherScript.indexed("_id").lang("groovy").build();
|
||||||
} else {
|
} else {
|
||||||
logger.info("testing script transform with a file script");
|
logger.info("testing script transform with a file script");
|
||||||
script = Script.file("my-script").lang("groovy").build();
|
script = WatcherScript.file("my-script").lang("groovy").build();
|
||||||
}
|
}
|
||||||
|
|
||||||
// put a watch that has watch level transform:
|
// put a watch that has watch level transform:
|
||||||
|
@ -173,8 +173,8 @@ public class TransformIntegrationTests extends AbstractWatcherIntegrationTestCas
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testChainTransform() throws Exception {
|
public void testChainTransform() throws Exception {
|
||||||
final Script script1 = Script.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
final WatcherScript script1 = WatcherScript.inline("return [key3 : ctx.payload.key1 + ctx.payload.key2]").lang("groovy").build();
|
||||||
final Script script2 = Script.inline("return [key4 : ctx.payload.key3 + 10]").lang("groovy").build();
|
final WatcherScript script2 = WatcherScript.inline("return [key4 : ctx.payload.key3 + 10]").lang("groovy").build();
|
||||||
// put a watch that has watch level transform:
|
// put a watch that has watch level transform:
|
||||||
PutWatchResponse putWatchResponse = watcherClient().preparePutWatch("_id1")
|
PutWatchResponse putWatchResponse = watcherClient().preparePutWatch("_id1")
|
||||||
.setSource(watchBuilder()
|
.setSource(watchBuilder()
|
||||||
|
|
|
@ -13,14 +13,14 @@ import org.elasticsearch.common.xcontent.json.JsonXContent;
|
||||||
import org.elasticsearch.script.CompiledScript;
|
import org.elasticsearch.script.CompiledScript;
|
||||||
import org.elasticsearch.script.ExecutableScript;
|
import org.elasticsearch.script.ExecutableScript;
|
||||||
import org.elasticsearch.script.GeneralScriptException;
|
import org.elasticsearch.script.GeneralScriptException;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.script.ScriptService.ScriptType;
|
import org.elasticsearch.script.ScriptService.ScriptType;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.threadpool.TestThreadPool;
|
import org.elasticsearch.threadpool.TestThreadPool;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
import org.elasticsearch.xpack.watcher.execution.WatchExecutionContext;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.Variables;
|
import org.elasticsearch.xpack.watcher.support.Variables;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.watcher.transform.Transform;
|
import org.elasticsearch.xpack.watcher.transform.Transform;
|
||||||
import org.elasticsearch.xpack.watcher.watch.Payload;
|
import org.elasticsearch.xpack.watcher.watch.Payload;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
@ -35,7 +35,7 @@ import static java.util.Collections.singletonMap;
|
||||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||||
import static org.elasticsearch.xpack.watcher.support.Exceptions.illegalArgument;
|
import static org.elasticsearch.xpack.watcher.support.Exceptions.illegalArgument;
|
||||||
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.EMPTY_PAYLOAD;
|
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.EMPTY_PAYLOAD;
|
||||||
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.getScriptServiceProxy;
|
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.createScriptService;
|
||||||
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.mockExecutionContext;
|
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.mockExecutionContext;
|
||||||
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.simplePayload;
|
import static org.elasticsearch.xpack.watcher.test.WatcherTestUtils.simplePayload;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
|
@ -63,12 +63,12 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecute_MapValue() throws Exception {
|
public void testExecute_MapValue() throws Exception {
|
||||||
ScriptServiceProxy service = mock(ScriptServiceProxy.class);
|
ScriptService service = mock(ScriptService.class);
|
||||||
ScriptType type = randomFrom(ScriptType.values());
|
ScriptType type = randomFrom(ScriptType.values());
|
||||||
Map<String, Object> params = Collections.emptyMap();
|
Map<String, Object> params = Collections.emptyMap();
|
||||||
Script script = scriptBuilder(type, "_script").lang("_lang").params(params).build();
|
WatcherScript script = scriptBuilder(type, "_script").lang("_lang").params(params).build();
|
||||||
CompiledScript compiledScript = mock(CompiledScript.class);
|
CompiledScript compiledScript = mock(CompiledScript.class);
|
||||||
when(service.compile(script)).thenReturn(compiledScript);
|
when(service.compile(script.toScript(), WatcherScript.CTX, Collections.emptyMap())).thenReturn(compiledScript);
|
||||||
ExecutableScriptTransform transform = new ExecutableScriptTransform(new ScriptTransform(script), logger, service);
|
ExecutableScriptTransform transform = new ExecutableScriptTransform(new ScriptTransform(script), logger, service);
|
||||||
|
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", EMPTY_PAYLOAD);
|
WatchExecutionContext ctx = mockExecutionContext("_name", EMPTY_PAYLOAD);
|
||||||
|
@ -91,12 +91,12 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecuteMapValueFailure() throws Exception {
|
public void testExecuteMapValueFailure() throws Exception {
|
||||||
ScriptServiceProxy service = mock(ScriptServiceProxy.class);
|
ScriptService service = mock(ScriptService.class);
|
||||||
ScriptType type = randomFrom(ScriptType.values());
|
ScriptType type = randomFrom(ScriptType.values());
|
||||||
Map<String, Object> params = Collections.emptyMap();
|
Map<String, Object> params = Collections.emptyMap();
|
||||||
Script script = scriptBuilder(type, "_script").lang("_lang").params(params).build();
|
WatcherScript script = scriptBuilder(type, "_script").lang("_lang").params(params).build();
|
||||||
CompiledScript compiledScript = mock(CompiledScript.class);
|
CompiledScript compiledScript = mock(CompiledScript.class);
|
||||||
when(service.compile(script)).thenReturn(compiledScript);
|
when(service.compile(script.toScript(), WatcherScript.CTX, Collections.emptyMap())).thenReturn(compiledScript);
|
||||||
ExecutableScriptTransform transform = new ExecutableScriptTransform(new ScriptTransform(script), logger, service);
|
ExecutableScriptTransform transform = new ExecutableScriptTransform(new ScriptTransform(script), logger, service);
|
||||||
|
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", EMPTY_PAYLOAD);
|
WatchExecutionContext ctx = mockExecutionContext("_name", EMPTY_PAYLOAD);
|
||||||
|
@ -117,13 +117,12 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExecuteNonMapValue() throws Exception {
|
public void testExecuteNonMapValue() throws Exception {
|
||||||
ScriptServiceProxy service = mock(ScriptServiceProxy.class);
|
ScriptService service = mock(ScriptService.class);
|
||||||
|
|
||||||
ScriptType type = randomFrom(ScriptType.values());
|
ScriptType type = randomFrom(ScriptType.values());
|
||||||
Map<String, Object> params = Collections.emptyMap();
|
Map<String, Object> params = Collections.emptyMap();
|
||||||
Script script = scriptBuilder(type, "_script").lang("_lang").params(params).build();
|
WatcherScript script = scriptBuilder(type, "_script").lang("_lang").params(params).build();
|
||||||
CompiledScript compiledScript = mock(CompiledScript.class);
|
CompiledScript compiledScript = mock(CompiledScript.class);
|
||||||
when(service.compile(script)).thenReturn(compiledScript);
|
when(service.compile(script.toScript(), WatcherScript.CTX, Collections.emptyMap())).thenReturn(compiledScript);
|
||||||
ExecutableScriptTransform transform = new ExecutableScriptTransform(new ScriptTransform(script), logger, service);
|
ExecutableScriptTransform transform = new ExecutableScriptTransform(new ScriptTransform(script), logger, service);
|
||||||
|
|
||||||
WatchExecutionContext ctx = mockExecutionContext("_name", EMPTY_PAYLOAD);
|
WatchExecutionContext ctx = mockExecutionContext("_name", EMPTY_PAYLOAD);
|
||||||
|
@ -145,7 +144,7 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testParser() throws Exception {
|
public void testParser() throws Exception {
|
||||||
ScriptServiceProxy service = mock(ScriptServiceProxy.class);
|
ScriptService service = mock(ScriptService.class);
|
||||||
ScriptType type = randomFrom(ScriptType.values());
|
ScriptType type = randomFrom(ScriptType.values());
|
||||||
XContentBuilder builder = jsonBuilder().startObject();
|
XContentBuilder builder = jsonBuilder().startObject();
|
||||||
builder.field(scriptTypeField(type), "_script");
|
builder.field(scriptTypeField(type), "_script");
|
||||||
|
@ -156,22 +155,22 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
XContentParser parser = JsonXContent.jsonXContent.createParser(builder.bytes());
|
XContentParser parser = JsonXContent.jsonXContent.createParser(builder.bytes());
|
||||||
parser.nextToken();
|
parser.nextToken();
|
||||||
ExecutableScriptTransform transform = new ScriptTransformFactory(Settings.EMPTY, service).parseExecutable("_id", parser);
|
ExecutableScriptTransform transform = new ScriptTransformFactory(Settings.EMPTY, service).parseExecutable("_id", parser);
|
||||||
Script script = scriptBuilder(type, "_script").lang("_lang").params(singletonMap("key", "value")).build();
|
WatcherScript script = scriptBuilder(type, "_script").lang("_lang").params(singletonMap("key", "value")).build();
|
||||||
assertThat(transform.transform().getScript(), equalTo(script));
|
assertThat(transform.transform().getScript(), equalTo(script));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testParserString() throws Exception {
|
public void testParserString() throws Exception {
|
||||||
ScriptServiceProxy service = mock(ScriptServiceProxy.class);
|
ScriptService service = mock(ScriptService.class);
|
||||||
XContentBuilder builder = jsonBuilder().value("_script");
|
XContentBuilder builder = jsonBuilder().value("_script");
|
||||||
|
|
||||||
XContentParser parser = JsonXContent.jsonXContent.createParser(builder.bytes());
|
XContentParser parser = JsonXContent.jsonXContent.createParser(builder.bytes());
|
||||||
parser.nextToken();
|
parser.nextToken();
|
||||||
ExecutableScriptTransform transform = new ScriptTransformFactory(Settings.EMPTY, service).parseExecutable("_id", parser);
|
ExecutableScriptTransform transform = new ScriptTransformFactory(Settings.EMPTY, service).parseExecutable("_id", parser);
|
||||||
assertThat(transform.transform().getScript(), equalTo(Script.defaultType("_script").build()));
|
assertThat(transform.transform().getScript(), equalTo(WatcherScript.defaultType("_script").build()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionParserBadScript() throws Exception {
|
public void testScriptConditionParserBadScript() throws Exception {
|
||||||
ScriptTransformFactory transformFactory = new ScriptTransformFactory(Settings.builder().build(), getScriptServiceProxy(tp));
|
ScriptTransformFactory transformFactory = new ScriptTransformFactory(Settings.builder().build(), createScriptService(tp));
|
||||||
ScriptType scriptType = randomFrom(ScriptType.values());
|
ScriptType scriptType = randomFrom(ScriptType.values());
|
||||||
String script;
|
String script;
|
||||||
switch (scriptType) {
|
switch (scriptType) {
|
||||||
|
@ -203,7 +202,7 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testScriptConditionParserBadLang() throws Exception {
|
public void testScriptConditionParserBadLang() throws Exception {
|
||||||
ScriptTransformFactory transformFactory = new ScriptTransformFactory(Settings.builder().build(), getScriptServiceProxy(tp));
|
ScriptTransformFactory transformFactory = new ScriptTransformFactory(Settings.builder().build(), createScriptService(tp));
|
||||||
ScriptType scriptType = randomFrom(ScriptType.values());
|
ScriptType scriptType = randomFrom(ScriptType.values());
|
||||||
String script = "return true";
|
String script = "return true";
|
||||||
XContentBuilder builder = jsonBuilder().startObject()
|
XContentBuilder builder = jsonBuilder().startObject()
|
||||||
|
@ -224,11 +223,11 @@ public class ScriptTransformTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Script.Builder scriptBuilder(ScriptType type, String script) {
|
static WatcherScript.Builder scriptBuilder(ScriptType type, String script) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case INLINE: return Script.inline(script);
|
case INLINE: return WatcherScript.inline(script);
|
||||||
case FILE: return Script.file(script);
|
case FILE: return WatcherScript.file(script);
|
||||||
case STORED: return Script.indexed(script);
|
case STORED: return WatcherScript.indexed(script);
|
||||||
default:
|
default:
|
||||||
throw illegalArgument("unsupported script type [{}]", type);
|
throw illegalArgument("unsupported script type [{}]", type);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@ import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
||||||
import org.elasticsearch.index.query.QueryParser;
|
import org.elasticsearch.index.query.QueryParser;
|
||||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||||
|
import org.elasticsearch.script.ScriptService;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.xpack.common.ScriptServiceProxy;
|
|
||||||
import org.elasticsearch.xpack.common.http.HttpClient;
|
import org.elasticsearch.xpack.common.http.HttpClient;
|
||||||
import org.elasticsearch.xpack.common.http.HttpMethod;
|
import org.elasticsearch.xpack.common.http.HttpMethod;
|
||||||
import org.elasticsearch.xpack.common.http.HttpRequestTemplate;
|
import org.elasticsearch.xpack.common.http.HttpRequestTemplate;
|
||||||
|
@ -78,7 +78,7 @@ import org.elasticsearch.xpack.watcher.input.search.SearchInputFactory;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.ExecutableSimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
import org.elasticsearch.xpack.watcher.input.simple.SimpleInput;
|
||||||
import org.elasticsearch.xpack.watcher.input.simple.SimpleInputFactory;
|
import org.elasticsearch.xpack.watcher.input.simple.SimpleInputFactory;
|
||||||
import org.elasticsearch.xpack.watcher.support.Script;
|
import org.elasticsearch.xpack.watcher.support.WatcherScript;
|
||||||
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
import org.elasticsearch.xpack.watcher.support.init.proxy.WatcherClientProxy;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
|
||||||
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateService;
|
||||||
|
@ -141,7 +141,7 @@ import static org.joda.time.DateTimeZone.UTC;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
public class WatchTests extends ESTestCase {
|
public class WatchTests extends ESTestCase {
|
||||||
private ScriptServiceProxy scriptService;
|
private ScriptService scriptService;
|
||||||
private WatcherClientProxy client;
|
private WatcherClientProxy client;
|
||||||
private HttpClient httpClient;
|
private HttpClient httpClient;
|
||||||
private EmailService emailService;
|
private EmailService emailService;
|
||||||
|
@ -155,7 +155,7 @@ public class WatchTests extends ESTestCase {
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
scriptService = mock(ScriptServiceProxy.class);
|
scriptService = mock(ScriptService.class);
|
||||||
client = mock(WatcherClientProxy.class);
|
client = mock(WatcherClientProxy.class);
|
||||||
httpClient = mock(HttpClient.class);
|
httpClient = mock(HttpClient.class);
|
||||||
emailService = mock(EmailService.class);
|
emailService = mock(EmailService.class);
|
||||||
|
@ -363,7 +363,7 @@ public class WatchTests extends ESTestCase {
|
||||||
String type = randomFrom(ScriptCondition.TYPE, AlwaysCondition.TYPE, CompareCondition.TYPE, ArrayCompareCondition.TYPE);
|
String type = randomFrom(ScriptCondition.TYPE, AlwaysCondition.TYPE, CompareCondition.TYPE, ArrayCompareCondition.TYPE);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ScriptCondition.TYPE:
|
case ScriptCondition.TYPE:
|
||||||
return new ExecutableScriptCondition(new ScriptCondition(Script.inline("_script").build()), logger, scriptService);
|
return new ExecutableScriptCondition(new ScriptCondition(WatcherScript.inline("_script").build()), logger, scriptService);
|
||||||
case CompareCondition.TYPE:
|
case CompareCondition.TYPE:
|
||||||
return new ExecutableCompareCondition(new CompareCondition("_path", randomFrom(Op.values()), randomFrom(5, "3")), logger,
|
return new ExecutableCompareCondition(new CompareCondition("_path", randomFrom(Op.values()), randomFrom(5, "3")), logger,
|
||||||
SystemClock.INSTANCE);
|
SystemClock.INSTANCE);
|
||||||
|
@ -400,7 +400,7 @@ public class WatchTests extends ESTestCase {
|
||||||
DateTimeZone timeZone = randomBoolean() ? DateTimeZone.UTC : null;
|
DateTimeZone timeZone = randomBoolean() ? DateTimeZone.UTC : null;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ScriptTransform.TYPE:
|
case ScriptTransform.TYPE:
|
||||||
return new ExecutableScriptTransform(new ScriptTransform(Script.inline("_script").build()), logger, scriptService);
|
return new ExecutableScriptTransform(new ScriptTransform(WatcherScript.inline("_script").build()), logger, scriptService);
|
||||||
case SearchTransform.TYPE:
|
case SearchTransform.TYPE:
|
||||||
SearchTransform transform = new SearchTransform(
|
SearchTransform transform = new SearchTransform(
|
||||||
new WatcherSearchTemplateRequest(matchAllRequest(DEFAULT_INDICES_OPTIONS), null), timeout, timeZone);
|
new WatcherSearchTemplateRequest(matchAllRequest(DEFAULT_INDICES_OPTIONS), null), timeout, timeZone);
|
||||||
|
@ -408,14 +408,15 @@ public class WatchTests extends ESTestCase {
|
||||||
default: // chain
|
default: // chain
|
||||||
SearchTransform searchTransform = new SearchTransform(
|
SearchTransform searchTransform = new SearchTransform(
|
||||||
new WatcherSearchTemplateRequest(matchAllRequest(DEFAULT_INDICES_OPTIONS), null), timeout, timeZone);
|
new WatcherSearchTemplateRequest(matchAllRequest(DEFAULT_INDICES_OPTIONS), null), timeout, timeZone);
|
||||||
ScriptTransform scriptTransform = new ScriptTransform(Script.inline("_script").build());
|
ScriptTransform scriptTransform = new ScriptTransform(WatcherScript.inline("_script").build());
|
||||||
|
|
||||||
ChainTransform chainTransform = new ChainTransform(Arrays.asList(searchTransform, scriptTransform));
|
ChainTransform chainTransform = new ChainTransform(Arrays.asList(searchTransform, scriptTransform));
|
||||||
return new ExecutableChainTransform(chainTransform, logger, Arrays.<ExecutableTransform>asList(
|
return new ExecutableChainTransform(chainTransform, logger, Arrays.<ExecutableTransform>asList(
|
||||||
new ExecutableSearchTransform(new SearchTransform(
|
new ExecutableSearchTransform(new SearchTransform(
|
||||||
new WatcherSearchTemplateRequest(matchAllRequest(DEFAULT_INDICES_OPTIONS), null), timeout, timeZone),
|
new WatcherSearchTemplateRequest(matchAllRequest(DEFAULT_INDICES_OPTIONS), null), timeout, timeZone),
|
||||||
logger, client, searchTemplateService, null),
|
logger, client, searchTemplateService, null),
|
||||||
new ExecutableScriptTransform(new ScriptTransform(Script.inline("_script").build()), logger, scriptService)));
|
new ExecutableScriptTransform(new ScriptTransform(WatcherScript.inline("_script").build()),
|
||||||
|
logger, scriptService)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue