Skip to content

Commit b7b7fb3

Browse files
committed
SOLR-17638 Some CLI errors not logged when starting prometheus exporter
1 parent 4acc1df commit b7b7fb3

File tree

3 files changed

+65
-20
lines changed

3 files changed

+65
-20
lines changed

solr/packaging/test/bats_helper.bash

+3-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ shutdown_all() {
6464

6565
shutdown_exporter(){
6666
EXPORTER_PID=$(ps auxww | grep org.apache.solr.prometheus.exporter.SolrExporter | awk "/-classpath/"' {print $2}' | sort -r)
67-
kill -9 $EXPORTER_PID
67+
if [[ -n $EXPORTER_PID ]]; then
68+
kill -9 $EXPORTER_PID
69+
fi
6870
}
6971

7072
delete_all_collections() {

solr/packaging/test/test_prometheus.bats

+6
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,9 @@ teardown() {
4848
assert_output --partial 'core="COLL_NAME"'
4949
assert_output --partial 'bats-test'
5050
}
51+
52+
@test "unrecognized option logging" {
53+
run ! solr-exporter --unknown-option unknown-option
54+
55+
assert_output --partial 'Unrecognized option: --unknown-option'
56+
}

solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrExporter.java

+56-19
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.lang.invoke.MethodHandles;
2323
import java.net.InetSocketAddress;
2424
import java.nio.file.Paths;
25+
import java.util.Locale;
2526
import java.util.concurrent.ExecutorService;
2627
import org.apache.commons.cli.CommandLine;
2728
import org.apache.commons.cli.CommandLineParser;
@@ -31,6 +32,7 @@
3132
import org.apache.commons.cli.Options;
3233
import org.apache.commons.cli.ParseException;
3334
import org.apache.commons.codec.digest.DigestUtils;
35+
import org.apache.solr.common.util.EnvUtils;
3436
import org.apache.solr.common.util.ExecutorUtil;
3537
import org.apache.solr.common.util.IOUtils;
3638
import org.apache.solr.common.util.SolrNamedThreadFactory;
@@ -47,8 +49,7 @@ public class SolrExporter {
4749
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
4850

4951
private static final int DEFAULT_PORT = 8989;
50-
private static final String DEFAULT_BASE_URL = "http://localhost:8983/solr";
51-
private static final String DEFAULT_ZK_HOST = "";
52+
private static final String DEFAULT_BASE_URL = getDefaultSolrUrl();
5253
private static final String DEFAULT_CONFIG = "solr-exporter-config.xml";
5354
private static final int DEFAULT_SCRAPE_INTERVAL = 60;
5455
private static final Integer DEFAULT_NUM_THREADS = 1;
@@ -145,10 +146,12 @@ public static void main(String[] args) {
145146
Option.builder("s")
146147
.longOpt("solr-url")
147148
.hasArg()
148-
.argName("BASE_URL")
149+
.argName("HOST")
149150
.type(String.class)
150151
.desc(
151-
"Specify the Solr base URL when connecting to Solr in standalone mode. If omitted both the -b parameter and the -z parameter, connect to http://localhost:8983/solr. For example 'http://localhost:8983/solr'.")
152+
"Specify the Solr base URL when connecting to Solr in standalone mode. If omitted both the -s parameter and the -z parameter, connect to "
153+
+ DEFAULT_BASE_URL
154+
+ ".")
152155
.build();
153156
mainOptions.addOption(solrUrlOption);
154157

@@ -241,7 +244,9 @@ public static void main(String[] args) {
241244
.argName("ZK_HOST")
242245
.type(String.class)
243246
.desc(
244-
"Specify the ZooKeeper connection string when connecting to Solr in SolrCloud mode. If omitted both the -b parameter and the -z parameter, connect to http://localhost:8983/solr. For example 'localhost:2181/solr'.")
247+
"Specify the ZooKeeper connection string when connecting to Solr in SolrCloud mode. If omitted both the -s parameter and the -z parameter, connect to "
248+
+ DEFAULT_BASE_URL
249+
+ ".")
245250
.build();
246251
mainOptions.addOption(zkHostOption);
247252

@@ -259,24 +264,27 @@ public static void main(String[] args) {
259264
return;
260265
}
261266

262-
SolrScrapeConfiguration scrapeConfiguration = null;
263-
264-
String defaultClusterId = "";
265-
if (commandLine.hasOption(zkHostOption)) {
266-
String zkHost = commandLine.getOptionValue(zkHostOption, DEFAULT_ZK_HOST);
267+
final SolrScrapeConfiguration scrapeConfiguration;
268+
final String defaultClusterId;
269+
String zkHost = getZkHost(commandLine, zkHostOption);
270+
if (zkHost != null && !zkHost.isBlank()) {
267271
defaultClusterId = makeShortHash(zkHost);
268272
scrapeConfiguration = SolrScrapeConfiguration.solrCloud(zkHost);
269273
} else if (commandLine.hasOption(solrUrlOption)) {
270274
String baseUrl = commandLine.getOptionValue(solrUrlOption);
271275
defaultClusterId = makeShortHash(baseUrl);
272276
scrapeConfiguration = SolrScrapeConfiguration.standalone(baseUrl);
273-
}
274-
275-
if (scrapeConfiguration == null) {
276-
log.error(
277-
"Must provide either --{} or --{}",
278-
solrUrlOption.getLongOpt(),
279-
zkHostOption.getLongOpt());
277+
} else {
278+
String baseUrl = DEFAULT_BASE_URL;
279+
if (log.isInfoEnabled()) {
280+
log.info(
281+
"Neither --{} or --{} parameters provided so assuming solr url is {}",
282+
solrUrlOption.getLongOpt(),
283+
zkHostOption.getLongOpt(),
284+
baseUrl);
285+
}
286+
defaultClusterId = makeShortHash(baseUrl);
287+
scrapeConfiguration = SolrScrapeConfiguration.standalone(baseUrl);
280288
}
281289

282290
int port = commandLine.getParsedOptionValue(portOption, DEFAULT_PORT);
@@ -321,9 +329,11 @@ public static void main(String[] args) {
321329
clusterId,
322330
scrapeConfiguration);
323331
} catch (IOException e) {
324-
log.error("Failed to start Solr Prometheus Exporter: ", e);
332+
System.err.println("Failed to start Solr Prometheus Exporter: " + e.getMessage());
333+
exit(1);
325334
} catch (ParseException e) {
326-
log.error("Failed to parse command line arguments: ", e);
335+
System.err.println("Failed to parse command line arguments: " + e.getMessage());
336+
exit(1);
327337
}
328338
}
329339

@@ -349,4 +359,31 @@ private static MetricsConfiguration loadMetricsConfiguration(String configPath)
349359
private static String getSystemVariable(String name) {
350360
return System.getProperty(name, System.getenv(name));
351361
}
362+
363+
// copied over from CLIUtils
364+
public static void exit(int exitStatus) {
365+
try {
366+
System.exit(exitStatus);
367+
} catch (java.lang.SecurityException secExc) {
368+
if (exitStatus != 0)
369+
throw new RuntimeException("SolrExporter failed to exit with status " + exitStatus);
370+
}
371+
}
372+
373+
// copied over from CLIUtils
374+
private static String getDefaultSolrUrl() {
375+
// note that ENV_VAR syntax (and the env vars too) are mapped to env.var sys props
376+
String scheme = EnvUtils.getProperty("solr.url.scheme", "http");
377+
String host = EnvUtils.getProperty("solr.tool.host", "localhost");
378+
String port = EnvUtils.getProperty("jetty.port", "8983"); // from SOLR_PORT env
379+
return String.format(Locale.ROOT, "%s://%s:%s", scheme.toLowerCase(Locale.ROOT), host, port);
380+
}
381+
382+
public static String getZkHost(CommandLine cli, Option option) {
383+
String zkHost = cli.getOptionValue(option);
384+
if (zkHost != null && !zkHost.isBlank()) {
385+
return zkHost;
386+
}
387+
return EnvUtils.getProperty("zkHost");
388+
}
352389
}

0 commit comments

Comments
 (0)