Skip to content

Commit 7582cb6

Browse files
Merge pull request #13 from jenkinsci/all-build-status-tags-all-metrics
Same buildStatus tags for all buildStatus metrics
2 parents 71dbfe3 + 9464a1b commit 7582cb6

File tree

8 files changed

+77
-79
lines changed

8 files changed

+77
-79
lines changed

src/main/java/org/jenkinsci/plugins/argusnotifier/BuildMetricFactory.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ class BuildMetricFactory {
2626
private final long metricTimestamp;
2727
private final String scope;
2828
private final JenkinsRunFormatter jenkinsRunFormatter;
29-
private final Jenkins jenkins;
3029

3130
BuildMetricFactory(Jenkins jenkins, Run run, long metricTimestamp, String scope) {
32-
this.jenkins = jenkins;
3331
this.run = run;
3432
this.jenkinsRunFormatter = new JenkinsRunFormatter(jenkins, run);
3533
this.metricTimestamp = metricTimestamp;
@@ -44,15 +42,15 @@ List<Metric> getBuildStatusMetrics() {
4442
// TODO: statusTranslatedToNumberMetric.setNamespace(projectName);
4543

4644
statusTranslatedToNumberMetric
47-
.setTags(TagFactory.buildStatusTags(jenkins, jenkinsRunFormatter.getProjectName()));
45+
.setTags(TagFactory.buildStatusTags(jenkinsRunFormatter));
4846
Map<Long, Double> numericStatusDatapoints = ImmutableMap.<Long, Double>builder()
4947
.put(metricTimestamp, BuildResultsResolver.translateResultToNumber(run.getResult())).build();
5048
statusTranslatedToNumberMetric.setDatapoints(numericStatusDatapoints);
5149
Metric buildStatusMetric = new Metric();
5250
buildStatusMetric.setScope(scope);
53-
buildStatusMetric.setDisplayName(getDisplayName(BuildResultsResolver.getResultString(run.getResult())));
51+
buildStatusMetric.setDisplayName(getDisplayName(BuildResultsResolver.getBuildResult(run.getResult())));
5452
buildStatusMetric.setMetric(BuildResultsResolver.getMetricName(run.getResult()));
55-
buildStatusMetric.setTags(TagFactory.buildStatusTags(jenkins, jenkinsRunFormatter.getProjectName()));
53+
buildStatusMetric.setTags(TagFactory.buildStatusTags(jenkinsRunFormatter));
5654
Map<Long, Double> buildStatusDatapoints = ImmutableMap.<Long, Double>builder().put(metricTimestamp, 1.0)
5755
.build();
5856
buildStatusMetric.setDatapoints(buildStatusDatapoints);
@@ -89,10 +87,7 @@ private Metric getBuildTimeMetric(String labelForDisplayName, String metricStrin
8987
// TODO: metric.setNamespace(projectName);
9088
double timeInSeconds = (double) timeInMillis / 1000.0;
9189

92-
String gitCommitId = jenkinsRunFormatter.getGitCommit();
93-
String buildStatus = BuildResultsResolver.getResultString(run.getResult());
94-
metric.setTags(TagFactory.buildExtendedStatusTags(jenkins, jenkinsRunFormatter.getProjectName(),
95-
jenkinsRunFormatter.getBuildNumberString(), gitCommitId, buildStatus));
90+
metric.setTags(TagFactory.buildStatusTags(jenkinsRunFormatter));
9691
Map<Long, Double> datapoints = ImmutableMap.<Long, Double>builder().put(metricTimestamp, timeInSeconds).build();
9792
metric.setDatapoints(datapoints);
9893
return metric;

src/main/java/org/jenkinsci/plugins/argusnotifier/BuildResultsResolver.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ public static String getContextualResult(@Nonnull Run<?,?> run) {
4848
return STILL_FAILING;
4949
}
5050
}
51-
return getResultString(buildResult);
51+
return getBuildResult(buildResult);
5252
}
5353

54-
public static String getResultString(Result buildResult) {
54+
public static String getBuildResult(Result buildResult) {
5555
if (buildResult == null) {
5656
return UNKNOWN;
5757
} else {
@@ -60,10 +60,10 @@ public static String getResultString(Result buildResult) {
6060
}
6161

6262
public static String getMetricName(Result buildResult) {
63-
return "build." + BuildResultsResolver.getResultString(buildResult).toLowerCase();
63+
return "build." + BuildResultsResolver.getBuildResult(buildResult).toLowerCase();
6464
}
6565

6666
public static Double translateResultToNumber(Result result) {
67-
return BUILD_STATUS_MAPPING.get(getResultString(result));
67+
return BUILD_STATUS_MAPPING.get(getBuildResult(result));
6868
}
6969
}

src/main/java/org/jenkinsci/plugins/argusnotifier/JenkinsRunFormatter.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
class JenkinsRunFormatter {
1616

1717
private final String jenkinsUrl;
18+
private final String jenkinsHostName;
1819
private final Run run;
1920
private static final Logger logger = Logger.getLogger(JenkinsRunFormatter.class.getName());
2021

2122
public JenkinsRunFormatter(@Nonnull Jenkins jenkins, @Nonnull Run run) {
2223
this.jenkinsUrl = jenkins.getRootUrl();
24+
this.jenkinsHostName = JenkinsFormatter.getHostName(jenkins);
2325
this.run = run;
2426
}
2527

@@ -60,32 +62,48 @@ public String getBuildNumberString() {
6062
return String.valueOf(run.getNumber());
6163
}
6264

63-
6465
/**
6566
* Get GIT_COMMIT environment variable if available.
6667
*
6768
*
6869
* @return GIT commit sha as String, return empty String if not available.
6970
*/
70-
public String getGitCommit() {
71+
public String getGitCommitHash() {
7172

7273
LogTaskListener listener = new LogTaskListener(logger, Level.INFO);
7374

7475
String commitVar = TagFactory.Tag.GIT_COMMIT.toString();
7576
try {
7677
EnvVars envVars = run.getEnvironment(listener);
77-
Object commitId = envVars.get(commitVar);
78-
if (commitId == null) {
78+
String commitHash = envVars.get(commitVar);
79+
if (commitHash == null) {
7980
return "";
8081
} else {
81-
return (String) commitId;
82+
return commitHash;
8283
}
8384
}
8485
catch (IOException | InterruptedException e) {
86+
logger.log(Level.WARNING, "Error when retrieving environment to get GIT_COMMIT", e);
8587
return "";
8688
}
87-
89+
}
8890

91+
/**
92+
* Get the formatted Jenkins host name
93+
*
94+
* @return formatted Jenkins host name
95+
*/
96+
public String getJenkinsHostName() {
97+
return jenkinsHostName;
98+
}
99+
100+
/**
101+
* Convenience method to get the normal run result string
102+
*
103+
* @return maps to exact result unless null (then UNKNOWN)
104+
*/
105+
public String getResult() {
106+
return BuildResultsResolver.getBuildResult(run.getResult());
89107
}
90108

91109
/**

src/main/java/org/jenkinsci/plugins/argusnotifier/TagFactory.java

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,39 +24,23 @@ private TagFactory() {
2424
// no instance necessary
2525
}
2626

27-
/**
28-
* Create immutable map of tags for a build_status metric
29-
*
30-
* @param jenkins
31-
* @param projectName
32-
* @return
33-
*/
34-
static Map<String, String> buildStatusTags(Jenkins jenkins, String projectName) {
35-
return ImmutableMap.<String, String>builder()
36-
.putAll(hostTag(jenkins))
37-
.put(PROJECT.lower(), InvalidCharSwap.swapWithDash(projectName))
38-
.build();
39-
}
40-
4127
/**
4228
* Create immutable map of tags for a build time metric
4329
*
44-
* @param jenkins Jenkins instance
45-
* @param projectName build project name
46-
* @param buildNumber build number or id
47-
* @param commitId github commit sha associated with this build, set to empty if not applicable
48-
* @param status the build status, SUCCESS, FAILURE or UNSTABLE etc
49-
* @return
30+
* @param jenkinsRunFormatter a populated JenkinsRunFormatter
31+
* @return map with populated tags
5032
*/
51-
static Map<String, String> buildExtendedStatusTags(Jenkins jenkins, String projectName, String buildNumber,
52-
String commitId, String status) {
33+
static Map<String, String> buildStatusTags(JenkinsRunFormatter jenkinsRunFormatter) {
5334

5435
ImmutableMap.Builder<String, String> mapBuilder = ImmutableMap.<String, String>builder()
55-
.putAll(hostTag(jenkins)).put(PROJECT.lower(), InvalidCharSwap.swapWithDash(projectName));
56-
mapBuilder.put(BUILD_NUMBER.lower(), buildNumber).put(BUILD_STATUS.lower(),status);
57-
58-
if (!commitId.isEmpty()) {
59-
mapBuilder.put(GIT_COMMIT.lower(), commitId);
36+
.put(HOST.lower(), jenkinsRunFormatter.getJenkinsHostName())
37+
.put(PROJECT.lower(), InvalidCharSwap.swapWithDash(jenkinsRunFormatter.getProjectName()))
38+
.put(BUILD_NUMBER.lower(), jenkinsRunFormatter.getBuildNumberString())
39+
.put(BUILD_STATUS.lower(), jenkinsRunFormatter.getResult());
40+
41+
String gitCommitHash = jenkinsRunFormatter.getGitCommitHash();
42+
if (!gitCommitHash.isEmpty()) {
43+
mapBuilder.put(GIT_COMMIT.lower(), gitCommitHash);
6044
}
6145

6246
return mapBuilder.build();

src/test/java/org/jenkinsci/plugins/argusnotifier/BuildMetricFactoryTest.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class BuildMetricFactoryTest extends Specification {
3131
String scope = "testScope"
3232
folder.fullName >> jobFolderName
3333
BuildMetricFactory metricFactory = new BuildMetricFactory(jenkins, run, metricTimestamp, scope)
34+
run.getEnvironment(_) >> [:]
3435

3536
when:
3637
List<Metric> metrics = metricFactory.buildStatusMetrics

src/test/java/org/jenkinsci/plugins/argusnotifier/BuildResultsResolverTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class BuildResultsResolverTest extends Specification {
7979

8080
def 'getResultString: #input generates #expected resultsString'() {
8181
when:
82-
String resultsString = BuildResultsResolver.getResultString(input)
82+
String resultsString = BuildResultsResolver.getBuildResult(input)
8383

8484
then:
8585
resultsString == expected

src/test/java/org/jenkinsci/plugins/argusnotifier/JenkinsRunFormatterTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class JenkinsRunFormatterTest extends Specification {
7676
JenkinsRunFormatter jenkinsBuildFormatter = new JenkinsRunFormatter(jenkins, build)
7777

7878
when:
79-
String actualGitCommit = jenkinsBuildFormatter.getGitCommit()
79+
String actualGitCommit = jenkinsBuildFormatter.getGitCommitHash()
8080

8181
then:
8282
actualGitCommit == expectedGitCommit
@@ -93,7 +93,7 @@ class JenkinsRunFormatterTest extends Specification {
9393
JenkinsRunFormatter jenkinsBuildFormatter = new JenkinsRunFormatter(jenkins, build)
9494

9595
when:
96-
String actualGitCommit = jenkinsBuildFormatter.getGitCommit()
96+
String actualGitCommit = jenkinsBuildFormatter.getGitCommitHash()
9797

9898
then:
9999
actualGitCommit == ""
Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
package org.jenkinsci.plugins.argusnotifier
22

3-
import jenkins.model.Jenkins
43
import spock.lang.Specification
54
import spock.lang.Unroll
65

6+
import static org.jenkinsci.plugins.argusnotifier.TagFactory.Tag.BUILD_NUMBER
7+
import static org.jenkinsci.plugins.argusnotifier.TagFactory.Tag.BUILD_STATUS
8+
import static org.jenkinsci.plugins.argusnotifier.TagFactory.Tag.GIT_COMMIT
79
import static org.jenkinsci.plugins.argusnotifier.TagFactory.Tag.HOST
810
import static org.jenkinsci.plugins.argusnotifier.TagFactory.Tag.PROJECT
911

1012
@Unroll
1113
class TagFactoryTest extends Specification {
1214

13-
public static final String ROOT_URL = "root"
14-
private Jenkins jenkins = Mock(Jenkins)
15-
16-
def setup() {
17-
jenkins.getRootUrl() >> ROOT_URL
18-
}
15+
public static final PROJECT_VALUE = "proj"
16+
public static final HOST_VALUE = "hosty"
17+
public static final String COMMIT_HASH_VALUE = "abcdef123"
18+
public static final String RESULT_VALUE = "SUCCESS"
19+
public static final String BUILD_NUMBER_VALUE = "42"
20+
private JenkinsRunFormatter jenkinsRunFormatter = Mock(JenkinsRunFormatter)
1921

2022
def '#tag is lowercased with lower()'() {
2123
when:
@@ -25,38 +27,36 @@ class TagFactoryTest extends Specification {
2527
actualResult == expectedValue
2628
2729
where:
28-
tag | expectedValue
29-
HOST | "host"
30-
PROJECT | "project"
30+
tag | expectedValue
31+
HOST | "host"
32+
PROJECT | "project"
33+
BUILD_NUMBER | "build_number"
34+
BUILD_STATUS | "build_status"
35+
GIT_COMMIT | "git_commit"
3136
}
3237
33-
def 'rootUrl makes it in as host tag'() {
34-
when:
35-
def tags = TagFactory.buildStatusTags(jenkins, "")
36-
37-
then:
38-
tags[HOST.lower()] == ROOT_URL
39-
}
38+
def '#tag tag == #value in buildStatusTags; GIT_COMMIT = "#commitHashValue"'() {
4039
41-
def 'project makes it in as project tag'() {
4240
given:
43-
String project = "myProject"
44-
45-
when:
46-
def tags = TagFactory.buildStatusTags(jenkins, project)
47-
48-
then:
49-
tags[PROJECT.lower()] == project
50-
}
41+
jenkinsRunFormatter.getProjectName() >> PROJECT_VALUE
42+
jenkinsRunFormatter.getJenkinsHostName() >> HOST_VALUE
43+
jenkinsRunFormatter.getBuildNumberString() >> BUILD_NUMBER_VALUE
44+
jenkinsRunFormatter.getResult() >> RESULT_VALUE
45+
jenkinsRunFormatter.getGitCommitHash() >> commitHashValue
5146
52-
def 'Tag.values() contains #tag'() {
5347
when:
54-
def values = TagFactory.Tag.values()
48+
def tags = TagFactory.buildStatusTags(jenkinsRunFormatter)
5549
5650
then:
57-
values.contains(tag)
51+
tags[tag.lower()] == value
5852
5953
where:
60-
tag << [HOST, PROJECT]
54+
tag | value | commitHashValue
55+
HOST | HOST_VALUE | ""
56+
PROJECT | PROJECT_VALUE | ""
57+
BUILD_NUMBER | BUILD_NUMBER_VALUE | ""
58+
BUILD_STATUS | RESULT_VALUE | ""
59+
GIT_COMMIT | COMMIT_HASH_VALUE | COMMIT_HASH_VALUE
60+
GIT_COMMIT | null | ""
6161
}
6262
}

0 commit comments

Comments
 (0)