http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/sampler/UnbiasedSampler.java ---------------------------------------------------------------------- diff --git a/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/sampler/UnbiasedSampler.java b/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/sampler/UnbiasedSampler.java new file mode 100644 index 0000000..5d5c240 --- /dev/null +++ b/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/sampler/UnbiasedSampler.java @@ -0,0 +1,28 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.metron.performance.sampler; + +import java.util.Random; + +public class UnbiasedSampler implements Sampler { + + @Override + public int sample(Random rng, int limit) { + return rng.nextInt(limit); + } +}
http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/util/KafkaUtil.java ---------------------------------------------------------------------- diff --git a/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/util/KafkaUtil.java b/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/util/KafkaUtil.java new file mode 100644 index 0000000..c13f236 --- /dev/null +++ b/metron-contrib/metron-performance/src/main/java/org/apache/metron/performance/util/KafkaUtil.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.metron.performance.util; + +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.common.PartitionInfo; +import org.apache.kafka.common.TopicPartition; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public enum KafkaUtil { + INSTANCE; + + public List<TopicPartition> getTopicPartition(KafkaConsumer<String, String> consumer, String topic) { + + List<PartitionInfo> partitions = consumer.partitionsFor(topic); + List<TopicPartition> ret = new ArrayList<>(partitions.size()); + for(PartitionInfo par : partitions) { + ret.add(new TopicPartition(topic, par.partition())); + } + return ret; + } + + public Map<Integer, Long> getKafkaOffsetMap(KafkaConsumer<String, String> consumer, String topic ) { + Map<Integer, Long> ret = new HashMap<>(); + if(!consumer.subscription().contains(topic)) { + consumer.subscribe(Collections.singletonList(topic)); + } + consumer.poll(0); + List<TopicPartition> partitions = getTopicPartition(consumer, topic); + consumer.seekToEnd(partitions); + for(TopicPartition par : partitions) { + ret.put(par.partition(), consumer.position(par)-1); + } + return ret; + } +} http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/metron-performance/src/main/scripts/load_tool.sh ---------------------------------------------------------------------- diff --git a/metron-contrib/metron-performance/src/main/scripts/load_tool.sh b/metron-contrib/metron-performance/src/main/scripts/load_tool.sh new file mode 100755 index 0000000..1b56a6e --- /dev/null +++ b/metron-contrib/metron-performance/src/main/scripts/load_tool.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF 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. +# + +BIGTOP_DEFAULTS_DIR=${BIGTOP_DEFAULTS_DIR-/etc/default} +[ -n "${BIGTOP_DEFAULTS_DIR}" -a -r ${BIGTOP_DEFAULTS_DIR}/hbase ] && . ${BIGTOP_DEFAULTS_DIR}/hbase + +# Autodetect JAVA_HOME if not defined +if [ -e /usr/libexec/bigtop-detect-javahome ]; then + . /usr/libexec/bigtop-detect-javahome +elif [ -e /usr/lib/bigtop-utils/bigtop-detect-javahome ]; then + . /usr/lib/bigtop-utils/bigtop-detect-javahome +fi + +export METRON_VERSION=${project.version} +export METRON_HOME=/usr/metron/$METRON_VERSION +export CLASSNAME="org.apache.metron.performance.load.LoadGenerator" +export GEN_JAR=${project.artifactId}-$METRON_VERSION.jar +export PARSERS_JAR=metron-parsers-$METRON_VERSION-uber.jar + +java -cp $METRON_HOME/lib/$GEN_JAR:$METRON_HOME/lib/$PARSERS_JAR $CLASSNAME "$@" http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/LoadOptionsTest.java ---------------------------------------------------------------------- diff --git a/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/LoadOptionsTest.java b/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/LoadOptionsTest.java new file mode 100644 index 0000000..0d9b34a --- /dev/null +++ b/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/LoadOptionsTest.java @@ -0,0 +1,93 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.metron.performance.load; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.PosixParser; +import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Test; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.util.EnumMap; +import java.util.List; +import java.util.Optional; + +public class LoadOptionsTest { + @Test + public void testHappyPath() throws Exception { + CommandLine cli = LoadOptions.parse(new PosixParser(), new String[] { "-eps", "1000", "-ot","foo"}); + EnumMap<LoadOptions, Optional<Object>> results = LoadOptions.createConfig(cli); + Assert.assertEquals(1000L, results.get(LoadOptions.EPS).get()); + Assert.assertEquals("foo", results.get(LoadOptions.OUTPUT_TOPIC).get()); + Assert.assertEquals(LoadGenerator.CONSUMER_GROUP, results.get(LoadOptions.CONSUMER_GROUP).get()); + Assert.assertEquals(Runtime.getRuntime().availableProcessors(), results.get(LoadOptions.NUM_THREADS).get()); + Assert.assertFalse(results.get(LoadOptions.BIASED_SAMPLE).isPresent()); + Assert.assertFalse(results.get(LoadOptions.CSV).isPresent()); + } + + @Test + public void testCsvPresent() throws Exception { + CommandLine cli = LoadOptions.parse(new PosixParser(), new String[]{"-c", "/tmp/blah"}); + EnumMap<LoadOptions, Optional<Object>> results = LoadOptions.createConfig(cli); + Assert.assertEquals(new File("/tmp/blah"), results.get(LoadOptions.CSV).get()); + } + + @Test + public void testCsvMissing() throws Exception { + CommandLine cli = LoadOptions.parse(new PosixParser(), new String[]{}); + EnumMap<LoadOptions, Optional<Object>> results = LoadOptions.createConfig(cli); + Assert.assertFalse(results.get(LoadOptions.CSV).isPresent()); + } + + @Test + public void testThreadsByCores() throws Exception { + CommandLine cli = LoadOptions.parse(new PosixParser(), new String[]{"-p", "2C"}); + EnumMap<LoadOptions, Optional<Object>> results = LoadOptions.createConfig(cli); + Assert.assertEquals(2 * Runtime.getRuntime().availableProcessors(), results.get(LoadOptions.NUM_THREADS).get()); + } + + @Test + public void testThreadsByNum() throws Exception { + CommandLine cli = LoadOptions.parse(new PosixParser(), new String[]{"-p", "5"}); + EnumMap<LoadOptions, Optional<Object>> results = LoadOptions.createConfig(cli); + Assert.assertEquals(5, results.get(LoadOptions.NUM_THREADS).get()); + } + + @Test + public void testTemplatePresent() throws Exception { + File templateFile= new File("target/template"); + String template = "test template1"; + try(BufferedWriter w = new BufferedWriter(new FileWriter(templateFile))) { + IOUtils.write(template, w ); + } + templateFile.deleteOnExit(); + CommandLine cli = LoadOptions.parse(new PosixParser(), new String[]{"-t", templateFile.getPath()}); + EnumMap<LoadOptions, Optional<Object>> results = LoadOptions.createConfig(cli); + List<String> templates = (List<String>) results.get(LoadOptions.TEMPLATE).get(); + Assert.assertEquals(1, templates.size()); + Assert.assertEquals(template, templates.get(0)); + } + + @Test(expected=IllegalStateException.class) + public void testTemplateMissing() throws Exception { + LoadOptions.createConfig(LoadOptions.parse(new PosixParser(), new String[]{"-t", "target/template2"})); + } +} http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/SendToKafkaTest.java ---------------------------------------------------------------------- diff --git a/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/SendToKafkaTest.java b/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/SendToKafkaTest.java new file mode 100644 index 0000000..c652291 --- /dev/null +++ b/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/load/SendToKafkaTest.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.metron.performance.load; + +import org.apache.kafka.clients.producer.KafkaProducer; +import org.junit.Assert; +import org.junit.Test; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; + +public class SendToKafkaTest { + + @Test + public void testWritesCorrectNumber() { + ExecutorService executor = ForkJoinPool.commonPool(); + AtomicLong numSent = new AtomicLong(0); + long expectedSent = 100; + SendToKafka sender = new SendToKafka(null, expectedSent, 10, () -> "msg", executor, numSent, ThreadLocal.withInitial(() -> null) ) { + @Override + protected Future<?> sendToKafka(KafkaProducer producer, String kafkaTopic, String message) { + Assert.assertEquals(message, "msg"); + return ForkJoinPool.commonPool().submit(() -> { + numSent.incrementAndGet(); + }); + } + }; + sender.run(); + Assert.assertEquals(numSent.get(), expectedSent); + } + +} http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/sampler/SamplerTest.java ---------------------------------------------------------------------- diff --git a/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/sampler/SamplerTest.java b/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/sampler/SamplerTest.java new file mode 100644 index 0000000..d386e00 --- /dev/null +++ b/metron-contrib/metron-performance/src/test/java/org/apache/metron/performance/sampler/SamplerTest.java @@ -0,0 +1,145 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.metron.performance.sampler; + +import com.google.common.collect.ImmutableList; +import org.adrianwalker.multilinestring.Multiline; +import org.junit.Assert; +import org.junit.Test; +import sun.java2d.pipe.SpanShapeRenderer; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class SamplerTest { + private static final int SIMULATION_SIZE = 10000; + private void testSampler(Sampler sampler, Map<Integer, Double> expectedProbs) { + Random rng = new Random(0); + Map<Integer, Double> empiricalProbs = new HashMap<>(); + for(int i = 0;i < SIMULATION_SIZE;++i) { + int sample = sampler.sample(rng, 10); + Double cnt = empiricalProbs.get(sample); + empiricalProbs.put(sample, ((cnt == null)?0:cnt) + 1); + } + for(Map.Entry<Integer, Double> kv : empiricalProbs.entrySet()) { + double empiricalProb = kv.getValue()/SIMULATION_SIZE; + String msg = expectedProbs.get(kv.getKey()) + " != " + empiricalProb; + Assert.assertEquals(msg, expectedProbs.get(kv.getKey()), empiricalProb, 1e-2); + } + } + + @Test + public void testUnbiasedSampler() { + Sampler sampler = new UnbiasedSampler(); + testSampler(sampler, new HashMap<Integer, Double>() {{ + for(int i = 0;i < 10;++i) { + put(i, 0.1); + } + }}); + } + + @Test + public void testBiasedSampler() { + Sampler sampler = new BiasedSampler( + new ArrayList<Map.Entry<Integer, Integer>>() {{ + add(new AbstractMap.SimpleEntry<>(30, 80)); + add(new AbstractMap.SimpleEntry<>(70, 20)); + }} + , 10 + ); + testSampler(sampler, new HashMap<Integer, Double>() {{ + for(int i = 0;i < 3;++i) { + put(i, 0.8/3); + } + for(int i = 3;i < 10;++i) { + put(i, 0.2/7); + } + }}); + + } + + /** + 80,20 + */ + @Multiline + static String paretoConfigImplicit; + + /** + 80,20 + 20,80 + */ + @Multiline + static String paretoConfig; + + @Test + public void testDistributionRead() throws IOException { + for(String config : ImmutableList.of(paretoConfig, paretoConfigImplicit)) { + List<Map.Entry<Integer, Integer>> endpoints = BiasedSampler.readDistribution(new BufferedReader(new StringReader(config)), true); + Assert.assertEquals(2, endpoints.size()); + Assert.assertEquals(new AbstractMap.SimpleEntry<>(80,20), endpoints.get(0)); + Assert.assertEquals(new AbstractMap.SimpleEntry<>(20,80), endpoints.get(1)); + } + } + + /** + 80,20 + 10,70 + 10,10 + */ + @Multiline + static String longerConfig; + /** + 80,20 + 10,70 + */ + @Multiline + static String longerConfigImplicit; + + @Test + public void testDistributionReadLonger() throws IOException { + for(String config : ImmutableList.of(longerConfig, longerConfigImplicit)) { + List<Map.Entry<Integer, Integer>> endpoints = BiasedSampler.readDistribution(new BufferedReader(new StringReader(config)), true); + Assert.assertEquals(3, endpoints.size()); + Assert.assertEquals(new AbstractMap.SimpleEntry<>(80,20), endpoints.get(0)); + Assert.assertEquals(new AbstractMap.SimpleEntry<>(10,70), endpoints.get(1)); + Assert.assertEquals(new AbstractMap.SimpleEntry<>(10,10), endpoints.get(2)); + } + } + + @Test(expected=IllegalArgumentException.class) + public void testDistributionRead_garbage() throws IOException { + BiasedSampler.readDistribution(new BufferedReader(new StringReader("blah foo")), true); + } + + @Test(expected=IllegalArgumentException.class) + public void testDistributionRead_negative() throws IOException { + BiasedSampler.readDistribution(new BufferedReader(new StringReader("80,-20")), true); + } + + @Test(expected=IllegalArgumentException.class) + public void testDistributionRead_over100() throws IOException { + BiasedSampler.readDistribution(new BufferedReader(new StringReader("200,20")), true); + } +} http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-contrib/pom.xml ---------------------------------------------------------------------- diff --git a/metron-contrib/pom.xml b/metron-contrib/pom.xml index cf28fac..bab7507 100644 --- a/metron-contrib/pom.xml +++ b/metron-contrib/pom.xml @@ -40,5 +40,20 @@ </licenses> <modules> <module>metron-docker</module> + <module>metron-performance</module> </modules> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>${global_junit_version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.adrianwalker</groupId> + <artifactId>multiline-string</artifactId> + <version>0.1.2</version> + <scope>test</scope> + </dependency> + </dependencies> </project> http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/metainfo.xml ---------------------------------------------------------------------- diff --git a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/metainfo.xml b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/metainfo.xml index 7a680a4..6a20af8 100644 --- a/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/metainfo.xml +++ b/metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/metainfo.xml @@ -420,6 +420,10 @@ <package> <name>metron-maas-service</name> </package> + <package> + <name>metron-performance</name> + </package> + </packages> </osSpecific> <osSpecific> http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-deployment/packaging/docker/deb-docker/pom.xml ---------------------------------------------------------------------- diff --git a/metron-deployment/packaging/docker/deb-docker/pom.xml b/metron-deployment/packaging/docker/deb-docker/pom.xml index 7fbe47b..cba2f98 100644 --- a/metron-deployment/packaging/docker/deb-docker/pom.xml +++ b/metron-deployment/packaging/docker/deb-docker/pom.xml @@ -155,6 +155,12 @@ <include>*.tar.gz</include> </includes> </resource> + <resource> + <directory>${metron_dir}/metron-contrib/metron-performance/target/</directory> + <includes> + <include>*.tar.gz</include> + </includes> + </resource> </resources> </configuration> </execution> http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-deployment/packaging/docker/rpm-docker/SPECS/metron.spec ---------------------------------------------------------------------- diff --git a/metron-deployment/packaging/docker/rpm-docker/SPECS/metron.spec b/metron-deployment/packaging/docker/rpm-docker/SPECS/metron.spec index cc01d7c..6b35dae 100644 --- a/metron-deployment/packaging/docker/rpm-docker/SPECS/metron.spec +++ b/metron-deployment/packaging/docker/rpm-docker/SPECS/metron.spec @@ -57,6 +57,7 @@ Source10: metron-config-%{full_version}-archive.tar.gz Source11: metron-management-%{full_version}-archive.tar.gz Source12: metron-maas-service-%{full_version}-archive.tar.gz Source13: metron-alerts-%{full_version}-archive.tar.gz +Source14: metron-performance-%{full_version}-archive.tar.gz %description Apache Metron provides a scalable advanced security analytics framework @@ -93,6 +94,7 @@ tar -xzf %{SOURCE10} -C %{buildroot}%{metron_home} tar -xzf %{SOURCE11} -C %{buildroot}%{metron_home} tar -xzf %{SOURCE12} -C %{buildroot}%{metron_home} tar -xzf %{SOURCE13} -C %{buildroot}%{metron_home} +tar -xzf %{SOURCE14} -C %{buildroot}%{metron_home} install %{buildroot}%{metron_home}/bin/metron-management-ui %{buildroot}/etc/init.d/ install %{buildroot}%{metron_home}/bin/metron-alerts-ui %{buildroot}/etc/init.d/ @@ -185,6 +187,25 @@ This package installs the Metron Elasticsearch files # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +%package performance +Summary: Metron Performance Tools +Group: Applications/Internet +Provides: performance = %{version} + +%description performance +This package installs performance tools useful for Metron + +%files performance +%defattr(-,root,root,755) +%dir %{metron_root} +%dir %{metron_home} +%dir %{metron_home}/bin +%dir %{metron_home}/lib +%{metron_home}/bin/load_tool.sh +%attr(0644,root,root) %{metron_home}/lib/metron-performance-%{full_version}.jar + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + %package data-management Summary: Metron Data Management Files Group: Applications/Internet http://git-wip-us.apache.org/repos/asf/metron/blob/46ad9d93/metron-deployment/packaging/docker/rpm-docker/pom.xml ---------------------------------------------------------------------- diff --git a/metron-deployment/packaging/docker/rpm-docker/pom.xml b/metron-deployment/packaging/docker/rpm-docker/pom.xml index 4ed2edd..ef1716c 100644 --- a/metron-deployment/packaging/docker/rpm-docker/pom.xml +++ b/metron-deployment/packaging/docker/rpm-docker/pom.xml @@ -191,6 +191,12 @@ <include>*.tar.gz</include> </includes> </resource> + <resource> + <directory>${metron_dir}/metron-contrib/metron-performance/target/</directory> + <includes> + <include>*.tar.gz</include> + </includes> + </resource> </resources> </configuration> </execution>