Search in sources :

Example 1 with Sink

use of com.amazon.dataprepper.model.sink.Sink in project data-prepper by opensearch-project.

the class SinkFactoryTests method testNewSinkClassByNameThatExists.

/**
 * Tests if SinkFactory is able to retrieve default Source plugins by name
 */
@Test
public void testNewSinkClassByNameThatExists() {
    final PluginSetting stdOutSinkConfiguration = new PluginSetting("stdout", new HashMap<>());
    final Sink actualSink = SinkFactory.newSink(stdOutSinkConfiguration);
    final Sink expectedSink = new StdOutSink();
    assertThat(actualSink, notNullValue());
    assertThat(actualSink.getClass().getSimpleName(), is(equalTo(expectedSink.getClass().getSimpleName())));
}
Also used : Sink(com.amazon.dataprepper.model.sink.Sink) PluginSetting(com.amazon.dataprepper.model.configuration.PluginSetting) Test(org.junit.Test)

Example 2 with Sink

use of com.amazon.dataprepper.model.sink.Sink in project data-prepper by opensearch-project.

the class OpenSearchSink method initialize.

public void initialize() throws IOException {
    LOG.info("Initializing OpenSearch sink");
    restHighLevelClient = openSearchSinkConfig.getConnectionConfiguration().createClient();
    indexManager = indexManagerFactory.getIndexManager(indexType, restHighLevelClient, openSearchSinkConfig);
    final String dlqFile = openSearchSinkConfig.getRetryConfiguration().getDlqFile();
    if (dlqFile != null) {
        dlqWriter = Files.newBufferedWriter(Paths.get(dlqFile), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    }
    indexManager.setupIndex();
    OpenSearchTransport transport = new RestClientTransport(restHighLevelClient.getLowLevelClient(), new PreSerializedJsonpMapper());
    openSearchClient = new OpenSearchClient(transport);
    bulkRequestSupplier = () -> new JavaClientAccumulatingBulkRequest(new BulkRequest.Builder().index(indexManager.getIndexAlias()));
    bulkRetryStrategy = new BulkRetryStrategy(bulkRequest -> openSearchClient.bulk(bulkRequest.getRequest()), this::logFailure, pluginMetrics, bulkRequestSupplier);
    LOG.info("Initialized OpenSearch sink");
    objectMapper = new ObjectMapper();
}
Also used : IndexManager(com.amazon.dataprepper.plugins.sink.opensearch.index.IndexManager) LoggerFactory(org.slf4j.LoggerFactory) ByteSizeUnit(org.opensearch.common.unit.ByteSizeUnit) PreSerializedJsonpMapper(com.amazon.dataprepper.plugins.sink.opensearch.bulk.PreSerializedJsonpMapper) IndexType(com.amazon.dataprepper.plugins.sink.opensearch.index.IndexType) Supplier(java.util.function.Supplier) AbstractSink(com.amazon.dataprepper.model.sink.AbstractSink) BulkRequest(org.opensearch.client.opensearch.core.BulkRequest) BulkOperation(org.opensearch.client.opensearch.core.bulk.BulkOperation) XContentParser(org.opensearch.common.xcontent.XContentParser) Timer(io.micrometer.core.instrument.Timer) IndexManagerFactory(com.amazon.dataprepper.plugins.sink.opensearch.index.IndexManagerFactory) RestClientTransport(org.opensearch.client.transport.rest_client.RestClientTransport) BulkOperationWriter(com.amazon.dataprepper.plugins.sink.opensearch.bulk.BulkOperationWriter) Map(java.util.Map) XContentFactory(org.opensearch.common.xcontent.XContentFactory) Record(com.amazon.dataprepper.model.record.Record) RestHighLevelClient(org.opensearch.client.RestHighLevelClient) Counter(io.micrometer.core.instrument.Counter) PluginSetting(com.amazon.dataprepper.model.configuration.PluginSetting) AccumulatingBulkRequest(com.amazon.dataprepper.plugins.sink.opensearch.bulk.AccumulatingBulkRequest) JavaClientAccumulatingBulkRequest(com.amazon.dataprepper.plugins.sink.opensearch.bulk.JavaClientAccumulatingBulkRequest) Logger(org.slf4j.Logger) Sink(com.amazon.dataprepper.model.sink.Sink) Files(java.nio.file.Files) BufferedWriter(java.io.BufferedWriter) IndexOperation(org.opensearch.client.opensearch.core.bulk.IndexOperation) Collection(java.util.Collection) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) LoggingDeprecationHandler(org.opensearch.common.xcontent.LoggingDeprecationHandler) StandardOpenOption(java.nio.file.StandardOpenOption) SerializedJson(com.amazon.dataprepper.plugins.sink.opensearch.bulk.SerializedJson) OpenSearchClient(org.opensearch.client.opensearch.OpenSearchClient) IOException(java.io.IOException) OpenSearchTransport(org.opensearch.client.transport.OpenSearchTransport) Event(com.amazon.dataprepper.model.event.Event) DistributionSummary(io.micrometer.core.instrument.DistributionSummary) Paths(java.nio.file.Paths) NamedXContentRegistry(org.opensearch.common.xcontent.NamedXContentRegistry) XContentType(org.opensearch.common.xcontent.XContentType) DataPrepperPlugin(com.amazon.dataprepper.model.annotations.DataPrepperPlugin) RestClientTransport(org.opensearch.client.transport.rest_client.RestClientTransport) JavaClientAccumulatingBulkRequest(com.amazon.dataprepper.plugins.sink.opensearch.bulk.JavaClientAccumulatingBulkRequest) BulkRequest(org.opensearch.client.opensearch.core.BulkRequest) AccumulatingBulkRequest(com.amazon.dataprepper.plugins.sink.opensearch.bulk.AccumulatingBulkRequest) JavaClientAccumulatingBulkRequest(com.amazon.dataprepper.plugins.sink.opensearch.bulk.JavaClientAccumulatingBulkRequest) PreSerializedJsonpMapper(com.amazon.dataprepper.plugins.sink.opensearch.bulk.PreSerializedJsonpMapper) OpenSearchClient(org.opensearch.client.opensearch.OpenSearchClient) OpenSearchTransport(org.opensearch.client.transport.OpenSearchTransport) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 3 with Sink

