Skip to content

Commit

Permalink
Merge pull request #32 from jenkinsci/display-type
Browse files Browse the repository at this point in the history
introduce `displayType` for pipeline step to specify how to results should be displayed in table (`absolute`, `relative` or `dual`)
  • Loading branch information
simonsymhoven authored Sep 5, 2022
2 parents 26adbe2 + 402a9b3 commit d69b599
Show file tree
Hide file tree
Showing 13 changed files with 126 additions and 65 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ The limited visualization from version **2.3.0** is thus resolved.
### Pipeline Step

```
publishReport jsonFile: "etc/result.json"
publishReport jsonFile: "etc/result.json", displayType: "absolute"
```

#### Parameter:
Expand All @@ -151,6 +151,11 @@ or

- **`jsonString`** the json model as string.

and

- **`displayType`** to specify weather the values should be displayed as `absolute`,
`relative` or `dual` values (default: `absolute`).

## Issues

Report issues and enhancements in the [GitHub Issue Tracker](https://github.com/jenkinsci/nested-data-reporting-plugin/issues)
Expand Down
21 changes: 0 additions & 21 deletions src/main/java/io/jenkins/plugins/reporter/ColorProvider.java

This file was deleted.

24 changes: 14 additions & 10 deletions src/main/java/io/jenkins/plugins/reporter/ItemViewModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import io.jenkins.plugins.reporter.charts.TrendChart;
import io.jenkins.plugins.reporter.model.Item;
import io.jenkins.plugins.reporter.model.ItemTableModel;
import io.jenkins.plugins.reporter.model.Report;
import jline.internal.Nullable;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
Expand All @@ -29,13 +30,15 @@
public class ItemViewModel implements ModelObject {

private static final JacksonFacade JACKSON_FACADE = new JacksonFacade();



private final Run<?, ?> owner;
private final Item item;
private final String url;
private final String label;
private final ColorProvider colorProvider;
private final ItemViewModel parentViewModel;

private final Report report;


/**
Expand All @@ -49,21 +52,21 @@ public class ItemViewModel implements ModelObject {
* the corresponding item of this view.
* @param label
* the label to be shown for this view.
* @param colorProvider
* the colorProvider (mapping for the item result).
* @param parentViewModel
* the view model of parent item.
* @param report
* the report attached to this run.
*/
public ItemViewModel(final Run<?, ?> owner, final String url, final Item item, final String label,
final ColorProvider colorProvider, @Nullable final ItemViewModel parentViewModel) {
@Nullable final ItemViewModel parentViewModel, final Report report) {
super();

this.owner = owner;
this.url = url;
this.item = item;
this.label = label;
this.colorProvider = colorProvider;
this.parentViewModel = parentViewModel;
this.report = report;
}

/**
Expand All @@ -89,7 +92,7 @@ public String getDisplayName() {
public String getItemDataModel() {
PieChartModel model = new PieChartModel(item.getId());
item.getResult().forEach((key, value) -> model.add(new PieData(key, value),
colorProvider.getColor(key)));
report.getColor(key)));
return new JacksonFacade().toJson(model);
}

Expand Down Expand Up @@ -122,12 +125,12 @@ public String getBuildTrend(final String configuration) {
}

return new JacksonFacade().toJson(new TrendChart().create(history, ChartModelConfiguration.fromJson(configuration),
new ItemSeriesBuilder(item), colorProvider));
new ItemSeriesBuilder(item), report));
}

@SuppressWarnings("unused") // Called by jelly view
public ItemTableModel getTableModel(String id) {
return new ItemTableModel(item, colorProvider);
return new ItemTableModel(report, item);
}

/**
Expand Down Expand Up @@ -170,7 +173,8 @@ public Object getDynamic(final String link, final StaplerRequest request, final
.orElseThrow(NoSuchElementException::new);

String url = getUrl() + "/" + link;
return new ItemViewModel(owner, url, subItem, Messages.Module_Description(subItem.getName()), colorProvider, this);
return new ItemViewModel(owner, url, subItem, Messages.Module_Description(subItem.getName()),
this, report);
}
catch (NoSuchElementException ignored) {
try {
Expand Down
28 changes: 25 additions & 3 deletions src/main/java/io/jenkins/plugins/reporter/PublishReportStep.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import hudson.model.TaskListener;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Builder;
import io.jenkins.plugins.reporter.model.DisplayType;
import io.jenkins.plugins.reporter.model.Report;
import io.jenkins.plugins.reporter.model.Result;
import jenkins.tasks.SimpleBuildStep;
Expand All @@ -28,6 +29,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Locale;
import java.util.Optional;

/**
* Publishes a report: Stores the created report in an {@link ReportAction}. The result is attached to the {@link Run}
Expand All @@ -41,6 +45,8 @@ public class PublishReportStep extends Builder implements SimpleBuildStep, Seria
private String jsonString;
private String jsonFile;

private String displayType;

@DataBoundConstructor
public PublishReportStep() {
super();
Expand All @@ -64,13 +70,24 @@ public void setJsonFile(final String jsonFile) {
this.jsonFile = jsonFile;
}

public String getDisplayType() {
return displayType;
}

@DataBoundSetter
public void setDisplayType(final String displayType) {
this.displayType = displayType;
}

@Override
public DescriptorImpl getDescriptor() {
return (DescriptorImpl) super.getDescriptor();
}

@Override
public void perform(@NonNull Run<?, ?> run, @NonNull FilePath workspace, @NonNull EnvVars env, @NonNull Launcher launcher, @NonNull TaskListener listener) throws InterruptedException, IOException {
public void perform(@NonNull Run<?, ?> run, @NonNull FilePath workspace, @NonNull EnvVars env,
@NonNull Launcher launcher, @NonNull TaskListener listener) throws InterruptedException,
IOException {
listener.getLogger().println("[PublishReportStep] Report data... ");

String json;
Expand All @@ -94,10 +111,15 @@ public void perform(@NonNull Run<?, ?> run, @NonNull FilePath workspace, @NonNul

JacksonFacade jackson = new JacksonFacade();
Result result = jackson.fromJson(json, Result.class);
Report report = new Report(result);

DisplayType dt = Arrays.stream(DisplayType.values())
.filter(e -> e.name().toLowerCase(Locale.ROOT).equals(getDisplayType()))
.findFirst().orElse(DisplayType.ABSOLUTE);

Report report = new Report(result, dt);
run.addAction(new ReportAction(run, report));

listener.getLogger().println("[PublishReportStep] Add report to current build.");
listener.getLogger().println(String.format("[PublishReportStep] Add report with display type %s to current build.", dt.name()));

} catch (ValidationException e) {
listener.getLogger().printf("[PublishReportStep] error: %s", e.getMessage());
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/io/jenkins/plugins/reporter/ReportAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ public ItemViewModel getTarget() {
item.setResult(report.getResult().aggregate());
item.setItems(report.getResult().getItems());

return new ItemViewModel(getOwner(), ReportJobAction.ID, item, item.getName(),
new ColorProvider(report.getResult().getColors()), null);
return new ItemViewModel(getOwner(), ReportJobAction.ID, item, item.getName(), null , getReport());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.jenkins.plugins.echarts.AsyncConfigurableTrendJobAction;
import io.jenkins.plugins.reporter.charts.ReportSeriesBuilder;
import io.jenkins.plugins.reporter.charts.TrendChart;
import io.jenkins.plugins.reporter.model.Report;

import java.util.Collections;
import java.util.Optional;
Expand Down Expand Up @@ -54,10 +55,9 @@ protected LinesChartModel createChartModel(String configuration) {
.filter(Optional::isPresent).findFirst().orElse(Optional.empty());

if (reportAction.isPresent()) {
ColorProvider colorProvider = new ColorProvider(reportAction.get().getReport().getResult().getColors());
return new TrendChart().create(createBuildHistory(), modelConfiguration, new ReportSeriesBuilder(), colorProvider);
return new TrendChart().create(createBuildHistory(), modelConfiguration, new ReportSeriesBuilder(), reportAction.get().getReport());
}

return new TrendChart().create(createBuildHistory(), modelConfiguration, new ReportSeriesBuilder(), new ColorProvider(Collections.emptyMap()));
return new TrendChart().create(createBuildHistory(), modelConfiguration, new ReportSeriesBuilder(), new Report());
}
}
10 changes: 5 additions & 5 deletions src/main/java/io/jenkins/plugins/reporter/charts/TrendChart.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.jenkins.plugins.reporter.charts;

import edu.hm.hafner.echarts.*;
import io.jenkins.plugins.reporter.ColorProvider;
import io.jenkins.plugins.reporter.ReportAction;
import io.jenkins.plugins.reporter.model.Report;

/**
* Builds the Java side model for a trend chart showing the accurate, manually and incorrect parts of an asset or report.
Expand All @@ -26,14 +26,14 @@ public class TrendChart {
* @param builder
* the {@link SeriesBuilder} to use for the model. {@link ItemSeriesBuilder} for each asset on
* build level or {@link ReportSeriesBuilder} for the aggregated result on job level.
* @param colorProvider
* the color mapping for properties.
* @param report
* the report
*
* @return the chart model, ready to be serialized to JSON
*/
public LinesChartModel create(final Iterable<? extends BuildResult<ReportAction>> results,
final ChartModelConfiguration configuration, SeriesBuilder<ReportAction> builder,
ColorProvider colorProvider) {
Report report) {

LinesDataSet dataSet = builder.createDataSet(configuration, results);
LinesChartModel model = new LinesChartModel(dataSet);
Expand All @@ -43,7 +43,7 @@ public LinesChartModel create(final Iterable<? extends BuildResult<ReportAction>
model.setRangeMin(0);

dataSet.getDataSetIds().forEach(id -> {
LineSeries series = new LineSeries(id, colorProvider.getColor(id),
LineSeries series = new LineSeries(id, report.getColor(id),
LineSeries.StackedMode.STACKED, LineSeries.FilledMode.FILLED);
series.addAll(dataSet.getSeries(id));
model.addSeries(series);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.jenkins.plugins.reporter.model;

public enum DisplayType {
ABSOLUTE,
RELATIVE,
DUAL;
}
12 changes: 12 additions & 0 deletions src/main/java/io/jenkins/plugins/reporter/model/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,16 @@ public void setItems(List<Item> items) {
public int getTotal() {
return getResult().values().stream().reduce(0, Integer::sum);
}

public String getLabel(Report report, Integer value) {
if (report.getDisplayType().equals(DisplayType.DUAL)) {
return String.format("%s (%.2f%%)", value.toString(), value / (double) getTotal() * 100);
}

if (report.getDisplayType().equals(DisplayType.RELATIVE)) {
return String.format("%.2f%%", value / (double) getTotal() * 100);
}

return value.toString();
}
}
Loading

0 comments on commit d69b599

Please sign in to comment.