/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.ingest; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.elasticsearch.common.settings.ClusterSettings; import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.env.Environment; import org.elasticsearch.index.analysis.AnalysisRegistry; import org.elasticsearch.plugins.IngestPlugin; import org.elasticsearch.script.ScriptService; import org.elasticsearch.threadpool.ThreadPool; import static org.elasticsearch.common.settings.Setting.Property; /** * Holder class for several ingest related services. */ public class IngestService { public static final Setting<Boolean> NEW_INGEST_DATE_FORMAT = Setting.boolSetting("ingest.new_date_format", false, Property.NodeScope, Property.Dynamic, Property.Deprecated); private final PipelineStore pipelineStore; private final PipelineExecutionService pipelineExecutionService; public IngestService(ClusterSettings clusterSettings, Settings settings, ThreadPool threadPool, Environment env, ScriptService scriptService, AnalysisRegistry analysisRegistry, List<IngestPlugin> ingestPlugins) { final TemplateService templateService = new InternalTemplateService(scriptService); Processor.Parameters parameters = new Processor.Parameters(env, scriptService, templateService, analysisRegistry, threadPool.getThreadContext()); Map<String, Processor.Factory> processorFactories = new HashMap<>(); for (IngestPlugin ingestPlugin : ingestPlugins) { Map<String, Processor.Factory> newProcessors = ingestPlugin.getProcessors(parameters); for (Map.Entry<String, Processor.Factory> entry : newProcessors.entrySet()) { if (processorFactories.put(entry.getKey(), entry.getValue()) != null) { throw new IllegalArgumentException("Ingest processor [" + entry.getKey() + "] is already registered"); } } } this.pipelineStore = new PipelineStore(clusterSettings, settings, Collections.unmodifiableMap(processorFactories)); this.pipelineExecutionService = new PipelineExecutionService(pipelineStore, threadPool); } public PipelineStore getPipelineStore() { return pipelineStore; } public PipelineExecutionService getPipelineExecutionService() { return pipelineExecutionService; } public IngestInfo info() { Map<String, Processor.Factory> processorFactories = pipelineStore.getProcessorFactories(); List<ProcessorInfo> processorInfoList = new ArrayList<>(processorFactories.size()); for (Map.Entry<String, Processor.Factory> entry : processorFactories.entrySet()) { processorInfoList.add(new ProcessorInfo(entry.getKey())); } return new IngestInfo(processorInfoList); } }