blob: 6f17442576b78bc1746c477598be8f83dd33d5f7 [file] [log] [blame]
/*
* 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.infra.solr.metrics;
import static java.lang.System.currentTimeMillis;
import static org.apache.ambari.infra.Solr.HADOOP_LOGS_COLLECTION;
import static org.apache.ambari.infra.TestUtil.runCommand;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import java.io.File;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import org.apache.ambari.infra.Solr;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class MetricsIT {
private static final Logger logger = LogManager.getLogger(MetricsIT.class);
private static MockMetricsServer metricsServer;
private static String shellScriptLocation;
@BeforeClass
public static void setupMetricsServer() throws Exception {
URL location = MetricsIT.class.getProtectionDomain().getCodeSource().getLocation();
String ambariFolder = new File(location.toURI()).getParentFile().getParentFile().getParentFile().getParent();
// TODO: use the same containers as ambari-infra-manager-it
shellScriptLocation = ambariFolder + "/ambari-infra/ambari-infra-solr-plugin/docker/infra-solr-docker-compose.sh";
logger.info("Creating new docker containers for testing Ambari Infra Solr Metrics plugin ...");
runCommand(new String[]{shellScriptLocation, "start"});
Solr solr = new Solr();
solr.waitUntilSolrIsUp();
solr.createSolrCollection(HADOOP_LOGS_COLLECTION);
metricsServer = new MockMetricsServer();
metricsServer.init();
}
@AfterClass
public static void tearDown() {
logger.info("shutdown containers");
runCommand(new String[]{shellScriptLocation, "stop"});
}
@Test
public void testAllMetricsArrived() throws Exception {
metricsServer.addExpectedMetrics(EXPECTED_METRICS);
long start = currentTimeMillis();
while (!metricsServer.getNotReceivedMetrics().isEmpty()) {
Thread.sleep(1000);
if (currentTimeMillis() - start > 30 * 1000)
break;
logger.info("Checking any metrics arrived...");
}
metricsServer.getNotReceivedMetrics().forEach(metric -> logger.info("Metric not received: {}", metric));
assertThat(metricsServer.getNotReceivedMetrics().isEmpty(), is(true));
}
private static final Set<String> EXPECTED_METRICS = new HashSet<String>() {{
add("infra.solr.jvm.threads.count");
add("infra.solr.jvm.threads.deadlock.count");
add("infra.solr.jvm.memory.heap.used");
add("infra.solr.jvm.memory.heap.max");
add("infra.solr.jvm.memory.non-heap.used");
add("infra.solr.jvm.memory.non-heap.max");
add("infra.solr.jvm.memory.pools.CMS-Old-Gen.used");
add("infra.solr.jvm.memory.pools.CMS-Old-Gen.max");
add("infra.solr.jvm.gc.ConcurrentMarkSweep.count");
add("infra.solr.jvm.gc.ConcurrentMarkSweep.time");
add("infra.solr.jvm.gc.ParNew.count");
add("infra.solr.jvm.gc.ParNew.time");
add("infra.solr.jvm.memory.pools.Metaspace.used");
add("infra.solr.jvm.memory.pools.Metaspace.max");
add("infra.solr.jvm.memory.pools.Par-Eden-Space.used");
add("infra.solr.jvm.memory.pools.Par-Eden-Space.max");
add("infra.solr.jvm.memory.pools.Par-Survivor-Space.used");
add("infra.solr.jvm.memory.pools.Par-Survivor-Space.max");
add("infra.solr.jvm.os.processCpuLoad");
add("infra.solr.jvm.os.systemCpuLoad");
add("infra.solr.jvm.os.openFileDescriptorCount");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE.updateHandler.adds");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE.updateHandler.deletesById");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE.updateHandler.errors");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE.updateHandler.docsPending");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./select.requests");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./select.requestTimes.avgRequestsPerSecond");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./select.requestTimes.avgTimePerRequest");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./select.requestTimes.medianRequestTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE./update.requests");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE./update.requestTimes.avgRequestsPerSecond");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE./update.requestTimes.avgTimePerRequest");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.UPDATE./update.requestTimes.medianRequestTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./get.requests");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./get.requestTimes.avgRequestsPerSecond");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./get.requestTimes.avgTimePerRequest");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./get.requestTimes.medianRequestTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.ADMIN./admin/luke.requests");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.ADMIN./admin/luke.requestTimes.avgRequestsPerSecond");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.ADMIN./admin/luke.requestTimes.avgTimePerRequest");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.ADMIN./admin/luke.requestTimes.medianRequestTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./query.requests");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./query.requestTimes.avgRequestsPerSecond");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./query.requestTimes.avgTimePerRequest");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.QUERY./query.requestTimes.medianRequestTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.INDEX.sizeInBytes");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.filterCache.hitratio");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.filterCache.size");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.filterCache.warmupTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.queryResultCache.hitratio");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.queryResultCache.size");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.queryResultCache.warmupTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.documentCache.hitratio");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.documentCache.size");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.searcher.documentCache.warmupTime");
add("infra.solr.core.hadoop_logs.shard1.replica_n1.CACHE.core.fieldCache.entries_count");
}};
}