Skip to content

Commit

Permalink
Optional logging in job log #32 #33
Browse files Browse the repository at this point in the history
Also:

 * More details in trigger response. Including queue ID.
 * Avoiding exposure of entire exception stacktrace in response on crash.
  • Loading branch information
tomasbjerre committed Feb 5, 2018
1 parent 4ac5382 commit 8580bf8
Show file tree
Hide file tree
Showing 14 changed files with 254 additions and 81 deletions.
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
# Generic Webhook Plugin Changelog
Changelog of Generic Webhook Plugin.
## Unreleased
### GitHub [#32](https://github.com/jenkinsci/generic-webhook-trigger-plugin/issues/32) Do not show received payload in Jenkins job *enhancement*

**Optional logging in job log #32 #33**

* Also:
* More details in trigger response. Including queue ID.
* Avoiding exposure of entire exception stacktrace in response on crash.

[8f6657190a43df9](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/8f6657190a43df9) Tomas Bjerre *2018-02-05 19:51:38*


### GitHub [#33](https://github.com/jenkinsci/generic-webhook-trigger-plugin/issues/33) Receive additional info after job trigger *enhancement*

**Optional logging in job log #32 #33**

* Also:
* More details in trigger response. Including queue ID.
* Avoiding exposure of entire exception stacktrace in response on crash.

[8f6657190a43df9](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/8f6657190a43df9) Tomas Bjerre *2018-02-05 19:51:38*


### No issue

**Cleaning pom**


[4ac53820dbca918](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/4ac53820dbca918) Tomas Bjerre *2018-02-05 16:59:30*


## 1.23 (2018-01-27 13:10:21)
### GitHub [#31](https://github.com/jenkinsci/generic-webhook-trigger-plugin/issues/31) Wanna get all request body that payload body including null value

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ job('Generic Job Example') {
regexpFilter("")
}
}
printContributedVariables(true)
printPostContent(true)
regexpFilterText("\$VARIABLE_FROM_POST")
regexpFilterExpression("aRegExp")
}
Expand Down Expand Up @@ -155,6 +157,8 @@ node {
[key: 'headerWithNumber', regexpFilter: '[^0-9]'],
[key: 'headerWithString', regexpFilter: '']
],
printContributedVariables: true,
printPostContent: true,
regexpFilterText: '',
regexpFilterExpression: ''
]
Expand Down
3 changes: 1 addition & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ Changelog of Generic Webhook Plugin.
<plugin>
<groupId>se.bjurr.violations</groupId>
<artifactId>violations-maven-plugin</artifactId>
<version>1.5</version>
<version>1.7</version>
<configuration>
<minSeverity>INFO</minSeverity>
<detailLevel>VERBOSE</detailLevel>
Expand Down Expand Up @@ -214,7 +214,6 @@ Changelog of Generic Webhook Plugin.
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
2 changes: 2 additions & 0 deletions sandbox/multibranch.jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ node {
[key: 'headerWithString', regexpFilter: ''],
[key: 'X-GitHub-Event', regexpFilter: '']
],
printContributedVariables: true,
printPostContent: true,
regexpFilterText: '',
regexpFilterExpression: ''
]
Expand Down
2 changes: 2 additions & 0 deletions sandbox/sandbox.jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ node {
[expressionType: 'JSONPath', key: 'reference', value: '$.ref'],
[expressionType: 'JSONPath', key: 'before', value: '$.before']
],
printContributedVariables: true,
printPostContent: true,
regexpFilterText: '$reference',
regexpFilterExpression: jobName
]
Expand Down
24 changes: 20 additions & 4 deletions src/main/java/org/jenkinsci/plugins/gwt/GenericCause.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
package org.jenkinsci.plugins.gwt;

import java.util.Map;

import hudson.model.Cause;

import java.util.Map;

