From ed9d29cf80f9b02322b98fcff4b26f76a4ea9cf3 Mon Sep 17 00:00:00 2001 From: James Johnson <2965841+jrjohnson87@users.noreply.github.com> Date: Thu, 30 Nov 2017 11:22:44 +0000 Subject: [PATCH 1/2] Add support for customProjectName property in ProjectNameRenderer to override build.getParent().getName() * Add support for specifying project name * Fixed compile issue * Fix unit test * Fix test * Debug tests * Add unit tests --- .../plugins/influxdb/InfluxDbPublisher.java | 16 ++++- .../renderer/ProjectNameRenderer.java | 15 +++-- .../CustomDataMapPointGeneratorTest.java | 2 +- .../CustomDataPointGeneratorTest.java | 2 +- .../renderer/ProjectNameRendererTest.java | 59 +++++++++++++++++++ 5 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 src/test/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRendererTest.java diff --git a/src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublisher.java b/src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublisher.java index 97a42781..a24c733c 100644 --- a/src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublisher.java +++ b/src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublisher.java @@ -45,6 +45,11 @@ public class InfluxDbPublisher extends Notifier implements SimpleBuildStep{ private String selectedTarget; + /** + * custom project name, overrides the project name with the specified value + */ + private String customProjectName; + /** * custom prefix, for example in multi branch pipelines, where every build is named * after the branch built and thus you have different builds called 'master' that report @@ -114,6 +119,15 @@ public void setSelectedTarget(String target) { this.selectedTarget = target; } + public String getCustomProjectName() { + return customProjectName; + } + + @DataBoundSetter + public void setCustomProjectName(String customProjectName) { + this.customProjectName = customProjectName; + } + public String getCustomPrefix() { return customPrefix; } @@ -179,7 +193,7 @@ public BuildStepDescriptor getDescriptor() { public void perform(Run build, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException { - MeasurementRenderer> measurementRenderer = new ProjectNameRenderer(customPrefix); + MeasurementRenderer> measurementRenderer = new ProjectNameRenderer(customPrefix, customProjectName); // get the target from the job's config Target target = getTarget(); diff --git a/src/main/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRenderer.java b/src/main/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRenderer.java index 04130a4b..bca73883 100644 --- a/src/main/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRenderer.java +++ b/src/main/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRenderer.java @@ -7,23 +7,26 @@ public class ProjectNameRenderer implements MeasurementRenderer> { private String customPrefix; + private String customProjectName; - public ProjectNameRenderer(String customPrefix) { + public ProjectNameRenderer(String customPrefix, String customProjectName) { this.customPrefix = Strings.emptyToNull(customPrefix); + this.customProjectName = Strings.emptyToNull(customProjectName); } @Override public String render(Run input) { - return measurementName(projectName(customPrefix, input)); + return measurementName(projectName(customPrefix, customProjectName, input)); } - protected String projectName(String prefix, Run build) { + protected String projectName(String prefix, String projectName, Run build) { + if (this.customProjectName == null) { + this.customProjectName = build.getParent().getName(); + } return Joiner .on("_") .skipNulls() - .join(Strings.emptyToNull(prefix), build - .getParent() - .getName()); + .join(Strings.emptyToNull(prefix), Strings.emptyToNull(this.customProjectName)); } protected String measurementName(String measurement) { diff --git a/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataMapPointGeneratorTest.java b/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataMapPointGeneratorTest.java index ebb52812..a7047c90 100644 --- a/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataMapPointGeneratorTest.java +++ b/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataMapPointGeneratorTest.java @@ -27,7 +27,7 @@ public class CustomDataMapPointGeneratorTest { public void before() { build = Mockito.mock(Run.class); job = Mockito.mock(Job.class); - measurementRenderer = new ProjectNameRenderer(CUSTOM_PREFIX); + measurementRenderer = new ProjectNameRenderer(CUSTOM_PREFIX, null); Mockito.when(build.getNumber()).thenReturn(BUILD_NUMBER); Mockito.when(build.getParent()).thenReturn(job); diff --git a/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataPointGeneratorTest.java b/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataPointGeneratorTest.java index 4ea0b506..1c5b1674 100644 --- a/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataPointGeneratorTest.java +++ b/src/test/java/jenkinsci/plugins/influxdb/generators/CustomDataPointGeneratorTest.java @@ -27,7 +27,7 @@ public class CustomDataPointGeneratorTest { public void before() { build = Mockito.mock(Run.class); job = Mockito.mock(Job.class); - measurementRenderer = new ProjectNameRenderer(CUSTOM_PREFIX); + measurementRenderer = new ProjectNameRenderer(CUSTOM_PREFIX, null); Mockito.when(build.getNumber()).thenReturn(BUILD_NUMBER); Mockito.when(build.getParent()).thenReturn(job); diff --git a/src/test/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRendererTest.java b/src/test/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRendererTest.java new file mode 100644 index 00000000..5987e507 --- /dev/null +++ b/src/test/java/jenkinsci/plugins/influxdb/renderer/ProjectNameRendererTest.java @@ -0,0 +1,59 @@ +package jenkinsci.plugins.influxdb.renderer; + +import hudson.model.Job; +import hudson.model.Run; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +public class ProjectNameRendererTest { + + public static final String JOB_NAME = "master"; + public static final int BUILD_NUMBER = 11; + public static final String CUSTOM_PREFIX = "test_prefix"; + public static final String CUSTOM_PROJECT_NAME = "test_projectname"; + + private Run build; + private Job job; + + + @Before + public void before() { + build = Mockito.mock(Run.class); + job = Mockito.mock(Job.class); + + Mockito.when(build.getNumber()).thenReturn(BUILD_NUMBER); + Mockito.when(build.getParent()).thenReturn(job); + Mockito.when(job.getName()).thenReturn(JOB_NAME); + + } + + @Test + public void customProjectNameWithCustomPrefixTest() { + ProjectNameRenderer projectNameRenderer = new ProjectNameRenderer(CUSTOM_PREFIX, CUSTOM_PROJECT_NAME); + String renderedProjectName = projectNameRenderer.render(build); + Assert.assertTrue(renderedProjectName.startsWith("test_prefix_test_projectname")); + } + + @Test + public void customProjectNameWithNullPrefixTest() { + ProjectNameRenderer projectNameRenderer = new ProjectNameRenderer(null, CUSTOM_PROJECT_NAME); + String renderedProjectName = projectNameRenderer.render(build); + Assert.assertTrue(renderedProjectName.startsWith("test_projectname")); + } + + @Test + public void nullProjectNameWithCustomPrefixTest() { + ProjectNameRenderer projectNameRenderer = new ProjectNameRenderer(CUSTOM_PREFIX, null); + String renderedProjectName = projectNameRenderer.render(build); + Assert.assertTrue(renderedProjectName.startsWith("test_prefix_master")); + } + + @Test + public void nullProjectNameWithNullPrefixTest() { + ProjectNameRenderer projectNameRenderer = new ProjectNameRenderer(null, null); + String renderedProjectName = projectNameRenderer.render(build); + Assert.assertTrue(renderedProjectName.startsWith("master")); + } +} From 0afd579c3baf0b6b95ebc48e93ee7139af9910c0 Mon Sep 17 00:00:00 2001 From: James Johnson <2965841+jrjohnson87@users.noreply.github.com> Date: Wed, 31 Jan 2018 14:07:29 +0000 Subject: [PATCH 2/2] Add jelly config for non-pipeline jobs --- .../jenkinsci/plugins/influxdb/InfluxDbPublisher/config.jelly | 3 +++ .../influxdb/InfluxDbPublisher/help-customProjectName.html | 1 + 2 files changed, 4 insertions(+) create mode 100644 src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/help-customProjectName.html diff --git a/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/config.jelly b/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/config.jelly index 72abec07..bfafd7c0 100644 --- a/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/config.jelly +++ b/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/config.jelly @@ -15,6 +15,9 @@ + + + diff --git a/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/help-customProjectName.html b/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/help-customProjectName.html new file mode 100644 index 00000000..fa15cde7 --- /dev/null +++ b/src/main/resources/jenkinsci/plugins/influxdb/InfluxDbPublisher/help-customProjectName.html @@ -0,0 +1 @@ +Sets a custom value for the InfluxDB 'project_name' tagKey, that overrides the default, which is the job name. Useful to easily group metrics for different jobs in multi branch pipeline jobs. \ No newline at end of file