in infrastructure/src/main/java/software/amazonaws/example/infrastructure/DashboardStack.java [31:99]
public DashboardStack(final Construct parent, final String id, final StackProps props, final List<Function> functions) {
super(parent, id, props);
List<IMetric> p50DurationMetrics = functions.stream()
.map(f -> f.metricDuration(MetricOptions.builder()
.label(f.getFunctionName())
.period(Duration.minutes(1))
.statistic("p50")
.build()))
.collect(Collectors.toList());
IWidget p50DurationGraph = GraphWidget.Builder.create()
.title("P50 Duration")
.left(p50DurationMetrics)
.view(GraphWidgetView.TIME_SERIES)
.build();
List<IMetric> p90DurationMetrics = functions.stream()
.map(f -> f.metricDuration(MetricOptions.builder()
.label(f.getFunctionName())
.period(Duration.minutes(1))
.statistic("p90")
.build()))
.collect(Collectors.toList());
IWidget p90DurationGraph = GraphWidget.Builder.create()
.title("P90 Duration")
.left(p90DurationMetrics)
.view(GraphWidgetView.TIME_SERIES)
.build();
Function function;
List<IMetric> errorRates = new ArrayList<>();
for (int i = 0; i < functions.size(); i++) {
function = functions.get(i);
errorRates.add(MathExpression.Builder.create()
.expression(String.format("(errors%s / invocations%s) * 100", i, i))
.usingMetrics(Map.of("errors" + i, function.metricErrors(),
"invocations" + i, function.metricInvocations()))
.label(function.getFunctionName() + " Error Rate")
.build());
}
IWidget errorRateGraph = GraphWidget.Builder.create()
.title("Error Rates")
.left(errorRates)
.view(GraphWidgetView.TIME_SERIES)
.build();
List<IMetric> concurrentExecutionsMetrics = functions.stream()
.map(f -> f.metric("ConcurrentExecutions", MetricOptions.builder()
.label(f.getFunctionName())
.period(Duration.minutes(1))
.statistic("Average")
.build()))
.collect(Collectors.toList());
IWidget concurrentExecutionsGraph = GraphWidget.Builder.create()
.title("ConcurrentExecutions")
.left(concurrentExecutionsMetrics)
.view(GraphWidgetView.TIME_SERIES)
.build();
List<IWidget> widgets = List.of(p90DurationGraph, p50DurationGraph, errorRateGraph, concurrentExecutionsGraph);
Dashboard dashboard = Dashboard.Builder.create(this, "ProductsDashboard")
.dashboardName("ProductsDashboard")
.widgets(Collections.singletonList(widgets))
.build();
}