public class GenericCause extends Cause {

private final Map<String, String> resolvedVariables;
private final String postContent;

public GenericCause(String postContent, Map<String, String> resolvedVariables) {
private final boolean printContributedVariables;
private final boolean printPostContent;

public GenericCause(
String postContent,
Map<String, String> resolvedVariables,
boolean printContributedVariables,
boolean printPostContent) {
this.postContent = postContent;
this.resolvedVariables = resolvedVariables;
this.printContributedVariables = printContributedVariables;
this.printPostContent = printPostContent;
}

public boolean isPrintContributedVariables() {
return printContributedVariables;
}

public boolean isPrintPostContent() {
return printPostContent;
}

public Map<String, String> getResolvedVariables() {
Expand Down
91 changes: 62 additions & 29 deletions src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import org.jenkinsci.plugins.gwt.resolvers.VariablesResolver;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;

import com.google.common.annotations.VisibleForTesting;

Expand All @@ -35,6 +36,8 @@ public class GenericTrigger extends Trigger<Job<?, ?>> {
private final String regexpFilterExpression;
private List<GenericRequestVariable> genericRequestVariables = newArrayList();
private List<GenericHeaderVariable> genericHeaderVariables = newArrayList();
private boolean printPostContent;
private boolean printContributedVariables;

public static class GenericDescriptor extends TriggerDescriptor {

Expand Down Expand Up @@ -63,14 +66,32 @@ public GenericTrigger(
this.genericHeaderVariables = genericHeaderVariables;
}

@DataBoundSetter
public void setPrintContributedVariables(boolean printContributedVariables) {
this.printContributedVariables = printContributedVariables;
}

@DataBoundSetter
public void setPrintPostContent(boolean printPostContent) {
this.printPostContent = printPostContent;
}

public boolean isPrintContributedVariables() {
return printContributedVariables;
}

public boolean isPrintPostContent() {
return printPostContent;
}

@Extension public static final GenericDescriptor DESCRIPTOR = new GenericDescriptor();

@SuppressWarnings("static-access")
public void trigger(
public GenericTriggerResults trigger(
Map<String, Enumeration<String>> headers,
Map<String, String[]> parameterMap,
String postContent) {
Map<String, String> resolvedVariables =
final Map<String, String> resolvedVariables =
new VariablesResolver(
headers,
parameterMap,
Expand All @@ -80,15 +101,22 @@ public void trigger(
genericHeaderVariables)
.getVariables();

boolean isMatching = isMatching(regexpFilterText, regexpFilterExpression, resolvedVariables);
final String renderedRegexpFilterText = renderText(regexpFilterText, resolvedVariables);
final boolean isMatching = isMatching(renderedRegexpFilterText, regexpFilterExpression);

hudson.model.Queue.Item item = null;
if (isMatching) {
GenericCause cause = new GenericCause(postContent, resolvedVariables);

ParametersAction parameters = createParameters(resolvedVariables);
retrieveScheduleJob(job) //
.scheduleBuild2(job, 0, new CauseAction(cause), parameters);
final GenericCause cause =
new GenericCause(
postContent, resolvedVariables, printContributedVariables, printPostContent);

final ParametersAction parameters = createParameters(resolvedVariables);
item =
retrieveScheduleJob(job) //
.scheduleBuild2(job, 0, new CauseAction(cause), parameters);
}
return new GenericTriggerResults(
item, resolvedVariables, renderedRegexpFilterText, regexpFilterExpression);
}

@SuppressWarnings("rawtypes")
Expand All @@ -102,49 +130,54 @@ public void trigger(
}

private ParametersAction createParameters(Map<String, String> resolvedVariables) {
List<ParameterValue> parameterList = newArrayList();
for (Entry<String, String> entry : resolvedVariables.entrySet()) {
ParameterValue parameter = new StringParameterValue(entry.getKey(), entry.getValue());
final List<ParameterValue> parameterList = newArrayList();
for (final Entry<String, String> entry : resolvedVariables.entrySet()) {
final ParameterValue parameter = new StringParameterValue(entry.getKey(), entry.getValue());
parameterList.add(parameter);
}
return new ParametersAction(parameterList);
}

@VisibleForTesting
boolean isMatching(
String regexpFilterText,
String regexpFilterExpression,
Map<String, String> resolvedVariables) {
boolean noFilterConfigured =
isNullOrEmpty(regexpFilterText) || isNullOrEmpty(regexpFilterExpression);
boolean isMatching(String renderedRegexpFilterText, String regexpFilterExpression) {
final boolean noFilterConfigured =
isNullOrEmpty(renderedRegexpFilterText) || isNullOrEmpty(regexpFilterExpression);
if (noFilterConfigured) {
return true;
}
for (String variable : resolvedVariables.keySet()) {
String key = "\\$" + variable;
String resolvedVariable = resolvedVariables.get(variable);
try {
regexpFilterText = regexpFilterText.replaceAll(key, resolvedVariable);
} catch (IllegalArgumentException e) {
throw new RuntimeException("Tried to replace " + key + " with " + resolvedVariable, e);
}
}
boolean isMatching =
final boolean isMatching =
compile(regexpFilterExpression) //
.matcher(regexpFilterText) //
.matcher(renderedRegexpFilterText) //
.find();
if (!isMatching) {
LOGGER.log(
INFO,
"Not triggering \""
+ regexpFilterExpression
+ "\" not matching \""
+ regexpFilterText
+ renderedRegexpFilterText
+ "\".");
}
return isMatching;
}

@VisibleForTesting
String renderText(String regexpFilterText, Map<String, String> resolvedVariables) {
if (isNullOrEmpty(regexpFilterText)) {
return "";
}
for (final Entry<String, String> variableEntry : resolvedVariables.entrySet()) {
final String key = "\\$" + variableEntry.getKey();
final String resolvedVariable = variableEntry.getValue();
try {
regexpFilterText = regexpFilterText.replaceAll(key, resolvedVariable);
} catch (final IllegalArgumentException e) {
throw new RuntimeException("Tried to replace " + key + " with " + resolvedVariable, e);
}
}
return regexpFilterText;
}

public List<GenericVariable> getGenericVariables() {
return genericVariables;
}
Expand Down
63 changes: 63 additions & 0 deletions src/main/java/org/jenkinsci/plugins/gwt/GenericTriggerResults.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package org.jenkinsci.plugins.gwt;

import java.util.Map;

public class GenericTriggerResults {

private final Map<String, String> resolvedVariables;
private final String regexpFilterText;
private final String regexpFilterExpression;
private final String searchUrl;
private final String url;
private final long id;
private boolean triggered;

public GenericTriggerResults(
hudson.model.Queue.Item item,
Map<String, String> resolvedVariables,
String regexpFilterText,
String regexpFilterExpression) {
if (item != null) {
this.searchUrl = item.getApi().getSearchUrl();
this.url = item.getUrl();
this.id = item.getId();
this.triggered = true;
} else {
this.searchUrl = null;
this.url = null;
this.id = 0;
this.triggered = false;
}
this.resolvedVariables = resolvedVariables;
this.regexpFilterText = regexpFilterText;
this.regexpFilterExpression = regexpFilterExpression;
}

public boolean isTriggered() {
return triggered;
}

public long getId() {
return id;
}

public String getSearchUrl() {
return searchUrl;
}

public String getUrl() {
return url;
}

public String getRegexpFilterExpression() {
return regexpFilterExpression;
}

public String getRegexpFilterText() {
return regexpFilterText;
}

public Map<String, String> getResolvedVariables() {
return resolvedVariables;
}
}
Loading

0 comments on commit 8580bf8

Please sign in to comment.