You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by rm...@apache.org on 2018/04/27 19:29:48 UTC
[08/50] [abbrv] metron git commit: METRON-1483: Create a tool to
monitor performance of the topologies closes apache/incubator-metron#958
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>