Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions logstash-core/src/main/java/org/logstash/health/HelpUrl.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@

public class HelpUrl {
static final String BASE_URL;
static final boolean IS_MAJOR_9_PLUS;
static {
IS_MAJOR_9_PLUS = Integer.parseInt(Logstash.VERSION_MAJOR) >= 9;
final String versionAnchor;
if (Integer.parseInt(Logstash.VERSION_MAJOR) >= 9) {
if (IS_MAJOR_9_PLUS) {
versionAnchor = "master";
} else {
versionAnchor = String.format("%s.%s", Logstash.VERSION_MAJOR, Logstash.VERSION_MINOR);
Expand All @@ -38,8 +40,16 @@ public HelpUrl(final String page) {
this(page, null);
}

/**
* Returns a new {@code HelpUrl} with a version-appropriate anchor.
* <p>
* Logstash 9.0+ doc pages use fully-qualified anchors of the form
* {@code {page}-diagnosis-{anchor}} (e.g. {@code health-report-pipeline-status-diagnosis-loading}).
* Earlier versions use the short form {@code {anchor}} (e.g. {@code loading}).
*/
public HelpUrl withAnchor(final String anchor) {
return new HelpUrl(this.page, anchor);
final String resolved = IS_MAJOR_9_PLUS ? this.page + "-diagnosis-" + anchor : anchor;
return new HelpUrl(this.page, resolved);
}

private HelpUrl(final String page, final String anchor) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public void testLoading() {
assertThat(analysis.status, is(Status.YELLOW));
assertThat(analysis.diagnosis, is(notNullValue()));
assertThat(analysis.diagnosis.cause, containsString("loading"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#loading"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#" + expectedAnchor("health-report-pipeline-status", "loading")));
assertThat(analysis.impact, is(notNullValue()));
assertThat(analysis.impact.id, containsString("not_processing"));
assertThat(analysis.impact.impactAreas, contains(ImpactArea.PIPELINE_EXECUTION));
Expand All @@ -51,7 +51,7 @@ public void testFinished() {
assertThat(analysis.status, is(Status.YELLOW));
assertThat(analysis.diagnosis, is(notNullValue()));
assertThat(analysis.diagnosis.cause, containsString("finished"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#finished"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#" + expectedAnchor("health-report-pipeline-status", "finished")));
assertThat(analysis.impact, is(notNullValue()));
assertThat(analysis.impact.id, containsString("not_processing"));
assertThat(analysis.impact.impactAreas, contains(ImpactArea.PIPELINE_EXECUTION));
Expand All @@ -65,7 +65,7 @@ public void testTerminated() {
assertThat(analysis.status, is(Status.RED));
assertThat(analysis.diagnosis, is(notNullValue()));
assertThat(analysis.diagnosis.cause, containsString("error"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#terminated"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#" + expectedAnchor("health-report-pipeline-status", "terminated")));
assertThat(analysis.impact, is(notNullValue()));
assertThat(analysis.impact.id, containsString("not_processing"));
assertThat(analysis.impact.impactAreas, contains(ImpactArea.PIPELINE_EXECUTION));
Expand All @@ -79,12 +79,17 @@ public void testUnknown() {
assertThat(analysis.status, is(Status.UNKNOWN));
assertThat(analysis.diagnosis, is(notNullValue()));
assertThat(analysis.diagnosis.cause, containsString("not known"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#unknown"));
assertThat(analysis.diagnosis.helpUrl, containsString("/health-report-pipeline-status.html#" + expectedAnchor("health-report-pipeline-status", "unknown")));
assertThat(analysis.impact, is(notNullValue()));
assertThat(analysis.impact.id, containsString("not_processing"));
assertThat(analysis.impact.impactAreas, contains(ImpactArea.PIPELINE_EXECUTION));
}

/** Mirrors {@link HelpUrl#withAnchor} for use in assertions. */
private static String expectedAnchor(final String page, final String anchor) {
return HelpUrl.IS_MAJOR_9_PLUS ? page + "-diagnosis-" + anchor : anchor;
}

static PipelineIndicator.Details detailsForStatus(PipelineIndicator.Status status) {
return new PipelineIndicator.Details(status);
}
Expand Down
Loading