use of com.amazon.dataprepper.model.sink.Sink in project data-prepper by opensearch-project.

the class PipelineParser method buildPipelineFromConfiguration.

private void buildPipelineFromConfiguration(final String pipelineName, final Map<String, PipelineConfiguration> pipelineConfigurationMap, final Map<String, Pipeline> pipelineMap) {
    final PipelineConfiguration pipelineConfiguration = pipelineConfigurationMap.get(pipelineName);
    LOG.info("Building pipeline [{}] from provided configuration", pipelineName);
    try {
        final PluginSetting sourceSetting = pipelineConfiguration.getSourcePluginSetting();
        final Optional<Source> pipelineSource = getSourceIfPipelineType(pipelineName, sourceSetting, pipelineMap, pipelineConfigurationMap);
        final Source source = pipelineSource.orElseGet(() -> pluginFactory.loadPlugin(Source.class, sourceSetting));
        LOG.info("Building buffer for the pipeline [{}]", pipelineName);
        final Buffer buffer = pluginFactory.loadPlugin(Buffer.class, pipelineConfiguration.getBufferPluginSetting());
        LOG.info("Building processors for the pipeline [{}]", pipelineName);
        final int processorThreads = pipelineConfiguration.getWorkers();
        final List<List<Processor>> processorSets = pipelineConfiguration.getProcessorPluginSettings().stream().map(this::newProcessor).collect(Collectors.toList());
        final int readBatchDelay = pipelineConfiguration.getReadBatchDelay();
        LOG.info("Building sinks for the pipeline [{}]", pipelineName);
        final List<Sink> sinks = pipelineConfiguration.getSinkPluginSettings().stream().map(this::buildSinkOrConnector).collect(Collectors.toList());
        final Pipeline pipeline = new Pipeline(pipelineName, source, buffer, processorSets, sinks, processorThreads, readBatchDelay);
        pipelineMap.put(pipelineName, pipeline);
    } catch (Exception ex) {
        // If pipeline construction errors out, we will skip that pipeline and proceed
        LOG.error("Construction of pipeline components failed, skipping building of pipeline [{}] and its connected " + "pipelines", pipelineName, ex);
        processRemoveIfRequired(pipelineName, pipelineConfigurationMap, pipelineMap);
    }
}
Also used : Buffer(com.amazon.dataprepper.model.buffer.Buffer) Sink(com.amazon.dataprepper.model.sink.Sink) List(java.util.List) PipelineConfiguration(com.amazon.dataprepper.parser.model.PipelineConfiguration) PluginSetting(com.amazon.dataprepper.model.configuration.PluginSetting) Source(com.amazon.dataprepper.model.source.Source) NoPluginFoundException(com.amazon.dataprepper.model.plugin.NoPluginFoundException) IOException(java.io.IOException) Pipeline(com.amazon.dataprepper.pipeline.Pipeline)

