Add a Workaround for the Tier Calculation on DataInsightsReport (#17555)

This commit is contained in:
IceS2 2024-08-22 23:51:58 +02:00 committed by GitHub
parent 336b14231f
commit d0c08fb6e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -345,7 +345,7 @@ public class DataInsightsReportApp extends AbstractNativeApplication {
// Get total Assets Data
// This assumes that on a particular date the correct count per entities are given
Map<String, Double> dateWithCount =
getDateMapWithCountFromChart(
getDateMapWithCountFromTierChart(
"total_data_assets_by_tier", timeConfig.startTime(), timeConfig.endTime(), team);
Double previousHasTier = dateWithCount.getOrDefault(timeConfig.startDay(), 0D);
@ -388,6 +388,38 @@ public class DataInsightsReportApp extends AbstractNativeApplication {
dateMap);
}
// Hack: Because on Data Insights when a Tier is not present is set as 'NoTier', this calculation
// will return 100% of the entities
// with Tier.
// This should be fixed by using the .missing() attribute for ElasticSearch aggregations and
// should be planned for 1.6.
// Meanwhile this is a workaround.
private Map<String, Double> getDateMapWithCountFromTierChart(
String chartName, Long startTime, Long endTime, String team) throws IOException {
String filter = prepareTeamFilter(team);
Map<String, DataInsightCustomChartResultList> systemChartMap =
systemChartRepository.listChartData(chartName, startTime, endTime, filter);
return systemChartMap.get(chartName).getResults().stream()
.filter(
result ->
!result
.getGroup()
.equals(
"NoTier")) // Workaround to remove Assets without Tiers from the equation
.map(
result -> {
Map<String, Double> dayCount = new HashMap<>();
dayCount.put(
TimestampUtils.timestampToString(result.getDay().longValue(), "dd"),
result.getCount());
return dayCount;
})
.flatMap(map -> map.entrySet().stream())
.collect(
Collectors.groupingBy(
Map.Entry::getKey, Collectors.summingDouble(Map.Entry::getValue)));
}
private Map<String, Double> getDateMapWithCountFromChart(
String chartName, Long startTime, Long endTime, String team) throws IOException {
String filter = prepareTeamFilter(team);