Skip to content

Commit

Permalink
[JENKINS-73712] Anonymize OldDataMonitor details in admin-monitors.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Dohbedoh committed Sep 2, 2024
1 parent 998880b commit a7677df
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,16 @@

import com.cloudbees.jenkins.support.api.Component;
import com.cloudbees.jenkins.support.api.Container;
import com.cloudbees.jenkins.support.api.PrintedContent;
import com.cloudbees.jenkins.support.api.PrefilteredPrintedContent;
import com.cloudbees.jenkins.support.filter.ContentFilter;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.diagnosis.OldDataMonitor;
import hudson.diagnosis.ReverseProxySetupMonitor;
import hudson.model.AdministrativeMonitor;
import hudson.model.Saveable;
import hudson.security.Permission;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Comparator;
Expand All @@ -48,21 +50,24 @@
@Extension
public final class AdministrativeMonitors extends Component {

@NonNull
@Override
public String getDisplayName() {
return "Administrative monitors";
}

@NonNull
@Override
public Set<Permission> getRequiredPermissions() {
return Collections.singleton(Jenkins.ADMINISTER);
}

@Override
public void addContents(Container result) {
result.add(new PrintedContent("admin-monitors.md") {
result.add(new PrefilteredPrintedContent("admin-monitors.md") {

@Override
protected void printTo(PrintWriter out) {
protected void printTo(PrintWriter out, @NonNull ContentFilter filter) throws IOException {
out.println("Monitors");
out.println("========");
AdministrativeMonitor.all().stream()
Expand All @@ -78,16 +83,18 @@ protected void printTo(PrintWriter out) {
OldDataMonitor odm = (OldDataMonitor) monitor;
for (Map.Entry<Saveable, OldDataMonitor.VersionRange> entry :
odm.getData().entrySet()) {
out.println(" * Problematic object: `" + entry.getKey() + "`");
out.println(" * Problematic object: `"
+ filter.filter(entry.getKey().toString()) + "`");
OldDataMonitor.VersionRange value = entry.getValue();
String range = value.toString();
if (!range.isEmpty()) {
out.println(" - " + range);
}
String extra = value.extra;
if (!StringUtils.isBlank(extra)) {
out.println(
" - " + extra); // TODO could be a multiline stack trace, quote it
out.println(" - "
+ filter.filter(
extra)); // TODO could be a multiline stack trace, quote it
}
}
} else {
Expand All @@ -96,12 +103,6 @@ protected void printTo(PrintWriter out) {
}
});
}

@Override
public boolean shouldBeFiltered() {
// The information of this content is not sensible, so it doesn't need to be filtered.
return false;
}
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,16 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;

import com.cloudbees.jenkins.support.SupportPlugin;
import com.cloudbees.jenkins.support.SupportTestUtils;
import com.cloudbees.jenkins.support.api.Component;
import com.cloudbees.jenkins.support.filter.ContentFilter;
import com.cloudbees.jenkins.support.filter.ContentFilters;
import hudson.ExtensionList;
import hudson.diagnosis.OldDataMonitor;
import hudson.diagnosis.ReverseProxySetupMonitor;
import hudson.model.AdministrativeMonitor;
import hudson.model.FreeStyleProject;
import java.io.IOException;
import java.util.Objects;
import org.junit.Rule;
Expand Down Expand Up @@ -48,4 +52,21 @@ public void testAdministrativeMonitorsContent() throws IOException {
not(containsString("`" + monitor.id + "`" + System.getProperty("line.separator")
+ "--------------" + System.getProperty("line.separator") + "(active and enabled)"))));
}

@Test
public void testOldDataMonitorAnonymized() throws IOException {
ContentFilters.get().setEnabled(true);
FreeStyleProject p = j.createFreeStyleProject("sensitive-job-name");
ContentFilter filter = SupportPlugin.getDefaultContentFilter();
OldDataMonitor.report(p, "1.234");
String monitorsMdToString = SupportTestUtils.invokeComponentToString(
Objects.requireNonNull(ExtensionList.lookup(Component.class).get(AdministrativeMonitors.class)),
SupportPlugin.getDefaultContentFilter());
// Assert that there is an output for OldDataMonitor
assertThat(
monitorsMdToString,
containsString(
"`" + Objects.requireNonNull(AdministrativeMonitor.all().get(OldDataMonitor.class)).id + "`"));
assertThat(monitorsMdToString, not(containsString("sensitive-job-name")));
}
}

0 comments on commit a7677df

Please sign in to comment.