Example 4 with Sink

use of com.amazon.dataprepper.model.sink.Sink in project data-prepper by opensearch-project.

the class PluginRepository method findPlugins.

private static void findPlugins() {
    final Reflections reflections = new Reflections(DEFAULT_PLUGINS_CLASSPATH);
    final Set<Class<?>> annotatedClasses = reflections.getTypesAnnotatedWith(DataPrepperPlugin.class);
    for (final Class<?> annotatedClass : annotatedClasses) {
        final DataPrepperPlugin dataPrepperPluginAnnotation = annotatedClass.getAnnotation(DataPrepperPlugin.class);
        final String pluginName = dataPrepperPluginAnnotation.name();
        final PluginType pluginType = extractPluginType(dataPrepperPluginAnnotation);
        switch(pluginType) {
            case SOURCE:
                SOURCES.put(pluginName, (Class<Source>) annotatedClass);
                break;
            case BUFFER:
                BUFFERS.put(pluginName, (Class<Buffer>) annotatedClass);
                break;
            case PREPPER:
                PROCESSORS.put(pluginName, (Class<Processor>) annotatedClass);
                break;
            case SINK:
                SINKS.put(pluginName, (Class<Sink>) annotatedClass);
                break;
        }
    }
}
Also used : Buffer(com.amazon.dataprepper.model.buffer.Buffer) Processor(com.amazon.dataprepper.model.processor.Processor) DataPrepperPlugin(com.amazon.dataprepper.model.annotations.DataPrepperPlugin) Sink(com.amazon.dataprepper.model.sink.Sink) PluginType(com.amazon.dataprepper.model.PluginType) Source(com.amazon.dataprepper.model.source.Source) Reflections(org.reflections.Reflections)

Aggregations

Sink (com.amazon.dataprepper.model.sink.Sink)4 PluginSetting (com.amazon.dataprepper.model.configuration.PluginSetting)3 DataPrepperPlugin (com.amazon.dataprepper.model.annotations.DataPrepperPlugin)2 Buffer (com.amazon.dataprepper.model.buffer.Buffer)2 Source (com.amazon.dataprepper.model.source.Source)2 IOException (java.io.IOException)2 PluginType (com.amazon.dataprepper.model.PluginType)1 Event (com.amazon.dataprepper.model.event.Event)1 NoPluginFoundException (com.amazon.dataprepper.model.plugin.NoPluginFoundException)1 Processor (com.amazon.dataprepper.model.processor.Processor)1 Record (com.amazon.dataprepper.model.record.Record)1 AbstractSink (com.amazon.dataprepper.model.sink.AbstractSink)1 PipelineConfiguration (com.amazon.dataprepper.parser.model.PipelineConfiguration)1 Pipeline (com.amazon.dataprepper.pipeline.Pipeline)1 AccumulatingBulkRequest (com.amazon.dataprepper.plugins.sink.opensearch.bulk.AccumulatingBulkRequest)1 BulkOperationWriter (com.amazon.dataprepper.plugins.sink.opensearch.bulk.BulkOperationWriter)1 JavaClientAccumulatingBulkRequest (com.amazon.dataprepper.plugins.sink.opensearch.bulk.JavaClientAccumulatingBulkRequest)1 PreSerializedJsonpMapper (com.amazon.dataprepper.plugins.sink.opensearch.bulk.PreSerializedJsonpMapper)1 SerializedJson (com.amazon.dataprepper.plugins.sink.opensearch.bulk.SerializedJson)1 IndexManager (com.amazon.dataprepper.plugins.sink.opensearch.index.IndexManager)1