Repository: ambari Updated Branches: refs/heads/branch-3.0-ams e33b54557 -> 4613b471e
http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/MetricAnomalyDetector.scala ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/MetricAnomalyDetector.scala b/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/MetricAnomalyDetector.scala deleted file mode 100644 index 324058b..0000000 --- a/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/MetricAnomalyDetector.scala +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.ambari.metrics.spark - - -import java.io.{FileInputStream, IOException, InputStream} -import java.util -import java.util.Properties -import java.util.logging.LogManager - -import com.fasterxml.jackson.databind.ObjectMapper -import org.apache.ambari.metrics.alertservice.prototype.core.MetricsCollectorInterface -import org.apache.spark.SparkConf -import org.apache.spark.streaming._ -import org.apache.spark.streaming.kafka._ -import org.apache.ambari.metrics.alertservice.prototype.methods.{AnomalyDetectionTechnique, MetricAnomaly} -import org.apache.ambari.metrics.alertservice.prototype.methods.ema.{EmaModelLoader, EmaTechnique} -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics -import org.apache.log4j.Logger -import org.apache.spark.storage.StorageLevel - -object MetricAnomalyDetector { - - /* - Load current EMA model - Filter step - Check if anomaly - Collect / Write to AMS / Print. - */ - -// var brokers = "avijayan-ams-1.openstacklocal:2181,avijayan-ams-2.openstacklocal:2181,avijayan-ams-3.openstacklocal:2181" -// var groupId = "ambari-metrics-group" -// var topicName = "ambari-metrics-topic" -// var numThreads = 1 -// val anomalyDetectionModels: Array[AnomalyDetectionTechnique] = Array[AnomalyDetectionTechnique]() -// -// def readProperties(propertiesFile: String): Properties = try { -// val properties = new Properties -// var inputStream = ClassLoader.getSystemResourceAsStream(propertiesFile) -// if (inputStream == null) inputStream = new FileInputStream(propertiesFile) -// properties.load(inputStream) -// properties -// } catch { -// case ioEx: IOException => -// null -// } -// -// def main(args: Array[String]): Unit = { -// -// @transient -// lazy val log = org.apache.log4j.LogManager.getLogger("MetricAnomalyDetectorLogger") -// -// if (args.length < 1) { -// System.err.println("Usage: MetricSparkConsumer <input-config-file>") -// System.exit(1) -// } -// -// //Read properties -// val properties = readProperties(propertiesFile = args(0)) -// -// //Load EMA parameters - w, n -// val emaW = properties.getProperty("emaW").toDouble -// val emaN = properties.getProperty("emaN").toDouble -// -// //collector info -// val collectorHost: String = properties.getProperty("collectorHost") -// val collectorPort: String = properties.getProperty("collectorPort") -// val collectorProtocol: String = properties.getProperty("collectorProtocol") -// val anomalyMetricPublisher = new MetricsCollectorInterface(collectorHost, collectorProtocol, collectorPort) -// -// //Instantiate Kafka stream reader -// val sparkConf = new SparkConf().setAppName("AmbariMetricsAnomalyDetector") -// val streamingContext = new StreamingContext(sparkConf, Duration(10000)) -// -// val topicsSet = topicName.toSet -// val kafkaParams = Map[String, String]("metadata.broker.list" -> brokers) -//// val stream = KafkaUtils.createDirectStream() -// -// val kafkaStream = KafkaUtils.createStream(streamingContext, zkQuorum, groupId, Map(topicName -> numThreads), StorageLevel.MEMORY_AND_DISK_SER_2) -// kafkaStream.print() -// -// var timelineMetricsStream = kafkaStream.map( message => { -// val mapper = new ObjectMapper -// val metrics = mapper.readValue(message._2, classOf[TimelineMetrics]) -// metrics -// }) -// timelineMetricsStream.print() -// -// var appMetricStream = timelineMetricsStream.map( timelineMetrics => { -// (timelineMetrics.getMetrics.get(0).getAppId, timelineMetrics) -// }) -// appMetricStream.print() -// -// var filteredAppMetricStream = appMetricStream.filter( appMetricTuple => { -// appIds.contains(appMetricTuple._1) -// } ) -// filteredAppMetricStream.print() -// -// filteredAppMetricStream.foreachRDD( rdd => { -// rdd.foreach( appMetricTuple => { -// val timelineMetrics = appMetricTuple._2 -// logger.info("Received Metric (1): " + timelineMetrics.getMetrics.get(0).getMetricName) -// log.info("Received Metric (2): " + timelineMetrics.getMetrics.get(0).getMetricName) -// for (timelineMetric <- timelineMetrics.getMetrics) { -// var anomalies = emaModel.test(timelineMetric) -// anomalyMetricPublisher.publish(anomalies) -// } -// }) -// }) -// -// streamingContext.start() -// streamingContext.awaitTermination() -// } - } http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/SparkPhoenixReader.scala ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/SparkPhoenixReader.scala b/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/SparkPhoenixReader.scala deleted file mode 100644 index ccded6b..0000000 --- a/ambari-metrics/ambari-metrics-anomaly-detector/src/main/scala/org/apache/ambari/metrics/spark/SparkPhoenixReader.scala +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.ambari.metrics.spark - -import org.apache.ambari.metrics.alertservice.prototype.methods.ema.EmaTechnique -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric -import org.apache.spark.sql.SQLContext -import org.apache.spark.{SparkConf, SparkContext} - -object SparkPhoenixReader { - - def main(args: Array[String]) { - - if (args.length < 6) { - System.err.println("Usage: SparkPhoenixReader <metric_name> <appId> <hostname> <weight> <timessdev> <phoenixConnectionString> <model_dir>") - System.exit(1) - } - - var metricName = args(0) - var appId = args(1) - var hostname = args(2) - var weight = args(3).toDouble - var timessdev = args(4).toInt - var phoenixConnectionString = args(5) //avijayan-ams-3.openstacklocal:61181:/ams-hbase-unsecure - var modelDir = args(6) - - val conf = new SparkConf() - conf.set("spark.app.name", "AMSAnomalyModelBuilder") - //conf.set("spark.master", "spark://avijayan-ams-2.openstacklocal:7077") - - var sc = new SparkContext(conf) - val sqlContext = new SQLContext(sc) - - val currentTime = System.currentTimeMillis() - val oneDayBack = currentTime - 24*60*60*1000 - - val df = sqlContext.load("org.apache.phoenix.spark", Map("table" -> "METRIC_RECORD", "zkUrl" -> phoenixConnectionString)) - df.registerTempTable("METRIC_RECORD") - val result = sqlContext.sql("SELECT METRIC_NAME, HOSTNAME, APP_ID, SERVER_TIME, METRIC_SUM, METRIC_COUNT FROM METRIC_RECORD " + - "WHERE METRIC_NAME = '" + metricName + "' AND HOSTNAME = '" + hostname + "' AND APP_ID = '" + appId + "' AND SERVER_TIME < " + currentTime + " AND SERVER_TIME > " + oneDayBack) - - var metricValues = new java.util.TreeMap[java.lang.Long, java.lang.Double] - result.collect().foreach( - t => metricValues.put(t.getLong(3), t.getDouble(4) / t.getInt(5)) - ) - - //val seriesName = result.head().getString(0) - //val hostname = result.head().getString(1) - //val appId = result.head().getString(2) - - val timelineMetric = new TimelineMetric() - timelineMetric.setMetricName(metricName) - timelineMetric.setAppId(appId) - timelineMetric.setHostName(hostname) - timelineMetric.setMetricValues(metricValues) - - var emaModel = new EmaTechnique(weight, timessdev) - emaModel.test(timelineMetric) - emaModel.save(sc, modelDir) - - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestEmaTechnique.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestEmaTechnique.java b/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestEmaTechnique.java deleted file mode 100644 index a0b06e6..0000000 --- a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestEmaTechnique.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * 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.ambari.metrics.alertservice.prototype; - -import org.apache.ambari.metrics.alertservice.prototype.core.RFunctionInvoker; -import org.apache.ambari.metrics.alertservice.prototype.methods.MetricAnomaly; -import org.apache.ambari.metrics.alertservice.prototype.methods.ema.EmaTechnique; -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric; -import org.junit.Assert; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.List; -import java.util.TreeMap; - -import static org.apache.ambari.metrics.alertservice.prototype.TestRFunctionInvoker.getTS; - -public class TestEmaTechnique { - - private static double[] ts; - private static String fullFilePath; - - @BeforeClass - public static void init() throws URISyntaxException { - - Assume.assumeTrue(System.getenv("R_HOME") != null); - ts = getTS(1000); - URL url = ClassLoader.getSystemResource("R-scripts"); - fullFilePath = new File(url.toURI()).getAbsolutePath(); - RFunctionInvoker.setScriptsDir(fullFilePath); - } - - @Test - public void testEmaInitialization() { - - EmaTechnique ema = new EmaTechnique(0.5, 3); - Assert.assertTrue(ema.getTrackedEmas().isEmpty()); - Assert.assertTrue(ema.getStartingWeight() == 0.5); - Assert.assertTrue(ema.getStartTimesSdev() == 2); - } - - @Test - public void testEma() { - EmaTechnique ema = new EmaTechnique(0.5, 3); - - long now = System.currentTimeMillis(); - - TimelineMetric metric1 = new TimelineMetric(); - metric1.setMetricName("M1"); - metric1.setHostName("H1"); - metric1.setStartTime(now - 1000); - metric1.setAppId("A1"); - metric1.setInstanceId(null); - metric1.setType("Integer"); - - //Train - TreeMap<Long, Double> metricValues = new TreeMap<Long, Double>(); - for (int i = 0; i < 50; i++) { - double metric = 20000 + Math.random(); - metricValues.put(now - i * 100, metric); - } - metric1.setMetricValues(metricValues); - List<MetricAnomaly> anomalyList = ema.test(metric1); -// Assert.assertTrue(anomalyList.isEmpty()); - - metricValues = new TreeMap<Long, Double>(); - for (int i = 0; i < 50; i++) { - double metric = 20000 + Math.random(); - metricValues.put(now - i * 100, metric); - } - metric1.setMetricValues(metricValues); - anomalyList = ema.test(metric1); - Assert.assertTrue(!anomalyList.isEmpty()); - int l1 = anomalyList.size(); - - Assert.assertTrue(ema.updateModel(metric1, false, 20)); - anomalyList = ema.test(metric1); - int l2 = anomalyList.size(); - Assert.assertTrue(l2 < l1); - - Assert.assertTrue(ema.updateModel(metric1, true, 50)); - anomalyList = ema.test(metric1); - int l3 = anomalyList.size(); - Assert.assertTrue(l3 > l2 && l3 > l1); - - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestRFunctionInvoker.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestRFunctionInvoker.java b/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestRFunctionInvoker.java deleted file mode 100644 index d98ef0c..0000000 --- a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestRFunctionInvoker.java +++ /dev/null @@ -1,161 +0,0 @@ -/** - * 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 - * <p> - * http://www.apache.org/licenses/LICENSE-2.0 - * <p> - * 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.ambari.metrics.alertservice.prototype; - -import org.apache.ambari.metrics.alertservice.prototype.common.ResultSet; -import org.apache.ambari.metrics.alertservice.prototype.common.DataSeries; -import org.apache.ambari.metrics.alertservice.prototype.core.RFunctionInvoker; -import org.apache.ambari.metrics.alertservice.seriesgenerator.UniformMetricSeries; -import org.apache.commons.lang.ArrayUtils; -import org.junit.Assert; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -public class TestRFunctionInvoker { - - private static String metricName = "TestMetric"; - private static double[] ts; - private static String fullFilePath; - - @BeforeClass - public static void init() throws URISyntaxException { - - Assume.assumeTrue(System.getenv("R_HOME") != null); - ts = getTS(1000); - URL url = ClassLoader.getSystemResource("R-scripts"); - fullFilePath = new File(url.toURI()).getAbsolutePath(); - RFunctionInvoker.setScriptsDir(fullFilePath); - } - - @Test - public void testTukeys() throws URISyntaxException { - - double[] train_ts = ArrayUtils.subarray(ts, 0, 750); - double[] train_x = getRandomData(750); - DataSeries trainData = new DataSeries(metricName, train_ts, train_x); - - double[] test_ts = ArrayUtils.subarray(ts, 750, 1000); - double[] test_x = getRandomData(250); - test_x[50] = 5.5; //Anomaly - DataSeries testData = new DataSeries(metricName, test_ts, test_x); - Map<String, String> configs = new HashMap(); - configs.put("tukeys.n", "3"); - - ResultSet rs = RFunctionInvoker.tukeys(trainData, testData, configs); - Assert.assertEquals(rs.resultset.size(), 2); - Assert.assertEquals(rs.resultset.get(1)[0], 5.5, 0.1); - - } - - public static void main(String[] args) throws URISyntaxException { - - String metricName = "TestMetric"; - double[] ts = getTS(1000); - URL url = ClassLoader.getSystemResource("R-scripts"); - String fullFilePath = new File(url.toURI()).getAbsolutePath(); - RFunctionInvoker.setScriptsDir(fullFilePath); - - double[] train_ts = ArrayUtils.subarray(ts, 0, 750); - double[] train_x = getRandomData(750); - DataSeries trainData = new DataSeries(metricName, train_ts, train_x); - - double[] test_ts = ArrayUtils.subarray(ts, 750, 1000); - double[] test_x = getRandomData(250); - test_x[50] = 5.5; //Anomaly - DataSeries testData = new DataSeries(metricName, test_ts, test_x); - ResultSet rs; - - Map<String, String> configs = new HashMap(); - - System.out.println("TUKEYS"); - configs.put("tukeys.n", "3"); - rs = RFunctionInvoker.tukeys(trainData, testData, configs); - rs.print(); - System.out.println("--------------"); - -// System.out.println("EMA Global"); -// configs.put("ema.n", "3"); -// configs.put("ema.w", "0.8"); -// rs = RFunctionInvoker.ema_global(trainData, testData, configs); -// rs.print(); -// System.out.println("--------------"); -// -// System.out.println("EMA Daily"); -// rs = RFunctionInvoker.ema_daily(trainData, testData, configs); -// rs.print(); -// System.out.println("--------------"); -// -// configs.put("ks.p_value", "0.00005"); -// System.out.println("KS Test"); -// rs = RFunctionInvoker.ksTest(trainData, testData, configs); -// rs.print(); -// System.out.println("--------------"); -// - ts = getTS(5000); - train_ts = ArrayUtils.subarray(ts, 0, 4800); - train_x = getRandomData(4800); - trainData = new DataSeries(metricName, train_ts, train_x); - test_ts = ArrayUtils.subarray(ts, 4800, 5000); - test_x = getRandomData(200); - for (int i = 0; i < 200; i++) { - test_x[i] = test_x[i] * 5; - } - testData = new DataSeries(metricName, test_ts, test_x); - configs.put("hsdev.n", "3"); - configs.put("hsdev.nhp", "3"); - configs.put("hsdev.interval", "86400000"); - configs.put("hsdev.period", "604800000"); - System.out.println("HSdev"); - rs = RFunctionInvoker.hsdev(trainData, testData, configs); - rs.print(); - System.out.println("--------------"); - - } - - static double[] getTS(int n) { - long currentTime = System.currentTimeMillis(); - double[] ts = new double[n]; - currentTime = currentTime - (currentTime % (5 * 60 * 1000)); - - for (int i = 0, j = n - 1; i < n; i++, j--) { - ts[j] = currentTime; - currentTime = currentTime - (5 * 60 * 1000); - } - return ts; - } - - static double[] getRandomData(int n) { - - UniformMetricSeries metricSeries = new UniformMetricSeries(10, 0.1,0.05, 0.6, 0.8, true); - return metricSeries.getSeries(n); - -// double[] metrics = new double[n]; -// Random random = new Random(); -// for (int i = 0; i < n; i++) { -// metrics[i] = random.nextDouble(); -// } -// return metrics; - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestTukeys.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestTukeys.java b/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestTukeys.java deleted file mode 100644 index 86590bd..0000000 --- a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/prototype/TestTukeys.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * 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.ambari.metrics.alertservice.prototype; - -import org.apache.ambari.metrics.alertservice.prototype.core.MetricsCollectorInterface; -import org.apache.ambari.metrics.alertservice.prototype.core.RFunctionInvoker; -import org.apache.ambari.metrics.alertservice.prototype.methods.MetricAnomaly; -import org.apache.ambari.metrics.alertservice.prototype.methods.ema.EmaTechnique; -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric; -import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.UnknownHostException; -import java.util.List; -import java.util.TreeMap; - -public class TestTukeys { - - @BeforeClass - public static void init() throws URISyntaxException { - Assume.assumeTrue(System.getenv("R_HOME") != null); - } - - @Test - public void testPointInTimeDetectionSystem() throws UnknownHostException, URISyntaxException { - - URL url = ClassLoader.getSystemResource("R-scripts"); - String fullFilePath = new File(url.toURI()).getAbsolutePath(); - RFunctionInvoker.setScriptsDir(fullFilePath); - - MetricsCollectorInterface metricsCollectorInterface = new MetricsCollectorInterface("avijayan-ams-1.openstacklocal","http", "6188"); - - EmaTechnique ema = new EmaTechnique(0.5, 3); - long now = System.currentTimeMillis(); - - TimelineMetric metric1 = new TimelineMetric(); - metric1.setMetricName("mm9"); - metric1.setHostName(MetricsCollectorInterface.getDefaultLocalHostName()); - metric1.setStartTime(now); - metric1.setAppId("aa9"); - metric1.setInstanceId(null); - metric1.setType("Integer"); - - //Train - TreeMap<Long, Double> metricValues = new TreeMap<Long, Double>(); - - //2hr data. - for (int i = 0; i < 120; i++) { - double metric = 20000 + Math.random(); - metricValues.put(now - i * 60 * 1000, metric); - } - metric1.setMetricValues(metricValues); - TimelineMetrics timelineMetrics = new TimelineMetrics(); - timelineMetrics.addOrMergeTimelineMetric(metric1); - - metricsCollectorInterface.emitMetrics(timelineMetrics); - - List<MetricAnomaly> anomalyList = ema.test(metric1); - metricsCollectorInterface.publish(anomalyList); -// -// PointInTimeADSystem pointInTimeADSystem = new PointInTimeADSystem(ema, metricsCollectorInterface, 3, 5*60*1000, 15*60*1000); -// pointInTimeADSystem.runOnce(); -// -// List<MetricAnomaly> anomalyList2 = ema.test(metric1); -// -// pointInTimeADSystem.runOnce(); -// List<MetricAnomaly> anomalyList3 = ema.test(metric1); -// -// pointInTimeADSystem.runOnce(); -// List<MetricAnomaly> anomalyList4 = ema.test(metric1); -// -// pointInTimeADSystem.runOnce(); -// List<MetricAnomaly> anomalyList5 = ema.test(metric1); -// -// pointInTimeADSystem.runOnce(); -// List<MetricAnomaly> anomalyList6 = ema.test(metric1); -// -// Assert.assertTrue(anomalyList6.size() < anomalyList.size()); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/seriesgenerator/MetricSeriesGeneratorTest.java ---------------------------------------------------------------------- diff --git a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/seriesgenerator/MetricSeriesGeneratorTest.java b/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/seriesgenerator/MetricSeriesGeneratorTest.java deleted file mode 100644 index fe7dba9..0000000 --- a/ambari-metrics/ambari-metrics-anomaly-detector/src/test/java/org/apache/ambari/metrics/alertservice/seriesgenerator/MetricSeriesGeneratorTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * 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.ambari.metrics.alertservice.seriesgenerator; - -import org.junit.Assert; -import org.junit.Test; - -public class MetricSeriesGeneratorTest { - - @Test - public void testUniformSeries() { - - UniformMetricSeries metricSeries = new UniformMetricSeries(5, 0.2, 0, 0, 0, true); - Assert.assertTrue(metricSeries.nextValue() <= 6 && metricSeries.nextValue() >= 4); - - double[] uniformSeries = MetricSeriesGeneratorFactory.createUniformSeries(50, 10, 0.2, 0.1, 0.4, 0.5, true); - Assert.assertTrue(uniformSeries.length == 50); - - for (int i = 0; i < uniformSeries.length; i++) { - double value = uniformSeries[i]; - - if (value > 10 * 1.2) { - Assert.assertTrue(value >= 10 * 1.4 && value <= 10 * 1.6); - } else { - Assert.assertTrue(value >= 10 * 0.8 && value <= 10 * 1.2); - } - } - } - - @Test - public void testNormalSeries() { - NormalMetricSeries metricSeries = new NormalMetricSeries(0, 1, 0, 0, 0, true); - Assert.assertTrue(metricSeries.nextValue() <= 3 && metricSeries.nextValue() >= -3); - } - - @Test - public void testMonotonicSeries() { - - MonotonicMetricSeries metricSeries = new MonotonicMetricSeries(0, 0.5, 0, 0, 0, 0, true); - Assert.assertTrue(metricSeries.nextValue() == 0); - Assert.assertTrue(metricSeries.nextValue() == 0.5); - - double[] incSeries = MetricSeriesGeneratorFactory.createMonotonicSeries(20, 0, 0.5, 0, 0, 0, 0, true); - Assert.assertTrue(incSeries.length == 20); - for (int i = 0; i < incSeries.length; i++) { - Assert.assertTrue(incSeries[i] == i * 0.5); - } - } - - @Test - public void testDualBandSeries() { - double[] dualBandSeries = MetricSeriesGeneratorFactory.getDualBandSeries(30, 5, 0.2, 5, 15, 0.3, 4); - Assert.assertTrue(dualBandSeries[0] >= 4 && dualBandSeries[0] <= 6); - Assert.assertTrue(dualBandSeries[4] >= 4 && dualBandSeries[4] <= 6); - Assert.assertTrue(dualBandSeries[5] >= 10.5 && dualBandSeries[5] <= 19.5); - Assert.assertTrue(dualBandSeries[8] >= 10.5 && dualBandSeries[8] <= 19.5); - Assert.assertTrue(dualBandSeries[9] >= 4 && dualBandSeries[9] <= 6); - } - - @Test - public void testStepSeries() { - double[] stepSeries = MetricSeriesGeneratorFactory.getStepFunctionSeries(30, 10, 0, 0, 5, 5, 0.5, true); - - Assert.assertTrue(stepSeries[0] == 10); - Assert.assertTrue(stepSeries[4] == 10); - - Assert.assertTrue(stepSeries[5] == 10*1.5); - Assert.assertTrue(stepSeries[9] == 10*1.5); - - Assert.assertTrue(stepSeries[10] == 10*1.5*1.5); - Assert.assertTrue(stepSeries[14] == 10*1.5*1.5); - } - - @Test - public void testSteadySeriesWithTurbulence() { - double[] steadySeriesWithTurbulence = MetricSeriesGeneratorFactory.getSteadySeriesWithTurbulentPeriod(30, 5, 0, 1, 1, 5, 1); - - int count = 0; - for (int i = 0; i < steadySeriesWithTurbulence.length; i++) { - if (steadySeriesWithTurbulence[i] == 10) { - count++; - } - } - Assert.assertTrue(count == 5); - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/4613b471/ambari-metrics/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-metrics/pom.xml b/ambari-metrics/pom.xml index a68ac63..fb2997a 100644 --- a/ambari-metrics/pom.xml +++ b/ambari-metrics/pom.xml @@ -34,7 +34,7 @@ <module>ambari-metrics-grafana</module> <module>ambari-metrics-assembly</module> <module>ambari-metrics-host-aggregator</module> - <module>ambari-metrics-anomaly-detector</module> + <module>ambari-metrics-anomaly-detection-service</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
