blob: 7ca2d4144a15dbb559d9e3838afeddbcba5fc2be [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.solr.prometheus.scraper;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import io.prometheus.client.Collector;
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.prometheus.PrometheusExporterTestBase;
import org.apache.solr.prometheus.collector.MetricSamples;
import org.apache.solr.prometheus.exporter.MetricsConfiguration;
import org.apache.solr.prometheus.utils.Helpers;
import org.apache.solr.common.util.SolrNamedThreadFactory;
import org.apache.solr.util.RestTestBase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class SolrStandaloneScraperTest extends RestTestBase {
private static MetricsConfiguration configuration;
private static SolrStandaloneScraper solrScraper;
private static ExecutorService executor;
private static HttpSolrClient solrClient;
@BeforeClass
public static void setupBeforeClass() throws Exception {
File tmpSolrHome = createTempDir().toFile();
tmpSolrHome.deleteOnExit();
FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
initCore("solrconfig.xml", "managed-schema");
createJettyAndHarness(
tmpSolrHome.getAbsolutePath(),
"solrconfig.xml",
"managed-schema",
"/solr",
true,
null);
executor = ExecutorUtil.newMDCAwareFixedThreadPool(25, new SolrNamedThreadFactory("solr-cloud-scraper-tests"));
configuration = Helpers.loadConfiguration("conf/prometheus-solr-exporter-scraper-test-config.xml");
solrClient = getHttpSolrClient(restTestHarness.getAdminURL());
solrScraper = new SolrStandaloneScraper(solrClient, executor);
NoOpResponseParser responseParser = new NoOpResponseParser();
responseParser.setWriterType("json");
solrClient.setParser(responseParser);
Helpers.indexAllDocs(solrClient);
}
@AfterClass
public static void cleanUp() throws Exception {
IOUtils.closeQuietly(solrScraper);
IOUtils.closeQuietly(solrClient);
cleanUpHarness();
if (null != executor) {
executor.shutdownNow();
executor = null;
}
if (null != jetty) {
jetty.stop();
jetty = null;
}
solrScraper = null;
solrClient = null;
}
@Test
public void pingCollections() throws IOException {
Map<String, MetricSamples> collectionMetrics = solrScraper.pingAllCollections(
configuration.getPingConfiguration().get(0));
assertTrue(collectionMetrics.isEmpty());
}
@Test
public void pingCores() throws Exception {
Map<String, MetricSamples> allCoreMetrics = solrScraper.pingAllCores(
configuration.getPingConfiguration().get(0));
assertEquals(1, allCoreMetrics.size());
List<Collector.MetricFamilySamples> allSamples = allCoreMetrics.get("collection1").asList();
Collector.MetricFamilySamples samples = allSamples.get(0);
assertEquals("solr_ping", samples.name);
assertEquals(1, samples.samples.size());
assertEquals(1.0, samples.samples.get(0).value, 0.001);
assertEquals(Collections.singletonList("base_url"), samples.samples.get(0).labelNames);
assertEquals(Collections.singletonList(restTestHarness.getAdminURL()), samples.samples.get(0).labelValues);
}
@Test
public void queryCollections() throws Exception {
List<Collector.MetricFamilySamples> collection1Metrics = solrScraper.collections(
configuration.getCollectionsConfiguration().get(0)).asList();
assertTrue(collection1Metrics.isEmpty());
}
@Test
public void metricsForHost() throws Exception {
Map<String, MetricSamples> metricsByHost = solrScraper.metricsForAllHosts(configuration.getMetricsConfiguration().get(0));
assertEquals(1, metricsByHost.size());
List<Collector.MetricFamilySamples> replicaSamples = metricsByHost.get(restTestHarness.getAdminURL()).asList();
assertEquals(1, replicaSamples.size());
assertEquals(1, replicaSamples.size());
assertEquals("solr_metrics_jvm_buffers", replicaSamples.get(0).name);
}
@Test
public void search() throws Exception {
List<Collector.MetricFamilySamples> samples = solrScraper.search(configuration.getSearchConfiguration().get(0)).asList();
assertEquals(1, samples.size());
Collector.MetricFamilySamples sampleFamily = samples.get(0);
assertEquals("solr_facets_category", sampleFamily.name);
assertEquals(PrometheusExporterTestBase.FACET_VALUES.size(), sampleFamily.samples.size());
for (Collector.MetricFamilySamples.Sample sample : sampleFamily.samples) {
assertEquals(PrometheusExporterTestBase.FACET_VALUES.get(sample.labelValues.get(0)), sample.value, 0.001);
}
}
}