Skip to content

Commit

Permalink
Merge pull request #276 from jenkinsci/bootstrap5
Browse files Browse the repository at this point in the history
Make trend charts configurable (with Bootstrap 5)
  • Loading branch information
uhafner committed Jun 9, 2021
2 parents c0ff068 + 16afaa7 commit cc67ad3
Show file tree
Hide file tree
Showing 19 changed files with 357 additions and 178 deletions.
8 changes: 8 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,16 @@ updates:
- dependency-name: org.webjars:popper.js
versions:
- ">= 2.0.0"
- dependency-name: org.webjars:bootstrap
versions:
- ">= 5.0.0"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
25 changes: 9 additions & 16 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>org.jvnet.hudson.plugins</groupId>
<artifactId>analysis-pom</artifactId>
<version>5.7.0</version>
<version>5.8.0</version>
<relativePath />
</parent>

Expand All @@ -18,7 +18,7 @@
<url>https://github.com/jenkinsci/forensics-api-plugin</url>

<properties>
<revision>1.0.1</revision>
<revision>1.1.0</revision>
<changelist>-SNAPSHOT</changelist>

<module.name>${project.groupId}.forensics.api</module.name>
Expand All @@ -27,13 +27,12 @@
<eclipse-collections.version>9.2.0</eclipse-collections.version>

<!-- Jenkins Plugin Dependencies Versions -->
<plugin-util-api.version>2.2.0</plugin-util-api.version>
<data-tables-api.version>1.10.23-3</data-tables-api.version>
<echarts-api.version>5.0.1-1</echarts-api.version>
<plugin-util-api.version>2.3.0</plugin-util-api.version>
<data-tables-api.version>1.10.25-1</data-tables-api.version>
<jquery3-api.version>3.6.0-1</jquery3-api.version>
<bootstrap4-api.version>4.6.0-3</bootstrap4-api.version>
<font-awesome-api.version>5.15.3-2</font-awesome-api.version>
<popper-api.version>1.16.1-2</popper-api.version>
<font-awesome-api.version>5.15.3-3</font-awesome-api.version>
<echarts-api.version>5.1.2-1</echarts-api.version>
<bootstrap5-api.version>5.0.1-2</bootstrap5-api.version>

</properties>

Expand Down Expand Up @@ -68,18 +67,12 @@
</dependency>
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>bootstrap4-api</artifactId>
<version>${bootstrap4-api.version}</version>
</dependency>
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>popper-api</artifactId>
<version>${popper-api.version}</version>
<artifactId>bootstrap5-api</artifactId>
<version>${bootstrap5-api.version}</version>
</dependency>
<dependency>
<groupId>io.jenkins.plugins</groupId>
<artifactId>jquery3-api</artifactId>
<version>${jquery3-api.version}</version>
</dependency>
<dependency>
<groupId>io.jenkins.plugins</groupId>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.jenkins.plugins.forensics.miner;

import java.util.HashMap;
import java.util.Map;

import edu.hm.hafner.echarts.SeriesBuilder;

