Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add support for customProjectName property to override default project name #24

Merged
merged 2 commits into from
Feb 1, 2018
Merged
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
16 changes: 15 additions & 1 deletion src/main/java/jenkinsci/plugins/influxdb/InfluxDbPublisher.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -179,7 +193,7 @@ public BuildStepDescriptor<Publisher> getDescriptor() {
public void perform(Run<?, ?> build, FilePath workspace, Launcher launcher, TaskListener listener)
throws InterruptedException, IOException {

MeasurementRenderer<Run<?, ?>> measurementRenderer = new ProjectNameRenderer(customPrefix);
MeasurementRenderer<Run<?, ?>> measurementRenderer = new ProjectNameRenderer(customPrefix, customProjectName);

// get the target from the job's config
Target target = getTarget();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,26 @@
public class ProjectNameRenderer implements MeasurementRenderer<Run<?, ?>> {

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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
<f:entry title="custom-prefix" field="customPrefix" >
<f:textbox name="publisherBinding.customPrefix" value="${publisherBinding.customPrefix}"/>
</f:entry>
<f:entry title="custom-project-name" field="customProjectName" >
<f:textbox name="publisherBinding.customProjectName" value="${publisherBinding.customProjectName}"/>
</f:entry>
</f:advanced>
</f:section>

Expand Down
Original file line number Diff line number Diff line change
@@ -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.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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"));
}
}