/**
* Builds one x-axis point for the series of a line chart showing the added and deleted lines per build.
*
* @author Ullrich Hafner
*/
class AddedVersusDeletedLinesSeriesBuilder extends SeriesBuilder<ForensicsBuildAction> {
static final String ADDED = "added";
static final String DELETED = "deleted";

@Override
protected Map<String, Integer> computeSeries(final ForensicsBuildAction current) {
Map<String, Integer> series = new HashMap<>();
CommitStatistics commitStatistics = current.getCommitStatistics();
series.put(ADDED, commitStatistics.getAddedLines());
series.put(DELETED, commitStatistics.getDeletedLines());
return series;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package io.jenkins.plugins.forensics.miner;

import edu.hm.hafner.echarts.BuildResult;
import edu.hm.hafner.echarts.ChartModelConfiguration;
import edu.hm.hafner.echarts.JacksonFacade;
import edu.hm.hafner.echarts.LineSeries;
import edu.hm.hafner.echarts.LineSeries.FilledMode;
import edu.hm.hafner.echarts.LineSeries.StackedMode;
import edu.hm.hafner.echarts.LinesChartModel;
import edu.hm.hafner.echarts.LinesDataSet;
import edu.hm.hafner.echarts.Palette;

/**
* Builds the Java side model for a trend chart showing the number of deleted and added lines of code in a build.
* The trend chart contains one series that shows the deleted lines and one series that shows the added lines
* per build. The number of builds to consider is controlled by a {@link ChartModelConfiguration} instance.
* The created model object can be serialized to JSON (e.g., using the {@link
* JacksonFacade}) and can be used 1:1 as ECharts configuration object in the corresponding JS file.
*
* @author Ullrich Hafner
* @see JacksonFacade
*/
class AddedVersusDeletedLinesTrendChart {
LinesChartModel create(final Iterable<? extends BuildResult<ForensicsBuildAction>> results,
final ChartModelConfiguration configuration) {
AddedVersusDeletedLinesSeriesBuilder builder = new AddedVersusDeletedLinesSeriesBuilder();
LinesDataSet dataSet = builder.createDataSet(configuration, results);

LinesChartModel model = new LinesChartModel(dataSet);
LineSeries newSeries = getSeries(dataSet, "Added Lines", Palette.GREEN,
AddedVersusDeletedLinesSeriesBuilder.ADDED);
LineSeries fixedSeries = getSeries(dataSet, "Deleted Lines", Palette.RED,
AddedVersusDeletedLinesSeriesBuilder.DELETED);

model.addSeries(newSeries, fixedSeries);

return model;
}

private LineSeries getSeries(final LinesDataSet dataSet,
final String name, final Palette color, final String dataSetId) {
LineSeries newSeries = new LineSeries(name, color.getNormal(), StackedMode.SEPARATE_LINES, FilledMode.FILLED);
newSeries.addAll(dataSet.getSeries(dataSetId));
return newSeries;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@
*
* @author Giulia Del Bravo
*/
public class ForensicsCodeMetricSeriesBuilder extends SeriesBuilder<ForensicsBuildAction> {
class CodeMetricSeriesBuilder extends SeriesBuilder<ForensicsBuildAction> {
static final String LOC_KEY = Messages.TrendChart_Loc_Legend_Label();
static final String CHURN_KEY = Messages.TrendChart_Churn_Legend_Label();

@Override
protected Map<String, Integer> computeSeries(final ForensicsBuildAction current) {
Map<String, Integer> series = new HashMap<>();
series.put(LOC_KEY, current.getResult().getTotalLinesOfCode());
series.put(CHURN_KEY, current.getResult().getTotalChurn());
series.put(LOC_KEY, current.getTotalLinesOfCode());
series.put(CHURN_KEY, current.getTotalChurn());

return series;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* @author Giulia Del Bravo
* @see JacksonFacade
*/
public class ForensicsCodeMetricTrendChart {
class CodeMetricTrendChart {
/**
* Creates the chart for the specified results.
*
Expand All @@ -32,15 +32,13 @@ public class ForensicsCodeMetricTrendChart {
*
* @return the chart model, ready to be serialized to JSON
*/
public LinesChartModel create(final Iterable<? extends BuildResult<ForensicsBuildAction>> results,
LinesChartModel create(final Iterable<? extends BuildResult<ForensicsBuildAction>> results,
final ChartModelConfiguration configuration) {
ForensicsCodeMetricSeriesBuilder builder = new ForensicsCodeMetricSeriesBuilder();
CodeMetricSeriesBuilder builder = new CodeMetricSeriesBuilder();
LinesDataSet dataSet = builder.createDataSet(configuration, results);

LinesChartModel model = new LinesChartModel();
LinesChartModel model = new LinesChartModel(dataSet);
Palette[] colors = {Palette.BLUE, Palette.ORANGE};
model.setDomainAxisLabels(dataSet.getDomainAxisLabels());
model.setBuildNumbers(dataSet.getBuildNumbers());
int index = 0;
for (String name : dataSet.getDataSetIds()) {
int colorIndex = (index++) % colors.length;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,7 @@ public LinesChartModel create(final FileStatistics fileStatistics,
final CommitDecorator decorator) {
LinesDataSet dataSet = createDataSetPerCommit(fileStatistics, decorator);

LinesChartModel model = new LinesChartModel();
model.setDomainAxisLabels(dataSet.getDomainAxisLabels());
model.setBuildNumbers(dataSet.getBuildNumbers());

LinesChartModel model = new LinesChartModel(dataSet);
LineSeries added = new LineSeries(Messages.TrendChart_Churn_Legend_Added(), Palette.GREEN.getNormal(),
StackedMode.SEPARATE_LINES, FilledMode.FILLED);
added.addAll(dataSet.getSeries(ADDED_KEY));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*
* @author Ullrich Hafner
*/
public class FilesCountSeriesBuilder extends SeriesBuilder<ForensicsBuildAction> {
class FilesCountSeriesBuilder extends SeriesBuilder<ForensicsBuildAction> {
static final String TOTALS_KEY = "total";

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* @author Ullrich Hafner
* @see JacksonFacade
*/
public class FilesCountTrendChart {
class FilesCountTrendChart {
/**
* Creates the chart for the specified results.
*
Expand All @@ -36,15 +36,13 @@ public LinesChartModel create(final Iterable<? extends BuildResult<ForensicsBuil
FilesCountSeriesBuilder builder = new FilesCountSeriesBuilder();
LinesDataSet dataSet = builder.createDataSet(configuration, results);

LinesChartModel model = new LinesChartModel();
model.setDomainAxisLabels(dataSet.getDomainAxisLabels());
model.setBuildNumbers(dataSet.getBuildNumbers());

LinesChartModel model = new LinesChartModel(dataSet);
LineSeries series = new LineSeries(Messages.TrendChart_Files_Legend_Label(), Palette.BLUE.getNormal(),
StackedMode.SEPARATE_LINES, FilledMode.FILLED);
series.addAll(dataSet.getSeries(FilesCountSeriesBuilder.TOTALS_KEY));
model.addSeries(series);

if (dataSet.getDomainAxisSize() > 0) {
series.addAll(dataSet.getSeries(FilesCountSeriesBuilder.TOTALS_KEY));
model.addSeries(series);
}
return model;
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
package io.jenkins.plugins.forensics.miner;

import java.util.Arrays;
import java.util.Collection;

import org.apache.commons.lang3.StringUtils;

import edu.hm.hafner.util.VisibleForTesting;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

import org.kohsuke.stapler.StaplerProxy;
import hudson.model.Action;
import hudson.model.Run;

import io.jenkins.plugins.util.BuildAction;
Expand All @@ -32,6 +28,10 @@ public class ForensicsBuildAction extends BuildAction<RepositoryStatistics> impl
private String scmKey; // since 0.9.0
private String fileName; // since 0.9.0

private final int totalLinesOfCode; // since 1.1.0
private final int totalChurn; // since 1.1.0
private CommitStatistics commitStatistics; // since 1.1.0

/**
* Creates a new instance of {@link ForensicsBuildAction}.
*
Expand Down Expand Up @@ -79,6 +79,10 @@ public ForensicsBuildAction(final Run<?, ?> owner, final RepositoryStatistics re
fileName = createFileName(number);
urlName = createUrlName(number);

totalLinesOfCode = repositoryStatistics.getTotalLinesOfCode();
totalChurn = repositoryStatistics.getTotalChurn();
commitStatistics = repositoryStatistics.getLatestStatistics();

if (canSerialize) {
createXmlStream().write(owner.getRootDir().toPath().resolve(fileName), repositoryStatistics);
}
Expand All @@ -93,6 +97,10 @@ protected Object readResolve() {
if (fileName == null) {
fileName = DEFAULT_FILE_NAME;
}
if (commitStatistics == null) {
commitStatistics = new CommitStatistics();
}

return super.readResolve();
}

Expand All @@ -110,15 +118,8 @@ private String createUrlName(final int number) {
return String.format("%s-%d", ForensicsJobAction.FORENSICS_ID, number);
}

@Override
public Collection<? extends Action> getProjectActions() {
return Arrays.asList(new ForensicsJobAction(getOwner().getParent(), scmKey),
new ForensicsCodeMetricAction(getOwner().getParent(), scmKey));
}

@Override
protected ForensicsJobAction createProjectAction() {
// This method actually is obsolete and will not be called anymore
return new ForensicsJobAction(getOwner().getParent(), scmKey);
}

Expand Down Expand Up @@ -165,6 +166,18 @@ public int getMiningDurationSeconds() {
return miningDurationSeconds;
}

public int getTotalLinesOfCode() {
return totalLinesOfCode;
}

public int getTotalChurn() {
return totalChurn;
}

public CommitStatistics getCommitStatistics() {
return commitStatistics;
}

public String getScmKey() {
return scmKey;
}
Expand Down
Loading

0 comments on commit cc67ad3

Please sign in to comment.